cascardo/ovs.git
7 years agotests: Fix typo: s/OSVDB/OVSDB/.
Ben Pfaff [Fri, 22 Jul 2016 20:16:05 +0000 (13:16 -0700)]
tests: Fix typo: s/OSVDB/OVSDB/.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Ryan Moats <rmoats@us.ibm.com>
7 years agoovs-ofctl: Fix font in manual.
Ben Pfaff [Fri, 22 Jul 2016 21:33:56 +0000 (14:33 -0700)]
ovs-ofctl: Fix font in manual.

Without this fix, the remainder of the paragraph appears in bold, which was
not intended.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Ryan Moats <rmoats@us.ibm.com>
7 years agoTODO.md: Remove.
Ben Pfaff [Fri, 22 Jul 2016 20:18:09 +0000 (13:18 -0700)]
TODO.md: Remove.

No one has implemented a project from this list in years.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Ryan Moats <rmoats@us.ibm.com>
7 years agoovn: Remove unnecessary conditional statements.
nickcooper-zhangtonghao [Sun, 24 Jul 2016 14:40:35 +0000 (07:40 -0700)]
ovn: Remove unnecessary conditional statements.

It is unnecessary to check ‘chassis_id’ again.

Signed-off-by: nickcooper-zhangtonghao <nickcooper-zhangtonghao@opencloud.tech>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agotest: change replication test to use unix domain socket
Andy Zhou [Wed, 20 Jul 2016 22:25:24 +0000 (15:25 -0700)]
test: change replication test to use unix domain socket

The ovsdb replication feature is not specific to the ovsdb socket types.
Switching the tests to use Unix domain socket simplifies the tests.

Signed-off-by: Andy Zhou <azhou@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
7 years agoovn-controller: eliminate stall in ofctrl state machine
Lance Richardson [Fri, 8 Jul 2016 00:31:08 +0000 (20:31 -0400)]
ovn-controller: eliminate stall in ofctrl state machine

The "ovn -- 2 HVs, 3 LRs connected via LS, static routes"
test case currently exhibits frequent failures. These failures
occur because, at the time that the test packets are sent to
verify forwarding, no flows have been installed in the vswitch
for one of the hypervisors.

The state machine implemented by ofctrl_run() is intended to
iterate as long as progress is being made, either as long as
the state continues to change or as long as packets are being
received.  Unfortunately, the code had a bug: if receiving a
packet caused the state to change, it didn't call the state's
run function again to try to see if it would change the state.
This caused a real problem in the following case:

   1) The state is S_TLV_TABLE_MOD_SENT.
   2) An OFPTYPE_NXT_TLV_TABLE_REPLY message is received.
   3) No event (other than SB probe timer expiration) is expected
      that would unblock poll_block() in the main ovn-controller
      loop.

In such a case, ofctrl_run() would receive the packet and
advance the state, but not call the run function for the new
state, and then leave the state machine paused until the next
event (e.g. a timer event) occurred.

This commit fixes the problem by continuing to iterate the state
machine until the state remains the same and no packet is
received in the same iteration.  Without this fix, around 40
failures are seen out of 100 attempts, with this fix no failures
have been observed in several hundred attempts (using an earlier
version of this patch).

Signed-off-by: Lance Richardson <lrichard@redhat.com>
[blp@ovn.org refactored for clarity]
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Lance Richardson <lrichard@redhat.com>
7 years agoovs-lib: Keep internal interface ip during upgrade.
Daniele Di Proietto [Wed, 22 Jun 2016 02:27:30 +0000 (19:27 -0700)]
ovs-lib: Keep internal interface ip during upgrade.

Commit 9b5422a98f81("ovs-lib: Try to call exit before killing.")
introduced a problem where internal interfaces are destroyed and
recreated, losing their IP address.

