cascardo/ovs.git
8 years agoofpbuf: Make ofpbuf_put_hex() accept period between hex bytes also.
Ben Pfaff [Wed, 10 Feb 2016 23:54:43 +0000 (15:54 -0800)]
ofpbuf: Make ofpbuf_put_hex() accept period between hex bytes also.

This makes it accept the same syntax as parse_NOTE(), so that that function
can be simplified.  In an upcoming commit a second action will also be
able to take advantage of the same feature.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Jarno Rajahalme <jarno@ovn.org>
8 years agodynamic-string: Make ds_chomp() return true if it removed a character.
Ben Pfaff [Wed, 10 Feb 2016 04:54:03 +0000 (20:54 -0800)]
dynamic-string: Make ds_chomp() return true if it removed a character.

This will be used in an upcoming commit.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Jarno Rajahalme <jarno@ovn.org>
8 years agotunneling: Disable IPv6 tunnel
Pravin B Shelar [Thu, 11 Feb 2016 09:05:16 +0000 (01:05 -0800)]
tunneling: Disable IPv6 tunnel

There are multiple issues in IPv6 userspace tunnel
implementation. Even the kernel module that ships with
2.5 does not support IPv6 tunneling. There is not
enough time to get all fixes in branch-2.5. So it make
sense to disable the support on 2.5.

Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Flavio Leitner <fbl@sysclose.org>
Acked-by: Thadeu Lima de Souza Cascardo <cascardo@redhat.com>
Acked-by: Jesse Gross <jesse@kernel.org>
8 years agoopenflow-common: Describe length and padding rules for OpenFlow properties.
Ben Pfaff [Tue, 16 Feb 2016 23:33:42 +0000 (15:33 -0800)]
openflow-common: Describe length and padding rules for OpenFlow properties.

I keep having to rediscover these from the code.  This is easier.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
8 years agodatapath-windows: Enable multiprocessor compilation on solution
Alin Serdean [Thu, 11 Feb 2016 02:30:32 +0000 (02:30 +0000)]
datapath-windows: Enable multiprocessor compilation on solution

Visual Studio defines by default the maximum number of concurrent jobs.

This patch allows the parallel built of the solution.

Signed-off-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Acked-by: Sairam Venugopal <vsairam@vmware.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
8 years agosystem-traffic: Add IPv6-over-vxlan-over-IPv4 tests.
Joe Stringer [Fri, 29 Jan 2016 19:37:54 +0000 (11:37 -0800)]
system-traffic: Add IPv6-over-vxlan-over-IPv4 tests.

Signed-off-by: Joe Stringer <joe@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
8 years agosystem-traffic: Add IP fragmentation expiry tests.
Joe Stringer [Fri, 29 Jan 2016 19:37:53 +0000 (11:37 -0800)]
system-traffic: Add IP fragmentation expiry tests.

These tests indirectly trigger the kernel IP fragment expiry code by
ensuring that not all fragments are assembled.

This reproduces the bug that was fixed in the following commit:
bf1f0d35ceb9 datapath: Fix IPv6 fragment expiry crash.

Signed-off-by: Joe Stringer <joe@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
8 years agosystem-traffic: Make vxlan frag test more reliable.
Joe Stringer [Fri, 29 Jan 2016 19:37:52 +0000 (11:37 -0800)]
system-traffic: Make vxlan frag test more reliable.

Depending on the kernel version in use, the nf_conntrack module may
register hooks for each namespace and execute conntrack prior to passing
packets to OVS (or not). In cases where this happens, the previous flow
table in this test would trust the local stack's connection tracking and
use it rather than sending packets through conntrack itself (and
therefore handling IP defragmentation/fragmentation).

This patch revealed two fatal datapath bugs, fixed by these commits:
86c2eb45fd82 datapath: Fix panic sending IP frags over tunnels.
792e5ed750ce datapath: inet: frag: Always orphan skbs inside ip_defrag().

Signed-off-by: Joe Stringer <joe@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
8 years agosystem-traffic: Fix typo in IPv6 tests.
Joe Stringer [Fri, 29 Jan 2016 19:37:51 +0000 (11:37 -0800)]
system-traffic: Fix typo in IPv6 tests.

Signed-off-by: Joe Stringer <joe@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
8 years agonetdev-linux: Fix warning message.
Thadeu Lima de Souza Cascardo [Mon, 15 Feb 2016 17:14:21 +0000 (15:14 -0200)]
netdev-linux: Fix warning message.

Instead of reading

"error receiving Ethernet packet on Permission denied: ens3",

it should read

"error receiving Ethernet packet on ens3: Permission denied".

Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
8 years agonetlink-socket: return correct error code when connect fails
Thadeu Lima de Souza Cascardo [Mon, 15 Feb 2016 17:13:30 +0000 (15:13 -0200)]
netlink-socket: return correct error code when connect fails

When connect and other calls fail after get_socket_rcvbuf, the return code would
be the rcvbuf size, not errno from the last call.

Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@redhat.com>
Signed-off-by: Simon Horman <simon.horman@netronome.com>
8 years agolib: Remove unused function prototypes
Andy Zhou [Fri, 12 Feb 2016 18:36:51 +0000 (10:36 -0800)]
lib: Remove unused function prototypes

Found by inspection.

Signed-off-by: Andy Zhou <azhou@ovn.org>
Acked-by: Russell Bryant <russell@ovn.org>
8 years agobuild windows: Update OpenSSL download link
Alin Serdean [Thu, 11 Feb 2016 01:12:46 +0000 (01:12 +0000)]
build windows: Update OpenSSL download link

This patch updates the appveyor dowload link for OpenSSL prebuilt binaries.

Signed-off-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Signed-off-by: Gurucharan Shetty <guru@ovn.org>
8 years agoexpr: Fix memory leak reported by valgrind.
William Tu [Thu, 11 Feb 2016 17:45:08 +0000 (09:45 -0800)]
expr: Fix memory leak reported by valgrind.

Testcase 1728: ovn -- 5-term mixed expression normalization.
    expr_clone_cmp (expr.c:1259)
    expr_clone (expr.c:1284)
    expr_clone_andor (expr.c:1271)
    expr_clone (expr.c:1288)
    expr_normalize_and (expr.c:2137)
    test_tree_shape_exhaustively (test-ovn.c:926)

Signed-off-by: William Tu <u9012063@gmail.com>
Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
Co-authored-by: Daniele Di Proietto <diproiettod@vmware.com>
Signed-off-by: Russell Bryant <russell@ovn.org>
8 years agoexpr: Fix memory leak reported by valgrind.
William Tu [Thu, 11 Feb 2016 17:45:07 +0000 (09:45 -0800)]
expr: Fix memory leak reported by valgrind.

Testcase 1728: ovn -- 5-term mixed expression normalization
Call stack:
    sset_add__ (sset.c:53)
    crush_and_string (expr.c:1725)
    crush_cmps (expr.c:1998)
    expr_sort (expr.c:2050)
    expr_normalize_and (expr.c:2085)

