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:
parent
817db73019
commit
05bf1dbb98
@ -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>`__
|
||||
|
@ -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)``.
|
||||
|
@ -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:
|
||||
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
8
ovn/.gitignore
vendored
@ -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
|
@ -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
7
ovn/lib/.gitignore
vendored
@ -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
|
@ -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);
|
||||
}
|
@ -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 */
|
@ -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 $@
|
||||
|
@ -1,4 +0,0 @@
|
||||
libovn_@LT_CURRENT@ {
|
||||
global:
|
||||
*;
|
||||
};
|
@ -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\""
|
@ -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)")
|
@ -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);
|
||||
}
|
@ -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
|
@ -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}}
|
||||
}
|
2917
ovn/ovn-nb.xml
2917
ovn/ovn-nb.xml
File diff suppressed because it is too large
Load Diff
@ -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}}}
|
3638
ovn/ovn-sb.xml
3638
ovn/ovn-sb.xml
File diff suppressed because it is too large
Load Diff
11
ovn/utilities/.gitignore
vendored
11
ovn/utilities/.gitignore
vendored
@ -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
|
@ -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
@ -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
1
rhel/.gitignore
vendored
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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 \
|
||||
|
Loading…
x
Reference in New Issue
Block a user