2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-22 01:51:26 +00:00

ovn: Remove remaining pieces.

A preceding commit removed the last remaining dependencies on OVN code,
so remove the OVN code.

Acked-by: Han Zhou <hzhou8@ebay.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
This commit is contained in:
Ben Pfaff 2019-09-27 09:21:57 -07:00
parent 817db73019
commit 05bf1dbb98
32 changed files with 24 additions and 17378 deletions

View File

@ -54,46 +54,6 @@ The remainder are still in roff format can be found below:
- `(pdf) <http://www.openvswitch.org/support/dist-docs/ovs-actions.7.pdf>`__
- `(html) <http://www.openvswitch.org/support/dist-docs/ovs-actions.7.html>`__
- `(plain text) <http://www.openvswitch.org/support/dist-docs/ovs-actions.7.txt>`__
* - ovn-architecture(7)
- `(pdf) <http://www.openvswitch.org/support/dist-docs/ovn-architecture.7.pdf>`__
- `(html) <http://www.openvswitch.org/support/dist-docs/ovn-architecture.7.html>`__
- `(plain text) <http://www.openvswitch.org/support/dist-docs/ovn-architecture.7.txt>`__
* - ovn-controller(8)
- `(pdf) <http://www.openvswitch.org/support/dist-docs/ovn-controller.8.pdf>`__
- `(html) <http://www.openvswitch.org/support/dist-docs/ovn-controller.8.html>`__
- `(plain text) <http://www.openvswitch.org/support/dist-docs/ovn-controller.8.txt>`__
* - ovn-controller-vtep(8)
- `(pdf) <http://www.openvswitch.org/support/dist-docs/ovn-controller-vtep.8.pdf>`__
- `(html) <http://www.openvswitch.org/support/dist-docs/ovn-controller-vtep.8.html>`__
- `(plain text) <http://www.openvswitch.org/support/dist-docs/ovn-controller-vtep.8.txt>`__
* - ovn-ctl(8)
- `(pdf) <http://www.openvswitch.org/support/dist-docs/ovn-ctl.8.pdf>`__
- `(html) <http://www.openvswitch.org/support/dist-docs/ovn-ctl.8.html>`__
- `(plain text) <http://www.openvswitch.org/support/dist-docs/ovn-ctl.8.txt>`__
* - ovn-nb(5)
- `(pdf) <http://www.openvswitch.org/support/dist-docs/ovn-nb.5.pdf>`__
- `(html) <http://www.openvswitch.org/support/dist-docs/ovn-nb.5.html>`__
- `(plain text) <http://www.openvswitch.org/support/dist-docs/ovn-nb.5.txt>`__
* - ovn-nbctl(8)
- `(pdf) <http://www.openvswitch.org/support/dist-docs/ovn-nbctl.8.pdf>`__
- `(html) <http://www.openvswitch.org/support/dist-docs/ovn-nbctl.8.html>`__
- `(plain text) <http://www.openvswitch.org/support/dist-docs/ovn-nbctl.8.txt>`__
* - ovn-northd(8)
- `(pdf) <http://www.openvswitch.org/support/dist-docs/ovn-northd.8.pdf>`__
- `(html) <http://www.openvswitch.org/support/dist-docs/ovn-northd.8.html>`__
- `(plain text) <http://www.openvswitch.org/support/dist-docs/ovn-northd.8.txt>`__
* - ovn-sb(5)
- `(pdf) <http://www.openvswitch.org/support/dist-docs/ovn-sb.5.pdf>`__
- `(html) <http://www.openvswitch.org/support/dist-docs/ovn-sb.5.html>`__
- `(plain text) <http://www.openvswitch.org/support/dist-docs/ovn-sb.5.txt>`__
* - ovn-sbctl(8)
- `(pdf) <http://www.openvswitch.org/support/dist-docs/ovn-sbctl.8.pdf>`__
- `(html) <http://www.openvswitch.org/support/dist-docs/ovn-sbctl.8.html>`__
- `(plain text) <http://www.openvswitch.org/support/dist-docs/ovn-sbctl.8.txt>`__
* - ovn-trace(8)
- `(pdf) <http://www.openvswitch.org/support/dist-docs/ovn-trace.8.pdf>`__
- `(html) <http://www.openvswitch.org/support/dist-docs/ovn-trace.8.html>`__
- `(plain text) <http://www.openvswitch.org/support/dist-docs/ovn-trace.8.txt>`__
* - ovs-appctl(8)
- `(pdf) <http://www.openvswitch.org/support/dist-docs/ovs-appctl.8.pdf>`__
- `(html) <http://www.openvswitch.org/support/dist-docs/ovs-appctl.8.html>`__

View File

@ -47,11 +47,11 @@ While OVSDB is general-purpose and not particularly specialized for use with
Open vSwitch, Open vSwitch does use it for multiple purposes. The leading use
of OVSDB is for configuring and monitoring ``ovs-vswitchd(8)``, the Open
vSwitch switch daemon, using the schema documented in
``ovs-vswitchd.conf.db(5)``. The Open Virtual Network (OVN) sub-project of OVS
uses two OVSDB schemas, documented in ``ovn-nb(5)`` and ``ovn-sb(5)``.
Finally, Open vSwitch includes the "VTEP" schema, documented in
``vtep(5)`` that many third-party hardware switches support for
configuring VXLAN, although OVS itself does not directly use this schema.
``ovs-vswitchd.conf.db(5)``. The Open Virtual Network (OVN) project uses two
OVSDB schemas, documented as part of that project. Finally, Open vSwitch
includes the "VTEP" schema, documented in ``vtep(5)`` that many third-party
hardware switches support for configuring VXLAN, although OVS itself does not
directly use this schema.
The OVSDB protocol specification allows independent, interoperable
implementations of OVSDB to be developed. Open vSwitch includes an OVSDB
@ -65,9 +65,8 @@ otherwise be unclear from the context.
In addition to these generic OVSDB server and client tools, Open vSwitch
includes tools for working with databases that have specific schemas:
``ovs-vsctl`` works with the ``ovs-vswitchd`` configuration database,
``vtep-ctl`` works with the VTEP database, ``ovn-nbctl`` works with
the OVN Northbound database, and so on.
``ovs-vsctl`` works with the ``ovs-vswitchd`` configuration database and
``vtep-ctl`` works with the VTEP database.
RFC 7047 specifies the OVSDB protocol but it does not specify an on-disk
storage format. Open vSwitch includes ``ovsdb-tool(1)`` for working with its
@ -183,8 +182,8 @@ can switch the backup server to an active role with the ``ovs-appctl`` command
access to the now-active server. Of course, administrators are slow to respond
compared to software, so in practice external management software detects the
active server's failure and changes the backup server's role. For example, the
"Integration Guide for Centralized Control" in the Open vSwitch documentation
describes how to use Pacemaker for this purpose in OVN.
"Integration Guide for Centralized Control" in the OVN documentation describes
how to use Pacemaker for this purpose in OVN.
Suppose an active server fails and its backup is promoted to active. If the
failed server is revived, it must be started as a backup server. Otherwise, if
@ -222,11 +221,10 @@ To set up a clustered database, first initialize it on a single node by running
arguments, the ``create-cluster`` command can create an empty database or copy
a standalone database's contents into the new database.
To configure a client, such as ``ovn-controller`` or ``ovn-sbctl``, to use a
clustered database, first configure all of the servers to listen on a
connection method that the client can reach, then point the client to all of
the servers' connection methods, comma-separated. See `Connection Methods`_,
below, for more detail.
To configure a client to use a clustered database, first configure all of the
servers to listen on a connection method that the client can reach, then point
the client to all of the servers' connection methods, comma-separated. See
`Connection Methods`_, below, for more detail.
Open vSwitch 2.9 introduced support for the clustered service model.
@ -328,8 +326,8 @@ following consequences:
* When a client conducts a mix of read and write transactions across more than
one server in a cluster, it can see inconsistent results because a read
transaction might read stale data whose updates have not yet propagated from
the leader. By default, ``ovn-sbctl`` and similar utilities connect to the
cluster leader to avoid this issue.
the leader. By default, utilities such as ``ovn-sbctl`` (in OVN) connect to
the cluster leader to avoid this issue.
The same might occur for transactions against a single follower except that
the OVSDB server ensures that the results of a write forwarded to the leader
@ -649,7 +647,9 @@ Open vSwitch implementations of generic OVSDB functionality:
``ovsdb-server(1)``, ``ovsdb-client(1)``, ``ovsdb-tool(1)``.
Tools for working with databases that have specific OVSDB schemas:
``ovs-vsctl(8)``, ``vtep-ctl(8)``, ``ovn-nbctl(8)``, ``ovn-sbctl(8)``.
``ovs-vsctl(8)``, ``vtep-ctl(8)``, and (in OVN) ``ovn-nbctl(8)``,
``ovn-sbctl(8)``.
OVSDB schemas for Open vSwitch and related functionality:
``ovs-vswitchd.conf.db(5)``, ``vtep(5)``, ``ovn-nb(5)``, ``ovn-sb(5)``.
``ovs-vswitchd.conf.db(5)``, ``vtep(5)``, and (in OVN) ``ovn-nb(5)``,
``ovn-sb(5)``.

View File

@ -127,7 +127,7 @@ using the ``check-lcov`` target::
All the same options are available via TESTSUITEFLAGS. For example::
$ make check-lcov TESTSUITEFLAGS='-j8 -k ovn'
$ make check-lcov TESTSUITEFLAGS='-j8 -k ovsdb'
.. _testing-valgrind:

View File