Signed-off-by: William Tu <u9012063@gmail.com>
Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
Co-authored-by: Daniele Di Proietto <diproiettod@vmware.com>
Signed-off-by: Russell Bryant <russell@ovn.org>
8 years agodatapath-windows: Refactor sofware offloads and mss
Alin Serdean [Thu, 11 Feb 2016 01:38:54 +0000 (01:38 +0000)]
datapath-windows: Refactor sofware offloads and mss

The purpose of this patch is to refactor the software offloads found in
the VXLAN and GRE code and also to refactor how the maximmum segment
size for a given NBL is obtained.

This patch introduces two functions OvsApplySWChecksumOnNB and OVSGetTcpMSS.

OVSGetTcpMSS - will return the mss found in a given NBL.

OvsApplySWChecksumOnNB - will compute and set software offloads for a given
                         NBL.

Signed-off-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Acked-by: Sorin Vinturis <svinturis at cloudbasesolutions.com>
Acked-by: Nithin Raju <nithin@vmware.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
8 years agocompiler: Don't require constructor names to be globally unique in MSVC.
Ben Pfaff [Wed, 10 Feb 2016 23:43:22 +0000 (15:43 -0800)]
compiler: Don't require constructor names to be globally unique in MSVC.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Russell Bryant <russell@ovn.org>
8 years agocompiler: Document OVS_CONSTRUCTOR.
Ben Pfaff [Wed, 10 Feb 2016 23:43:21 +0000 (15:43 -0800)]
compiler: Document OVS_CONSTRUCTOR.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Russell Bryant <russell@ovn.org>
8 years agodatapath-windows: Fix small bug in MPLS
Alin Serdean [Thu, 11 Feb 2016 00:14:32 +0000 (00:14 +0000)]
datapath-windows: Fix small bug in MPLS

The keylen is not properly updated in the case of MPLS, directly causing the
hash to be calculated improperly.

Signed-off-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Acked-by: Sairam Venugopal <vsairam@vmware.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
8 years agoovsdb-server: Eliminating max session limit
andy zhou [Wed, 10 Feb 2016 22:33:45 +0000 (14:33 -0800)]
ovsdb-server: Eliminating max session limit

This patch removes limits on number of concurrent sessions
allowed by ovsdb-server. Historically, it was not an design
goal for OVSDB server to support very high number of sessions.
The imposed limit reflects those design choices.

Work is now underway to improve OVSDB scalability since supporting
large of number of sessions is important for OVN, Removing
this limit makes scalability testing possible.

Signed-off-by: Andy Zhou <azhou@ovn.org>
Acked-by: Han Zhou <zhouhan@gmail.com>
Acked-by: Ben Pfaff <blp@ovn.org>
8 years agovlog: Fix windows build.
Russell Bryant [Wed, 10 Feb 2016 22:03:32 +0000 (17:03 -0500)]
vlog: Fix windows build.

A recent change changed this constructor to "init_this_module".  This
breaks the build on windows according to AppVeyor.  Include the module
name in the constructor name to work around the issue.

Fixes: 922fed065e65 ("vlog: Make the most common module reference more direct.")
Signed-off-by: Russell Bryant <russell@ovn.org>
Signed-off-by: Ben Pfaff <blp@ovn.org>
8 years agovlog: Use log_file_mutex to more consistently protect vlog_modules.
Ben Pfaff [Wed, 3 Feb 2016 21:47:25 +0000 (13:47 -0800)]
vlog: Use log_file_mutex to more consistently protect vlog_modules.

This could be beneficial if we ever insert a new module at runtime
(currently we only insert them at startup) and it should have negligible
cost.

Suggested-by: Russell Bryant <russell@ovn.org>
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Russell Bryant <russell@ovn.org>
8 years agovlog: Add vlog/close command.
Ben Pfaff [Wed, 3 Feb 2016 21:41:34 +0000 (13:41 -0800)]
vlog: Add vlog/close command.

Requested-by: P R Dinesh
Requested-at: https://github.com/openvswitch/ovs/pull/94
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Russell Bryant <russell@ovn.org>
8 years agovlog: Make the most common module reference more direct.
Ben Pfaff [Wed, 3 Feb 2016 21:21:10 +0000 (13:21 -0800)]
vlog: Make the most common module reference more direct.

Most vlog calls are for the log module owned by the translation unit being
compiled, but this module was referenced indirectly through a pointer
variable.  That seems silly, so this commit changes the code so that the
local vlog module is referred to directly, as &this_module.

We could get rid of the global variables for vlog modules entirely, but
I like getting linker errors when there's a duplicate module name.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Russell Bryant <russell@ovn.org>
8 years agopinctrl: Fix byte order of numeric constant.
Ben Pfaff [Wed, 10 Feb 2016 21:16:47 +0000 (13:16 -0800)]
pinctrl: Fix byte order of numeric constant.

Found by sparse.

Fixes: commit 660f5a61286 ("ovn-controller: Use ofputil_encode_set_config to set the switch config")
Reported-by: Russell Bryant <russell@ovn.org>
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Russell Bryant <russell@ovn.org>
8 years agoovn-controller: Use ofputil_encode_set_config to set the switch config
Numan Siddique [Wed, 10 Feb 2016 20:18:58 +0000 (12:18 -0800)]
ovn-controller: Use ofputil_encode_set_config to set the switch config

This is cleaner.

Signed-off-by: Numan Siddique <nusiddiq@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
8 years agopinctrl: Fix decoding of OFPT_GET_CONFIG_REPLY messages.
Ben Pfaff [Wed, 10 Feb 2016 20:18:46 +0000 (12:18 -0800)]
pinctrl: Fix decoding of OFPT_GET_CONFIG_REPLY messages.

Fixes: ad99e2ed49 (Better abstract OFPT_SET_CONFIG and OFPT_GET_CONFIG_REPLY, make stricter.)
Reported-by: Numan Siddique <nusiddiq@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
8 years agoovsdb-client: Fix memory leak reported by valgind.
William Tu [Tue, 9 Feb 2016 22:31:16 +0000 (14:31 -0800)]
ovsdb-client: Fix memory leak reported by valgind.

Testcase 1429: ovsdb-server/add-db and remove-db.
    xmemdup0 (util.c:142)
    main (ovsdb-client.c:133)

Signed-off-by: William Tu <u9012063@gmail.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
8 years agotest-ovsdb: Fix memory leak reported by valgrind.
William Tu [Tue, 9 Feb 2016 22:15:13 +0000 (14:15 -0800)]
test-ovsdb: Fix memory leak reported by valgrind.

Testcase 1314: UUID-distinct queries on scalars.
Call stacks:
    allocate_row (row.c:37)
    ovsdb_row_clone (row.c:67)
    do_query_distinct (test-ovsdb.c:1232)
    ovs_cmdl_run_command (command-line.c:121)
    main (test-ovsdb.c:72)

