Add new ovn-controller daemon that runs locally on transport nodes.
This initial version registers itself in the Chassis table and registers
logical ports to the appropriate rows in the Bindings table.
Signed-off-by: Justin Pettit <jpettit@nicira.com> Acked-by: Russell Bryant <rbryant@redhat.com>
ovn-nbd: Rename "ovn_txn" variable to "ovnsb_txn".
Commit ec78987 (ovn: Rename "ovn" database to "ovn-sb".) changed most of
the instances of "ovn" to some variation of "ovn-sb", but missed one in
ovn-nbd.
Suggested-by: Russell Bryant <rbryant@redhat.com> Signed-off-by: Justin Pettit <jpettit@nicira.com> Acked-by: Russell Bryant <rbryant@redhat.com>
Russell Bryant [Fri, 3 Apr 2015 00:09:16 +0000 (20:09 -0400)]
ovn-nbd: Populate OVN Bindings table.
When ovn-nbd gets notified that the contents of the OVN_Northbound
database have changed, it will now ensure that the contents of the
Bindings table in the OVN database are up to date. It will create a
binding if none exists. If one does exist, it will update its
contents as necessary, though today the only thing supported is the
list of MAC addresses. Finally, any binding associated with a logical
port that has been deleted will be removed from the OVN database.
Signed-off-by: Russell Bryant <rbryant@redhat.com> Signed-off-by: Ben Pfaff <blp@nicira.com>
Russell Bryant [Thu, 2 Apr 2015 00:04:21 +0000 (20:04 -0400)]
ovn-nbd: Calculate 'up' state for logical ports.
When the state of the chassis column in the Bindings table changes for
any row, ovn-nbd will notice and trigger recalculating the 'up' state
for all logical ports.
This can be tested manually by starting up ovs-sandbox with ovn support
enabled, running ovn-nbd, and then running the following commands:
ovn-nbd will then see that the 'chassis' column is set in the Bindings
row for the logical port and will mark the logical port as 'up' in the
northbound db.
Signed-off-by: Russell Bryant <rbryant@redhat.com> Signed-off-by: Ben Pfaff <blp@nicira.com>
Russell Bryant [Thu, 2 Apr 2015 00:04:20 +0000 (20:04 -0400)]
ovn-nbd: Make minor skeleton updates.
These changes are just some minor changes I have made to the skeleton
since the version that has been merged. It adds the daemon related
options, updates the table/columns we monitor from the OVN db, and
some other minor tweaks.
Signed-off-by: Russell Bryant <rbryant@redhat.com> Signed-off-by: Ben Pfaff <blp@nicira.com>
Russell Bryant [Wed, 1 Apr 2015 17:40:07 +0000 (13:40 -0400)]
ovn-nbctl: Fix leak of ovsdb_idl_txn.
A new transaction is allocated before executing the command. If the
result from committing the transaction is TRY_AGAIN, the code leaked
the allocated transaction since it creates a new one when it comes
back around to retry. The old transaction is now destroyed before
continuing to allow the command to be retried.
Signed-off-by: Russell Bryant <rbryant@redhat.com> Signed-off-by: Ben Pfaff <blp@nicira.com>
Russell Bryant [Tue, 31 Mar 2015 19:55:00 +0000 (15:55 -0400)]
ovn-nbctl: Sync code and docs for --db option.
The usage() output said the option was --db. The code and man page
said --database. Switch everything over to --db to be consistent with
the option name used in ovs-vsctl.
Signed-off-by: Russell Bryant <rbryant@redhat.com> Signed-off-by: Ben Pfaff <blp@nicira.com>
Russell Bryant [Tue, 31 Mar 2015 17:43:18 +0000 (13:43 -0400)]
ovn-nbctl: Don't loop forever on lost db connection.
The main loop of ovn-nbctl had a condition to catch if the conenction
to the db was lost. However, it didn't break out of the loop when the
condition occurred. Now it should log the error once and exit with a
non-zero status code.
Signed-off-by: Russell Bryant <rbryant@redhat.com> Signed-off-by: Ben Pfaff <blp@nicira.com>
Ben Pfaff [Wed, 25 Feb 2015 17:33:54 +0000 (09:33 -0800)]
meta-flow: Add convenience members to union mf_subvalue.
This makes access to the least-significant bits more convenient. This
commit simplifies a few existing cases; later commits will make more use
of this feature.
Signed-off-by: Ben Pfaff <blp@nicira.com> Acked-by: Russell Bryant <rbryant@redhat.com>
Russell Bryant [Tue, 31 Mar 2015 02:07:04 +0000 (22:07 -0400)]
ovn-nbctl: Allow names that look like UUIDs.
This patch fixes handling of logical switch and logical port names
that look like a UUID. Previously, if the argument looked like a
UUID, it would only do a UUID lookup for a match. After this change,
if the UUID lookup fails, it will treat it as a name and look it up
that way.
Signed-off-by: Russell Bryant <rbryant@redhat.com> Signed-off-by: Ben Pfaff <blp@nicira.com>
ovn: Design and Schema changes for Container integration.
The design was come up after inputs and discussions with multiple
people, including (in alphabetical order) Aaron Rosen, Ben Pfaff,
Ganesan Chandrashekhar, Justin Pettit, Russell Bryant and Somik Behera.
Signed-off-by: Gurucharan Shetty <gshetty@nicira.com> Acked-by: Russell Bryant <rbryant@redhat.com> Acked-by: Ben Pfaff <blp@nicira.com>
Russell Bryant [Sun, 22 Mar 2015 20:38:50 +0000 (16:38 -0400)]
ovn: Add ovn-nbctl.
ovn-nbctl is intended to be a utility for manually interacting with
the OVN northbound db. A real consumer of OVN, such as OpenStack,
should be using ovsdb directly. However, a utility like this is
useful during development and testing of both ovn itself as well as
the OpenStack Neutron plugin. It could also be used when debugging
the state of an ovn deployment.
The commands related to logical switches and ports have been
implemented. You can add, delete, list, and get/set external:ids.
On ports you can also get/set MAC addresses.
Signed-off-by: Russell Bryant <rbryant@redhat.com>
[blp@nicira.com adjusted C style and manpage fonts] Signed-off-by: Ben Pfaff <blp@nicira.com>
Russell Bryant [Wed, 18 Mar 2015 12:40:11 +0000 (08:40 -0400)]
ovn: Add name column to logical switch table.
Add a name column the logical switch table of the ovn-nb database
schema. This column has no special meaning. Its purpose is only to
provide convenience for humans interacting with the ovn-nb database.
Signed-off-by: Russell Bryant <rbryant@redhat.com> Signed-off-by: Ben Pfaff <blp@nicira.com>
Russell Bryant [Tue, 17 Mar 2015 14:35:26 +0000 (10:35 -0400)]
command-line: add ovs_cmdl_context
I started working on a new command line utility that used this shared
code. I wanted the ability to pass some data from common
initialization code to all of the commands. You can find a similar
pattern in ovs-vsctl.
This patch updates the command handler to take a new struct,
ovs_cmdl_context, instead of argc and argv directly. It includes argc
and argv, but also includes an opaque type (void *), where the user of
this API can attach its custom data it wants passed along to command
handlers.
This patch affected the ovstest sub-programs, as well. The patch
includes a bit of an odd hack to OVSTEST_REGISTER() to avoid making
the main() function of the sub-programs take a ovs_cmdl_context.
The test main() functions still receive argc and argv directly, as
that seems more natural. The test-subprograms themselves are able to
make use of a context internally, though.
Signed-off-by: Russell Bryant <rbryant@redhat.com> Signed-off-by: Ben Pfaff <blp@nicira.com>
Jarno Rajahalme [Fri, 13 Mar 2015 19:22:51 +0000 (12:22 -0700)]
match: Do not skip formatting a zero dp_hash.
The dp_hash match should be printed whenever it is being matched. We
keep the old behavior for flow_format(), which is mostly used to
format PACKET_IN messages. This keeps those messages tidier and avoids
changing a lot of test cases.
Signed-off-by: Jarno Rajahalme <jrajahalme@nicira.com> Acked-by: Andy Zhou <azhou@nicira.com> Acked-by: Ben Pfaff <blp@nicira.com>
Russell Bryant [Mon, 16 Mar 2015 16:01:55 +0000 (12:01 -0400)]
command-line: add ovs_cmdl_ prefix
The coding style guidelines include the following:
- Pick a unique name prefix (ending with an underscore) for each
module, and apply that prefix to all of that module's externally
visible names. Names of macro parameters, struct and union members,
and parameters in function prototypes are not considered externally
visible for this purpose.
This patch adds the new prefix to the externally visible names. This
makes it a bit more obvious what code is coming from common command
line handling code.
Signed-off-by: Russell Bryant <rbryant@redhat.com> Signed-off-by: Ben Pfaff <blp@nicira.com>
Alex Wang [Fri, 13 Mar 2015 17:28:07 +0000 (10:28 -0700)]
ovs-vsctl-bashcomp: Fix build failure when bash version < 4.0.
The ovs-vsctl-bashcomp script does not work properly on bash (version
< 4.0). This commit adds test for the bash version and avoids running
the script/test when the bash version is not supported.
Signed-off-by: Alex Wang <alexw@nicira.com> Acked-by: Ben Pfaff <blp@nicira.com>
Alex Wang [Wed, 11 Feb 2015 19:08:57 +0000 (11:08 -0800)]
ovs-vsctl-bashcomp: Documentation and unit tests.
This commit includes the unit tests for ovs-vsctl-bashcomp
and refines the ovs-command-bashcomp.INSTALL.md to introduce
the bash completion for ovs-vsctl.
Signed-off-by: Alex Wang <alexw@nicira.com> Acked-by: Ben Pfaff <blp@nicira.com>
Peter Amidon [Wed, 4 Feb 2015 17:52:12 +0000 (09:52 -0800)]
ovs-vsctl-bashcomp: Add bash command-line completion for ovs-vsctl.
This patch adds bash command-line completion script for ovs-vsctl.
Therein, codes are added to ovs-vsctl to allow it to print the
options and command arguments. The ovs-vsctl-bashcomp.bash will
parse the vsctl command and complete on the user input.
The completion script can do the following::
- display available completions and complete on user input for
global/local options, sub-commands, and arguments.
- query database and expand keywords like 'table/record/column/key'
to available completions.
- deal with argument relations like 'one and more', 'zero or one'.
- complete multiple ovs-vsctl commands cascaded via '--'.
To use the script, either copy it inside /etc/bash_completion.d/
or manually run it via . ovs-vsctl-bashcomp.bash.
Signed-off-by: Peter Amidon <peter@picnicpark.org> Signed-off-by: Alex Wang <alexw@nicira.com> Acked-by: Ben Pfaff <blp@nicira.com>
Alex Wang [Tue, 10 Feb 2015 19:06:11 +0000 (11:06 -0800)]
ovs-appctl-bashcomp: Keep naming consistency.
Before adding the completion script ovs-vsctl-bashcomp.bash for
ovs-vsctl command, this commit renames the ovs-command-compgen.bash
to ovs-appctl-bashcomp.bash to keep the script naming consistent.
Signed-off-by: Alex Wang <alexw@nicira.com> Acked-by: Ben Pfaff <blp@nicira.com>
Russell Bryant [Thu, 12 Mar 2015 20:57:18 +0000 (16:57 -0400)]
ovs-sandbox: add initial support for ovn
This patch adds initial support for OVN to ovs-sandbox. If you pass
"-o/--ovn" to ovs-sandbox, it will create a db from the ovn and ovn-nb
schemas and tell ovsdb-server to use them. It also adds ovn/ to $PATH
so that as ovn executables are added, they will be available in the
sandbox.
Signed-off-by: Russell Bryant <rbryant@redhat.com> Signed-off-by: Ben Pfaff <blp@nicira.com>
Commit 032c09ddd10 (XenServer: Don't reset on xe-toolstack-restart)
introduced a bug which causes the setting of 'ssl::6632' at xenserver
boot. Subsequently, at each bridge configuration, ovs will report
'|socket_util|ERR|:6632: bad IPv4 address ""' due to the empty address.
The exact calltrace is:
0 parse_sockaddr_components (ss=0xbf8dd87c, host_s=0x94c99f0 "",
port_s=0x94c99f1 "6632", default_port=6632, s=0x948b9dc ":6632")
at lib/socket-util.c:350
1 0x081163b5 in inet_parse_active (target_=0x948b9dc ":6632", default_port=
6632, ss=0xbf8dd87c) at lib/socket-util.c:412
2 0x08119dcf in stream_parse_target_with_default_port (target=0x948b9d8
"ssl::6632", default_port=6632, ss=0xbf8dd87c) at lib/stream.c:734
3 0x0804c946 in collect_in_band_managers (ovs_cfg=0x94433b0,
managersp=0xbf8dd9a8, n_managersp=0xbf8dd9a0) at vswitchd/bridge.c:516
4 0x08054b87 in bridge_reconfigure (ovs_cfg=0x94433b0) at vswitchd/bridge.c:
614
5 0x080557cf in bridge_run () at vswitchd/bridge.c:2897
6 0x080564aa in main (argc=155674720, argv=0x0) at vswitchd/ovs-vswitchd.c:
116
This commit fixes the issue.
Signed-off-by: Alex Wang <alexw@nicira.com> Acked-by: Ben Pfaff <blp@nicira.com>
Edwin Chiu [Tue, 10 Mar 2015 18:36:43 +0000 (11:36 -0700)]
xenserver: Fix build spec for XenServer 6.5.
The latest XenServer 6.5 uses a new way for kernel version naming.
Therein, the kernel flavor could not be found anymore. Also, the
directory name in 'lib/modules/' becomes a shortened version of
kernel version. e.g.:
[root@localhost ~]# ls /lib/modules/
3.10.0+2
As a workaround, this commit modifies the spec file to make
%{kernel_flavor} optional and %{xen_version} definable by users.
In the long run, I'd like to spend time refining the spec file.
Signed-off-by: Edwin Chiu <echiu@vmware.com> Signed-off-by: Alex Wang <alexw@nicira.com>
Ben Pfaff [Thu, 5 Mar 2015 19:12:21 +0000 (11:12 -0800)]
bridge: Enable RSTP if both STP and RSTP are enabled.
Until now, if both STP and RSTP were enabled, ovs-vswitchd would actually
enable only the one it first noticed to be enabled, and actually turn off
the setting for the other one in the database (!). This doesn't match
ovs-vswitchd behavior for other contradictory configurations, so this
commit changes its behavior so that, if both are enabled, RSTP takes
precedence.
Russell Bryant [Thu, 5 Mar 2015 03:21:49 +0000 (22:21 -0500)]
ovn: update neutron plugin todo
Update the TODO list for the Neutron plugin to reflect the repository
that was created for it, as well as the plugin specific TODO list that
lives in that repo.
Signed-off-by: Russell Bryant <rbryant@redhat.com> Signed-off-by: Ben Pfaff <blp@nicira.com>
Mark Kavanagh [Tue, 17 Feb 2015 21:20:04 +0000 (13:20 -0800)]
lib: upgrade to DPDK v1.8.0
DPDK v1.8.0 makes significant changes to struct rte_mbuf, including
removal of the 'pkt' and 'data' fields. The latter, formally a
pointer, is now calculated via an offset from the start of the
segment buffer. So now dp_packet data is also stored as offset
from base pointer.
Signed-off-by: Mark Kavanagh <mark.b.kavanagh@intel.com> Signed-off-by: Rory Sexton <rory.sexton@intel.com> Signed-off-by: Kevin Traynor <kevin.traynor@intel.com> Signed-off-by: Pravin B Shelar <pshelar@nicira.com>
Pravin B Shelar [Tue, 3 Mar 2015 22:08:58 +0000 (14:08 -0800)]
lldp: Fix DPDK build.
Fixes following dp-packet access. Removes netinet/if_ether.h
include due to duplicate definition of ether_addr.
------
In file included from /usr/include/netinet/if_ether.h:60:0,
from lib/lldp/lldpd.h:23,
from lib/ovs-lldp.h:26,
from lib/ovs-lldp.c:30:
/usr/include/net/ethernet.h: At top level:
/usr/include/net/ethernet.h:32:8: error: redefinition of 'struct
ether_addr'
struct ether_addr
^
In file included from
../dpdk/dpdk/x86_64-native-linuxapp-gcc/include/rte_ethdev.h:179:0,
from lib/netdev-dpdk.h:18,
from lib/dp-packet.h:25,
from lib/ovs-lldp.h:23,
from lib/ovs-lldp.c:30:
../dpdk/dpdk/x86_64-native-linuxapp-gcc/include/rte_ether.h:83:8: note:
originally defined here
struct ether_addr {
^
lib/ovs-lldp.c: In function 'lldp_process_packet':
lib/ovs-lldp.c:676:30: error: 'const struct dp_packet' has no member
named 'data_'
(char *) p->data_, p->size_);
^
lib/ovs-lldp.c:676:40: error: 'const struct dp_packet' has no member
named 'size_'
(char *) p->data_, p->size_);
------
Signed-off-by: Pravin B Shelar <pshelar@nicira.com> Acked-by: Daniele Di Proietto <diproiettod@vmware.com> Acked-by: Ben Pfaff <blp@nicira.com>
Alex Wang [Fri, 27 Feb 2015 05:16:14 +0000 (21:16 -0800)]
test-hash: Do not exit check_word_hash() when there is a failure.
This commit makes check_word_hash() run to finish even when there
is a failure during the run. The test will still fail due to the
output check in AT_CHECK. And developers can benefit from having
all failed hashes instead of only the first one.
Signed-off-by: Alex Wang <alexw@nicira.com> Acked-by: Ben Pfaff <blp@nicira.com>
Alex Wang [Thu, 26 Feb 2015 17:54:00 +0000 (09:54 -0800)]
test-hash: Test hash_bytes128() with single 128-bit word.
This commit adds a new test for hash_bytes128() using single 128-bit
word. The test shows that there is no collision in all 19 consecutive
bits checks, which indicates the hash function is good.
Signed-off-by: Alex Wang <alexw@nicira.com> Acked-by: Joe Stringer <joestringer@nicira.com>
Ben Pfaff [Tue, 3 Mar 2015 23:36:28 +0000 (15:36 -0800)]
ovs-lldp: Use better types for ISID and VLANs.
An ISID is 24 bits, so it fits in a uint32_t. A VLAN is 12 bits, so it
fits in a uint16_t. Use these types consistently, instead of int64_t.
This removes a check in aa_mapping_unregister() that seems a little
mysterious to me: it previously checked for ISID and VLAN values >= 0. I
don't see a way that they could be < 0 in this situation though.