@ -31,9 +31,7 @@ to know what is happening with packets as they go through the data plane
processing.
The `ovs-vswitchd(8)`_ manpage describes basic usage of the
ofproto/trace command used for tracing in Open vSwitch. For a tool
with a goal similar to ofproto/trace for tracing packets through OVN
logical switches, see `ovn-trace(8)`_.
ofproto/trace command used for tracing in Open vSwitch.
Packet Tracing
--------------
@ -132,4 +130,3 @@ This document is heavily based on content from Flavio Bruno Leitner at Red Hat:
.. _ovs-vswitchd(8): http://openvswitch.org/support/dist-docs/ovs-vswitchd.8.html
.. _ovs-fields(7): http://openvswitch.org/support/dist-docs/ovs-fields.7.pdf
.. _ovn-trace(8): http://openvswitch.org/support/dist-docs/ovn-trace.8.html

View File

@ -580,7 +580,7 @@ Tracing
Let's go a level deeper. So far, everything we've done has been
fairly general. We can also look at something more specific: the path
that a particular packet would take through Open vSwitch. We can use
OVN ``ofproto/trace`` command to play "what-if?" games. This command
the ``ofproto/trace`` command to play "what-if?" games. This command
is one that we send directly to ``ovs-vswitchd``, using the
``ovs-appctl`` utility.

View File

@ -495,6 +495,5 @@ include vtep/automake.mk
include datapath-windows/automake.mk
include datapath-windows/include/automake.mk
include windows/automake.mk
include ovn/automake.mk
include selinux/automake.mk
include build-aux/automake.mk

View File

@ -148,7 +148,6 @@ AC_CONFIG_FILES([
ofproto/libofproto.sym
lib/libsflow.sym
lib/libopenvswitch.sym
ovn/lib/libovn.sym
vtep/libvtep.sym])
OVS_ENABLE_OPTION([-Wall])

8
ovn/.gitignore vendored
View File

@ -1,8 +0,0 @@
/ovn-architecture.7
/ovn-nb.5
/ovn-nb.gv
/ovn-nb.pic
/ovn-sb.5
/ovn-sb.gv
/ovn-sb.pic
/*.ovsschema.stamp

View File

@ -1,7 +0,0 @@
EXTRA_DIST += ovn/ovn-sb.ovsschema \
ovn/ovn-sb.xml \
ovn/ovn-nb.ovsschema \
ovn/ovn-nb.xml
include ovn/lib/automake.mk
include ovn/utilities/automake.mk

7
ovn/lib/.gitignore vendored
View File

@ -1,7 +0,0 @@
/libovn.sym
/ovn-nb-idl.c
/ovn-nb-idl.h
/ovn-nb-idl.ovsidl
/ovn-sb-idl.c
/ovn-sb-idl.h
/ovn-sb-idl.ovsidl

View File

@ -1,105 +0,0 @@
/*
* Copyright (c) 2017 Nicira, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <config.h>
#include "ovn/lib/acl-log.h"
#include <string.h>
#include "flow.h"
#include "openvswitch/json.h"
#include "openvswitch/ofpbuf.h"
#include "openvswitch/vlog.h"
VLOG_DEFINE_THIS_MODULE(acl_log);
const char *
log_verdict_to_string(uint8_t verdict)
{
if (verdict == LOG_VERDICT_ALLOW) {
return "allow";
} else if (verdict == LOG_VERDICT_DROP) {
return "drop";
} else if (verdict == LOG_VERDICT_REJECT) {
return "reject";
} else {
return "<unknown>";
}
}
const char *
log_severity_to_string(uint8_t severity)
{
if (severity == LOG_SEVERITY_ALERT) {
return "alert";
} else if (severity == LOG_SEVERITY_WARNING) {
return "warning";
} else if (severity == LOG_SEVERITY_NOTICE) {
return "notice";
} else if (severity == LOG_SEVERITY_INFO) {
return "info";
} else if (severity == LOG_SEVERITY_DEBUG) {
return "debug";
} else {
return "<unknown>";
}
}
uint8_t
log_severity_from_string(const char *name)
{
if (!strcmp(name, "alert")) {
return LOG_SEVERITY_ALERT;
} else if (!strcmp(name, "warning")) {
return LOG_SEVERITY_WARNING;
} else if (!strcmp(name, "notice")) {
return LOG_SEVERITY_NOTICE;
} else if (!strcmp(name, "info")) {
return LOG_SEVERITY_INFO;
} else if (!strcmp(name, "debug")) {
return LOG_SEVERITY_DEBUG;
} else {
return UINT8_MAX;
}
}
void
handle_acl_log(const struct flow *headers, struct ofpbuf *userdata)
{
if (!VLOG_IS_INFO_ENABLED()) {
return;
}
struct log_pin_header *lph = ofpbuf_try_pull(userdata, sizeof *lph);
if (!lph) {
VLOG_WARN("log data missing");
return;
}
size_t name_len = userdata->size;
char *name = name_len ? xmemdup0(userdata->data, name_len) : NULL;
struct ds ds = DS_EMPTY_INITIALIZER;
ds_put_cstr(&ds, "name=");
json_string_escape(name_len ? name : "<unnamed>", &ds);
ds_put_format(&ds, ", verdict=%s, severity=%s: ",
log_verdict_to_string(lph->verdict),
log_severity_to_string(lph->severity));
flow_format(&ds, headers, NULL);
VLOG_INFO("%s", ds_cstr(&ds));
ds_destroy(&ds);
free(name);
}

View File

@ -1,54 +0,0 @@
/*
* Copyright (c) 2017 Nicira, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef ACL_LOG_H
#define ACL_LOG_H 1
#include <stdint.h>
#include "openvswitch/types.h"
struct ofpbuf;
struct flow;
struct log_pin_header {
uint8_t verdict; /* One of LOG_VERDICT_*. */
uint8_t severity; /* One of LOG_SEVERITY*. */
/* Followed by an optional string containing the rule's name. */
};
enum log_verdict {
LOG_VERDICT_ALLOW,
LOG_VERDICT_DROP,
LOG_VERDICT_REJECT,
LOG_VERDICT_UNKNOWN = UINT8_MAX
};
const char *log_verdict_to_string(uint8_t verdict);
/* Severity levels. Based on RFC5424 levels. */
#define LOG_SEVERITY_ALERT 1
#define LOG_SEVERITY_WARNING 4
#define LOG_SEVERITY_NOTICE 5
#define LOG_SEVERITY_INFO 6
#define LOG_SEVERITY_DEBUG 7
const char *log_severity_to_string(uint8_t severity);
uint8_t log_severity_from_string(const char *name);
void handle_acl_log(const struct flow *headers, struct ofpbuf *userdata);
#endif /* ovn/lib/acl-log.h */

View File

@ -1,42 +0,0 @@
lib_LTLIBRARIES += ovn/lib/libovn.la
ovn_lib_libovn_la_LDFLAGS = \
$(OVS_LTINFO) \
-Wl,--version-script=$(top_builddir)/ovn/lib/libovn.sym \
$(AM_LDFLAGS)
ovn_lib_libovn_la_SOURCES = \
ovn/lib/acl-log.c \
ovn/lib/acl-log.h \
ovn/lib/ovn-util.c \
ovn/lib/ovn-util.h
nodist_ovn_lib_libovn_la_SOURCES = \
ovn/lib/ovn-nb-idl.c \
ovn/lib/ovn-nb-idl.h \
ovn/lib/ovn-sb-idl.c \
ovn/lib/ovn-sb-idl.h
# ovn-sb IDL
OVSIDL_BUILT += \
ovn/lib/ovn-sb-idl.c \
ovn/lib/ovn-sb-idl.h \
ovn/lib/ovn-sb-idl.ovsidl
EXTRA_DIST += ovn/lib/ovn-sb-idl.ann
OVN_SB_IDL_FILES = \
$(srcdir)/ovn/ovn-sb.ovsschema \
$(srcdir)/ovn/lib/ovn-sb-idl.ann
ovn/lib/ovn-sb-idl.ovsidl: $(OVN_SB_IDL_FILES)
$(AM_V_GEN)$(OVSDB_IDLC) annotate $(OVN_SB_IDL_FILES) > $@.tmp && \
mv $@.tmp $@
# ovn-nb IDL
OVSIDL_BUILT += \
ovn/lib/ovn-nb-idl.c \
ovn/lib/ovn-nb-idl.h \
ovn/lib/ovn-nb-idl.ovsidl
EXTRA_DIST += ovn/lib/ovn-nb-idl.ann
OVN_NB_IDL_FILES = \
$(srcdir)/ovn/ovn-nb.ovsschema \
$(srcdir)/ovn/lib/ovn-nb-idl.ann
ovn/lib/ovn-nb-idl.ovsidl: $(OVN_NB_IDL_FILES)
$(AM_V_GEN)$(OVSDB_IDLC) annotate $(OVN_NB_IDL_FILES) > $@.tmp && \
mv $@.tmp $@

View File

@ -1,4 +0,0 @@
libovn_@LT_CURRENT@ {
global:
*;
};

View File

@ -1,9 +0,0 @@
# -*- python -*-
# This code, when invoked by "ovsdb-idlc annotate" (by the build
# process), annotates vswitch.ovsschema with additional data that give
# the ovsdb-idl engine information about the types involved, so that
# it can generate more programmer-friendly data structures.
s["idlPrefix"] = "nbrec_"
s["idlHeader"] = "\"ovn/lib/ovn-nb-idl.h\""

View File

@ -1,29 +0,0 @@
# -*- python -*-
# This code, when invoked by "ovsdb-idlc annotate" (by the build
# process), annotates vswitch.ovsschema with additional data that give
# the ovsdb-idl engine information about the types involved, so that
# it can generate more programmer-friendly data structures.
s["idlPrefix"] = "sbrec_"
s["idlHeader"] = "\"ovn/lib/ovn-sb-idl.h\""
s["hDecls"] = '#include "ovn/lib/ovn-util.h"'
# Adds an integer column named 'column' to 'table' in 's'. The column
# values is calculated with 'expression' based on the values of the columns
# named in the array 'dependencies'.
def synthesize_integer_column(s, table, column, dependencies, expression):
s["tables"][table]["columns"][column] = {
"type": "integer",
"extensions": {
"dependencies": dependencies,
"parse": "row->%s = %s;" % (column, expression),
"synthetic": True
}
}
synthesize_integer_column(s, "Logical_Flow", "hash",
["logical_datapath", "table_id", "pipeline",
"priority", "match", "actions"],
"sbrec_logical_flow_hash(row)")