Signed-off-by: William Tu <u9012063@gmail.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
8 years agoovn: Support ingress policing settings for VIFs.
Ben Pfaff [Wed, 10 Feb 2016 19:09:12 +0000 (11:09 -0800)]
ovn: Support ingress policing settings for VIFs.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Co-authored-by: Babu Shanmugam <bschanmu@redhat.com>
Signed-off-by: Babu Shanmugam <bschanmu@redhat.com>
8 years agotest-ovn: Add help output for parse-actions command.
Ben Pfaff [Wed, 10 Feb 2016 05:08:13 +0000 (21:08 -0800)]
test-ovn: Add help output for parse-actions command.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Justin Pettit <jpettit@ovn.org>
Acked-by: Russell Bryant <russell@ovn.org>
8 years agodist-docs: Convert tabs to spaces.
Russell Bryant [Tue, 9 Feb 2016 17:53:42 +0000 (12:53 -0500)]
dist-docs: Convert tabs to spaces.

This file used mixed indentation.  Convert the tabs to spaces for
consistency.

Signed-off-by: Russell Bryant <russell@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
8 years agodist-docs: Fix relative links.
Russell Bryant [Tue, 9 Feb 2016 17:46:46 +0000 (12:46 -0500)]
dist-docs: Fix relative links.

There are some relative links designed to work on github.  These links
are broken within dist-docs.  Adding a symbolic link from the original
filename to the plain text version makes these links work within
dist-docs.

Signed-off-by: Russell Bryant <russell@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
8 years agodist-docs: Install plaintext files properly.
Ben Pfaff [Tue, 9 Feb 2016 04:18:35 +0000 (20:18 -0800)]
dist-docs: Install plaintext files properly.

We shouldn't try to treat every file as Markdown.

Signed-off-by: Ben Pfaff <blp@ovn.org>
8 years agodist-docs: Make GNU make aware of sub-make.
Ben Pfaff [Tue, 9 Feb 2016 04:18:34 +0000 (20:18 -0800)]
dist-docs: Make GNU make aware of sub-make.

When GNU make sees that a command to be executed contains the string
$(MAKE), it makes the jobserver that limits parallelism available to
the command.  Otherwise, any sub-make that executes sees that
parallelism is enabled but does not have access to the jobserver, so
it prints a warning and turns off parallel job execution.

This also makes the dist-docs process run the same "make" that is
executed at the top level, in case that's different from the default
"make" found in $PATH.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Russell Bryant <russell@ovn.org>
8 years agodist-docs: Include Documentation/ in dist-docs.
Russell Bryant [Mon, 8 Feb 2016 17:12:41 +0000 (12:12 -0500)]
dist-docs: Include Documentation/ in dist-docs.

Signed-off-by: Russell Bryant <russell@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
8 years agosset: Make sset iteration check the type of the nodes it's iterating.
Ben Pfaff [Tue, 9 Feb 2016 00:52:44 +0000 (16:52 -0800)]
sset: Make sset iteration check the type of the nodes it's iterating.

Without this additional check, SSET_FOR_EACH is happy to iterate over any
type that has a struct hmap member named 'map'.  We have a number of these:
hmapx, shash, simap, and smap, in addition to sset.

I guess another approach would be give each of these a unique member name,
but the short name 'map' is nice too.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Russell Bryant <russell@ovn.org>
8 years agoutil: New macro BUILD_ASSERT_TYPE.
Ben Pfaff [Tue, 9 Feb 2016 00:52:43 +0000 (16:52 -0800)]
util: New macro BUILD_ASSERT_TYPE.

I intend to make further use of this in upcoming commits.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Andy Zhou <azhou@ovn.org>
8 years agonetdev: Free packets in netdev_send() for devices that don't support send.
Ben Pfaff [Tue, 9 Feb 2016 06:42:50 +0000 (22:42 -0800)]
netdev: Free packets in netdev_send() for devices that don't support send.

This manifested as a memory leak in test 898 "ofproto-dpif - sFlow packet
sampling - tunnel set", which included an output to a tunnel vport that
doesn't have an implementation of netdev_send().

Reported-by: William Tu <u9012063@gmail.com>
Reported-at: http://openvswitch.org/pipermail/dev/2016-February/065873.html
Signed-off-by: Ben Pfaff <blp@ovn.org>
8 years agomanpages.mk: Remove ovs-benchmark.
Ilya Maximets [Mon, 8 Feb 2016 07:31:48 +0000 (10:31 +0300)]
manpages.mk: Remove ovs-benchmark.

Fixes: e75291417990 ("ovs-benchmark: Remove.")
Signed-off-by: Ilya Maximets <i.maximets@samsung.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
8 years agovtep: Support per-tunnel tunnel key in schema.
Ofer Ben Yacov [Fri, 5 Feb 2016 20:54:57 +0000 (12:54 -0800)]
vtep: Support per-tunnel tunnel key in schema.

Currently the scenario of single logical bridge that use multiple locators
with different tunnel key on each of the locators is not supported.
In order to support much more flexibility in the tunnel settings, we need
to add tunnel key column to the Physical_Locator table.

This patch is needed to support the usage of neutron L2GW as an inter-cloud
gateway. The tunnel key that is set in the logical bridge will be used
'internally' to connect the L2GW to the compute hosts and the key that
is set in the physical locator will be used to connect the L2GW to a
remote L2GW to form a tunnel between 2 clouds. In this case, the
'external' connection will use single 'dst_ip' on all the locators with
different tunnel key for each L2 domain.

The Neutron spec is available here:
https://review.openstack.org/#/c/270786/
The new code depend on the ability to use different keys in multiple
tunnels in the same logical switch.

Signed-off-by: Ofer Ben-Yacov <ofer.benyacov@gmail.com>
[blp@ovn.org added and clarified documentation]
Signed-off-by: Ben Pfaff <blp@ovn.org>
8 years agonetdev-dpdk: Fix dpdk_watchdog failure to quiesce.
Kevin Traynor [Fri, 5 Feb 2016 17:07:16 +0000 (17:07 +0000)]
netdev-dpdk: Fix dpdk_watchdog failure to quiesce.

Fix issue whereby vhost_thread is waiting for dpdk_watchdog
thread to quiesce and at the same time dpdk_watchdog thread
is waiting for vhost_thread to give up dpdk_mutex.

Reported-by: Patrik Andersson R <patrik.r.andersson@ericsson.com>
Signed-off-by: Patrik Andersson R <patrik.r.andersson@ericsson.com>
Signed-off-by: Kevin Traynor <kevin.traynor@intel.com>
Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
8 years agoovs-benchmark: Remove.
Ben Pfaff [Sat, 6 Feb 2016 00:00:49 +0000 (16:00 -0800)]
ovs-benchmark: Remove.

This utility was completely broken and no one noticed for the time of a
full release, so I think that's a safe sign that we should remove it.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Jarno Rajahalme <jarno@ovn.org>
8 years agoovsdb-idl: log error in client when db schema does not exist on server
Lance Richardson [Thu, 28 Jan 2016 14:26:55 +0000 (09:26 -0500)]
ovsdb-idl: log error in client when db schema does not exist on server