Commit 9aad5a5a96ba("ovs-vswitchd: Preserve datapath ports across
graceful shutdown.") fixed the problem by changing ovs-vswitchd
to preserve the ports on `ovs-appctl exit`.  Unfortunately, this fix is
not enough during upgrade from <= 2.5.0, where an old ovs-vswitchd is
running (without the fix) and a new ovs-lib script is performing the
restart.

The problem seem to affect both RHEL and ubuntu.

This commit fixes the upgrade by looking at the running daemon
version and avoid using `ovs-appctl exit` if it's < 2.5.90.

Suggested-by: Gurucharan Shetty <guru@ovn.org>
Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
Acked-by: Gurucharan Shetty <guru@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
7 years agojson: Move from lib to include/openvswitch.
Terry Wilson [Tue, 12 Jul 2016 21:37:34 +0000 (16:37 -0500)]
json: Move from lib to include/openvswitch.

To easily allow both in- and out-of-tree building of the Python
wrapper for the OVS JSON parser (e.g. w/ pip), move json.h to
include/openvswitch. This also requires moving lib/{hmap,shash}.h.

Both hmap.h and shash.h were #include-ing "util.h" even though the
headers themselves did not use anything from there, but rather from
include/openvswitch/util.h. Fixing that required including util.h
in several C files mostly due to OVS_NOT_REACHED and things like
xmalloc.

Signed-off-by: Terry Wilson <twilson@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agoovn-controller: Handle physical changes correctly
Ryan Moats [Fri, 22 Jul 2016 21:54:26 +0000 (21:54 +0000)]
ovn-controller: Handle physical changes correctly

[1] reported increased failure rates in certain tests
with incremental processing (the numbers are the number of failures
seen in 100 tests):

   2  ovn -- vtep: 3 HVs, 1 VIFs/HV, 1 GW, 1 LS
  10  ovn -- 2 HVs, 2 LS, 1 lport/LS, 2 peer LRs
  52  ovn -- 1 HV, 1 LS, 2 lport/LS, 1 LR
  45  ovn -- 1 HV, 2 LSs, 1 lport/LS, 1 LR
  23  ovn -- 2 HVs, 3 LS, 1 lport/LS, 2 peer LRs, static routes
  53  ovn -- 2 HVs, 3 LRs connected via LS, static routes
  32  ovn -- 2 HVs, 2 LRs connected via LS, gateway router
  50  ovn -- icmp_reply: 1 HVs, 2 LSs, 1 lport/LS, 1 LR

These failures were caused by a combination of problems in
handling physical changes:

  1. When a vif was removed, the localvif_to_ofport entry was not
     removed.
  2. When a physical change was detected, ovn-controller would wait
     a poll cycle before processing the logical flow table.

This patch set addresses both of these issues while simultaneously
cleaning up the code in physical.c.  A side effect is a modification
of where OF flows are dumped in the gateway router case that allowed
the root causes of this issue to be found.

With these changes, all of the above tests had a 100/100 success rate.

[1] http://openvswitch.org/pipermail/dev/2016-July/075803.html

Signed-off-by: Ryan Moats <rmoats@us.ibm.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agotests: Add ovsdb lock tests
Andy Zhou [Fri, 22 Jul 2016 20:59:03 +0000 (13:59 -0700)]
tests: Add ovsdb lock tests

Add more ovsdb lock tests.

Signed-off-by: Andy Zhou <azhou@ovn.org>
Acked-by: Ryan Moats <rmoats@us.ibm.com>
Acked-by: Ben Pfaff <blp@ovn.org>
7 years agoovsdb: Add ovsdb-client options for testing lock
Andy Zhou [Fri, 22 Jul 2016 20:49:09 +0000 (13:49 -0700)]
ovsdb: Add ovsdb-client options for testing lock

RFC 7047 lock operation has been fully implemented in ovsdb-server
for a while, but it is not well covered in unit testing. This
patch adds options for the ovsdb-client tool to issue lock operations.
The next patch will make use those options.

Please see ovsdb-client(1) changes for more details.

Signed-off-by: Andy Zhou <azhou@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
7 years agotests: Fix IPFIX test cases issue.
Benli Ye [Thu, 7 Jul 2016 15:17:48 +0000 (23:17 +0800)]
tests: Fix IPFIX test cases issue.

IPFIX statistics 'tx pkts' means the number of successfully
sending IPFIX packets, while 'tx errs' means sending error
IPFIX packets. These two parameters can be affected by whether
listening on port 4739 on local host. This case should be
solved entirely by introducing PARSE_LISTENING_PORT as sFlow,
but it depends on implementing IPFIX packet analysis and it
will take some time. Disable these field first, as IPFIX statistics
check are failed on Windows due to 'tx pkts' and 'tx errs' fields.
Windows marks all packets sending successfully, even if port 4739
on local host is not listened.

Remove XFAIL check for 'Flow IPFIX sanity check - tunnel set',
as this test had “UNEXPECTED PASS” on Windows.

More detail, please refer the following link.
https://www.mail-archive.com/dev@openvswitch.org/msg65229.html

Reported-by: Paul Boca <pboca@cloudbasesolutions.com>
Acked-by: Paul Boca <pboca@cloudbasesolutions.com>
Signed-off-by: Benli Ye <daniely@vmware.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agonetdev-dummy: fix crash with more than one passive connection
Lance Richardson [Wed, 6 Jul 2016 23:39:52 +0000 (19:39 -0400)]
netdev-dummy: fix crash with more than one passive connection

Investigation found that Some of the occasional failures in the
"ovn -- vtep: 3 HVs, 1 VIFs/HV, 1 GW, 1 LS" test case are caused
by ovs-vswitchd crashing with SIGSEGV. It turns out that the
crash occurrs when the number of netdev-dummy passive connections
transitions from 1 to 2.  When xrealloc() copies the array of
dummy_packet_stream structures from the original buffer to a
newly allocated one, the struct ovs_list txq member of the structure
becomes corrupt (e.g. if ovs_list_is_empty() would have returned
false before the copy, it will return true after the copy, which
will lead to a crash when the bogus packet buffer on the list is
dereferenced).

Fix by taking a hint from David Wheeler and adding a level of
indirection.

Signed-off-by: Lance Richardson <lrichard@redhat.com>
[blp@ovn.org folded in an additional bug fix]
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agoovs-pki: Use SHA-512 instead of SHA-1 as message digest.
Ben Pfaff [Sat, 2 Jul 2016 01:05:40 +0000 (18:05 -0700)]
ovs-pki: Use SHA-512 instead of SHA-1 as message digest.

The upcoming OpenSSL 1.1.0 release disables use of SHA-1, which breaks the
OVS unit tests, which use SHA-1.  We last tried to switch to SHA-512 in
2014 with commit 9ff33ca75e9fcc ("ovs-pki: Use SHA-512 instead of MD5 as
message digest."), but we had to downgrade to SHA-1 in commit 4a1f9610682d
("ovs-pki: Use SHA-1 instead of SHA-512 as message digest.") because
XenServer did not support SHA-512.  It has been a few years, so let's try
again.

CC: 828478@bugs.debian.org
Reported-at: https://bugs.debian.org/828478
Reported-by: Kurt Roeckx <kurt@roeckx.be>
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Ryan Moats <rmoats@us.ibm.com>
7 years agotests: Make ovsdb test more robust and faster.
Jarno Rajahalme [Thu, 21 Jul 2016 13:22:18 +0000 (06:22 -0700)]
tests: Make ovsdb test more robust and faster.

Using sleep's is prone to runtime system dependent races, and indeed
this test started consistently failing on my dev VM after an unrelated
change to ovs-vswitchd.  Get git of the sleeps and explicitly wait for
the transaction on ovsdb1 to become visible on ovsdb2.

Also fix the name of the test.

Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Andy Zhou <azhou@ovn.org>
Tested-by: Joe Stringer <joe@ovn.org>
7 years agotests/ovs-monitor-ipsec: Remove --no-wait -vreconnect:emer from ovs-vsctl.
Daniele Di Proietto [Thu, 21 Jul 2016 21:05:11 +0000 (14:05 -0700)]
tests/ovs-monitor-ipsec: Remove --no-wait -vreconnect:emer from ovs-vsctl.

This fixes a sporadic failure of the testcase, where ovsdb-server.log
contains:

2016-07-21T21:08:22.279Z|00003|jsonrpc|WARN|unix: send error: Broken pipe
2016-07-21T21:08:22.279Z|00004|reconnect|WARN|unix: connection dropped (Broken pipe)

I'm not sure what was the purpose of the original "--no-wait
-vreconnect:emer", but the test seem to run fine without it.

Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agoovn-controller: Fix potential null pointer dereferences.
Ben Pfaff [Wed, 20 Jul 2016 21:54:33 +0000 (14:54 -0700)]
ovn-controller: Fix potential null pointer dereferences.

Found by inspection.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Andy Zhou <azhou@ovn.org>
7 years agoovn-northd: Avoid redundant lookup of logical router port peer.
Ben Pfaff [Tue, 19 Jul 2016 16:03:21 +0000 (09:03 -0700)]
ovn-northd: Avoid redundant lookup of logical router port peer.

An ovn_port keeps track of its peer in its 'peer' member, but the code
updated by this commit instead did a redundant lookup of the peer.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Gurucharan Shetty <guru@ovn.org>
7 years agoovn-northd: Only peer router ports to other router ports.
Ben Pfaff [Tue, 19 Jul 2016 15:36:35 +0000 (08:36 -0700)]
ovn-northd: Only peer router ports to other router ports.

A router port's "peer", if set, must point to another router port, but the
code as written also accepted switch ports.  This caused problems when
switch ports were actually specified.

Reported-by: Gurucharan Shetty <guru@ovn.org>
Reported-at: http://openvswitch.org/pipermail/dev/2016-July/075524.html
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Gurucharan Shetty <guru@ovn.org>
7 years agonetdev-provider: Apply batch object to netdev provider.
William Tu [Tue, 19 Jul 2016 00:05:35 +0000 (17:05 -0700)]
netdev-provider: Apply batch object to netdev provider.

Commit 1895cc8dbb64 ("dpif-netdev: create batch object") introduces
batch process functions and 'struct dp_packet_batch' to associate with
batch-level metadata.  This patch applies the packet batch object to
the netdev provider interface (dummy, Linux, BSD, and DPDK) so that
batch APIs can be used in providers.  With batch metadata visible in
providers, optimizations can be introduced at per-batch level instead
of per-packet.

Tested-at: https://travis-ci.org/williamtu/ovs-travis/builds/145694197
Signed-off-by: William Tu <u9012063@gmail.com>
Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
7 years agodebian: Fix OVS upgrade dependencies.
Joe Stringer [Fri, 17 Jun 2016 19:42:30 +0000 (12:42 -0700)]
debian: Fix OVS upgrade dependencies.

Commit 0dcc739e7a28 ("debian: Move ovs-lib to openvswitch-common.")
shifted a file between debian packages, but didn't update the
destination package annotations to indicate that it replaces a file
from earlier versions of the source package.

As a result, if one installs openvswitch-switch-2.5* (or earlier) and
then tries to upgrade to openvswitch-{switch,common}-2.5.90+, the
install of openvswitch-common will fail like the following:

dpkg: error processing archive
/tmp/openvswitch-common_2.5.90-1_amd64.deb (--install):
trying to overwrite '/usr/share/openvswitch/scripts/ovs-lib', which is
also in package openvswitch-switch 2.5.0-1

Fix the issue by adding "Replaces" and "Breaks" tags to the new
openvswitch-common section of debian/control.

Fixes: 0dcc739e7a28 ("debian: Move ovs-lib to openvswitch-common.")
Signed-off-by: Joe Stringer <joe@ovn.org>
Acked-by: Daniele Di Proietto <diproiettod@vmware.com>
7 years agodatapath-windows: Fix various Geneve bugs
Yin Lin [Thu, 14 Jul 2016 03:21:19 +0000 (20:21 -0700)]
datapath-windows: Fix various Geneve bugs

Signed-off-by: Yin Lin <linyi@vmware.com>
Acked-by: Nithin Raju <nithin@vmware.com>
Acked-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Signed-off-by: Gurucharan Shetty <guru@ovn.org>
7 years agosystem-traffic: Fix up FTP tests.
Joe Stringer [Tue, 19 Jul 2016 19:54:08 +0000 (12:54 -0700)]
system-traffic: Fix up FTP tests.

Prior to commit b87a5aacefe2 ("datapath: Fix cached ct with helper."),
we were relying on automatic helpers to ensure that FTP connections were
tracked correctly, regardless of the flows that existed in the datapath.
Now, we can drop the automatic helpers in the root namespace and still
have related connections work correctly. Also, the ALG should only be
specified when committing the connection. Update the rules.

Signed-off-by: Joe Stringer <joe@ovn.org>
Acked-by: Jarno Rajahalme <jarno@ovn.org>
7 years agosystem-traffic: Remove unnecessary priorities.
Joe Stringer [Tue, 19 Jul 2016 19:54:07 +0000 (12:54 -0700)]
system-traffic: Remove unnecessary priorities.

Signed-off-by: Joe Stringer <joe@ovn.org>
Acked-by: Jarno Rajahalme <jarno@ovn.org>
7 years agosystem-traffic: Update tests in flat tables.
Joe Stringer [Tue, 19 Jul 2016 19:54:06 +0000 (12:54 -0700)]
system-traffic: Update tests in flat tables.

A few of the earlier tests were written with all flows in a single flat
table. While this is a possible way to write your flows to use
connection tracking, it's easier to understand if the processing
proceeds forward from one table to the next. Update these tests.

Signed-off-by: Joe Stringer <joe@ovn.org>
Acked-by: Jarno Rajahalme <jarno@ovn.org>
7 years agotunneling: get skb marking to work properly with tunnels
Ansis Atteka [Thu, 21 Jul 2016 11:49:40 +0000 (04:49 -0700)]
tunneling: get skb marking to work properly with tunnels

There are two issues that this patch fixes:
1. it was impossible to set skb mark at all through
   NXM_NX_PKT_MARK register for tunnel packets; AND
2. ipsec_xxx tunnels would not be marked with the default
   IPsec mark (broken by d23df9a87 "lib/odp: Use masked set
   actions.").

This patch also adds anti-regression tests to prevent such
breakages in the future.

Signed-off-by: Ansis Atteka <aatteka@ovn.org>
VMware-BZ: #1653178
Acked-by: Jarno Rajahalme <jarno@ovn.org>
7 years agoIPsec: refactor out some code in OVS_MONITOR_IPSEC_START macro
Ansis Atteka [Thu, 21 Jul 2016 11:49:40 +0000 (04:49 -0700)]
IPsec: refactor out some code in OVS_MONITOR_IPSEC_START macro

This OVS_MONITOR_IPSEC_START macro will be helpful in the next
patch where it will be used also from tests/tunnel.at file to test
that skb marking happens correctly.  Otherwise, without ovs-monitor-ipsec
running the ovs-vswitchd would refuse to configure ipsec_XXX tunnels.

Signed-off-by: Ansis Atteka <aatteka@ovn.org>
Acked-by: Jarno Rajahalme <jarno@ovn.org>
7 years agoRename nbs/nbr port names to nbsp/nbrp.
Hui Kang [Tue, 19 Jul 2016 18:36:00 +0000 (14:36 -0400)]
Rename nbs/nbr port names to nbsp/nbrp.

These variables indicate ports in nb switches or routers.

Signed-off-by: Hui Kang <kangh@us.ibm.com>
Signed-off-by: Justin Pettit <jpettit@ovn.org>
7 years agoovn: Apply ACL changes to existing connections.
Russell Bryant [Thu, 30 Jun 2016 20:14:05 +0000 (16:14 -0400)]
ovn: Apply ACL changes to existing connections.

Prior to this commit, once a connection had been committed to the
connection tracker, the connection would continue to be allowed, even
if the policy defined in the ACL table changed.  This patch changes
the implementation so that existing connections are affected by policy
changes.

The implementation is based on the suggested approach in this mailing
list thread:

    http://openvswitch.org/pipermail/dev/2016-February/065716.html

Instead of always allowing packets associated with an established
connection, we now put all packets in the request direction through
the flows generated based on OVN ACLs.  If a packet associated with an
established connection hits a "drop" ACL, that means we have
encountered a policy change and should drop packets associated with
this connection from now on.  We handle this by setting "ct_label" on
the associated connection tracking entry.

These changes also account for re-allowing a known connection after
ct_label had been set on it. This can happen if you delete an ACL and
then re-create it while connection state is still known.

The proposal on the mailing list also discussed the idea that
ovn-controller could periodically sweep the connection tracker and
delete entries with ct_label set.  That is not implemented in this
patch.  Instead, we rely on connections dying since we're dropping
its packets and then allowing the connection tracking entry to
eventually time out.  More proactively clearing them out could be a
future enhancement.

As a realistic example of how this works, consider this security policy
from an OpenStack+OVN development environment.

    +---------+-----------------------+
    | name    | security_group_rules  |
    +---------+-----------------------+
    | default | egress, IPv4          |
    |         | egress, IPv6          |
    |         | ingress, IPv4, 22/tcp |
    |         | ingress, IPv4, icmp   |
    +---------+-----------------------+

The OpenStack Neutron plugin creates ACLs that drop traffic by default
and higher priority ACLs for each type of traffic that is allowed.  In
this case, the ACLs for a port using the "default" security group are:

  from-lport  1002 (inport == "23706cbe-98b6-4a8b-b78b-a8e12e6d773f" && ip4) allow-related
  from-lport  1002 (inport == "23706cbe-98b6-4a8b-b78b-a8e12e6d773f" && ip6) allow-related
  from-lport  1001 (inport == "23706cbe-98b6-4a8b-b78b-a8e12e6d773f" && ip) drop
    to-lport  1002 (outport == "23706cbe-98b6-4a8b-b78b-a8e12e6d773f" && ip4 && icmp4) allow-related
    to-lport  1002 (outport == "23706cbe-98b6-4a8b-b78b-a8e12e6d773f" && ip4 && tcp && tcp.dst == 22) allow-related
    to-lport  1001 (outport == "23706cbe-98b6-4a8b-b78b-a8e12e6d773f" && ip) drop

which results in the following logical flows:

  table=3 (ls_in_pre_acl      ), priority=100  , match=(ip), action=(reg0[0] = 1; next;)
  table=3 (ls_in_pre_acl      ), priority=0    , match=(1), action=(next;)
  table=4 (ls_in_pre_lb       ), priority=0    , match=(1), action=(next;)
  table=5 (ls_in_pre_stateful ), priority=100  , match=(reg0[0] == 1), action=(ct_next;)
  table=5 (ls_in_pre_stateful ), priority=0    , match=(1), action=(next;)
  table=6 (ls_in_acl          ), priority=65535, match=(!ct.est && ct.rel && !ct.new && !ct.inv && ct_label[0] == 0), action=(next;)
  table=6 (ls_in_acl          ), priority=65535, match=(ct.est && !ct.rel && !ct.new && !ct.inv && ct.rpl && ct_label[0] == 0), action=(next;)
  table=6 (ls_in_acl          ), priority=65535, match=(ct.inv || (ct.est && ct.rpl && ct_label[0] == 1)), action=(drop;)
  table=6 (ls_in_acl          ), priority=65535, match=(nd), action=(next;)
  table=6 (ls_in_acl          ), priority=2002 , match=(!ct.new && ct.est && !ct.rpl && ct_label[0] == 0 && (inport == "23706cbe-98b6-4a8b-b78b-a8e12e6d773f" && ip4 && (ip4.dst == 255.255.255.255 || ip4.dst == 10.0.0.0/24) && udp && udp.src == 68 && udp.dst == 67)), action=(next;)
  table=6 (ls_in_acl          ), priority=2002 , match=(!ct.new && ct.est && !ct.rpl && ct_label[0] == 0 && (inport == "23706cbe-98b6-4a8b-b78b-a8e12e6d773f" && ip4)), action=(next;)
  table=6 (ls_in_acl          ), priority=2002 , match=(!ct.new && ct.est && !ct.rpl && ct_label[0] == 0 && (inport == "23706cbe-98b6-4a8b-b78b-a8e12e6d773f" && ip6)), action=(next;)
  table=6 (ls_in_acl          ), priority=2002 , match=(((ct.new && !ct.est) || (!ct.new && ct.est && !ct.rpl && ct_label[0] == 1)) && (inport == "23706cbe-98b6-4a8b-b78b-a8e12e6d773f" && ip4 && (ip4.dst == 255.255.255.255 || ip4.dst == 10.0.0.0/24) && udp && udp.src == 68 && udp.dst == 67)), action=(reg0[1] = 1; next;)
  table=6 (ls_in_acl          ), priority=2002 , match=(((ct.new && !ct.est) || (!ct.new && ct.est && !ct.rpl && ct_label[0] == 1)) && (inport == "23706cbe-98b6-4a8b-b78b-a8e12e6d773f" && ip4)), action=(reg0[1] = 1; next;)
  table=6 (ls_in_acl          ), priority=2002 , match=(((ct.new && !ct.est) || (!ct.new && ct.est && !ct.rpl && ct_label[0] == 1)) && (inport == "23706cbe-98b6-4a8b-b78b-a8e12e6d773f" && ip6)), action=(reg0[1] = 1; next;)
  table=6 (ls_in_acl          ), priority=2001 , match=((!ct.est || (ct.est && ct_label[0] == 1)) && (inport == "23706cbe-98b6-4a8b-b78b-a8e12e6d773f" && ip)), action=(drop;)
  table=6 (ls_in_acl          ), priority=2001 , match=(ct.est && ct_label[0] == 0 && (inport == "23706cbe-98b6-4a8b-b78b-a8e12e6d773f" && ip)), action=(ct_commit(ct_label=1/1);)
  table=6 (ls_in_acl          ), priority=1    , match=(ip && (!ct.est || (ct.est && ct_label[0] == 1))), action=(reg0[1] = 1; next;)
  table=6 (ls_in_acl          ), priority=0    , match=(1), action=(next;)
  table=7 (ls_in_lb           ), priority=0    , match=(1), action=(next;)
  table=8 (ls_in_stateful     ), priority=100  , match=(reg0[1] == 1), action=(ct_commit(ct_label=0/1); next;)
  table=8 (ls_in_stateful     ), priority=100  , match=(reg0[2] == 1), action=(ct_lb;)
  table=8 (ls_in_stateful     ), priority=0    , match=(1), action=(next;)

  table=0 (ls_out_pre_lb      ), priority=0    , match=(1), action=(next;)
  table=1 (ls_out_pre_acl     ), priority=110  , match=(ip && outport == "351f0012-0c13-4330-b471-b0d4719c5031"), action=(next;)
  table=1 (ls_out_pre_acl     ), priority=110  , match=(ip && outport == "4e0e294d-e54a-400c-a240-f121175904c2"), action=(next;)
  table=1 (ls_out_pre_acl     ), priority=110  , match=(nd), action=(next;)
  table=1 (ls_out_pre_acl     ), priority=100  , match=(ip), action=(reg0[0] = 1; next;)
  table=1 (ls_out_pre_acl     ), priority=0    , match=(1), action=(next;)
  table=2 (ls_out_pre_stateful), priority=100  , match=(reg0[0] == 1), action=(ct_next;)
  table=2 (ls_out_pre_stateful), priority=0    , match=(1), action=(next;)
  table=3 (ls_out_lb          ), priority=0    , match=(1), action=(next;)
  table=4 (ls_out_acl         ), priority=65535, match=(!ct.est && ct.rel && !ct.new && !ct.inv && ct_label[0] == 0), action=(next;)
  table=4 (ls_out_acl         ), priority=65535, match=(ct.est && !ct.rel && !ct.new && !ct.inv && ct.rpl && ct_label[0] == 0), action=(next;)
  table=4 (ls_out_acl         ), priority=65535, match=(ct.inv || (ct.est && ct.rpl && ct_label[0] == 1)), action=(drop;)
  table=4 (ls_out_acl         ), priority=65535, match=(nd), action=(next;)
  table=4 (ls_out_acl         ), priority=2002 , match=(!ct.new && ct.est && !ct.rpl && ct_label[0] == 0 && (outport == "23706cbe-98b6-4a8b-b78b-a8e12e6d773f" && ip4 && icmp4)), action=(next;)
  table=4 (ls_out_acl         ), priority=2002 , match=(!ct.new && ct.est && !ct.rpl && ct_label[0] == 0 && (outport == "23706cbe-98b6-4a8b-b78b-a8e12e6d773f" && ip4 && ip4.src == $as_ip4_85300131_274c_492c_a000_b1782315196d)), action=(next;)
  table=4 (ls_out_acl         ), priority=2002 , match=(!ct.new && ct.est && !ct.rpl && ct_label[0] == 0 && (outport == "23706cbe-98b6-4a8b-b78b-a8e12e6d773f" && ip4 && ip4.src == 10.0.0.0/24 && udp && udp.src == 67 && udp.dst == 68)), action=(next;)
  table=4 (ls_out_acl         ), priority=2002 , match=(!ct.new && ct.est && !ct.rpl && ct_label[0] == 0 && (outport == "23706cbe-98b6-4a8b-b78b-a8e12e6d773f" && ip6 && ip6.src == $as_ip6_85300131_274c_492c_a000_b1782315196d)), action=(next;)
  table=4 (ls_out_acl         ), priority=2002 , match=(((ct.new && !ct.est) || (!ct.new && ct.est && !ct.rpl && ct_label[0] == 1)) && (outport == "23706cbe-98b6-4a8b-b78b-a8e12e6d773f" && ip4 && icmp4)), action=(reg0[1] = 1; next;)
  table=4 (ls_out_acl         ), priority=2002 , match=(((ct.new && !ct.est) || (!ct.new && ct.est && !ct.rpl && ct_label[0] == 1)) && (outport == "23706cbe-98b6-4a8b-b78b-a8e12e6d773f" && ip4 && ip4.src == $as_ip4_85300131_274c_492c_a000_b1782315196d)), action=(reg0[1] = 1; next;)
  table=4 (ls_out_acl         ), priority=2002 , match=(((ct.new && !ct.est) || (!ct.new && ct.est && !ct.rpl && ct_label[0] == 1)) && (outport == "23706cbe-98b6-4a8b-b78b-a8e12e6d773f" && ip4 && ip4.src == 10.0.0.0/24 && udp && udp.src == 67 && udp.dst == 68)), action=(reg0[1] = 1; next;)
  table=4 (ls_out_acl         ), priority=2002 , match=(((ct.new && !ct.est) || (!ct.new && ct.est && !ct.rpl && ct_label[0] == 1)) && (outport == "23706cbe-98b6-4a8b-b78b-a8e12e6d773f" && ip6 && ip6.src == $as_ip6_85300131_274c_492c_a000_b1782315196d)), action=(reg0[1] = 1; next;)
  table=4 (ls_out_acl         ), priority=2001 , match=((!ct.est || (ct.est && ct_label[0] == 1)) && (outport == "23706cbe-98b6-4a8b-b78b-a8e12e6d773f" && ip)), action=(drop;)
  table=4 (ls_out_acl         ), priority=2001 , match=(ct.est && ct_label[0] == 0 && (outport == "23706cbe-98b6-4a8b-b78b-a8e12e6d773f" && ip)), action=(ct_commit(ct_label=1/1);)
  table=4 (ls_out_acl         ), priority=1    , match=(ip && (!ct.est || (ct.est && ct_label[0] == 1))), action=(reg0[1] = 1; next;)
  table=4 (ls_out_acl         ), priority=0    , match=(1), action=(next;)
  table=5 (ls_out_stateful    ), priority=100  , match=(reg0[1] == 1), action=(ct_commit(ct_label=0/1); next;)
  table=5 (ls_out_stateful    ), priority=100  , match=(reg0[2] == 1), action=(ct_lb;)
  table=5 (ls_out_stateful    ), priority=0    , match=(1), action=(next;)

One way I tested this by leaving ping running, ensuring that it was
blocked when the rule for ICMP was deleted, and then re-allowed when
the rule allowing ICMP was restored.  In this case, the ICMP
connection is still known by the connection tracker, but the flows
ensure that ct_label gets reset back to 0.

Reported-by: Xiao Li Xu <xiaolixu@cn.ibm.com>
Reported-at: https://bugs.launchpad.net/networking-ovn/+bug/1536080
Suggested-by: Justin Pettit <jpettit@ovn.org>
Signed-off-by: Russell Bryant <russell@ovn.org>
Acked-by: Han Zhou <zhouhan@gmail.com>
Acked-by: Ben Pfaff <blp@ovn.org>
Acked-by: Justin Pettit <jpettit@ovn.org>
Tested-by: Babu Shanmugam <bschanmu@redhat.com>
7 years agopackets: Fix in6_is_lla() on systems without s6_addr32 defined.
Justin Pettit [Wed, 20 Jul 2016 06:01:29 +0000 (23:01 -0700)]
packets: Fix in6_is_lla() on systems without s6_addr32 defined.

Fixes: 6d1a4f16 ("packets: Add in6_is_lla() function.")
Reported-by: Ben Pfaff <blp@ovn.org>
Signed-off-by: Justin Pettit <jpettit@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
7 years agoovn-util: Add solicited node addresses to ipv6_netaddr.
Justin Pettit [Thu, 23 Jun 2016 01:20:08 +0000 (18:20 -0700)]
ovn-util: Add solicited node addresses to ipv6_netaddr.

Every IPv6 host has a link-local solicited node multicast address for
neighbor discovery.  This commit defines the solicited node address for
each IPv6 address added to a logical switch or router port.

Signed-off-by: Justin Pettit <jpettit@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
7 years agopackets: Add in6_is_lla() function.
Justin Pettit [Sun, 26 Jun 2016 05:22:02 +0000 (22:22 -0700)]
packets: Add in6_is_lla() function.

Checks whether the supplied IPv6 address is a link local address.

This will have a caller in a future commit.

Signed-off-by: Justin Pettit <jpettit@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
7 years agopackets: Define RSO flags.
Justin Pettit [Wed, 6 Jul 2016 23:27:57 +0000 (16:27 -0700)]
packets: Define RSO flags.

Use #define's as opposed to magic numbers.

Signed-off-by: Justin Pettit <jpettit@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
7 years agopackets: Rename "rco_flags" to "rso_flags".
Justin Pettit [Wed, 6 Jul 2016 23:19:40 +0000 (16:19 -0700)]
packets: Rename "rco_flags" to "rso_flags".

I presume the flags are supposed to map to neighbor discovery
advertisement "Router", "Solicited", and "Override" flags, which would
be "rso" instead of "rco".

Signed-off-by: Justin Pettit <jpettit@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
7 years agopackets: Introduce xor and is_zero functions on IPv6 addresses.
Justin Pettit [Thu, 23 Jun 2016 01:17:07 +0000 (18:17 -0700)]
packets: Introduce xor and is_zero functions on IPv6 addresses.

These will have callers later.

This also rewrites ipv6_addr_bitand() to use newly defined macros.

Co-authored-by: Ben Pfaff <blp@ovn.org>
Signed-off-by: Justin Pettit <jpettit@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
7 years agoovn-northd: Ensure that flows are added to correct types of datapaths.
Ben Pfaff [Tue, 19 Jul 2016 16:07:13 +0000 (09:07 -0700)]
ovn-northd: Ensure that flows are added to correct types of datapaths.

A DP_TYPE_SWITCH_* flow should only be added to a logical switch datapath,
and a DP_TYPE_ROUTER_* flow should only be added to a logical router
datapath, but the code previously did not verify this and it caused a
problem in practice.

Suggested-by: Guru Shetty <guru@ovn.org>
Suggested-at: http://openvswitch.org/pipermail/dev/2016-July/075557.html
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agostream-unix: only use path-based socket names
Thadeu Lima de Souza Cascardo [Tue, 19 Jul 2016 20:05:51 +0000 (17:05 -0300)]
stream-unix: only use path-based socket names

FreeBSD returns a socklen of sockaddr_storage when doing an accept on an unix
STREAM socket. The current code will assume it means a sun_path larger than 0.

That breaks some tests like the one below which don't expect to find "unix::" on
the logs.

As a Linux abstract address would not have a more useful name either, it's
better to check that sun_path starts with a non-zero byte and return 0 length in
case it doesn't.

402: ovs-ofctl replace-flows with --bundle      FAILED (ovs-ofctl.at:2928)
2016-07-08T12:44:30.068Z|00020|vconn|DBG|unix:: sent (Success): OFPT_HELLO (OF1.6) (xid=0x1):

Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agoovn-controller: Add incremental processing to lflow_run and physical_run
Ryan Moats [Mon, 18 Jul 2016 21:21:17 +0000 (16:21 -0500)]
ovn-controller: Add incremental processing to lflow_run and physical_run

This code changes to allow incremental processing of the
logical flow and physical binding tables whenver possible.

Note: flows created by physical_run for multicast_groups are
*NOT* handled incrementally due to to be solved issues
with GWs and local routers.

Signed-off-by: Ryan Moats <rmoats@us.ibm.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agoofctrl: Refine treatment of duplicate flows in ofctrl_add_flow().
Ben Pfaff [Wed, 20 Jul 2016 00:02:55 +0000 (17:02 -0700)]
ofctrl: Refine treatment of duplicate flows in ofctrl_add_flow().

It's better to use the newer actions, in cases where the actions for
duplicate flows differ, because on balance they are more likely to be
correct.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Ryan Moats <rmoats@us.ibm.com>
7 years agoovsdb: Add unixctl commands for OVSDB replication
Mario Cabrera [Tue, 19 Jul 2016 21:54:51 +0000 (14:54 -0700)]
ovsdb: Add unixctl commands for OVSDB replication

Set and get the server to replicate from:

    ovsdb-server/set-remote-ovsdb-server {server}
    ovsdb-server/get-remote-ovsdb-server

Set and get the replicated table blacklist:

    ovsdb-server/set-sync-excluded-tables {DB:table,...}
    ovsdb-server/get-sync-excluded-tables

Connect to the configured server and start replication:

    ovsdb-server/connect-remote-ovsdb-server

Disconnect from the remote server and stop replication, without dropping
the replicated data:

    ovsdb-server/disconnect-remote-ovsdb-server

Signed-off-by: Mario Cabrera <mario.cabrera@hpe.com>
Signed-off-by: Andy Zhou <azhou@ovn.org>
Acked-by: Andy Zhou <azhou@ovn.org>
7 years agodatapath: Add support for kernel 4.5
Pravin B Shelar [Mon, 18 Jul 2016 02:24:07 +0000 (19:24 -0700)]
datapath: Add support for kernel 4.5

Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
7 years agoovn-sbctl: eliminate a spurious test case error cause
Lance Richardson [Thu, 7 Jul 2016 21:30:01 +0000 (17:30 -0400)]
ovn-sbctl: eliminate a spurious test case error cause

The "ovn-sbctl" test fails occasionally due to log messages
similar to these:

  jsonrpc|WARN|unix: receive error: Connection reset by peer
  reconnect|WARN|unix: connection dropped (Connection reset by peer)

Since we're already ignoring "Broken pipe" messages in this test
case, and the difference between EPIPE and ECONNRESET on send
is simply a matter of whether the peer had unconsumed data
in its receive buffer when the peer socket was closed, it should
be OK to ignore "reset by peer" logs as well.

This same type of failure has been observed in ovs-nbctl and
ovn-vtep-controller tests, so fix it there as well.

Signed-off-by: Lance Richardson <lrichard@redhat.com>
Acked-by: Ryan Moats <rmoats@us.ibm.com>
Signed-off-by: Russell Bryant <russell@ovn.org>
7 years agoovn-northd.8.xml: Remove outdated flow.
Russell Bryant [Fri, 15 Jul 2016 16:36:18 +0000 (12:36 -0400)]
ovn-northd.8.xml: Remove outdated flow.

This flow was a duplicate and was removed in a previous commit.  Update
the docs to reflect the removal.

Fixes: 6a9d35dde4a9 ("ovn-northd: Remove extraneous ip4 mulicast logical flow.")
Signed-off-by: Russell Bryant <russell@ovn.org>
Acked-by: Ryan Moats <rmoats@us.ibm.com>
7 years agoovn: Add datapath column to the MAC_Binding table
Liran Schour [Mon, 18 Jul 2016 08:45:59 +0000 (11:45 +0300)]
ovn: Add datapath column to the MAC_Binding table

This will allow ovn-controller to conditionally monitor MAC_Binding table
according to datapath column.

Signed-off-by: Liran Schour <lirans@il.ibm.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agolib: add monitor_cond_change API to C IDL lib
Liran Schour [Mon, 18 Jul 2016 08:45:58 +0000 (11:45 +0300)]
lib: add monitor_cond_change API to C IDL lib

Add to IDL API that allows the user to add and remove clauses on a table's condition
iteratively. IDL maintain tables condition and send monitor_cond_change to the server
upon condition change.
Add tests for conditional monitoring to IDL.

Signed-off-by: Liran Schour <lirans@il.ibm.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agopython: move Python idl to work with monitor_cond
Liran Schour [Mon, 18 Jul 2016 08:45:57 +0000 (11:45 +0300)]
python: move Python idl to work with monitor_cond

Python idl works now with "monitor_cond" method. Add test
for backward compatibility with old "monitor" method.

Signed-off-by: Liran Schour <lirans@il.ibm.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agolib: add to ovsdb-idl monitor_id
Liran Schour [Mon, 18 Jul 2016 08:45:56 +0000 (11:45 +0300)]
lib: add to ovsdb-idl monitor_id

IDL uses now a uuid to specify a monitoring session that is being
sent to the server on "monitor_cond" request.
This uuid will be used to issue ongoing "monitor_cond_change" requests
for this monitoring session.

Signed-off-by: Liran Schour <lirans@il.ibm.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agoovsdb-client: support monitor-cond method
Liran Schour [Mon, 18 Jul 2016 08:45:55 +0000 (11:45 +0300)]
ovsdb-client: support monitor-cond method

Add monitor_cond method to ovsdb-client. Enable testing of monitor_cond_change
via unixctl command.Add unit tests for monitor_cond and monitor_cond_change.
See ovsdb-client(1) man page for details.
Replace monitor2 with monitor_cond.

Signed-off-by: Liran Schour <lirans@il.ibm.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agoovsdb: optimize match_any_clause() condition evaluation
Liran Schour [Mon, 18 Jul 2016 08:45:54 +0000 (11:45 +0300)]
ovsdb: optimize match_any_clause() condition evaluation

Optimize ovsdb_condition_match_any_clause() to be in O(#columns in condition)
and not O(#clauses) in case condition's caluses function is boolean or "==".

Signed-off-by: Liran Schour <lirans@il.ibm.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agoovsdb: enable jsonrpc-server to service "monitor_cond_change" request
Liran Schour [Mon, 18 Jul 2016 08:45:53 +0000 (11:45 +0300)]
ovsdb: enable jsonrpc-server to service "monitor_cond_change" request

ovsdb-server now accepts "monitor_cond_change" request. After conditions change
we compose update notification according to the current state of the
database without using a change list before sending reply to the monitor_cond_change
request.
Sees ovsdb-server (1) man page for details of monitor_cond_change.

Signed-off-by: Liran Schour <lirans@il.ibm.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agoovsdb: generate update notifications for monitor_cond session
Liran Schour [Mon, 18 Jul 2016 08:45:52 +0000 (11:45 +0300)]
ovsdb: generate update notifications for monitor_cond session

Hold session's conditions in ovsdb_monitor_session_condition. Pass it
to ovsdb_monitor for generating "update2" notifications.
Add functions that can generate "update2" notification for a
"monitor_cond" session.
JSON cache is enabled only for session's with true condition only.
"monitor_cond" and "monitor_cond_change" are RFC 7047 extensions
described by ovsdb-server(1) manpage.

Performance evaluation:
OVN is the main candidate for conditional monitoring usage. It is clear that
conditional monitoring reduces computation on the ovn-controller (client) side
due to the reduced size of flow tables and update messages. Performance
evaluation shows up to 75% computation reduction.
However, performance evaluation shows also a reduction in computation on the SB
ovsdb-server side proportional to the degree that each logical network is
spread over physical hosts in the DC. Evaluation shows that in a realistic
scenarios there is a computation reduction also in the server side.

Evaluation on simulated environment of 50 hosts and 1000 logical ports shows
the following results (cycles #):

LN spread over # hosts|    master    | patch        | change
-------------------------------------------------------------
            1         | 24597200127  | 24339235374  |  1.0%
            6         | 23788521572  | 19145229352  | 19.5%
           12         | 23886405758  | 17913143176  | 25.0%
           18         | 25812686279  | 23675094540  |  8.2%
           24         | 28414671499  | 24770202308  | 12.8%
           30         | 31487218890  | 28397543436  |  9.8%
           36         | 36116993930  | 34105388739  |  5.5%
           42         | 37898342465  | 38647139083  | -1.9%
           48         | 41637996229  | 41846616306  | -0.5%
           50         | 41679995357  | 43455565977  | -4.2%

Signed-off-by: Liran Schour <lirans@il.ibm.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agoovsdb: allow unmonitored columns in condition evaluation
Liran Schour [Mon, 18 Jul 2016 08:45:51 +0000 (11:45 +0300)]
ovsdb: allow unmonitored columns in condition evaluation

This commit allows to add unmonitored columns to a monitored table
due to condition update.
It will be used to evaluate conditions on unmonitored columns.
Update notification includes only monitored columns.
Due to the limited number of columns, we do not remove unused unmonitored
columns on condition update for code simplicity.

Signed-off-by: Liran Schour <lirans@il.ibm.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agoovsdb: add conditions utilities to support monitor_cond
Liran Schour [Mon, 18 Jul 2016 08:45:50 +0000 (11:45 +0300)]
ovsdb: add conditions utilities to support monitor_cond

Change ovsdb_condition to be a 3-element json array or a boolean value (see ovsdb-server
man page).
Conditions utilities will be used later for conditional monitoring.

Signed-off-by: Liran Schour <lirans@il.ibm.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agoovsdb: create column index mapping between ovsdb row to monitor row
Liran Schour [Mon, 18 Jul 2016 08:45:49 +0000 (11:45 +0300)]
ovsdb: create column index mapping between ovsdb row to monitor row

Columns indexing is different in ovsdb_row then in ovsdb_monitor_row.
We need mapping between the 2 for condition evaluation.

Signed-off-by: Liran Schour <lirans@il.ibm.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agoovn-controller: Persist ovn flow tables
Ryan Moats [Mon, 18 Jul 2016 21:21:16 +0000 (16:21 -0500)]
ovn-controller: Persist ovn flow tables

Ensure that ovn flow tables are persisted so that changes to
them chan be applied incrementally - this is a prereq for
making lflow_run and physical_run incremental.

As part of this change, add a one-to-many hindex for finding
desired flows by their parent's UUID.  Also extend the mapping
by match from one-to-one to one-to-many.

Signed-off-by: Ryan Moats <rmoats@us.ibm.com>
[blp@ovn.org adjusted style and comments and added
 HINDEX_FOR_EACH_WITH_HASH_SAFE]
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agodatapath: Add support for kernel 4.4
Pravin B Shelar [Mon, 18 Jul 2016 22:13:15 +0000 (15:13 -0700)]
datapath: Add support for kernel 4.4

Most of changes are related to ip-fragment API and genetlink
API changes.

Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
7 years agoovs-vsctl: Add another Flow_Table example.
Ben Pfaff [Mon, 18 Jul 2016 17:55:05 +0000 (10:55 -0700)]
ovs-vsctl: Add another Flow_Table example.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Ryan Moats <rmoats@us.ibm.com>
7 years agoovn-controller: Drop remove_local_datapath_by_binding().
Russell Bryant [Mon, 18 Jul 2016 20:25:20 +0000 (16:25 -0400)]
ovn-controller: Drop remove_local_datapath_by_binding().

ovn-controller has an hmap called 'local_datapaths' which tracks
all OVN datapaths that have at least one port binding on the local
chassis.  This patch corrects the case where a port binding row is
deleted from the southbound DB while it's still bound to the chassis,
meaning it was deleted before the ovs interface was deleted.

The previous code tried to handle this case by calling
remove_local_datapath_by_binding().  The function appears to try
to look up local_datapath by the binding UUID.  If it finds it,
it will delete the local datapath entry.  On the surface, this
looks like a bug where it deletes a local datapath entry even
when there could be other ports still bound to the chassis.
The reality is that this function was always a no-op.  It was
doing a lookup using a different hash value than how local_datapath
entries are actually hashed. In practice, this wasn't a big problem
because local_datapaths are correctly cleaned in in the
process_full_binding case after an ovs interface is added or removed.

The new change ensures that we run the process_full_binding code
in this case right away, even if the interface is not deleted.

Fixes: 263064aeaa31 ("Convert binding_run to incremental processing.")
Signed-off-by: Russell Bryant <russell@ovn.org>
Acked-by: Ryan Moats <rmoats@us.ibm.com>
7 years agodataoath: compat: Do not use upstream fill-meta-data function for compat tunnel
Pravin B Shelar [Mon, 18 Jul 2016 20:53:29 +0000 (13:53 -0700)]
dataoath: compat: Do not use upstream fill-meta-data function for compat tunnel

upstream dev_fill_metadata_dst() uses upstream tunnel-dst which could
be different from OVS defined tun-dst.  Therefore use fill-meta-data
function from compat layer.

Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
7 years agodatapath: backport: allow output of MPLS packets on tunnel vports
Pravin B Shelar [Mon, 18 Jul 2016 20:53:29 +0000 (13:53 -0700)]
datapath: backport: allow output of MPLS packets on tunnel vports

Upstream commit:
    commit fe3a5f6c795810edb1646a840fec3c8c350c2a4e
    Author: Simon Horman <simon.horman@netronome.com>

    openvswitch: allow output of MPLS packets on tunnel vports

    Currently output of MPLS packets on tunnel vports is not allowed by Open
    vSwitch. This is because historically encapsulation was done in such a way
    that the inner_protocol field of the skb needed to hold the inner protocol
    for both MPLS and tunnel encapsulation in order for GSO segmentation to be
    performed correctly.

    Since b2acd1dc3949 ("openvswitch: Use regular GRE net_device instead of
    vport") Open vSwitch makes use of lwt to output to tunnel netdevs which
    perform encapsulation. As no drivers expose support for MPLS offloads this
    means that GSO packets are segmented in software by validate_xmit_skb(),
    which is called from __dev_queue_xmit(), before tunnel encapsulation occurs.
    This means that the inner protocol of MPLS is no longer needed by the time
    encapsulation occurs and the contention on the inner_protocol field of the
    skb no longer occurs.

    Thus it is now safe to output MPLS to tunnel vports.

Signed-off-by: Simon Horman <simon.horman@netronome.com>
Reviewed-by: Jesse Gross <jesse@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
7 years agodatapath: genlmsg_new_unicast to genlmsg_new
Pravin B Shelar [Mon, 18 Jul 2016 20:53:29 +0000 (13:53 -0700)]
datapath: genlmsg_new_unicast to genlmsg_new

API changes are related commit:
    openvswitch: Revert: "Enable memory mapped Netlink i/o"

    revert commit 795449d8b846 ("openvswitch: Enable memory mapped Netlink i/o").
    Following the mmaped netlink removal this code can be removed.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
7 years agodatapath: Sync OVS recursive loop counter with upstream.
Pravin B Shelar [Mon, 18 Jul 2016 20:53:29 +0000 (13:53 -0700)]
datapath: Sync OVS recursive loop counter with upstream.

Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
7 years agoovn-controller: Remove local_datapaths_by_uuid.
Russell Bryant [Fri, 15 Jul 2016 23:29:55 +0000 (19:29 -0400)]
ovn-controller: Remove local_datapaths_by_uuid.

binding.c included a static local_datapaths_by_uuid but it was not used
for anything.  In fact, the hash node used when inserting into this hmap
is overwritten in another code path for a different hmap.

Fixes: 263064aeaa31 ("Convert binding_run to incremental processing.")
Signed-off-by: Russell Bryant <russell@ovn.org>
Acked-by: Ryan Moats <rmoats@us.ibm.com>
7 years agoovn: Remove a completed TODO item.
Russell Bryant [Mon, 18 Jul 2016 19:31:46 +0000 (15:31 -0400)]
ovn: Remove a completed TODO item.

This TODO item was implemented a while ago, so remove it from the TODO
file.

Fixes: 0ee8aaf658dd ("ovn: Send GARP on localnet.")
Signed-off-by: Russell Bryant <russell@ovn.org>
Acked-By: Kyle Mestery <mestery@mestery.com>
7 years agoovn-controller: Clean up bindings handling.
Russell Bryant [Tue, 12 Jul 2016 17:33:08 +0000 (13:33 -0400)]
ovn-controller: Clean up bindings handling.

Remove the global set of logical port IDs called 'all_lports'.  This is
no longer used for anything after conntrack ID assignment was moved out
of binding.c.

Remove the global smap of logical port IDs to ovsrec_interface records.
We can't persist references to these records, as we may be holding
references to freed memory.  Instead, replace it with a new global sset
of logical port IDs called 'local_ids'.  This is used to track when
interfaces have been added or removed.  We also build a temporary
shash of logical port IDs to ovs interfaces used for fast lookup
of the right interface as needed.

Found by inspection.

Fixes: a478c4efef4d ("ovn-controller: Refactor conntrack zone allocation.")
Fixes: 263064aeaa31 ("Convert binding_run to incremental processing.")
Signed-off-by: Russell Bryant <russell@ovn.org>
Acked-by: Ryan Moats <rmoats@us.ibm.com>
7 years agoovn.at: A "peer" is only for interconnected routers.
Gurucharan Shetty [Mon, 18 Jul 2016 06:56:38 +0000 (23:56 -0700)]
ovn.at: A "peer" is only for interconnected routers.

We should not use "peer" while connecting a router to a switch.
(Doing so, will cause ovn-northd to constantly create and destroy
logical_flow records which causes CPU utilization of ovn-controller to
spike up.)

Fixes: 31114af758c7e6 ("ovn-nbctl: Update logical router port commands.")
Signed-off-by: Gurucharan Shetty <guru@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
Acked-by: Flavio Fernandes <flavio@flaviof.com>
7 years agoovs-vsctl: Fix typo in comment.
Ben Pfaff [Mon, 18 Jul 2016 16:15:19 +0000 (09:15 -0700)]
ovs-vsctl: Fix typo in comment.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Ryan Moats <rmoats@us.ibm.com>
7 years agoovn: Add 128-bit support for ct_label
Numan Siddique [Fri, 15 Jul 2016 15:03:59 +0000 (20:33 +0530)]
ovn: Add 128-bit support for ct_label

To support 128-bits in ct_label, the value of the ct_label is expected
as a hex string in the 'ct_commit' action.

Added a new accessor in the 'mf_subvalue' struct to access ovs_be128
values.

Signed-off-by: Numan Siddique <nusiddiq@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agosystem-ovn.at: Add a OVN load-balancing unit test.
Gurucharan Shetty [Tue, 12 Jul 2016 06:18:24 +0000 (23:18 -0700)]
system-ovn.at: Add a OVN load-balancing unit test.

Signed-off-by: Gurucharan Shetty <guru@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agosystem-ovn.at: Add a OVN NAT test using OVN gateway.
Gurucharan Shetty [Sun, 10 Jul 2016 12:57:00 +0000 (05:57 -0700)]
system-ovn.at: Add a OVN NAT test using OVN gateway.

This unit test adds a basic OVN NAT test that tests north-south
DNAT, south-north SNAT and east-west DNAT and SNAT. It uses network
namespaces connected to br-int using veth pairs to act as logical
ports. This test does not cover multi-host scenarios, so there is
a gap. But userspace OVN tests do multi-host scenarios (without NAT
testing), so it should still be a decent coverage.

Signed-off-by: Gurucharan Shetty <guru@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agodatapath: Check for flow key tunnel proto to detect tunnel.
Pravin B Shelar [Sun, 17 Jul 2016 16:52:11 +0000 (09:52 -0700)]
datapath: Check for flow key tunnel proto to detect tunnel.

This brings in missing hunks from upstream commit 00a93babd06aaa
("openvswitch: add tunnel protocol to sw_flow_key").

Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
7 years agodatapath: openvswitch: update checksum in {push,pop}_mpls
Pravin B Shelar [Sun, 17 Jul 2016 16:52:11 +0000 (09:52 -0700)]
datapath: openvswitch: update checksum in {push,pop}_mpls

Upstream commit:
    commit bc7cc5999fd392cc799630d7e375b2f4e29cc398
    Author: Simon Horman <simon.horman@netronome.com>

    openvswitch: update checksum in {push,pop}_mpls

    In the case of CHECKSUM_COMPLETE the skb checksum should be updated in
    {push,pop}_mpls() as they the type in the ethernet header.

    As suggested by Pravin Shelar.

Cc: Pravin Shelar <pshelar@ovn.org>
    Fixes: 25cd9ba0abc0 ("openvswitch: Add basic MPLS support to kernel")
Signed-off-by: Simon Horman <simon.horman@netronome.com>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
7 years agodatapath: vxlan: enable zero checksum on recv.
Pravin B Shelar [Sun, 17 Jul 2016 16:52:11 +0000 (09:52 -0700)]
datapath: vxlan: enable zero checksum on recv.

partialy backport commit c868ee7063bdb5 ("lwt: fix rx checksum setting
for lwt devices tunneling over ipv6").

Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
7 years agodatapath: internal-dev: set IFF_NO_QUEUE
Pravin B Shelar [Sun, 17 Jul 2016 16:52:11 +0000 (09:52 -0700)]
datapath: internal-dev: set IFF_NO_QUEUE

Introduced by upstream commit 4272cc51a6d ("openvswitch: Convert to
using IFF_NO_QUEUE").

Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
7 years agodatapath: backport: ovs: set name assign type of internal port
Pravin B Shelar [Sun, 17 Jul 2016 16:52:11 +0000 (09:52 -0700)]
datapath: backport: ovs: set name assign type of internal port

upstream commit:
    commit 684ff4ef5edd758c47929b852b4ea79be56f8bc0
    Author: Zhang Shengju <zhangshengju@cmss.chinamobile.com>

    ovs: set name assign type of internal port

    Set name_assign_type of internal port to NET_NAME_USER.

Signed-off-by: Zhang Shengju <zhangshengju@cmss.chinamobile.com>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
7 years agodatapath: backport: ovs: do not allocate memory from offline numa node
Pravin B Shelar [Sun, 17 Jul 2016 16:52:11 +0000 (09:52 -0700)]
datapath: backport: ovs: do not allocate memory from offline numa node

Upstream commit:
    commit 598c12d0ba6de9060f04999746eb1e015774044b
    Author: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>

    ovs: do not allocate memory from offline numa node

    When openvswitch tries allocate memory from offline numa node 0:
    stats = kmem_cache_alloc_node(flow_stats_cache, GFP_KERNEL | __GFP_ZERO, 0)
    It catches VM_BUG_ON(nid < 0 || nid >= MAX_NUMNODES || !node_online(nid))
    [ replaced with VM_WARN_ON(!node_online(nid)) recently ] in linux/gfp.h
    This patch disables numa affinity in this case.

Signed-off-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
7 years agodatapath: Move key memset to ovs_flow_key_extract_userspace()
Pravin B Shelar [Sun, 17 Jul 2016 16:52:11 +0000 (09:52 -0700)]
datapath: Move key memset to ovs_flow_key_extract_userspace()

Synchronize code with upstream ovs_nla_get_flow_metadata().

Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
7 years agodatapath: use PTR_ERR_OR_ZERO
Pravin B Shelar [Sun, 17 Jul 2016 16:52:11 +0000 (09:52 -0700)]
datapath: use PTR_ERR_OR_ZERO

Upstream commit:
    commit f35423c137b0e64155f52c166db1d13834a551f2
    Author: Fabian Frederick <fabf@skynet.be>

    openvswitch: use PTR_ERR_OR_ZERO

Signed-off-by: Fabian Frederick <fabf@skynet.be>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
7 years agodatapath: backport: libnl: nla_put_be64(): align on a 64-bit area
Pravin B Shelar [Sun, 17 Jul 2016 16:52:11 +0000 (09:52 -0700)]
datapath: backport: libnl: nla_put_be64(): align on a 64-bit area

Upstream commit:
    commit b46f6ded906ef0be52a4881ba50a084aeca64d7e
    Author: Nicolas Dichtel <nicolas.dichtel@6wind.com>

    libnl: nla_put_be64(): align on a 64-bit area

    nla_data() is now aligned on a 64-bit area.

    A temporary version (nla_put_be64_32bit()) is added for nla_put_net64().
    This function is removed in the next patch.

Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
7 years agodatapath: backport: ovs: propagate per dp max headroom to all vports
Pravin B Shelar [Sun, 17 Jul 2016 16:52:11 +0000 (09:52 -0700)]
datapath: backport: ovs: propagate per dp max headroom to all vports

Upstream commit:
    commit 3a927bc7cf9d0fbe8f4a8189dd5f8440228f64e7
    Author: Paolo Abeni <pabeni@redhat.com>

    ovs: propagate per dp max headroom to all vports

    This patch implements bookkeeping support to compute the maximum
    headroom for all the devices in each datapath. When said value
    changes, the underlying devs are notified via the
    ndo_set_rx_headroom method.

    This also increases the internal vports xmit performance.

Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
7 years agodatapath: backport: ovs: use nla_put_u64_64bit()
Pravin B Shelar [Sun, 17 Jul 2016 16:52:11 +0000 (09:52 -0700)]
datapath: backport: ovs: use nla_put_u64_64bit()

Upstream commit:

    commit 0238b7204b7ff1bad1d2d4489f010d670cbd89f2
    Author: Nicolas Dichtel <nicolas.dichtel@6wind.com>

    ovs: use nla_put_u64_64bit()

Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
7 years agodatapath: backport: ovs: align nlattr properly when needed
Pravin B Shelar [Sun, 17 Jul 2016 16:52:10 +0000 (09:52 -0700)]
datapath: backport: ovs: align nlattr properly when needed

Upstream commit:
    commit 66c7a5ee1a6b7c69d41dfd68d207fdd54efba56a
    Author: Nicolas Dichtel <nicolas.dichtel@6wind.com>

    ovs: align nlattr properly when needed

    I also fix commit 8b32ab9e6ef1: use nla_total_size_64bit() for
    OVS_FLOW_ATTR_USED in ovs_flow_cmd_msg_size().

    Fixes: 8b32ab9e6ef1 ("ovs: use nla_put_u64_64bit()")
Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
7 years agodatapath: backport: ovs: allow nl 'flow set' to use ufid without flow key
Pravin B Shelar [Sun, 17 Jul 2016 16:52:08 +0000 (09:52 -0700)]
datapath: backport: ovs: allow nl 'flow set' to use ufid without flow key

Upstream commit:
    commit 6f15cdbf8a8ac2e22767cc8b1eae225702733c95
    Author: Samuel Gauthier <samuel.gauthier@6wind.com>

    ovs: allow nl 'flow set' to use ufid without flow key

    When we want to change a flow using netlink, we have to identify it to
    be able to perform a lookup. Both the flow key and unique flow ID
    (ufid) are valid identifiers, but we always have to specify the flow
    key in the netlink message. When both attributes are there, the ufid
    is used. The flow key is used to validate the actions provided by
    the userland.

    This commit allows to use the ufid without having to provide the flow
    key, as it is already done in the netlink 'flow get' and 'flow del'
    path. The flow key remains mandatory when an action is provided.

Signed-off-by: Samuel Gauthier <samuel.gauthier@6wind.com>
Reviewed-by: Simon Horman <simon.horman@netronome.com>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
7 years agodatapath: backport: retain parsed IPv6 header fields in flow on error skipping extens...
Pravin B Shelar [Sun, 17 Jul 2016 16:52:07 +0000 (09:52 -0700)]
datapath: backport: retain parsed IPv6 header fields in flow on error skipping extension headers

Upstream commit:
    commit c30da497893718abc6cec4f1d34d35875200edee
    Author: Simon Horman <simon.horman@netronome.com>

    openvswitch: retain parsed IPv6 header fields in flow on error skipping extension headers

    When an error occurs skipping IPv6 extension headers retain the already
    parsed IP protocol and IPv6 addresses in the flow. Also assume that the
    packet is not a fragment in the absence of information to the contrary;
    that is always use the frag_off value set by ipv6_skip_exthdr().

    This allows matching on the IP protocol and IPv6 addresses of packets
    with malformed extension headers.

Signed-off-by: Simon Horman <simon.horman@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
7 years agodatapath: backport: openvswitch: allow management from inside user namespaces
Pravin B Shelar [Sun, 17 Jul 2016 16:52:06 +0000 (09:52 -0700)]
datapath: backport: openvswitch: allow management from inside user namespaces

Upstream commit:
    commit 4a92602aa1cd5bbaeedbd9536ff992f7d26fe9d1
    Author: Tycho Andersen <tycho.andersen@canonical.com>

    openvswitch: allow management from inside user namespaces

    Operations with the GENL_ADMIN_PERM flag fail permissions checks because
    this flag means we call netlink_capable, which uses the init user ns.

    Instead, let's introduce a new flag, GENL_UNS_ADMIN_PERM for operations
    which should be allowed inside a user namespace.

    The motivation for this is to be able to run openvswitch in unprivileged
    containers. I've tested this and it seems to work, but I really have no
    idea about the security consequences of this patch, so thoughts would be
    much appreciated.

    v2: use the GENL_UNS_ADMIN_PERM flag instead of a check in each function
    v3: use separate ifs for UNS_ADMIN_PERM and ADMIN_PERM, instead of one
        massive one

Reported-by: James Page <james.page@canonical.com>
Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
CC: Eric Biederman <ebiederm@xmission.com>
CC: Pravin Shelar <pshelar@ovn.org>
CC: Justin Pettit <jpettit@ovn.org>
CC: "David S. Miller" <davem@davemloft.net>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
7 years agodatapath: remove get_pcpu_ptr
Pravin B Shelar [Sun, 17 Jul 2016 16:52:05 +0000 (09:52 -0700)]
datapath: remove get_pcpu_ptr

There is no need to support old kernel so now we can use
newer api to access per cpu data.

Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
7 years agodatapath: Use skb_postpush_rcsum()
Pravin B Shelar [Sun, 17 Jul 2016 16:52:05 +0000 (09:52 -0700)]
datapath: Use skb_postpush_rcsum()

Use kernel function to update checksum.

Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
7 years agodatapath: compat: reset md_dst on recieve.
Pravin B Shelar [Sun, 17 Jul 2016 16:52:04 +0000 (09:52 -0700)]
datapath: compat: reset md_dst on recieve.

On transmit metadata dst is cleared, do same on recieve.

Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
7 years agodatapath: compat: Set OVS-GSO segment handler only for GSO packet.
Pravin B Shelar [Sun, 17 Jul 2016 16:52:02 +0000 (09:52 -0700)]
datapath: compat: Set OVS-GSO segment handler only for GSO packet.

This simplify OVS compat code where non gso packet can be directly sent
to network stack.

Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
7 years agodatapath: tnl-segmentation: clone dst for each segment.
Pravin B Shelar [Sun, 17 Jul 2016 16:52:02 +0000 (09:52 -0700)]
datapath: tnl-segmentation: clone dst for each segment.

Each skb segment needs a dst entry.

Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
7 years agodatapath: compat: clear skb IPCB block.
Pravin B Shelar [Sun, 17 Jul 2016 16:52:01 +0000 (09:52 -0700)]
datapath: compat: clear skb IPCB block.

OVS compat ip_local_out/ip6_local_out clear out skb IPCB, we also
need to do it for non compat version.

Signed-off-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Jesse Gross <jesse@kernel.org>
7 years agopackaging: Remove PyQt4 dependency.
Joe Stringer [Fri, 15 Jul 2016 00:53:46 +0000 (17:53 -0700)]
packaging: Remove PyQt4 dependency.

This doesn't seem to have been necessary since ovsdbmonitor was removed
in commit 7868fbc6c97c ("ovsdbmonitor: Remove."). Drop the dependency.

Signed-off-by: Joe Stringer <joe@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
7 years agodatapath-windows: Fixed packet limits on STT protocol
Paul Boca [Mon, 4 Jul 2016 09:53:23 +0000 (09:53 +0000)]
datapath-windows: Fixed packet limits on STT protocol

"If the length of the payload to be encapsulated exceeds 64KB, or if
the offset to the L4 header exceeds 255 bytes, then it will not be
possible to offload the packet to the NIC for segmentation." (STT RFC)
In this case the packet needs to be segmented by us, before sending it.

Signed-off-by: Paul-Daniel Boca <pboca@cloudbasesolutions.com>
Acked-by: Sairam Venugopal <vsairam@vmware.com>
Signed-off-by: Gurucharan Shetty <guru@ovn.org>
7 years agoovs-vtep: Handle tunnel key configuration in any order.
Darrell Ball [Thu, 14 Jul 2016 21:59:00 +0000 (14:59 -0700)]
ovs-vtep: Handle tunnel key configuration in any order.

Presently, ovs-vtep expects the datapath tunnel key to be available
in the VTEP DB at startup. This may not be the case which is also
observed as interrmittent unit test failures. This patch allows
for the tunnel key to later appear in the VTEP database.

Signed-off-by: Darrell Ball <dlu998@gmail.com>
Acked-by: Russell Bryant <russell@ovn.org>
Acked-by: Daniele Di Proietto <diproiettod@vmware.com>
7 years agoovn-controller-vtep: occasional failure in "binding 1" test case
Lance Richardson [Fri, 15 Jul 2016 13:15:05 +0000 (09:15 -0400)]
ovn-controller-vtep: occasional failure in "binding 1" test case

The ovn-controller-vtep "binding 1" test case fails occasionally
due to a race with the ovs-vtep daemon.  If ovs-vtep happens to
execute handle_physical() after "ovs-vsctl del-port p0", but before
the test script has executed "vtep-ctl del-port br-vtep p0", the
latter command will fail because ovs-vtep will have already deleted
p0 from the vtep db.

Eliminate this race while adding an additional check to verify that
ovs-vtep is working as expected by waiting for ovs-vtep to remove
entries for the deleted physical ports from the vtep db.

Signed-off-by: Lance Richardson <lrichard@redhat.com>
Suggested-by: Darrell Ball <dlu998@gmail.com>
Acked-by: Darrell Ball <dlu998@gmail.com>
Signed-off-by: Russell Bryant <russell@ovn.org>
7 years agosystem-traffic: Remove datapath specific tests and macro.
William Tu [Fri, 1 Jul 2016 16:45:52 +0000 (09:45 -0700)]
system-traffic: Remove datapath specific tests and macro.

We generally try to keep the testsuite independent of the underlying
datapath. This patch removes the datapath-specific tests and macros.

Tested-at: https://travis-ci.org/williamtu/ovs-travis/builds/141642065
Signed-off-by: William Tu <u9012063@gmail.com>
Signed-off-by: Joe Stringer <joe@ovn.org>
7 years agoovn-northd: Remove extraneous ip4 mulicast logical flow.
Ryan Moats [Thu, 14 Jul 2016 18:34:54 +0000 (13:34 -0500)]
ovn-northd: Remove extraneous ip4 mulicast logical flow.

IPv4 multicast is already dropped by a previous logical flow
written for the logical router, so there is no reason to add
a lower priority rule for it.

Signed-off-by: Ryan Moats <rmoats@us.ibm.com>
Acked-by: Flavio Fernandes <flavio@flaviof.com>
Signed-off-by: Russell Bryant <russell@ovn.org>
7 years agotests: daemon specific tests
Alin Serdean [Tue, 12 Jul 2016 15:36:02 +0000 (15:36 +0000)]
tests: daemon specific tests

Testing out the named pipe implementation revealed a problem in
"daemon --detach startup errors". If the daemon actually started nobody
is stopping it.
In the case of test failure kill the daemon.

Signed-off-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Acked-by: Paul Boca <pboca@cloudbasesolutions.com>
Signed-off-by: Gurucharan Shetty <guru@ovn.org>
7 years agoofp-actions: Remove XXX comment for write-actions in ofpacts_format().
Ben Pfaff [Wed, 13 Jul 2016 23:43:08 +0000 (16:43 -0700)]
ofp-actions: Remove XXX comment for write-actions in ofpacts_format().

I don't know why this was here.  The write_actions instruction works fine.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Jarno Rajahalme <jarno@ovn.org>
7 years agoofp-actions: Translate OF1.1+ mod_nw_ttl action to OF1.0 properly.
Ben Pfaff [Wed, 13 Jul 2016 23:41:00 +0000 (16:41 -0700)]
ofp-actions: Translate OF1.1+ mod_nw_ttl action to OF1.0 properly.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Jarno Rajahalme <jarno@ovn.org>