View File

@ -1,373 +0,0 @@
/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <config.h>
#include "ovn-util.h"
#include "dirs.h"
#include "openvswitch/vlog.h"
#include "ovn/lib/ovn-nb-idl.h"
#include "ovn/lib/ovn-sb-idl.h"
VLOG_DEFINE_THIS_MODULE(ovn_util);
static void
add_ipv4_netaddr(struct lport_addresses *laddrs, ovs_be32 addr,
unsigned int plen)
{
laddrs->n_ipv4_addrs++;
laddrs->ipv4_addrs = xrealloc(laddrs->ipv4_addrs,
laddrs->n_ipv4_addrs * sizeof *laddrs->ipv4_addrs);
struct ipv4_netaddr *na = &laddrs->ipv4_addrs[laddrs->n_ipv4_addrs - 1];
na->addr = addr;
na->mask = be32_prefix_mask(plen);
na->network = addr & na->mask;
na->plen = plen;
ovs_be32 bcast = addr | ~na->mask;
inet_ntop(AF_INET, &addr, na->addr_s, sizeof na->addr_s);
inet_ntop(AF_INET, &na->network, na->network_s, sizeof na->network_s);
inet_ntop(AF_INET, &bcast, na->bcast_s, sizeof na->bcast_s);
}
static void
add_ipv6_netaddr(struct lport_addresses *laddrs, struct in6_addr addr,
unsigned int plen)
{
laddrs->n_ipv6_addrs++;
laddrs->ipv6_addrs = xrealloc(laddrs->ipv6_addrs,
laddrs->n_ipv6_addrs * sizeof *laddrs->ipv6_addrs);
struct ipv6_netaddr *na = &laddrs->ipv6_addrs[laddrs->n_ipv6_addrs - 1];
memcpy(&na->addr, &addr, sizeof na->addr);
na->mask = ipv6_create_mask(plen);
na->network = ipv6_addr_bitand(&addr, &na->mask);
na->plen = plen;
in6_addr_solicited_node(&na->sn_addr, &addr);
inet_ntop(AF_INET6, &addr, na->addr_s, sizeof na->addr_s);
inet_ntop(AF_INET6, &na->sn_addr, na->sn_addr_s, sizeof na->sn_addr_s);
inet_ntop(AF_INET6, &na->network, na->network_s, sizeof na->network_s);
}
/* Returns true if specified address specifies a dynamic address,
* supporting the following formats:
*
* "dynamic":
* Both MAC and IP are to be allocated dynamically.
*
* "xx:xx:xx:xx:xx:xx dynamic":
* Use specified MAC address, but allocate an IP address
* dynamically.
*
* "dynamic x.x.x.x":
* Use specified IP address, but allocate a MAC address
* dynamically.
*/
bool
is_dynamic_lsp_address(const char *address)
{
char ipv6_s[IPV6_SCAN_LEN + 1];
struct eth_addr ea;
ovs_be32 ip;
int n;
return (!strcmp(address, "dynamic")
|| (ovs_scan(address, "dynamic "IP_SCAN_FMT"%n",
IP_SCAN_ARGS(&ip), &n)
&& address[n] == '\0')
|| (ovs_scan(address, "dynamic "IP_SCAN_FMT" "IPV6_SCAN_FMT"%n",
IP_SCAN_ARGS(&ip), ipv6_s, &n)
&& address[n] == '\0')
|| (ovs_scan(address, "dynamic "IPV6_SCAN_FMT"%n",
ipv6_s, &n) && address[n] == '\0')
|| (ovs_scan(address, ETH_ADDR_SCAN_FMT" dynamic%n",
ETH_ADDR_SCAN_ARGS(ea), &n) && address[n] == '\0'));
}
static bool
parse_and_store_addresses(const char *address, struct lport_addresses *laddrs,
int *ofs, bool extract_eth_addr)
{
memset(laddrs, 0, sizeof *laddrs);
const char *buf = address;
const char *const start = buf;
int buf_index = 0;
const char *buf_end = buf + strlen(address);
if (extract_eth_addr) {
if (!ovs_scan_len(buf, &buf_index, ETH_ADDR_SCAN_FMT,
ETH_ADDR_SCAN_ARGS(laddrs->ea))) {
laddrs->ea = eth_addr_zero;
*ofs = 0;
return false;
}
snprintf(laddrs->ea_s, sizeof laddrs->ea_s, ETH_ADDR_FMT,
ETH_ADDR_ARGS(laddrs->ea));
}
ovs_be32 ip4;
struct in6_addr ip6;
unsigned int plen;
char *error;
/* Loop through the buffer and extract the IPv4/IPv6 addresses
* and store in the 'laddrs'. Break the loop if invalid data is found.
*/
buf += buf_index;
while (buf < buf_end) {
buf_index = 0;
error = ip_parse_cidr_len(buf, &buf_index, &ip4, &plen);
if (!error) {
add_ipv4_netaddr(laddrs, ip4, plen);
buf += buf_index;
continue;
}
free(error);
error = ipv6_parse_cidr_len(buf, &buf_index, &ip6, &plen);
if (!error) {
add_ipv6_netaddr(laddrs, ip6, plen);
} else {
free(error);
break;
}
buf += buf_index;
}
*ofs = buf - start;
return true;
}
/* Extracts the mac, IPv4 and IPv6 addresses from * 'address' which
* should be of the format "MAC [IP1 IP2 ..] .." where IPn should be a
* valid IPv4 or IPv6 address and stores them in the 'ipv4_addrs' and
* 'ipv6_addrs' fields of 'laddrs'. There may be additional content in
* 'address' after "MAC [IP1 IP2 .. ]". The value of 'ofs' that is
* returned indicates the offset where that additional content begins.
*
* Returns true if at least 'MAC' is found in 'address', false otherwise.
*
* The caller must call destroy_lport_addresses(). */
bool
extract_addresses(const char *address, struct lport_addresses *laddrs,
int *ofs)
{
return parse_and_store_addresses(address, laddrs, ofs, true);
}
/* Extracts the mac, IPv4 and IPv6 addresses from * 'address' which
* should be of the format 'MAC [IP1 IP2 ..]" where IPn should be a
* valid IPv4 or IPv6 address and stores them in the 'ipv4_addrs' and
* 'ipv6_addrs' fields of 'laddrs'.
*
* Return true if at least 'MAC' is found in 'address', false otherwise.
*
* The caller must call destroy_lport_addresses(). */
bool
extract_lsp_addresses(const char *address, struct lport_addresses *laddrs)
{
int ofs;
bool success = extract_addresses(address, laddrs, &ofs);
if (success && ofs < strlen(address)) {
static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1);
VLOG_INFO_RL(&rl, "invalid syntax '%s' in address", address);
}
return success;
}
/* Extracts the IPv4 and IPv6 addresses from * 'address' which
* should be of the format 'IP1 IP2 .." where IPn should be a
* valid IPv4 or IPv6 address and stores them in the 'ipv4_addrs' and
* 'ipv6_addrs' fields of 'laddrs'.
*
* Return true if at least one IP address is found in 'address',
* false otherwise.
*
* The caller must call destroy_lport_addresses(). */
bool
extract_ip_addresses(const char *address, struct lport_addresses *laddrs)
{
int ofs;
if (parse_and_store_addresses(address, laddrs, &ofs, false)) {
return (laddrs->n_ipv4_addrs || laddrs->n_ipv6_addrs);
}
return false;
}
/* Extracts the mac, IPv4 and IPv6 addresses from the
* "nbrec_logical_router_port" parameter 'lrp'. Stores the IPv4 and
* IPv6 addresses in the 'ipv4_addrs' and 'ipv6_addrs' fields of
* 'laddrs', respectively. In addition, a link local IPv6 address
* based on the 'mac' member of 'lrp' is added to the 'ipv6_addrs'
* field.
*
* Return true if a valid 'mac' address is found in 'lrp', false otherwise.
*
* The caller must call destroy_lport_addresses(). */
bool
extract_lrp_networks(const struct nbrec_logical_router_port *lrp,
struct lport_addresses *laddrs)
{
memset(laddrs, 0, sizeof *laddrs);
if (!eth_addr_from_string(lrp->mac, &laddrs->ea)) {
laddrs->ea = eth_addr_zero;
return false;
}
snprintf(laddrs->ea_s, sizeof laddrs->ea_s, ETH_ADDR_FMT,
ETH_ADDR_ARGS(laddrs->ea));
for (int i = 0; i < lrp->n_networks; i++) {
ovs_be32 ip4;
struct in6_addr ip6;
unsigned int plen;
char *error;
error = ip_parse_cidr(lrp->networks[i], &ip4, &plen);
if (!error) {
if (!ip4) {
static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 1);
VLOG_WARN_RL(&rl, "bad 'networks' %s", lrp->networks[i]);
continue;
}
add_ipv4_netaddr(laddrs, ip4, plen);
continue;
}
free(error);
error = ipv6_parse_cidr(lrp->networks[i], &ip6, &plen);
if (!error) {
add_ipv6_netaddr(laddrs, ip6, plen);
} else {
static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1);
VLOG_INFO_RL(&rl, "invalid syntax '%s' in networks",
lrp->networks[i]);
free(error);
}
}
/* Always add the IPv6 link local address. */
struct in6_addr lla;
in6_generate_lla(laddrs->ea, &lla);
add_ipv6_netaddr(laddrs, lla, 64);
return true;
}
void
destroy_lport_addresses(struct lport_addresses *laddrs)
{
free(laddrs->ipv4_addrs);
free(laddrs->ipv6_addrs);
}
/* Allocates a key for NAT conntrack zone allocation for a provided
* 'key' record and a 'type'.
*
* It is the caller's responsibility to free the allocated memory. */
char *
alloc_nat_zone_key(const struct uuid *key, const char *type)
{
return xasprintf(UUID_FMT"_%s", UUID_ARGS(key), type);
}
const char *
default_nb_db(void)
{
static char *def;
if (!def) {
def = getenv("OVN_NB_DB");
if (!def) {
def = xasprintf("unix:%s/ovnnb_db.sock", ovs_rundir());
}
}
return def;
}
const char *
default_sb_db(void)
{
static char *def;
if (!def) {
def = getenv("OVN_SB_DB");
if (!def) {
def = xasprintf("unix:%s/ovnsb_db.sock", ovs_rundir());
}
}
return def;
}
/* l3gateway, chassisredirect, and patch
* are not in this list since they are
* only set in the SB DB by northd
*/
static const char *OVN_NB_LSP_TYPES[] = {
"l2gateway",
"localnet",
"localport",
"router",
"vtep",
"external",
};
bool
ovn_is_known_nb_lsp_type(const char *type)
{
int i;
if (!type || !type[0]) {
return true;
}
for (i = 0; i < ARRAY_SIZE(OVN_NB_LSP_TYPES); ++i) {
if (!strcmp(OVN_NB_LSP_TYPES[i], type)) {
return true;
}
}
return false;
}
uint32_t
sbrec_logical_flow_hash(const struct sbrec_logical_flow *lf)
{
const struct sbrec_datapath_binding *ld = lf->logical_datapath;
if (!ld) {
return 0;
}
return ovn_logical_flow_hash(&ld->header_.uuid,
lf->table_id, lf->pipeline,
lf->priority, lf->match, lf->actions);
}
uint32_t
ovn_logical_flow_hash(const struct uuid *logical_datapath,
uint8_t table_id, const char *pipeline,
uint16_t priority,
const char *match, const char *actions)
{
size_t hash = uuid_hash(logical_datapath);
hash = hash_2words((table_id << 16) | priority, hash);
hash = hash_string(pipeline, hash);
hash = hash_string(match, hash);
return hash_string(actions, hash);
}