A common error scenario with OVN is to attempt to use ovn-nbctl when
the OVN databases have not been created in ovsdb-server:
   1. ovn-nbctl sends "get_schema" request for OVN db to ovsdb-server.
   2. ovsdb-server fails to find requested db, sends error response
      to ovn-nbctl.
   3. ovn-nbctl receives the error response in ovsdb_idl_run(), but
      takes no specific action.
   4. ovn-nbctl hangs forever in IDL_S_SCHEMA_REQUESTED state (assuming
      a timeout wasn't requested on the command line).

Add a log message to inform the user of this situation.

Signed-off-by: Lance Richardson <lrichard@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
8 years agorhel: Add '--with dpdk' spec option to build DPDK-enabled packages
Panu Matilainen [Thu, 28 Jan 2016 12:23:52 +0000 (14:23 +0200)]
rhel: Add '--with dpdk' spec option to build DPDK-enabled packages

Requires DPDK >= 2.2 as that is the first version to have a standard
install layout which we can discover without help from user.
Additionally document the option in INSTALL.Fedora.md.

Signed-off-by: Panu Matilainen <pmatilai@redhat.com>
Acked-by: Flavio Leitner <fbl@sysclose.org>
Signed-off-by: Ben Pfaff <blp@ovn.org>
8 years agoovs-numa: Fix cpu discovering if CONFIG_NUMA disabled.
Ilya Maximets [Mon, 25 Jan 2016 14:37:19 +0000 (17:37 +0300)]
ovs-numa: Fix cpu discovering if CONFIG_NUMA disabled.

If CONFIG_NUMA disabled in the system, PMD threads can't
be created:

|ovs_numa|INFO|Discovered 0 NUMA nodes and 0 CPU cores

Signed-off-by: Ilya Maximets <i.maximets@samsung.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
8 years agoovn-controller: Fix typo in comment.
Ben Pfaff [Fri, 5 Feb 2016 22:18:27 +0000 (14:18 -0800)]
ovn-controller: Fix typo in comment.

Too much asss.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Kyle Mestery <mestery@mestery.com>
8 years agoovsdb: Fix typo in libovsdb's pkg-config.
Ansari, Shad [Fri, 22 Jan 2016 20:06:28 +0000 (20:06 +0000)]
ovsdb: Fix typo in libovsdb's pkg-config.

Fix typo in the library name of pkg-config of libovsdb.

Reported-by: Javier Albornz <javier.albornoz@hpe.com>
Signed-off-by: Shad Ansari <shad.ansari@hpe.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
8 years agotest-ovsdb: Fix memory leak reported by valgrind.
William Tu [Fri, 22 Jan 2016 21:04:50 +0000 (13:04 -0800)]
test-ovsdb: Fix memory leak reported by valgrind.

Testcase 1311, 1312: Boolean-distinct queries on scalars, reports leak
below:
    xmalloc (util.c:112)
    do_query_distinct (test-ovsdb.c:1208)
    ovs_cmdl_run_command (command-line.c:121)
    main (test-ovsdb.c:72)

Signed-off-by: William Tu <u9012063@gmail.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
8 years agoofproto-macros: Fix definition of add_of_ports.
Ben Pfaff [Fri, 5 Feb 2016 23:30:24 +0000 (15:30 -0800)]
ofproto-macros: Fix definition of add_of_ports.

This definition just didn't work, and caused lots of tests to inadvertently
be effectively skipped.

Fixes: ca5792f0d80ffd (tests: Change ADD_OF_PORTS from macro to shell function.)
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Jarno Rajahalme <jarno@ovn.org>
Signed-off-by: Ben Pfaff <blp@ovn.org>
8 years agoovs-benchmark: Fix return value of do_poll.
William Tu [Thu, 21 Jan 2016 18:16:23 +0000 (10:16 -0800)]
ovs-benchmark: Fix return value of do_poll.

A positive number is returned when do_poll successes.

Signed-off-by: William Tu <u9012063@gmail.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
8 years agoofproto-dpif-mirror: Fix bug that flag "need_revalidate" is never reset.
Huanle Han [Fri, 5 Feb 2016 23:43:25 +0000 (15:43 -0800)]
ofproto-dpif-mirror: Fix bug that flag "need_revalidate" is never reset.

Flag "need_revalidate" on mbridge is set to true when an ofbundle
destroy. And it's never reset. It causes the backer revalidate and
the mac learning flush every time 'ofproto_run' is called.

Signed-off-by: Huanle Han <hanxueluo@gmail.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
8 years agoofproto-dpif-xlate: Fix clash between macro argument and struct member name.
Huanle Han [Fri, 15 Jan 2016 15:24:59 +0000 (23:24 +0800)]
ofproto-dpif-xlate: Fix clash between macro argument and struct member name.

Argument name "entries" is same as the member "entries" of xcache.
It will lead to compile error if we pass an argument whose name is
not "entries".

Signed-off-by: Huanle Han <hanxueluo@gmail.com>
8 years agoovsdb-server: fix monitor counters reported by memory/show
Andy Zhou [Thu, 4 Feb 2016 04:57:32 +0000 (20:57 -0800)]
ovsdb-server: fix monitor counters reported by memory/show

Commit 4c2809787cdbc774 (ovsdb-monitor: add json cache) introduced
an optimization that allows jsonrpc session to share monitors.
However, the memory/show implementation was not updated to match the
implementation; it still assumes that each jsonrpc session uses its
own monitor, thus are likely to over reporting the number.

This patch fix the bug and reports the actual number of monitor used
by the ovsdb-server.

Signed-off-by: Andy Zhou <azhou@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
8 years agoovs-vswitchd: Preserve datapath ports across graceful shutdown.
Ben Pfaff [Thu, 4 Feb 2016 17:48:54 +0000 (09:48 -0800)]
ovs-vswitchd: Preserve datapath ports across graceful shutdown.

Until now, asking ovs-vswitchd to shut down gracefully, e.g. with
"ovs-appctl exit", would cause it to first remove all the ports from
kernel-based datapaths.  This has the unfortunate side effect that IP
addresses on any removed "internal" ports are lost, even if the ports are
added again when ovs-vswitchd is restarted.  This is long-standing
behavior, but it only became important when the OVS control scripts were
changed to try to do graceful shutdown first instead of using a signal.

This commit changes graceful shutdown so that it leaves ports in the
datapath, fixing the problem.

Fixes: 9b5422a98f8 (ovs-lib: Try to call exit before killing.)
Reported-by: Edgar Cantu <eocantu@us.ibm.com>
Reported-at: http://openvswitch.org/pipermail/discuss/2016-January/020024.html
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Gurucharan Shetty <guru@ovn.org>
8 years agolib/ovs-thread: Ensure that thread stacks are always at least 512 kB.
Alexandru Ardelean [Thu, 4 Feb 2016 07:20:34 +0000 (09:20 +0200)]
lib/ovs-thread: Ensure that thread stacks are always at least 512 kB.

This makes a difference for libc implementations (such as musl libc) that
have a really small default pthread stack size.

Will reference this discussion:
http://patchwork.ozlabs.org/patch/572340/

Reported-by: Robert McKay <robert@mckay.com>
Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com>
[blp@ovn.org made style changes]
Signed-off-by: Ben Pfaff <blp@ovn.org>
8 years agoovn-northd: Revert "ovn-northd: Only run idl loop if something changed"
Numan Siddique [Thu, 4 Feb 2016 14:41:31 +0000 (20:11 +0530)]
ovn-northd: Revert "ovn-northd: Only run idl loop if something changed"

This reverts f20396e051ea4fd623bfc022cc78d9bd52a850e5

f20396e.. was required to fix the failing ovn-sbctl testsuites.
commit fb496f92ca1eeead8760b5cdfd857165f64deadf addresses these failing
test cases in a proper way.

With commit f20396e.. its possible that commit to the southbound db is
delayed. When ovnnb_db_run is called, and if ctx->ovnsb_txn is NULL,
ovnnb_db_run returns immediately without generating the logical flows.
ovnnb_db_run is not called again until the northbound db seqno changes.

Signed-off-by: Numan Siddique <nusiddiq@redhat.com>
Signed-off-by: Russell Bryant <russell@ovn.org>
8 years agodpif-netdev: Allow different numbers of rx queues for different ports.
Ilya Maximets [Thu, 21 Jan 2016 14:15:18 +0000 (17:15 +0300)]
dpif-netdev: Allow different numbers of rx queues for different ports.

Currently, all of the PMD netdevs can only have the same number of
rx queues, which is specified in other_config:n-dpdk-rxqs.

Fix that by introducing of new option for PMD interfaces: 'n_rxq', which
specifies the maximum number of rx queues to be created for this
interface.

Example:
ovs-vsctl set Interface dpdk0 options:n_rxq=8

Old 'other_config:n-dpdk-rxqs' deleted.

Signed-off-by: Ilya Maximets <i.maximets@samsung.com>
Acked-by: Ben Pfaff <blp@ovn.org>
Acked-by: Flavio Leitner <fbl@sysclose.org>
Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
8 years agotravis: Update kernel matrix.
Joe Stringer [Thu, 24 Dec 2015 19:46:42 +0000 (11:46 -0800)]
travis: Update kernel matrix.

Remove v4.2 as it is EOL; Add v4.3 as we support this version in
OVS-2.5. Update other versions to the latest listed on kernel.org.

Signed-off-by: Joe Stringer <joe@ovn.org>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
8 years agodatapath: Re-designate OVS_FRAGMENT_BACKPORT.
Joe Stringer [Thu, 24 Dec 2015 21:09:38 +0000 (13:09 -0800)]
datapath: Re-designate OVS_FRAGMENT_BACKPORT.

Typically the way that we include backported code is by testing for
existence of the feature in the upstream codebase via header checks,
then attempt to use the upstream code as much as possible. However, for
the IP fragmentation handling backport we have an additional constraint
which is that we cannot support kernels older than Linux-3.10.

To date, OVS_FRAGMENT_BACKPORT has been defined to include the backport
of the IP fragmentation code for all kernels from 3.10 to 4.2, rather
than attempting to use the upstream code as much as possible. This patch
relaxes OVS_FRAGMENT_BACKPORT to only check the lower bound so that the
upstream code may be used in more circumstances.

Signed-off-by: Joe Stringer <joe@ovn.org>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
8 years agocompat: Detect and use upstream ip_fragment().
Joe Stringer [Tue, 2 Feb 2016 23:19:02 +0000 (15:19 -0800)]
compat: Detect and use upstream ip_fragment().

Previously a version check was used to determine whether the upstream
ip_fragment() should be used or the backported version. The actual test
is for whether upstream commit d6b915e29f4a ("ip_fragment: don't forward
defragmented DF packet") is present, so test for that instead.

Signed-off-by: Joe Stringer <joe@ovn.org>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
8 years agocompat: Detect and use inet_frag_queue->list_evictor.
Joe Stringer [Thu, 24 Dec 2015 18:41:35 +0000 (10:41 -0800)]
compat: Detect and use inet_frag_queue->list_evictor.

Kernels 3.17 to 4.2 have a work queue to evict old fragments, but do not
track these fragments in an eviction list. On these kernels, we detect
the absence of the list_evictor and provide one. This commit fixes the
reliance on kernel versions in the case that this functionality is
backported.

Signed-off-by: Joe Stringer <joe@ovn.org>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
8 years agocompat: Rename OVS frag caches.
Joe Stringer [Tue, 2 Feb 2016 23:19:00 +0000 (15:19 -0800)]
compat: Rename OVS frag caches.

These should not have the same name as the upstream ones, to reduce
confusion when they are created. Rename them.

Suggested-by: Pravin B Shelar <pshelar@ovn.org>
Signed-off-by: Joe Stringer <joe@ovn.org>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
8 years agodatapath: Fix kernel-4.3 build.
Joe Stringer [Tue, 2 Feb 2016 23:18:59 +0000 (15:18 -0800)]
datapath: Fix kernel-4.3 build.

Commit 792e5ed750ce ("datapath: inet: frag: Always orphan skbs inside
ip_defrag().") broke the build for OVS backport against kernel-4.3. Fix
the build.

Signed-off-by: Joe Stringer <joe@ovn.org>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
8 years agocmap: Explain corner case in CMAP_FOR_EACH comment.
Daniele Di Proietto [Wed, 3 Feb 2016 04:55:48 +0000 (20:55 -0800)]
cmap: Explain corner case in CMAP_FOR_EACH comment.

Commit d916785ce98c("dpif-netdev: Fix improper use of CMAP_FOR_EACH.")
fixes a problem that's worth documenting.

Requested-by: Jarno Rajahalme <jarno@ovn.org>
Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
Acked-by: Ben Pfaff <blp@ovn.org>
8 years agobridge: Do not add bridges with '/' in name.
Daniele Di Proietto [Tue, 2 Feb 2016 21:28:11 +0000 (13:28 -0800)]
bridge: Do not add bridges with '/' in name.

This effectively stops vswitchd from creating bridges with '/' in the
name. OVS used to print a warning but the bridge was created anyway.

This restriction is implemented because the bridge name is part of a
filesystem path.

This check is no substitute for Mandatory Access Control, but it
certainly helps to catch the error early.

Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
[blp@ovn.org added a test]
Acked-by: Ben Pfaff <blp@ovn.org>
8 years agodpif: Allow adding ukeys for same flow by different pmds.
Ilya Maximets [Wed, 3 Feb 2016 11:31:43 +0000 (14:31 +0300)]
dpif: Allow adding ukeys for same flow by different pmds.

In multiqueue mode several pmd threads may process one port, but
different queues. Flow may not depend on queue. It's true at least for
vhost-user ports.

When multiple pmd threads attempt to process upcalls for a particular
flow key, only the first will succeed. Any subsequent threads will
receive error = ENOSPC when attempting to insert a new udpif_key into
the umaps. This causes the latter threads to never insert a flow into
the datapath to handle the traffic, and as a result they will
consistently execute those flows through the slow path.

Fix that by mixing pmd_id with the bits from the ufid for ukey->hash
calculation. So, for a given flow key/UFID, each pmd thread will create
an independent udpif_key.

This also opens the possibility to reassign queues among pmd threads
without restarting them and deleting the megaflow cache.

Signed-off-by: Ilya Maximets <i.maximets@samsung.com>
Signed-off-by: Joe Stringer <joe@ovn.org>
8 years agovlog: Stop using explicit references to external log modules.
Ben Pfaff [Wed, 3 Feb 2016 21:15:48 +0000 (13:15 -0800)]
vlog: Stop using explicit references to external log modules.

It's always risky to write "extern" declarations outside a header file,
since there's no way to ensure the type of what's being referenced is
correct.  In these cases, we can easily avoid the extern reference, so do
so.

There is a little tradeoff here, in that referring to the log modules
through strings means that we catch an incorrect module name at runtime
instead of at link time, but I think that the risk here is minimal because
the mistake will be found by every test in "make check" that runs any of
the utilities, since they make these calls as one of their first tasks
during initialization.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Russell Bryant <russell@ovn.org>
8 years agovlog: Simplify module definition.
Ben Pfaff [Wed, 3 Feb 2016 23:18:33 +0000 (15:18 -0800)]
vlog: Simplify module definition.

Until now, vlog had a macro VLOG_DEFINE_THIS_MODULE, which expanded using
VLOG_DEFINE_MODULE, which expanded using VLOG_DEFINE_MODULE__, and the
latter macros didn't have any other users.  This commit combines them for
clarity.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Russell Bryant <russell@ovn.org>
8 years agovlog: Make 'vlog_modules' private to vlog.c.
Ben Pfaff [Wed, 3 Feb 2016 20:23:36 +0000 (12:23 -0800)]
vlog: Make 'vlog_modules' private to vlog.c.

I think we once used this variable from an inline function in vlog.h, so
that we had to make it "extern", but these days it's only used from vlog.c,
so it can be static now.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Russell Bryant <russell@ovn.org>
8 years agobridge: Also prohibit \ in bridge names.
Ben Pfaff [Wed, 3 Feb 2016 22:45:30 +0000 (14:45 -0800)]
bridge: Also prohibit \ in bridge names.

This is only necessary for Windows but it's no great loss elsewhere.

Also, document the restriction on bridge names.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Justin Pettit <jpettit@ovn.org>
8 years agoofproto: Detect and handle errors in ofproto_port_add().
Ben Pfaff [Wed, 3 Feb 2016 01:57:46 +0000 (17:57 -0800)]
ofproto: Detect and handle errors in ofproto_port_add().

The update_port() function called in ofproto_port_add() can encounter
errors that prevent a port from being added, but nothing was checking for
the error and in fact update_port() didn't even pass the error along to
its caller.  This commit fixes the problem.

The scenario that led me to examine this code can be triggered as follows
from the sandbox, as long as you change --enable-dummy=override to
--enable-dummy=system in ovs-sandbox:

ovs-vsctl add-br br0
ovs-vsctl add-port br0 tun0 \
    -- set interface tun0 type=stt options:remote_ip=1.2.3.4
ovs-vsctl add-port br0 tun1 \
    -- set interface tun1 type=stt options:remote_ip=1.2.3.4

The second add-port will fail due to the duplicate tunnel options, but
ofproto_port_add() will not return the error.  Instead, it will report to
the caller that it succeeded and tell it that it has ofp_port OFPP_NONE
(65535), which is invalid and it obviously does not.  The result is that
you get bizarre log messages like this:

    tunnel|WARN|tun1: attempting to add tunnel port with same config as port 'tun0' (::->1.2.3.4, key=0, dp port=7471, pkt mark=0)
    ofproto|WARN|br0: could not add port tun1 (File exists)
    bridge|INFO|bridge br0: added interface tun1 on port 65535
    ofproto|WARN|br0: cannot configure bfd on nonexistent port 65535
    ofproto|WARN|br0: cannot configure LLDP on nonexistent port 65535
    ofproto|WARN|br0: cannot get STP status on nonexistent port 65535
    ofproto|WARN|br0: cannot get RSTP status on nonexistent port 65535
    ofproto|WARN|br0: cannot get STP stats on nonexistent port 65535
    ofproto|WARN|br0: cannot get STP stats on nonexistent port 65535

VMware-BZ: #1598643
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Justin Pettit <jpettit@ovn.org>
8 years agotests: Add vlog tests for C implementation to match Python tests.
Ben Pfaff [Tue, 8 Dec 2015 08:59:56 +0000 (00:59 -0800)]
tests: Add vlog tests for C implementation to match Python tests.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Russell Bryant <russell@ovn.org>
8 years agodpif-netdev: Correctly update 'key' in emc_processing().
Daniele Di Proietto [Wed, 3 Feb 2016 04:38:11 +0000 (20:38 -0800)]
dpif-netdev: Correctly update 'key' in emc_processing().

The 'key' pointer must point at the first unused element in the key
array.

Fixes: b89c678b7a26 ("dpif-netdev: optmizing emc_processing()")
CC: Andy Zhou <azhou@ovn.org>
Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
Acked-by: Andy Zhou <azhou@nicira.com>
8 years agoovn: Update comment about local datapath calculation.
Russell Bryant [Wed, 3 Feb 2016 16:46:33 +0000 (11:46 -0500)]
ovn: Update comment about local datapath calculation.

ovn-controller has a simple optimization for excluding some logical flow
processing that we know is unnecessary.  This update to a comment in the
code reflects a discussion we had on the mailing list about a better
algorithm that would let us exclude even more.

Signed-off-by: Russell Bryant <russell@ovn.org>
8 years agodatapath-windows: fix endless loop on reboot
Alin Serdean [Tue, 12 Jan 2016 18:00:32 +0000 (18:00 +0000)]
datapath-windows: fix endless loop on reboot

Testing under 2012 gave some more inisight on an old bug.

If a PNP event with the value of NetEventSwitchActivate was triggered
we were calling OvsQuerySwitchActivationComplete which does an OID request
to the underlying drivers, however this triggered a hang because as per
documentation:
https://msdn.microsoft.com/en-us/library/windows/hardware/ff561830%28v=vs.85%29.aspx
"A driver can call NdisFOidRequest when it is in the Restarting, Running,
Pausing, or Paused state."
This resulted in an endless booting cycle.
Looking at the documentation again:
https://msdn.microsoft.com/en-us/library/windows/hardware/ff568751%28v=vs.85%29.aspx
NetEventSwitchActivate indicates that the extensible switch has completed
activation so we can now safely query the switch itself.

Also we are not forwarding the PNP event to the overlaying drivers unless
we succeeded in the operation, this issue has been fixed also.

Signed-off-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Acked-by: Nithin Raju <nithin@vmware.com>
Signed-off-by: Gurucharan Shetty <guru@ovn.org>
8 years agoovn-controller: Only process lflows for local datapaths.
Russell Bryant [Wed, 20 Jan 2016 18:29:25 +0000 (13:29 -0500)]
ovn-controller: Only process lflows for local datapaths.

Previously, ovn-controller translated logical flows into OpenFlow flows
for *every* logical datapath.  This patch makes it so we skip doing so
for the egress pipeline if the datapath is a logical switch with no
logical ports bound locally.  In that case, the flows have no effect.

This was the code path taking the most time in a large scale OVN
environment and was an easy optimization to make based on the existing
local_datapaths info.

In this environment, while idling, ovn-controller was taking up about
20% CPU with this patch, while other nodes were in the 40-70% range.

Reported-at: https://bugs.launchpad.net/networking-ovn/+bug/1536003
Signed-off-by: Russell Bryant <russell@ovn.org>
Tested-by: Matt Mulsow <mamulsow@us.ibm.com>
Acked-by: Ben Pfaff <blp@ovn.org>
Acked-By: Kyle Mestery <mestery@mestery.com>
8 years agovtep: add logical router related commands.
Wenyu Zhang [Fri, 29 Jan 2016 10:22:16 +0000 (02:22 -0800)]
vtep: add logical router related commands.

Add logical router related vtep-ctl commands:
vtep-ctl add-lr LR
vtep-ctl del-lr LR
vtep-ctl list-lr
vtep-ctl lr-exists LR

Signed-off-by: Wenyu Zhang <wenyuz@vmware.com>
Signed-off-by: Gurucharan Shetty <guru@ovn.org>
8 years agoovn-controller: Allocate ct zones for localnet ports.
Russell Bryant [Mon, 25 Jan 2016 21:54:06 +0000 (16:54 -0500)]
ovn-controller: Allocate ct zones for localnet ports.

Previously, all ct() actions applied to localnet ports used the default
conntrack zone.  We should allocate a ct zone ID for all localnet ports
just like we do for all local VIFs so that none of our connection
tracking interferes with any base system connection tracking in the
default zone.

Signed-off-by: Russell Bryant <russell@ovn.org>
Acked-by: Han Zhou <zhouhan@gmail.com>
Acked-by: Ben Pfaff <blp@ovn.org>
8 years agoovn: Fix localnet ports on the same chassis.
Russell Bryant [Fri, 15 Jan 2016 21:39:42 +0000 (16:39 -0500)]
ovn: Fix localnet ports on the same chassis.

Multiple logical ports on the same chassis that were connected to the
same physical network via localnet ports were not able to send packets
to each other.  This was because ovn-controller created a single patch
port between br-int and the physical network access bridge and used it
for all localnet ports.

The fix implemented here is to create a separate patch port for every
logical port of type=localnet.  An optimization is included where these
ports are only created if the localnet port is on a logical switch with
another logical port with an associated local VIF.

A nice side effect of this fix is that the code in physical.c got a lot
simpler, as localnet ports are now handled mostly like local VIFs.

Fixes: c02819293d52 ("ovn: Add "localnet" logical port type.")
Reported-by: Han Zhou <zhouhan@gmail.com>
Reported-at: http://openvswitch.org/pipermail/dev/2016-January/064413.html
Signed-off-by: Russell Bryant <russell@ovn.org>
Tested-by: Kyle Mestery <mestery@mestery.com
Acked-By: Kyle Mestery <mestery@mestery.com>
Tested-by: Han Zhou <zhouhan@gmail.com>
Tested-by: Michael Arnaldi <michael.arnaldi@mymoneyex.com>
Acked-by: Ben Pfaff <blp@ovn.org>
8 years agoovn-controller: Move local_datapaths calculation.
Russell Bryant [Fri, 15 Jan 2016 19:30:41 +0000 (14:30 -0500)]
ovn-controller: Move local_datapaths calculation.

Before this patch, physical.c build up the set of local datapaths for
its own use.  I'd like to use it in another module in a later patch, so
pull it out of physical.  It's now populated by the bindings module,
since that seems like a more appropriate place to do it, and it's also
done much earlier in the main loop, making it easier to re-use.

Signed-off-by: Russell Bryant <russell@ovn.org>
Acked-by: Han Zhou <zhouhan@gmail.com>
Acked-by: Ben Pfaff <blp@ovn.org>
8 years agodpif-netdev: Fix improper use of CMAP_FOR_EACH.
Daniele Di Proietto [Wed, 27 Jan 2016 02:53:52 +0000 (18:53 -0800)]
dpif-netdev: Fix improper use of CMAP_FOR_EACH.

It is ok to iterate a cmap with CMAP_FOR_EACH and remove elements with
cmap_remove(), but having quiescent states inside the loop might create
problems, since some of the postponed cleanup done inside the cmap might
be executed, freeing the memory that the iterator is using.

We had several of these errors in dpif-netdev, because when we rearrange
ports or threads we often need to wait on a condition variable (which
implies a quiescent state).

This problem caused iterations to skip elements or to list them twice,
resulting in the main thread waiting on a condition without anyone else
to signal.

Fix these cases by moving the possible quiescent states outside
CMAP_FOR_EACH loops.

Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
Tested-by: Ilya Maximets <i.maximets@samsung.com>
Acked-by: Ilya Maximets <i.maximets@samsung.com>
Acked-by: Jarno Rajahalme <jarno@ovn.org>
8 years agodpif-netdev: Delay packets' metadata initialization.
Daniele Di Proietto [Fri, 29 Jan 2016 01:47:51 +0000 (17:47 -0800)]
dpif-netdev: Delay packets' metadata initialization.

When a group of packets arrives from a port, we loop through them to
initialize metadata and then we loop through them again to extract the
flow and perform the exact match classification.

This commit combines the two loops into one, and initializes packet->md
in emc_processing() to improve performance.

Since emc_processing() might also be called after recirculation (in
which case the metadata is already valid), an extra parameter is added
to support both cases.

This commits also implements simple prefetching of packet metadata,
to further improve performance.

Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
Acked-by: Andy Zhou <azhou@ovn.org>
Acked-by: Chandran, Sugesh <sugesh.chandran@intel.com>
8 years agocompat: Detect and use nf_ct_frag6_gather().
Joe Stringer [Fri, 8 Jan 2016 01:47:23 +0000 (17:47 -0800)]
compat: Detect and use nf_ct_frag6_gather().

This function is a likely candidate for backporting, and currently
relies on version checks to include the source or not. Grep for the
appropriate functions instead, and include the backport based on that.

Signed-off-by: Joe Stringer <joe@ovn.org>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
8 years agocompat: Detect and use inet_getpeer_v4().
Joe Stringer [Fri, 8 Jan 2016 01:58:59 +0000 (17:58 -0800)]
compat: Detect and use inet_getpeer_v4().

Signed-off-by: Joe Stringer <joe@ovn.org>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
8 years agocompat: Detect and use __skb_dst_copy().
Joe Stringer [Thu, 24 Dec 2015 19:41:40 +0000 (11:41 -0800)]
compat: Detect and use __skb_dst_copy().

Signed-off-by: Joe Stringer <joe@ovn.org>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
8 years agocompat: Detect and use nf_connlabels_get().
Joe Stringer [Thu, 24 Dec 2015 19:34:35 +0000 (11:34 -0800)]
compat: Detect and use nf_connlabels_get().

Signed-off-by: Joe Stringer <joe@ovn.org>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
8 years agocompat: Detect and use nf_ipv6_ops->fragment.
Joe Stringer [Thu, 24 Dec 2015 19:32:38 +0000 (11:32 -0800)]
compat: Detect and use nf_ipv6_ops->fragment.

Signed-off-by: Joe Stringer <joe@ovn.org>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
8 years agocompat: Detect and use struct nf_conntrack_zone.
Joe Stringer [Thu, 24 Dec 2015 19:29:34 +0000 (11:29 -0800)]
compat: Detect and use struct nf_conntrack_zone.

Rather than relying on version checks, detect the presence of this
structure and use it if available.

Signed-off-by: Joe Stringer <joe@ovn.org>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
8 years agocompat: Detect and use inet_frags->lock.
Joe Stringer [Thu, 24 Dec 2015 19:06:18 +0000 (11:06 -0800)]
compat: Detect and use inet_frags->lock.

Prior to ab1c724f6330 ("inet: frag: use seqlock for hash rebuild")
upstream, a rwlock was used when rebuilding inet_frags. Rather than
using a version check to detect this, search for it in the header and
enable the code based on whether it exists.

Signed-off-by: Joe Stringer <joe@ovn.org>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
8 years agocompat: Detect and use inet_frags->frags_work.
Joe Stringer [Thu, 24 Dec 2015 18:54:37 +0000 (10:54 -0800)]
compat: Detect and use inet_frags->frags_work.

Kernels 3.17 and newer have a work queue to evict old fragments, while
older kernel versions use an LRU in the fast path; see upstream commit
b13d3cbfb8e8 ("inet: frag: move eviction of queues to work queue").
This commit fixes the version checking so that rather than enabling the
code for either of these approaches using version checks, it is
triggered based on the presence of the work queue in "struct inet_frags".

Signed-off-by: Joe Stringer <joe@ovn.org>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
8 years agocompat: Detect and use inet_frag_queue->last_in.
Joe Stringer [Thu, 24 Dec 2015 18:40:02 +0000 (10:40 -0800)]
compat: Detect and use inet_frag_queue->last_in.

Kernels 3.17 and older have this field, while newer kernels use the
'flags' field. Detect this in the build in case anyone backports this
change to an older kernel.

Signed-off-by: Joe Stringer <joe@ovn.org>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
8 years agopython: Deal with str and byte differences.
Russell Bryant [Thu, 17 Dec 2015 14:45:58 +0000 (09:45 -0500)]
python: Deal with str and byte differences.

Python 3 has separate types for strings and bytes.  Python 2 used the
same type for both.  We need to convert strings to bytes before writing
them out to a socket.  We also need to convert data read from the socket
to a string.

Signed-off-by: Russell Bryant <russell@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
8 years agopython: Fix object comparisons in Python 3.
Russell Bryant [Thu, 17 Dec 2015 17:55:43 +0000 (12:55 -0500)]
python: Fix object comparisons in Python 3.

Python 3 no longer supports __cmp__.  Instead, we have to implement the
"rich comparison" operators.  We implement __eq__ and __lt__ and use
functools.total_ordering to implement the rest.

In one case, no __cmp__ method was provided and instead relied on the
default behavior provided in Python 2.  We have to implement the
comparisons explicitly for Python 3.

Signed-off-by: Russell Bryant <russell@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
8 years agopython: Don't compare None and int.
Russell Bryant [Thu, 17 Dec 2015 14:56:44 +0000 (09:56 -0500)]
python: Don't compare None and int.

Comparing None to an integer worked in Python 2, but fails in Python 3.

Signed-off-by: Russell Bryant <russell@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
8 years agopython: Remove reamining direct type comparisons.
Russell Bryant [Wed, 16 Dec 2015 21:16:49 +0000 (16:16 -0500)]
python: Remove reamining direct type comparisons.

I've hit several bugs in this Python 3 work where the fix was some code
needed to be converted to use isinstance().  This has been primarily
around deadling with the changes to unicode handling.  Go ahead and
convert the rest of the direct type comparisons to use isinstance(), as
it could avoid a bug I haven't hit yet and it's more Pythonic, anyway.

Signed-off-by: Russell Bryant <russell@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
8 years agopython: Use six.unichr().
Russell Bryant [Wed, 16 Dec 2015 17:19:22 +0000 (12:19 -0500)]
python: Use six.unichr().

six.unichr() is equivalent to unichr() in Python 2
and chr() in Python 3.

Signed-off-by: Russell Bryant <russell@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
8 years agopython: Drop use of sys.maxint.
Russell Bryant [Tue, 15 Dec 2015 21:37:11 +0000 (16:37 -0500)]
python: Drop use of sys.maxint.

sys.maxint does not exist in Python 3, as an int does not have a max
value anymore (except as limited by implementation details and system
resources).

sys.maxsize works as a reasonable substitute as it's the same as
sys.maxint.  The Python 3.0 release notes have this to say:

  The sys.maxint constant was removed, since there is no longer a limit
  to the value of integers. However, sys.maxsize can be used as an
  integer larger than any practical list or string index. It conforms to
  the implementation’s “natural” integer size and is typically the same
  as sys.maxint in previous releases on the same platform (assuming the
  same build options).

sys.maxsize is documented as:

  An integer giving the maximum value a variable of type Py_ssize_t can
  take. It’s usually 2**31 - 1 on a 32-bit platform and 2**63 - 1 on a
  64-bit platform.

Signed-off-by: Russell Bryant <russell@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
8 years agopython: Don't use StringIO directly.
Russell Bryant [Tue, 15 Dec 2015 21:01:38 +0000 (16:01 -0500)]
python: Don't use StringIO directly.

StringIO.StringIO in Python 2 became io.StringIO in Python 3.  Use
six.StringIO which is an alias for the two cases.

Signed-off-by: Russell Bryant <russell@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
8 years agopython: Drop use of types.FunctionType.
Russell Bryant [Tue, 15 Dec 2015 13:51:45 +0000 (08:51 -0500)]
python: Drop use of types.FunctionType.

This code asserted that the callback argument was of type
types.FunctionType.  It's more pythonic to just check that the argument
is callable, and not specifically that it's a function.  There are other
ways to implement a callback than types.FunctionType.

Signed-off-by: Russell Bryant <russell@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>