View File

@ -1,84 +0,0 @@
/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef OVN_UTIL_H
#define OVN_UTIL_H 1
#include "lib/packets.h"
struct nbrec_logical_router_port;
struct sbrec_logical_flow;
struct uuid;
struct ipv4_netaddr {
ovs_be32 addr; /* 192.168.10.123 */
ovs_be32 mask; /* 255.255.255.0 */
ovs_be32 network; /* 192.168.10.0 */
unsigned int plen; /* CIDR Prefix: 24. */
char addr_s[INET_ADDRSTRLEN + 1]; /* "192.168.10.123" */
char network_s[INET_ADDRSTRLEN + 1]; /* "192.168.10.0" */
char bcast_s[INET_ADDRSTRLEN + 1]; /* "192.168.10.255" */
};
struct ipv6_netaddr {
struct in6_addr addr; /* fc00::1 */
struct in6_addr mask; /* ffff:ffff:ffff:ffff:: */
struct in6_addr sn_addr; /* ff02:1:ff00::1 */
struct in6_addr network; /* fc00:: */
unsigned int plen; /* CIDR Prefix: 64 */
char addr_s[INET6_ADDRSTRLEN + 1]; /* "fc00::1" */
char sn_addr_s[INET6_ADDRSTRLEN + 1]; /* "ff02:1:ff00::1" */
char network_s[INET6_ADDRSTRLEN + 1]; /* "fc00::" */
};
struct lport_addresses {
char ea_s[ETH_ADDR_STRLEN + 1];
struct eth_addr ea;
size_t n_ipv4_addrs;
struct ipv4_netaddr *ipv4_addrs;
size_t n_ipv6_addrs;
struct ipv6_netaddr *ipv6_addrs;
};
bool is_dynamic_lsp_address(const char *address);
bool extract_addresses(const char *address, struct lport_addresses *,
int *ofs);
bool extract_lsp_addresses(const char *address, struct lport_addresses *);
bool extract_ip_addresses(const char *address, struct lport_addresses *);
bool extract_lrp_networks(const struct nbrec_logical_router_port *,
struct lport_addresses *);
void destroy_lport_addresses(struct lport_addresses *);
char *alloc_nat_zone_key(const struct uuid *key, const char *type);
const char *default_nb_db(void);
const char *default_sb_db(void);
struct ovsdb_idl_table_class;
const char *db_table_usage(struct ds *tables,
const struct ovsdb_idl_table_class *class,
int n_tables);
bool ovn_is_known_nb_lsp_type(const char *type);
uint32_t sbrec_logical_flow_hash(const struct sbrec_logical_flow *);
uint32_t ovn_logical_flow_hash(const struct uuid *logical_datapath,
uint8_t table_id, const char *pipeline,
uint16_t priority,
const char *match, const char *actions);
#endif

View File

@ -1,449 +0,0 @@
{
"name": "OVN_Northbound",
"version": "5.16.0",
"cksum": "923459061 23095",
"tables": {
"NB_Global": {
"columns": {
"nb_cfg": {"type": {"key": "integer"}},
"sb_cfg": {"type": {"key": "integer"}},
"hv_cfg": {"type": {"key": "integer"}},
"external_ids": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}},
"connections": {
"type": {"key": {"type": "uuid",
"refTable": "Connection"},
"min": 0,
"max": "unlimited"}},
"ssl": {
"type": {"key": {"type": "uuid",
"refTable": "SSL"},
"min": 0, "max": 1}},
"options": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}},
"ipsec": {"type": "boolean"}},
"maxRows": 1,
"isRoot": true},
"Logical_Switch": {
"columns": {
"name": {"type": "string"},
"ports": {"type": {"key": {"type": "uuid",
"refTable": "Logical_Switch_Port",
"refType": "strong"},
"min": 0,
"max": "unlimited"}},
"acls": {"type": {"key": {"type": "uuid",
"refTable": "ACL",
"refType": "strong"},
"min": 0,
"max": "unlimited"}},
"qos_rules": {"type": {"key": {"type": "uuid",
"refTable": "QoS",
"refType": "strong"},
"min": 0,
"max": "unlimited"}},
"load_balancer": {"type": {"key": {"type": "uuid",
"refTable": "Load_Balancer",
"refType": "weak"},
"min": 0,
"max": "unlimited"}},
"dns_records": {"type": {"key": {"type": "uuid",
"refTable": "DNS",
"refType": "weak"},
"min": 0,
"max": "unlimited"}},
"other_config": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}},
"external_ids": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}}},
"isRoot": true},
"Logical_Switch_Port": {
"columns": {
"name": {"type": "string"},
"type": {"type": "string"},
"options": {
"type": {"key": "string",
"value": "string",
"min": 0,
"max": "unlimited"}},
"parent_name": {"type": {"key": "string", "min": 0, "max": 1}},
"tag_request": {
"type": {"key": {"type": "integer",
"minInteger": 0,
"maxInteger": 4095},
"min": 0, "max": 1}},
"tag": {
"type": {"key": {"type": "integer",
"minInteger": 1,
"maxInteger": 4095},
"min": 0, "max": 1}},
"addresses": {"type": {"key": "string",
"min": 0,
"max": "unlimited"}},
"dynamic_addresses": {"type": {"key": "string",
"min": 0,
"max": 1}},
"port_security": {"type": {"key": "string",
"min": 0,
"max": "unlimited"}},
"up": {"type": {"key": "boolean", "min": 0, "max": 1}},
"enabled": {"type": {"key": "boolean", "min": 0, "max": 1}},
"dhcpv4_options": {"type": {"key": {"type": "uuid",
"refTable": "DHCP_Options",
"refType": "weak"},
"min": 0,
"max": 1}},
"dhcpv6_options": {"type": {"key": {"type": "uuid",
"refTable": "DHCP_Options",
"refType": "weak"},
"min": 0,
"max": 1}},
"ha_chassis_group": {
"type": {"key": {"type": "uuid",
"refTable": "HA_Chassis_Group",
"refType": "strong"},
"min": 0,
"max": 1}},
"external_ids": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}}},
"indexes": [["name"]],
"isRoot": false},
"Address_Set": {
"columns": {
"name": {"type": "string"},
"addresses": {"type": {"key": "string",
"min": 0,
"max": "unlimited"}},
"external_ids": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}}},
"indexes": [["name"]],
"isRoot": true},
"Port_Group": {
"columns": {
"name": {"type": "string"},
"ports": {"type": {"key": {"type": "uuid",
"refTable": "Logical_Switch_Port",
"refType": "weak"},
"min": 0,
"max": "unlimited"}},
"acls": {"type": {"key": {"type": "uuid",
"refTable": "ACL",
"refType": "strong"},
"min": 0,
"max": "unlimited"}},
"external_ids": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}}},
"indexes": [["name"]],
"isRoot": true},
"Load_Balancer": {
"columns": {
"name": {"type": "string"},
"vips": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}},
"protocol": {
"type": {"key": {"type": "string",
"enum": ["set", ["tcp", "udp"]]},
"min": 0, "max": 1}},
"external_ids": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}}},
"isRoot": true},
"ACL": {
"columns": {
"name": {"type": {"key": {"type": "string",
"maxLength": 63},
"min": 0, "max": 1}},
"priority": {"type": {"key": {"type": "integer",
"minInteger": 0,
"maxInteger": 32767}}},
"direction": {"type": {"key": {"type": "string",
"enum": ["set", ["from-lport", "to-lport"]]}}},
"match": {"type": "string"},
"action": {"type": {"key": {"type": "string",
"enum": ["set", ["allow", "allow-related", "drop", "reject"]]}}},
"log": {"type": "boolean"},
"severity": {"type": {"key": {"type": "string",
"enum": ["set",
["alert", "warning",
"notice", "info",
"debug"]]},
"min": 0, "max": 1}},
"meter": {"type": {"key": "string", "min": 0, "max": 1}},
"external_ids": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}}},
"isRoot": false},
"QoS": {
"columns": {
"priority": {"type": {"key": {"type": "integer",
"minInteger": 0,
"maxInteger": 32767}}},
"direction": {"type": {"key": {"type": "string",
"enum": ["set", ["from-lport", "to-lport"]]}}},
"match": {"type": "string"},
"action": {"type": {"key": {"type": "string",
"enum": ["set", ["dscp"]]},
"value": {"type": "integer",
"minInteger": 0,
"maxInteger": 63},
"min": 0, "max": "unlimited"}},
"bandwidth": {"type": {"key": {"type": "string",
"enum": ["set", ["rate",
"burst"]]},
"value": {"type": "integer",
"minInteger": 1,
"maxInteger": 4294967295},
"min": 0, "max": "unlimited"}},
"external_ids": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}}},
"isRoot": false},
"Meter": {
"columns": {
"name": {"type": "string"},
"unit": {"type": {"key": {"type": "string",
"enum": ["set", ["kbps", "pktps"]]}}},
"bands": {"type": {"key": {"type": "uuid",
"refTable": "Meter_Band",
"refType": "strong"},
"min": 1,
"max": "unlimited"}},
"external_ids": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}}},
"indexes": [["name"]],
"isRoot": true},
"Meter_Band": {
"columns": {
"action": {"type": {"key": {"type": "string",
"enum": ["set", ["drop"]]}}},
"rate": {"type": {"key": {"type": "integer",
"minInteger": 1,
"maxInteger": 4294967295}}},
"burst_size": {"type": {"key": {"type": "integer",
"minInteger": 0,
"maxInteger": 4294967295}}},
"external_ids": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}}},
"isRoot": false},
"Logical_Router": {
"columns": {
"name": {"type": "string"},
"ports": {"type": {"key": {"type": "uuid",
"refTable": "Logical_Router_Port",
"refType": "strong"},
"min": 0,
"max": "unlimited"}},
"static_routes": {"type": {"key": {"type": "uuid",
"refTable": "Logical_Router_Static_Route",
"refType": "strong"},
"min": 0,
"max": "unlimited"}},
"policies": {
"type": {"key": {"type": "uuid",
"refTable": "Logical_Router_Policy",
"refType": "strong"},
"min": 0,
"max": "unlimited"}},
"enabled": {"type": {"key": "boolean", "min": 0, "max": 1}},
"nat": {"type": {"key": {"type": "uuid",
"refTable": "NAT",
"refType": "strong"},
"min": 0,
"max": "unlimited"}},
"load_balancer": {"type": {"key": {"type": "uuid",
"refTable": "Load_Balancer",
"refType": "weak"},
"min": 0,
"max": "unlimited"}},
"options": {
"type": {"key": "string",
"value": "string",
"min": 0,
"max": "unlimited"}},
"external_ids": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}}},
"isRoot": true},
"Logical_Router_Port": {
"columns": {
"name": {"type": "string"},
"gateway_chassis": {
"type": {"key": {"type": "uuid",
"refTable": "Gateway_Chassis",
"refType": "strong"},
"min": 0,
"max": "unlimited"}},
"ha_chassis_group": {
"type": {"key": {"type": "uuid",
"refTable": "HA_Chassis_Group",
"refType": "strong"},
"min": 0,
"max": 1}},
"options": {
"type": {"key": "string",
"value": "string",
"min": 0,
"max": "unlimited"}},
"networks": {"type": {"key": "string",
"min": 1,
"max": "unlimited"}},
"mac": {"type": "string"},
"peer": {"type": {"key": "string", "min": 0, "max": 1}},
"enabled": {"type": {"key": "boolean", "min": 0, "max": 1}},
"ipv6_ra_configs": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}},
"external_ids": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}}},
"indexes": [["name"]],
"isRoot": false},
"Logical_Router_Static_Route": {
"columns": {
"ip_prefix": {"type": "string"},
"policy": {"type": {"key": {"type": "string",
"enum": ["set", ["src-ip",
"dst-ip"]]},
"min": 0, "max": 1}},
"nexthop": {"type": "string"},
"output_port": {"type": {"key": "string", "min": 0, "max": 1}},
"external_ids": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}}},
"isRoot": false},
"Logical_Router_Policy": {
"columns": {
"priority": {"type": {"key": {"type": "integer",
"minInteger": 0,
"maxInteger": 32767}}},
"match": {"type": "string"},
"action": {"type": {
"key": {"type": "string",
"enum": ["set", ["allow", "drop", "reroute"]]}}},
"nexthop": {"type": {"key": "string", "min": 0, "max": 1}}},
"isRoot": false},
"NAT": {
"columns": {
"external_ip": {"type": "string"},
"external_mac": {"type": {"key": "string",
"min": 0, "max": 1}},
"logical_ip": {"type": "string"},
"logical_port": {"type": {"key": "string",
"min": 0, "max": 1}},
"type": {"type": {"key": {"type": "string",
"enum": ["set", ["dnat",
"snat",
"dnat_and_snat"
]]}}},
"external_ids": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}}},
"isRoot": false},
"DHCP_Options": {
"columns": {
"cidr": {"type": "string"},
"options": {"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}},
"external_ids": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}}},
"isRoot": true},
"Connection": {
"columns": {
"target": {"type": "string"},
"max_backoff": {"type": {"key": {"type": "integer",
"minInteger": 1000},
"min": 0,
"max": 1}},
"inactivity_probe": {"type": {"key": "integer",
"min": 0,
"max": 1}},
"other_config": {"type": {"key": "string",
"value": "string",
"min": 0,
"max": "unlimited"}},
"external_ids": {"type": {"key": "string",
"value": "string",
"min": 0,
"max": "unlimited"}},
"is_connected": {"type": "boolean", "ephemeral": true},
"status": {"type": {"key": "string",
"value": "string",
"min": 0,
"max": "unlimited"},
"ephemeral": true}},
"indexes": [["target"]]},
"DNS": {
"columns": {
"records": {"type": {"key": "string",
"value": "string",
"min": 0,
"max": "unlimited"}},
"external_ids": {"type": {"key": "string",
"value": "string",
"min": 0,
"max": "unlimited"}}},
"isRoot": true},
"SSL": {
"columns": {
"private_key": {"type": "string"},
"certificate": {"type": "string"},
"ca_cert": {"type": "string"},
"bootstrap_ca_cert": {"type": "boolean"},
"ssl_protocols": {"type": "string"},
"ssl_ciphers": {"type": "string"},
"external_ids": {"type": {"key": "string",
"value": "string",
"min": 0,
"max": "unlimited"}}},
"maxRows": 1},
"Gateway_Chassis": {
"columns": {
"name": {"type": "string"},
"chassis_name": {"type": "string"},
"priority": {"type": {"key": {"type": "integer",
"minInteger": 0,
"maxInteger": 32767}}},
"external_ids": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}},
"options": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}}},
"indexes": [["name"]],
"isRoot": false},
"HA_Chassis": {
"columns": {
"chassis_name": {"type": "string"},
"priority": {"type": {"key": {"type": "integer",
"minInteger": 0,
"maxInteger": 32767}}},
"external_ids": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}}},
"isRoot": false},
"HA_Chassis_Group": {
"columns": {
"name": {"type": "string"},
"ha_chassis": {
"type": {"key": {"type": "uuid",
"refTable": "HA_Chassis",
"refType": "strong"},
"min": 0,
"max": "unlimited"}},
"external_ids": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}}},
"indexes": [["name"]],
"isRoot": true}}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,404 +0,0 @@
{
"name": "OVN_Southbound",
"version": "2.4.0",
"cksum": "3059284885 20260",
"tables": {
"SB_Global": {
"columns": {
"nb_cfg": {"type": {"key": "integer"}},
"external_ids": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}},
"connections": {
"type": {"key": {"type": "uuid",
"refTable": "Connection"},
"min": 0,
"max": "unlimited"}},
"ssl": {
"type": {"key": {"type": "uuid",
"refTable": "SSL"},
"min": 0, "max": 1}},
"options": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}},
"ipsec": {"type": "boolean"}},
"maxRows": 1,
"isRoot": true},
"Chassis": {
"columns": {
"name": {"type": "string"},
"hostname": {"type": "string"},
"encaps": {"type": {"key": {"type": "uuid",
"refTable": "Encap"},
"min": 1, "max": "unlimited"}},
"vtep_logical_switches" : {"type": {"key": "string",
"min": 0,
"max": "unlimited"}},
"nb_cfg": {"type": {"key": "integer"}},
"external_ids": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}},
"transport_zones" : {"type": {"key": "string",
"min": 0,
"max": "unlimited"}}},
"isRoot": true,
"indexes": [["name"]]},
"Encap": {
"columns": {
"type": {"type": {"key": {
"type": "string",
"enum": ["set", ["geneve", "stt", "vxlan"]]}}},
"options": {"type": {"key": "string",
"value": "string",
"min": 0,
"max": "unlimited"}},
"ip": {"type": "string"},
"chassis_name": {"type": "string"}},
"indexes": [["type", "ip"]]},
"Address_Set": {
"columns": {
"name": {"type": "string"},
"addresses": {"type": {"key": "string",
"min": 0,
"max": "unlimited"}}},
"indexes": [["name"]],
"isRoot": true},
"Port_Group": {
"columns": {
"name": {"type": "string"},
"ports": {"type": {"key": "string",
"min": 0,
"max": "unlimited"}}},
"indexes": [["name"]],
"isRoot": true},
"Logical_Flow": {
"columns": {
"logical_datapath": {"type": {"key": {"type": "uuid",
"refTable": "Datapath_Binding"}}},
"pipeline": {"type": {"key": {"type": "string",
"enum": ["set", ["ingress",
"egress"]]}}},
"table_id": {"type": {"key": {"type": "integer",
"minInteger": 0,
"maxInteger": 23}}},
"priority": {"type": {"key": {"type": "integer",
"minInteger": 0,
"maxInteger": 65535}}},
"match": {"type": "string"},
"actions": {"type": "string"},
"external_ids": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}}},
"isRoot": true},
"Multicast_Group": {
"columns": {
"datapath": {"type": {"key": {"type": "uuid",
"refTable": "Datapath_Binding"}}},
"name": {"type": "string"},
"tunnel_key": {
"type": {"key": {"type": "integer",
"minInteger": 32768,
"maxInteger": 65535}}},
"ports": {"type": {"key": {"type": "uuid",
"refTable": "Port_Binding",
"refType": "weak"},
"min": 1, "max": "unlimited"}}},
"indexes": [["datapath", "tunnel_key"],
["datapath", "name"]],
"isRoot": true},
"Meter": {
"columns": {
"name": {"type": "string"},
"unit": {"type": {"key": {"type": "string",
"enum": ["set", ["kbps", "pktps"]]}}},
"bands": {"type": {"key": {"type": "uuid",
"refTable": "Meter_Band",
"refType": "strong"},
"min": 1,
"max": "unlimited"}}},
"indexes": [["name"]],
"isRoot": true},
"Meter_Band": {
"columns": {
"action": {"type": {"key": {"type": "string",
"enum": ["set", ["drop"]]}}},
"rate": {"type": {"key": {"type": "integer",
"minInteger": 1,
"maxInteger": 4294967295}}},
"burst_size": {"type": {"key": {"type": "integer",
"minInteger": 0,
"maxInteger": 4294967295}}}},
"isRoot": false},
"Datapath_Binding": {
"columns": {
"tunnel_key": {
"type": {"key": {"type": "integer",
"minInteger": 1,
"maxInteger": 16777215}}},
"external_ids": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}}},
"indexes": [["tunnel_key"]],
"isRoot": true},
"Port_Binding": {
"columns": {
"logical_port": {"type": "string"},
"type": {"type": "string"},
"gateway_chassis": {
"type": {"key": {"type": "uuid",
"refTable": "Gateway_Chassis",
"refType": "strong"},
"min": 0,
"max": "unlimited"}},
"ha_chassis_group": {
"type": {"key": {"type": "uuid",
"refTable": "HA_Chassis_Group",
"refType": "strong"},
"min": 0,
"max": 1}},
"options": {
"type": {"key": "string",
"value": "string",
"min": 0,
"max": "unlimited"}},
"datapath": {"type": {"key": {"type": "uuid",
"refTable": "Datapath_Binding"}}},
"tunnel_key": {
"type": {"key": {"type": "integer",
"minInteger": 1,
"maxInteger": 32767}}},
"parent_port": {"type": {"key": "string", "min": 0, "max": 1}},
"tag": {
"type": {"key": {"type": "integer",
"minInteger": 1,
"maxInteger": 4095},
"min": 0, "max": 1}},
"chassis": {"type": {"key": {"type": "uuid",
"refTable": "Chassis",
"refType": "weak"},
"min": 0, "max": 1}},
"encap": {"type": {"key": {"type": "uuid",
"refTable": "Encap",
"refType": "weak"},
"min": 0, "max": 1}},
"mac": {"type": {"key": "string",
"min": 0,
"max": "unlimited"}},
"nat_addresses": {"type": {"key": "string",
"min": 0,
"max": "unlimited"}},
"external_ids": {"type": {"key": "string",
"value": "string",
"min": 0,
"max": "unlimited"}}},
"indexes": [["datapath", "tunnel_key"], ["logical_port"]],
"isRoot": true},
"MAC_Binding": {
"columns": {
"logical_port": {"type": "string"},
"ip": {"type": "string"},
"mac": {"type": "string"},
"datapath": {"type": {"key": {"type": "uuid",
"refTable": "Datapath_Binding"}}}},
"indexes": [["logical_port", "ip"]],
"isRoot": true},
"DHCP_Options": {
"columns": {
"name": {"type": "string"},
"code": {
"type": {"key": {"type": "integer",
"minInteger": 0, "maxInteger": 254}}},
"type": {
"type": {"key": {
"type": "string",
"enum": ["set", ["bool", "uint8", "uint16", "uint32",
"ipv4", "static_routes", "str"]]}}}},
"isRoot": true},
"DHCPv6_Options": {
"columns": {
"name": {"type": "string"},
"code": {
"type": {"key": {"type": "integer",
"minInteger": 0, "maxInteger": 254}}},
"type": {
"type": {"key": {
"type": "string",
"enum": ["set", ["ipv6", "str", "mac"]]}}}},
"isRoot": true},
"Connection": {
"columns": {
"target": {"type": "string"},
"max_backoff": {"type": {"key": {"type": "integer",
"minInteger": 1000},
"min": 0,
"max": 1}},
"inactivity_probe": {"type": {"key": "integer",
"min": 0,
"max": 1}},
"read_only": {"type": "boolean"},
"role": {"type": "string"},
"other_config": {"type": {"key": "string",
"value": "string",
"min": 0,
"max": "unlimited"}},
"external_ids": {"type": {"key": "string",
"value": "string",
"min": 0,
"max": "unlimited"}},
"is_connected": {"type": "boolean", "ephemeral": true},
"status": {"type": {"key": "string",
"value": "string",
"min": 0,
"max": "unlimited"},
"ephemeral": true}},
"indexes": [["target"]]},
"SSL": {
"columns": {
"private_key": {"type": "string"},
"certificate": {"type": "string"},
"ca_cert": {"type": "string"},
"bootstrap_ca_cert": {"type": "boolean"},
"ssl_protocols": {"type": "string"},
"ssl_ciphers": {"type": "string"},
"external_ids": {"type": {"key": "string",
"value": "string",
"min": 0,
"max": "unlimited"}}},
"maxRows": 1},
"DNS": {
"columns": {
"records": {"type": {"key": "string",
"value": "string",
"min": 0,
"max": "unlimited"}},
"datapaths": {"type": {"key": {"type": "uuid",
"refTable": "Datapath_Binding"},
"min": 1,
"max": "unlimited"}},
"external_ids": {"type": {"key": "string",
"value": "string",
"min": 0,
"max": "unlimited"}}},
"isRoot": true},
"RBAC_Role": {
"columns": {
"name": {"type": "string"},
"permissions": {
"type": {"key": {"type": "string"},
"value": {"type": "uuid",
"refTable": "RBAC_Permission",
"refType": "weak"},
"min": 0, "max": "unlimited"}}},
"isRoot": true},
"RBAC_Permission": {
"columns": {
"table": {"type": "string"},
"authorization": {"type": {"key": "string",
"min": 0,
"max": "unlimited"}},
"insert_delete": {"type": "boolean"},
"update" : {"type": {"key": "string",
"min": 0,
"max": "unlimited"}}},
"isRoot": true},
"Gateway_Chassis": {
"columns": {
"name": {"type": "string"},
"chassis": {"type": {"key": {"type": "uuid",
"refTable": "Chassis",
"refType": "weak"},
"min": 0, "max": 1}},
"priority": {"type": {"key": {"type": "integer",
"minInteger": 0,
"maxInteger": 32767}}},
"external_ids": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}},
"options": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}}},
"indexes": [["name"]],
"isRoot": false},
"HA_Chassis": {
"columns": {
"chassis": {"type": {"key": {"type": "uuid",
"refTable": "Chassis",
"refType": "weak"},
"min": 0, "max": 1}},
"priority": {"type": {"key": {"type": "integer",
"minInteger": 0,
"maxInteger": 32767}}},
"external_ids": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}}},
"isRoot": false},
"HA_Chassis_Group": {
"columns": {
"name": {"type": "string"},
"ha_chassis": {
"type": {"key": {"type": "uuid",
"refTable": "HA_Chassis",
"refType": "strong"},
"min": 0,
"max": "unlimited"}},
"ref_chassis": {"type": {"key": {"type": "uuid",
"refTable": "Chassis",
"refType": "weak"},
"min": 0, "max": "unlimited"}},
"external_ids": {
"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}}},
"indexes": [["name"]],
"isRoot": true},
"Controller_Event": {
"columns": {
"event_type": {"type": {"key": {"type": "string",
"enum": ["set", ["empty_lb_backends"]]}}},
"event_info": {"type": {"key": "string", "value": "string",
"min": 0, "max": "unlimited"}},
"chassis": {"type": {"key": {"type": "uuid",
"refTable": "Chassis",
"refType": "weak"},
"min": 0, "max": 1}},
"seq_num": {"type": {"key": "integer"}}
},
"isRoot": true},
"IP_Multicast": {
"columns": {
"datapath": {"type": {"key": {"type": "uuid",
"refTable": "Datapath_Binding",
"refType": "weak"}}},
"enabled": {"type": {"key": "boolean", "min": 0, "max": 1}},
"querier": {"type": {"key": "boolean", "min": 0, "max": 1}},
"eth_src": {"type": "string"},
"ip4_src": {"type": "string"},
"table_size": {"type": {"key": "integer",
"min": 0, "max": 1}},
"idle_timeout": {"type": {"key": "integer",
"min": 0, "max": 1}},
"query_interval": {"type": {"key": "integer",
"min": 0, "max": 1}},
"query_max_resp": {"type": {"key": "integer",
"min": 0, "max": 1}},
"seq_no": {"type": "integer"}},
"indexes": [["datapath"]],
"isRoot": true},
"IGMP_Group": {
"columns": {
"address": {"type": "string"},
"datapath": {"type": {"key": {"type": "uuid",
"refTable": "Datapath_Binding",
"refType": "weak"},
"min": 0,
"max": 1}},
"chassis": {"type": {"key": {"type": "uuid",
"refTable": "Chassis",
"refType": "weak"},
"min": 0,
"max": 1}},
"ports": {"type": {"key": {"type": "uuid",
"refTable": "Port_Binding",
"refType": "weak"},
"min": 0, "max": "unlimited"}}},
"indexes": [["address", "datapath", "chassis"]],
"isRoot": true}}}

File diff suppressed because it is too large Load Diff

View File

@ -1,11 +0,0 @@
/ovn-ctl.8
/ovn-nbctl
/ovn-nbctl.8
/ovn-sbctl
/ovn-sbctl.8
/ovn-trace
/ovn-trace.8
/ovn-detrace
/ovn-detrace.1
/ovn-docker-overlay-driver
/ovn-docker-underlay-driver

View File

@ -1,17 +0,0 @@
EXTRA_DIST += \
ovn/utilities/ovn-nbctl.8.xml \
ovn/utilities/ovn-sbctl.8.in
CLEANFILES += \
ovn/utilities/ovn-nbctl.8 \
ovn/utilities/ovn-sbctl.8
# ovn-nbctl
bin_PROGRAMS += ovn/utilities/ovn-nbctl
ovn_utilities_ovn_nbctl_SOURCES = ovn/utilities/ovn-nbctl.c
ovn_utilities_ovn_nbctl_LDADD = ovn/lib/libovn.la ovsdb/libovsdb.la lib/libopenvswitch.la
# ovn-sbctl
bin_PROGRAMS += ovn/utilities/ovn-sbctl
ovn_utilities_ovn_sbctl_SOURCES = ovn/utilities/ovn-sbctl.c
ovn_utilities_ovn_sbctl_LDADD = ovn/lib/libovn.la ovsdb/libovsdb.la lib/libopenvswitch.la

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,303 +0,0 @@
.\" -*- nroff -*-
.so lib/ovs.tmac
.TH ovn\-sbctl 8 "@VERSION@" "Open vSwitch" "Open vSwitch Manual"
.\" This program's name:
.ds PN ovn\-sbctl
.
.SH NAME
ovn\-sbctl \- utility for querying and configuring \fBOVN_Southbound\fR database
.
.SH SYNOPSIS
\fBovn\-sbctl\fR [\fIoptions\fR] \fB\-\-\fR [\fIoptions\fR] \fIcommand
\fR[\fIargs\fR] [\fB\-\-\fR [\fIoptions\fR] \fIcommand \fR[\fIargs\fR]]...
.
.SH DESCRIPTION
The \fBovn\-sbctl\fR program configures the \fBOVN_Southbound\fR database
by providing a high\-level interface to its configuration database. See
\fBovn\-sb\fR(5) for comprehensive documentation of the database schema.
.PP
\fBovn\-sbctl\fR connects to an \fBovsdb\-server\fR process that
maintains an OVN_Southbound configuration database. Using this
connection, it queries and possibly applies changes to the database,
depending on the supplied commands.
.PP
\fBovn\-sbctl\fR can perform any number of commands in a single run,
implemented as a single atomic transaction against the database.
.PP
The \fBovn\-sbctl\fR command line begins with global options (see
\fBOPTIONS\fR below for details). The global options are followed by
one or more commands. Each command should begin with \fB\-\-\fR by
itself as a command-line argument, to separate it from the following
commands. (The \fB\-\-\fR before the first command is optional.) The
command
itself starts with command-specific options, if any, followed by the
command name and any arguments.
.
.SH OPTIONS
.
The following options affect the behavior of \fBovn\-sbctl\fR as a
whole. Some individual commands also accept their own options, which
are given just before the command name. If the first command on the
command line has options, then those options must be separated from
the global options by \fB\-\-\fR.
.
.IP "\fB\-\-db=\fIserver\fR"
The OVSDB database remote to contact. If the \fBOVN_SB_DB\fR
environment variable is set, its value is used as the default.
Otherwise, the default is \fBunix:@RUNDIR@/ovnsb_db.sock\fR, but this
default is unlikely to be useful outside of single-machine OVN test
environments.
.IP
\fIserver\fR may be an OVSDB active or passive connection method,
e.g. \fBssl:192.168.10.5:6640\fR, as described in \fBovsdb\fR(7).
.
.IP "\fB\-\-leader\-only\fR"
.IQ "\fB\-\-no\-leader\-only\fR"
By default, or with \fB\-\-leader\-only\fR, when the database server
is a clustered database, \fBovn\-sbctl\fR will avoid servers other
than the cluster leader. This ensures that any data that
\fBovn\-sbctl\fR reads and reports is up-to-date. With
\fB\-\-no\-leader\-only\fR, \fBovn\-sbctl\fR will use any server in
the cluster, which means that for read-only transactions it can report
and act on stale data (transactions that modify the database are
always serialized even with \fB\-\-no\-leader\-only\fR). Refer to
\fBUnderstanding Cluster Consistency\fR in \fBovsdb\fR(7) for more
information.
.
.IP "\fB\-\-no\-syslog\fR"
By default, \fBovn\-sbctl\fR logs its arguments and the details of any
changes that it makes to the system log. This option disables this
logging.
.IP
This option is equivalent to \fB\-\-verbose=sbctl:syslog:warn\fR.
.
.IP "\fB\-\-oneline\fR"
Modifies the output format so that the output for each command is printed
on a single line. New-line characters that would otherwise separate
lines are printed as \fB\\n\fR, and any instances of \fB\\\fR that
would otherwise appear in the output are doubled.
Prints a blank line for each command that has no output.
This option does not affect the formatting of output from the
\fBlist\fR or \fBfind\fR commands; see \fBTable Formatting Options\fR
below.
.
.IP "\fB\-\-dry\-run\fR"
Prevents \fBovn\-sbctl\fR from actually modifying the database.
.
.IP "\fB\-t \fIsecs\fR"
.IQ "\fB\-\-timeout=\fIsecs\fR"
By default, or with a \fIsecs\fR of \fB0\fR, \fBovn\-sbctl\fR waits
forever for a response from the database. This option limits runtime
to approximately \fIsecs\fR seconds. If the timeout expires,
\fBovn\-sbctl\fR will exit with a \fBSIGALRM\fR signal. (A timeout
would normally happen only if the database cannot be contacted, or if
the system is overloaded.)
.
.so lib/vlog.man
.so lib/common.man
.
.SS "Table Formatting Options"
These options control the format of output from the \fBlist\fR and
\fBfind\fR commands.
.so lib/table.man
.
.SS "Public Key Infrastructure Options"
.so lib/ssl-bootstrap.man
.so lib/ssl.man
.
.SH COMMANDS
The commands implemented by \fBovn\-sbctl\fR are described in the
sections below.
.SS "OVN_Southbound Commands"
These commands work with an \fBOVN_Southbound\fR database as a whole.
.
.IP "\fBinit\fR"
Initializes the database, if it is empty. If the database has already
been initialized, this command has no effect.
.
.IP "\fBshow\fR"
Prints a brief overview of the database contents.
.
.SS "Chassis Commands"
These commands manipulate \fBOVN_Southbound\fR chassis.
.
.IP "[\fB\-\-may\-exist\fR] \fBchassis\-add \fIchassis\fR \fIencap-type\fR \fIencap-ip\fR"
Creates a new chassis named \fIchassis\fR. \fIencap-type\fR is a
comma-separated list of tunnel types. The chassis will have
one encap entry for each specified tunnel type with \fIencap-ip\fR
as the destination IP for each.
.IP
Without \fB\-\-may\-exist\fR, attempting to create a chassis that
exists is an error. With \fB\-\-may\-exist\fR, this command does
nothing if \fIchassis\fR already exists.
.
.IP "[\fB\-\-if\-exists\fR] \fBchassis\-del \fIchassis\fR"
Deletes \fIchassis\fR and its \fIencaps\fR and \fIgateway_ports\fR.
.IP
Without \fB\-\-if\-exists\fR, attempting to delete a chassis that does
not exist is an error. With \fB\-\-if\-exists\fR, attempting to
delete a chassis that does not exist has no effect.
.
.SS "Port binding Commands"
.
These commands manipulate \fBOVN_Southbound\fR port bindings.
.
.IP "[\fB\-\-may\-exist\fR] \fBlsp\-bind \fIlogical-port\fR \fIchassis\fR"
Binds the logical port named \fIlogical-port\fR to \fIchassis\fR.
.IP
Without \fB\-\-may\-exist\fR, attempting to bind a logical port that
has already been bound is an error. With \fB\-\-may\-exist\fR, this
command does nothing if \fIlogical-port\fR has already been bound to
a chassis.
.
.IP "[\fB\-\-if\-exists\fR] \fBlsp\-unbind\fR \fIlogical-port\fR"
Resets the binding of \fIlogical-port\fR to \fINULL\fR.
.IP
Without \fB\-\-if\-exists\fR, attempting to unbind a logical port
that is not bound is an error. With \fB\-\-if\-exists\fR, attempting
to unbind logical port that is not bound has no effect.
.
.SS "Logical Flow Commands"
.
.IP "[\fB\-\-uuid\fR] [\fB\-\-ovs\fR[\fB=\fIremote\fR]] [\fB\-\-stats\fR] \fBlflow\-list\fR [\fIlogical-datapath\fR] [\fIlflow\fR...]"
List logical flows. If \fIlogical-datapath\fR is specified, only list
flows for that logical datapath. The \fIlogical-datapath\fR may be
given as a UUID or as a datapath name (reporting an error if multiple
datapaths have the same name).
.IP
If at least one \fIlflow\fR is given, only matching logical flows, if
any, are listed. Each \fIlflow\fR may be specified as a UUID or the
first few characters of a UUID, optionally prefixed by \fB0x\fR.
(Because \fBovn\-controller\fR sets OpenFlow flow cookies to the first
32 bits of the corresponding logical flow's UUID, this makes it easy
to look up the logical flow that generated a particular OpenFlow
flow.)
.IP
If \fB\-\-uuid\fR is specified, the output includes the first 32 bits
of each logical flow's UUID. This makes it easier to find the
OpenFlow flows that correspond to a given logical flow.
.IP
If \fB\-\-ovs\fR is included, \fBovn\-sbctl\fR attempts to obtain and
display the OpenFlow flows that correspond to each OVN logical flow.
To do so, \fBovn\-sbctl\fR connects to \fIremote\fR (by default,
\fBunix:@RUNDIR@/br-int.mgmt\fR) over OpenFlow and retrieves the
flows. If \fIremote\fR is specified, it must be an active OpenFlow
connection method described in \fBovsdb\fR(7). Please see the
discussion of the similar \fB\-\-ovs\fR option in \fBovn-trace\fR(8)
for more information about the OpenFlow flow output.
.IP
By default, OpenFlow flow output includes only match and actions. Add
\fB\-\-stats\fR to include all OpenFlow information, such as packet
and byte counters, duration, and timeouts.
.
.IP "[\fB\-\-uuid\fR] \fBdump\-flows\fR [\fIlogical-datapath\fR]"
Alias for \fBlflow\-list\fB.
.
.SS "Remote Connectivity Commands"
.
These commands manipulate the \fBconnections\fR column in the \fBSB_Global\fR
table and rows in the \fBConnection\fR table. When \fBovsdb\-server\fR
is configured to use the \fBconnections\fR column for OVSDB connections,
this allows the administrator to use \fBovn\-sbctl\fR to configure database
connections.
.
.IP "\fBget\-connection\fR"
Prints the configured connection(s).
.
.IP "\fBdel\-connection\fR"
Deletes the configured connection(s).
.
.IP "\fBset\-connection\fR [\fIaccess\-specifier\fR] \fItarget\fR\&..."
Sets the configured manager target or targets. Each \fItarget\fR may
may be an OVSDB active or passive connection method,
e.g. \fBpssl:6640\fR, as described in \fBovsdb\fR(7),
optionally preceded by an optional access-specifier (\fBread\-only\fR or
\fBread\-write\fR).
If provided, the effect of the access specifier persists for subsequent
targets until changed by another access specifier.
.
.SS "SSL Configuration"
When \fBovsdb\-server\fR is configured to connect using SSL, the
following parameters are required:
.TP
\fIprivate-key\fR
Specifies a PEM file containing the private key used for SSL connections.
.TP
\fIcertificate\fR
Specifies a PEM file containing a certificate, signed by the
certificate authority (CA) used by the connection peers, that
certifies the private key, identifying a trustworthy peer.
.TP
\fIca-cert\fR
Specifies a PEM file containing the CA certificate used to verify that
the connection peers are trustworthy.
.PP
These SSL settings apply to all SSL connections made by the southbound
database server.
.
.IP "\fBget\-ssl\fR"
Prints the SSL configuration.
.
.IP "\fBdel\-ssl\fR"
Deletes the current SSL configuration.
.
.IP "[\fB\-\-bootstrap\fR] \fBset\-ssl\fR \fIprivate-key\fR \fIcertificate\fR \fIca-cert\fR [\fIssl-protocol-list\fR [\fIssl-cipher-list\fR]]"
Sets the SSL configuration. The \fB\-\-bootstrap\fR option is described
below.
.
.ST "CA Certificate Bootstrap"
.PP
Ordinarily, all of the files named in the SSL configuration must exist
before SSL connectivity can be used. However, if the \fIca-cert\fR file
does not exist and the \fB\-\-bootstrap\fR
option is given, then \fBovsdb\-server\fR will attempt to obtain the
CA certificate from the target on its first SSL connection and
save it to the named PEM file. If it is successful, it will
immediately drop the connection and reconnect, and from then on all
SSL connections must be authenticated by a certificate signed by the
CA certificate thus obtained.
.PP
\fBThis option exposes the SSL connection to a man-in-the-middle
attack obtaining the initial CA certificate\fR, but it may be useful
for bootstrapping.
.PP
This option is only useful if the SSL peer sends its CA certificate
as part of the SSL certificate chain. The SSL protocol does not
require the controller to send the CA certificate.
.
.SS "Database Commands"
.
These commands query and modify the contents of \fBovsdb\fR tables.
They are a slight abstraction of the \fBovsdb\fR interface and as such
they operate at a lower level than other \fBovs\-sbctl\fR commands.
.PP
.ST "Identifying Tables, Records, and Columns"
.PP
Each of these commands has a \fItable\fR parameter to identify a table
within the database. Many of them also take a \fIrecord\fR parameter
that identifies a particular record within a table. The \fIrecord\fR
parameter may be the UUID for a record, and many tables offer
additional ways to identify records. Some commands also take
\fIcolumn\fR parameters that identify a particular field within the
records in a table.
.PP
For a list of tables and their columns, see \fBovn\-sb\fR(5) or
see the table listing from the \fB--help\fR option.
.PP
Record names must be specified in full and with correct
capitalization, except that UUIDs may be abbreviated to their first 4
(or more) hex digits, as long as that is unique within the table.
Names of tables and columns are not case-sensitive, and \fB\-\fR and
\fB_\fR are treated interchangeably. Unique abbreviations of table
and column names are acceptable, e.g. \fBaddr\fR or \fBa\fR is
sufficient to identify the \fBAddress_Set\fR table.
.
.so lib/db-ctl-base.man
.SH "EXIT STATUS"
.IP "0"
Successful program execution.
.IP "1"
Usage, syntax, or configuration file error.
.SH "SEE ALSO"
.
.BR ovn\-sb (5).

File diff suppressed because it is too large Load Diff

1
rhel/.gitignore vendored
View File

@ -4,5 +4,4 @@ kmod-openvswitch-rhel6.spec
openvswitch-kmod-fedora.spec
openvswitch.spec
openvswitch-fedora.spec
ovn-fedora.spec
usr_lib_systemd_system_ovs-vswitchd.service

View File

@ -272,17 +272,6 @@ rm -f $RPM_BUILD_ROOT%{_bindir}/ovs-parse-backtrace \
$RPM_BUILD_ROOT%{_sbindir}/ovs-vlan-bug-workaround \
$RPM_BUILD_ROOT%{_mandir}/man8/ovs-vlan-bug-workaround.8
# remove ovn unpackages files
rm -f $RPM_BUILD_ROOT%{_bindir}/ovn*
rm -f $RPM_BUILD_ROOT%{_mandir}/man1/ovn*
rm -f $RPM_BUILD_ROOT%{_mandir}/man5/ovn*
rm -f $RPM_BUILD_ROOT%{_mandir}/man7/ovn*
rm -f $RPM_BUILD_ROOT%{_mandir}/man8/ovn*
rm -f $RPM_BUILD_ROOT%{_datadir}/openvswitch/ovn*
rm -f $RPM_BUILD_ROOT%{_datadir}/openvswitch/scripts/ovn*
rm -f $RPM_BUILD_ROOT%{_includedir}/ovn/*
rm -f $RPM_BUILD_ROOT%{_libdir}/libovn*
%check
%if %{with check}
touch resolv.conf

View File

@ -101,11 +101,7 @@ rm \
$RPM_BUILD_ROOT/usr/share/man/man8/ovs-test.8 \
$RPM_BUILD_ROOT/usr/share/man/man8/ovs-l3ping.8 \
$RPM_BUILD_ROOT/usr/sbin/ovs-vlan-bug-workaround \
$RPM_BUILD_ROOT/usr/share/man/man8/ovs-vlan-bug-workaround.8 \
$RPM_BUILD_ROOT/usr/bin/ovn-* \
$RPM_BUILD_ROOT/usr/share/man/man?/ovn-* \
$RPM_BUILD_ROOT/usr/share/openvswitch/ovn-* \
$RPM_BUILD_ROOT/usr/share/openvswitch/scripts/ovn*
$RPM_BUILD_ROOT/usr/share/man/man8/ovs-vlan-bug-workaround.8
(cd "$RPM_BUILD_ROOT" && rm -rf usr/%{_lib}/*.la)
(cd "$RPM_BUILD_ROOT" && rm -rf usr/include)

View File

@ -187,7 +187,7 @@ SYSTEM_DPDK_TESTSUITE = $(srcdir)/tests/system-dpdk-testsuite
OVSDB_CLUSTER_TESTSUITE = $(srcdir)/tests/ovsdb-cluster-testsuite
DISTCLEANFILES += tests/atconfig tests/atlocal
AUTOTEST_PATH = utilities:vswitchd:ovsdb:vtep:tests:$(PTHREAD_WIN32_DIR_DLL):$(SSL_DIR):ovn/utilities
AUTOTEST_PATH = utilities:vswitchd:ovsdb:vtep:tests:$(PTHREAD_WIN32_DIR_DLL):$(SSL_DIR)
check-local:
set $(SHELL) '$(TESTSUITE)' -C tests AUTOTEST_PATH=$(AUTOTEST_PATH); \
@ -228,8 +228,6 @@ check-lcov: all $(check_DATA) clean-lcov
# valgrind support
valgrind_wrappers = \
tests/valgrind/ovn-nbctl \
tests/valgrind/ovn-sbctl \
tests/valgrind/ovs-appctl \
tests/valgrind/ovs-ofctl \
tests/valgrind/ovs-vsctl \