]> git.proxmox.com Git - mirror_ovs.git/log
mirror_ovs.git
7 years agotests: Add and improve stp tests.
nickcooper-zhangtonghao [Thu, 9 Mar 2017 11:49:49 +0000 (03:49 -0800)]
tests: Add and improve stp tests.

This patch makes the stp tests more stable and
adds the test for fdb/mdb flushing when topology
is changed.

Signed-off-by: nickcooper-zhangtonghao <nic@opencloud.tech>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agodebian: Rewrite "ifconfig" to "ip" command.
nickcooper-zhangtonghao [Thu, 9 Mar 2017 04:01:20 +0000 (20:01 -0800)]
debian: Rewrite "ifconfig" to "ip" command.

Some debian distribution may not contain the ifconfig.
We use the ip command instead of ifconfig in debian/ifupdown.sh

Reported-at: https://mail.openvswitch.org/pipermail/ovs-dev/2017-March/329503.html
CC: prochazka <prochazka@cortex.cz>
Signed-off-by: nickcooper-zhangtonghao <nic@opencloud.tech>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agostp: Send BPDU when STP starts up, instead of waiting a hello time.
nickcooper-zhangtonghao [Tue, 7 Mar 2017 13:11:30 +0000 (05:11 -0800)]
stp: Send BPDU when STP starts up, instead of waiting a hello time.

Signed-off-by: nickcooper-zhangtonghao <nic@opencloud.tech>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agostp: Use correct default for BPDU max age.
nickcooper-zhangtonghao [Tue, 7 Mar 2017 13:11:29 +0000 (05:11 -0800)]
stp: Use correct default for BPDU max age.

The default max age should be 20 seconds, but this typo caused it to
default to 2 seconds.

Signed-off-by: nickcooper-zhangtonghao <nic@opencloud.tech>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agoovn: Modify the DHCPv4 router option to optional
Guoshuai Li [Thu, 9 Mar 2017 02:53:37 +0000 (10:53 +0800)]
ovn: Modify the DHCPv4 router option to optional

Co-authored-by: Dong Jun <dongj@dtdream.com>
Signed-off-by: Dong Jun <dongj@dtdream.com>
Signed-off-by: Guoshuai Li <ligs@dtdream.com>
Acked-by: Numan Siddique <nusiddiq@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agoAdd new port VLAN mode "dot1q-tunnel"
Eric Garver [Wed, 1 Mar 2017 22:48:00 +0000 (17:48 -0500)]
Add new port VLAN mode "dot1q-tunnel"

 - Example:
     ovs-vsctl set Port p1 vlan_mode=dot1q-tunnel tag=100
   Pushes another VLAN 100 header on packets (tagged and untagged) on
   ingress, and pops it on egress.
 - Customer VLAN check:
     ovs-vsctl set Port p1 vlan_mode=dot1q-tunnel tag=100 cvlans=10,20
   Only customer VLAN of 10 and 20 are allowed.

Co-authored-by: Xiao Liang <shaw.leon@gmail.com>
Signed-off-by: Xiao Liang <shaw.leon@gmail.com>
Signed-off-by: Eric Garver <e@erig.me>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agocompiler: Use C11 build assertions with new enough GCC or Clang.
Ben Pfaff [Thu, 16 Mar 2017 21:04:41 +0000 (14:04 -0700)]
compiler: Use C11 build assertions with new enough GCC or Clang.

Until now, the BUILD_ASSERT and BUILD_ASSERT_DECL macros have used OVS's
home-grown build assertion strategy.  This commit switches them to using
C11 build assertions with compilers that support them.  The semantics are
the same, but C11 build assertions yield clearer error messages when they
fail.

This commit also reorders the definitions a bit to make it easier to
follow.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Jarno Rajahalme <jarno@ovn.org>
7 years agoAUTHORS: Add Xiao Liang.
Ben Pfaff [Thu, 16 Mar 2017 22:23:26 +0000 (15:23 -0700)]
AUTHORS: Add Xiao Liang.

Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agoAdd support for 802.1ad (QinQ tunneling)
Eric Garver [Wed, 1 Mar 2017 22:47:59 +0000 (17:47 -0500)]
Add support for 802.1ad (QinQ tunneling)

Flow key handling changes:
 - Add VLAN header array in struct flow, to record multiple 802.1q VLAN
   headers.
 - Add dpif multi-VLAN capability probing. If datapath supports
   multi-VLAN, increase the maximum depth of nested OVS_KEY_ATTR_ENCAP.

Refactor VLAN handling in dpif-xlate:
 - Introduce 'xvlan' to track VLAN stack during flow processing.
 - Input and output VLAN translation according to the xbundle type.

Push VLAN action support:
 - Allow ethertype 0x88a8 in VLAN headers and push_vlan action.
 - Support push_vlan on dot1q packets.

Use other_config:vlan-limit in table Open_vSwitch to limit maximum VLANs
that can be matched. This allows us to preserve backwards compatibility.

Add test cases for VLAN depth limit, Multi-VLAN actions and QinQ VLAN
handling

Co-authored-by: Thomas F Herbert <thomasfherbert@gmail.com>
Signed-off-by: Thomas F Herbert <thomasfherbert@gmail.com>
Co-authored-by: Xiao Liang <shaw.leon@gmail.com>
Signed-off-by: Xiao Liang <shaw.leon@gmail.com>
Signed-off-by: Eric Garver <e@erig.me>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agoofp-actions: Add limit to learn action.
Daniele Di Proietto [Fri, 10 Mar 2017 23:44:40 +0000 (15:44 -0800)]
ofp-actions: Add limit to learn action.

This commit adds a new feature to the learn actions: the possibility to
limit the number of learned flows.

To be compatible with users of the old learn action, a new structure is
introduced as well as a new OpenFlow raw action number.

There's a small corner case when we have to delete the ukey.  This
happens when:
* The learned rule has expired (or has been deleted).
* The ukey that learned the rule is still in the datapath.
* No packets hit the datapath flow recently.
In this case we cannot relearn the rule (because there are no new
packets), and the actions might depend on the learn execution, so the
only option is to delete the ukey.  I don't think this has big
performance implications since it's done only for ukey with no traffic.

We could also slowpath it, but that will cause an action upcall and the
correct datapath actions will be installed later by a revalidator.  If
we delete the ukey, the next upcall will be a miss upcall and that will
immediatedly install the correct datapath flow.

Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agoofp-actions: Factor out decode_LEARN_{common,spec}().
Daniele Di Proietto [Fri, 10 Mar 2017 23:44:39 +0000 (15:44 -0800)]
ofp-actions: Factor out decode_LEARN_{common,spec}().

No functional change, they will be used by next commit.

Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agoofproto-dpif-xlate: Create XC_LEARN entry after learning.
Daniele Di Proietto [Fri, 10 Mar 2017 23:44:38 +0000 (15:44 -0800)]
ofproto-dpif-xlate: Create XC_LEARN entry after learning.

This will be useful in a separate commit, because learning can fail.

Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agoDocumentation: fix 3 typos in testing.rst
Timothy Redaelli [Thu, 16 Mar 2017 17:20:04 +0000 (18:20 +0100)]
Documentation: fix 3 typos in testing.rst

Signed-off-by: Timothy Redaelli <tredaelli@redhat.com>
Signed-off-by: Russell Bryant <russell@ovn.org>
7 years agocheckpatch.py: Fix false positive on if/when/for
Eric Garver [Thu, 16 Mar 2017 14:22:32 +0000 (10:22 -0400)]
checkpatch.py: Fix false positive on if/when/for

We need to use == instead of the is operator. If you're unlucky it may
fail because they're not exactly the same object, but hold the same
value.

Example false positive:

E(120): Inappropriate bracing around statement

+            if (0 != nl_attr_get_u8(vxlan[IFLA_VXLAN_LEARNING])

Fixes: 30c7ffd5ac46 ("utilities/checkpatch.py: Check for appropriate bracing")
Signed-off-by: Eric Garver <e@erig.me>
Signed-off-by: Russell Bryant <russell@ovn.org>
7 years agoSet release date for 2.7.0.
Justin Pettit [Tue, 21 Feb 2017 21:58:32 +0000 (13:58 -0800)]
Set release date for 2.7.0.

Signed-off-by: Justin Pettit <jpettit@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
7 years agoofproto: Move tun_table and vl_mff_map deletion.
Yi-Hung Wei [Mon, 13 Mar 2017 18:28:22 +0000 (11:28 -0700)]
ofproto: Move tun_table and vl_mff_map deletion.

In this patch, we move the tun_table and vl_mff_map deletion in
ofproto_destory__() to be in the following order.
    1. Delete all the flows.
    2. Delete vl_mff_map.
    3. Delete tun_table.
The rationale behind this order is that a flow may use a variable length
mf_field, and a variable length mf_field is defined by a TLV mapping
in tun_table.

Signed-off-by: Yi-Hung Wei <yihung.wei@gmail.com>
Signed-off-by: Joe Stringer <joe@ovn.org>
7 years agoofproto: Add ref counting for variable length mf_fields.
Yi-Hung Wei [Mon, 13 Mar 2017 18:28:21 +0000 (11:28 -0700)]
ofproto: Add ref counting for variable length mf_fields.

Currently, a controller may potentially trigger a segmentation fault if it
accidentally removes a TLV mapping that is still used by an active flow.
To resolve this issue, in this patch, we maintain reference counting for each
dynamically allocated variable length mf_fields, so that vswitchd can use this
information to properly remove a TLV mapping, and to return an error if the
controller tries to remove a TLV mapping that is still used by any active flow.

To keep track of the usage of tun_metadata for each flow, two 'uint64_t'
bitmaps are introduce for the flow match and flow action respectively. We use
'uint64_t' as a bitmap since the 64 geneve TLV tunnel metadata are the only
available variable length mf_fields for now. We shall adopt general bitmap when
more variable length mf_fields are introduced. The bitmaps are configured
during the flow decoding process, and vswitchd use these bitmaps to increase or
decrease the ref counting when the flow is created or deleted.

VMWare-BZ: #1768370
Fixes: 04f48a68c428 ("ofp-actions: Fix variable length meta-flow OXMs.")
Suggested-by: Jarno Rajahalme <jarno@ovn.org>
Suggested-by: Joe Stringer <joe@ovn.org>
Signed-off-by: Yi-Hung Wei <yihung.wei@gmail.com>
Signed-off-by: Joe Stringer <joe@ovn.org>
7 years agonx-match: Use vl_mff_map to parse match field.
Yi-Hung Wei [Mon, 13 Mar 2017 18:28:20 +0000 (11:28 -0700)]
nx-match: Use vl_mff_map to parse match field.

vl_mff_map is introduced in commit 04f48a68c428 ("ofp-actions: Fix variable
length meta-flow OXMs") to account variable length mf_field, and it is used
to decode variable length mf_field in ofp_action. In this patch, vl_mff_map
is further used to decode the variable length match field as well.

Signed-off-by: Yi-Hung Wei <yihung.wei@gmail.com>
Signed-off-by: Joe Stringer <joe@ovn.org>
7 years agonx-match: Fix oxm decode.
Yi-Hung Wei [Mon, 13 Mar 2017 18:27:49 +0000 (11:27 -0700)]
nx-match: Fix oxm decode.

decode_nx_packet_in2() may be used by the switch to parse NXT_RESUME messages,
where we need exact match on the oxm header. Therefore, change
oxm_decode_loose() to oxm_decode() that takes an extra argument to indicate whether
we want strict or loose match.

Fixes: 7befb20d0f70 ("ofp-util: Ignore unknown fields in ofputil_decode_packet_in2()")
Signed-off-by: Yi-Hung Wei <yihung.wei@gmail.com>
Signed-off-by: Joe Stringer <joe@ovn.org>
7 years agoDocument OVN support in ovs-sandbox.
Russell Bryant [Mon, 13 Mar 2017 20:26:00 +0000 (16:26 -0400)]
Document OVN support in ovs-sandbox.

A previous commit removed the original ovs-sandbox based OVN tutorial
because it became too outdated and difficult to maintain.  However,
the use of ovs-sandbox for basic OVN development and testing is incredibly
useful, so we should provide at least basic documentation on how to use it.

This commit introduces a new and shorter document that shows how to use OVN
in ovs-sandbox.  It provides a single sample configuration, as well as a
sample ovn-trace command.

Signed-off-by: Russell Bryant <russell@ovn.org>
Acked-by: Numan Siddique <nusiddiq@redhat.com>
7 years agoofproto: Add appctl command to show Datapath features
Andy Zhou [Thu, 9 Mar 2017 02:09:01 +0000 (18:09 -0800)]
ofproto: Add appctl command to show Datapath features

Exporting Datapath runtime detected features can be useful for
both debugging and for writing system unit testing easier.

Signed-off-by: Andy Zhou <azhou@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agometa-flow: Fix conntrack field OVS version.
Jarno Rajahalme [Tue, 14 Mar 2017 22:46:25 +0000 (15:46 -0700)]
meta-flow: Fix conntrack field OVS version.

New conntrack original direction fields did not make it to OVS 2.7, so
change the "since" version to v2.8.

Suggested-by: Joe Stringer <joe@ovn.org>
Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agoofproto-dpif-xlate: Avoid using sample action when nesting level is low
Andy Zhou [Thu, 9 Mar 2017 22:00:34 +0000 (14:00 -0800)]
ofproto-dpif-xlate: Avoid using sample action when nesting level is low

When datapath sample action only allow a small number of nested actions
(i.e. less than 3), do not translate the OpenFlow's 'clone' action
into datapath 'sample' action, since such translation would cause
datapath to reject the flow, with 'EOVERFLOW', when OVS is used to
implement the OVN pipeline, or more generally, when deeper nested
clone are expected.

Reported-by: Numan Siddique <nusiddiq@redhat.com>
Reported-at: https://mail.openvswitch.org/pipermail/ovs-dev/2017-March/329586.html
Signed-off-by: Andy Zhou <azhou@ovn.org>
Tested-by: Numan Siddique <nusiddiq@redhat.com>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agoofproto: Probe for sample nesting level.
Andy Zhou [Thu, 9 Mar 2017 21:14:27 +0000 (13:14 -0800)]
ofproto: Probe for sample nesting level.

Add logics to detect the max level of nesting allowed by the
sample action implemented in the datapath.

Future patch allows xlate code to generate different odp actions
based on this information.

Signed-off-by: Andy Zhou <azhou@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agodpif: Refactor dpif_probe_feature()
Andy Zhou [Thu, 9 Mar 2017 19:01:57 +0000 (11:01 -0800)]
dpif: Refactor dpif_probe_feature()

Allow actions to be part of the probe. No functional changes.
Future patch will make use this new API.

Signed-off-by: Andy Zhou <azhou@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agodocs: Use DPDK 16.11.1 stable release.
Ian Stokes [Fri, 10 Mar 2017 11:47:09 +0000 (11:47 +0000)]
docs: Use DPDK 16.11.1 stable release.

DPDK now provides a stable release branch. Modify dpdk docs and travis linux
build script to use the DPDK 16.11.1 stable branch to benefit from most
recent bug fixes.

Signed-off-by: Ian Stokes <ian.stokes@intel.com>
Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
7 years agoovn-controller: Don't bind non-existent interfaces.
Gurucharan Shetty [Wed, 8 Mar 2017 07:06:43 +0000 (23:06 -0800)]
ovn-controller: Don't bind non-existent interfaces.

There are multiple reasons why a interface can exist
in the Open vSwitch database but not exist in the system.
For e.g, a restart of a host after a system crash. Ideally,
whoever added the interface in the Open vSwitch database
should remove those interfaces. But that usually does not
happen in practise. Based on experience, I have observerd
that on any long lasting OVS installation there are always
a couple of stale interfaces.

When a stale interface remains in the Open vSwitch database
and the container/VM initially backing that stale interface
is moved to a different machine, the two ovn-controllers
start over-writing the OVN-SB's port_binding table in a loop.

This situation can be avoided, if ovn-controller only binds
the interfaces that actually have a valid 'ofport'.

Signed-off-by: Gurucharan Shetty <guru@ovn.org>
Acked-by: Russell Bryant <russell@ovn.org>
7 years agotests: Fix mcast test on slow systems
Alin Serdean [Wed, 8 Mar 2017 14:31:56 +0000 (14:31 +0000)]
tests: Fix mcast test on slow systems

On slow systems(or which start processes slow) the test:
`testing mcast - delete the port mdb when port destroyed`
is influenced by the running time.
i.e.: http://64.119.130.115/ovs/911b7e9b08b9f4f890eeecd228d5124f4ce94d4e/testsuite.dir/2326/testsuite.log.gz

This patches adds a time stop on vswitchd.

Signed-off-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agodpdk: Redirect DPDK log to OVS logging subsystem.
Ilya Maximets [Mon, 6 Mar 2017 06:49:11 +0000 (09:49 +0300)]
dpdk: Redirect DPDK log to OVS logging subsystem.

This should be helpful for have all the logs in one place.
'ovs-appctl vlog' commands for 'dpdk' module can be used
to configure the log level. Lower bound for DPDK logging
(--log-level) still can be passed through 'dpdk-extra' field.

Signed-off-by: Ilya Maximets <i.maximets@samsung.com>
Acked-by: Aaron Conole <aconole@redhat.com>
Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
7 years agonetdev-dpdk: Fix mempool segfault.
Ian Stokes [Thu, 9 Mar 2017 13:57:37 +0000 (13:57 +0000)]
netdev-dpdk: Fix mempool segfault.

The dpdk_mp_get() function can return a NULL pointer which leads to a
segfault when a mempool cannot be created. The lack of a return value
check for the function netdev_dpdk_mempool_configure() when called in
netdev_dpdk_reconfigure() can result in a segfault also as
a NULL pointer for the mempool will be passed to rte_eth_rx_queue_setup().

Fix this by adding appropriate NULL pointer and return value checks to
dpdk_mp_get(), netdev_dpdk_reconfigure() and dpdk_vhost_reconfigure_helper().

Signed-off-by: Ian Stokes <ian.stokes@intel.com>
Fixes: 2ae3d542 ("netdev-dpdk: Refactor dpdk_mp_get().")
Fixes: 0072e931 ("netdev-dpdk: add support for jumbo frames")
CC: Daniele Di Proietto <diproiettod@vmware.com>
CC: Mark Kavanagh <mark.b.kavanagh@intel.com>
Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
7 years agosystem-traffic: Add missing CHECK_CONNTRACK_ALG guards.
Darrell Ball [Thu, 16 Feb 2017 08:47:37 +0000 (00:47 -0800)]
system-traffic: Add missing CHECK_CONNTRACK_ALG guards.

Signed-off-by: Darrell Ball <dlu998@gmail.com>
Acked-by: Flavio Leitner <fbl@sysclose.org>
Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
7 years agoRevert "ovs-fields.7: Use a more general approach to groff encodings."
Ben Pfaff [Thu, 9 Mar 2017 22:59:05 +0000 (14:59 -0800)]
Revert "ovs-fields.7: Use a more general approach to groff encodings."

This reverts commit 3e45560fb03b433c00117ae691027db61d37367d, which failed
on Windows and Mac OS because they use antique pre-2009 versions of groff.

Fixes: 3e45560fb03b ("ovs-fields.7: Use a more general approach to groff encodings.")
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agolib: Indicate if netlink message had labels.
Jarno Rajahalme [Thu, 9 Mar 2017 22:09:08 +0000 (14:09 -0800)]
lib: Indicate if netlink message had labels.

Conntrack update events include labels only if they have changed.
Record the presence of labels in the netlink message to OVS internal
representation, so that the user may keep the old labels when an
update does not modify them.

Fixes: 6830a0c0e6bf ("netlink-conntrack: New module.")
Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agoAUTHORS: Add Mika Väisänen.
Joe Stringer [Thu, 9 Mar 2017 20:48:45 +0000 (12:48 -0800)]
AUTHORS: Add Mika Väisänen.

Signed-off-by: Joe Stringer <joe@ovn.org>
7 years agoofproto-dpif-xlate: Allow sending BFD messages when STP port is not forwarding.
Mika Vaisanen [Tue, 7 Mar 2017 18:15:55 +0000 (10:15 -0800)]
ofproto-dpif-xlate: Allow sending BFD messages when STP port is not forwarding.

Interworking of BFD and RSTP does not work, as currently BFD messages
are dropped if RSTP port is not in forwarding mode. To correct this
problem, an extra check is added to allow BFD messages to be sent even
when rstp_forward_state is false.

[Committer notes]

Shifted logic checks out into a separate else if {} condition, extended
to CFM and added CFM test case.

Signed-off-by: Mika Vaisanen <mika.vaisanen@gmail.com>
Signed-off-by: Joe Stringer <joe@ovn.org>
Acked-by: Jarno Rajahalme <jarno@ovn.org>
7 years agocheckpatch: Fix running under python3.
Joe Stringer [Wed, 8 Mar 2017 17:54:07 +0000 (09:54 -0800)]
checkpatch: Fix running under python3.

Signed-off-by: Joe Stringer <joe@ovn.org>
Acked-by: Russell Bryant <russell@ovn.org>
7 years agocheckpatch: Check for pointer whitespace.
Joe Stringer [Wed, 8 Mar 2017 17:54:06 +0000 (09:54 -0800)]
checkpatch: Check for pointer whitespace.

Signed-off-by: Joe Stringer <joe@ovn.org>
Acked-by: Russell Bryant <russell@ovn.org>
7 years agoAUTHORS: Add Robert Wojciechowicz.
Ben Pfaff [Thu, 9 Mar 2017 05:21:20 +0000 (21:21 -0800)]
AUTHORS: Add Robert Wojciechowicz.

Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agosflow: Expose ethernet stats via sFlow
Robert Wojciechowicz [Fri, 24 Feb 2017 11:57:04 +0000 (11:57 +0000)]
sflow: Expose ethernet stats via sFlow

Expose existing netdev stats via sFlow.
Export sFlow ETHERNET structure with available counters.
Map existing stats to counters in the GENERIC INTERFACE
sFlow structure.
Adjust unit test to accommodate these new counters.

Signed-off-by: Robert Wojciechowicz <robertx.wojciechowicz@intel.com>
Acked-by: Neil McKee <neil.mckee@inmon.com>
Acked-by: Ian Stokes <ian.stokes@intel.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agoAdapt to flake8-import-order
xurong00037997 [Fri, 24 Feb 2017 02:03:26 +0000 (10:03 +0800)]
Adapt to flake8-import-order

https://review.openstack.org/#/c/432906/
flake8-import-order adds 3 new flake8 warnings:
I100: Your import statements are in the wrong order.
I101: The names in your from import are in the wrong order.
I201: Missing newline between sections or imports.

Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agodpdk: Use VLOG_INFO_ONCE instead of open-coding it.
Ben Pfaff [Wed, 8 Mar 2017 23:44:39 +0000 (15:44 -0800)]
dpdk: Use VLOG_INFO_ONCE instead of open-coding it.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Andy Zhou <azhou@ovn.org>
7 years agoAUTHORS: Add Tony van der Peet.
Ben Pfaff [Thu, 9 Mar 2017 03:33:38 +0000 (19:33 -0800)]
AUTHORS: Add Tony van der Peet.

Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agopinsched: Update next_txq pointer when destroying pinqueue.
Tony van der Peet [Thu, 23 Feb 2017 20:09:19 +0000 (09:09 +1300)]
pinsched: Update next_txq pointer when destroying pinqueue.

When a packet-in queue is destroyed, update next_txq if it is referencing
the destroyed queue. NULL is a valid value for next_txq.

Signed-off-by: Tony van der Peet <tony.vanderpeet@alliedtelesis.co.nz>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agotests: Add an FTP test without conntrack.
Jarno Rajahalme [Thu, 9 Mar 2017 01:18:23 +0000 (17:18 -0800)]
tests: Add an FTP test without conntrack.

If FTP tests with conntrack fail, it is informative to know if the
problem is with the FTP client and/or server, or with conntrack
itself.

Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agodatapath: Add a missing comment.
Jarno Rajahalme [Thu, 9 Mar 2017 01:18:23 +0000 (17:18 -0800)]
datapath: Add a missing comment.

Make openvswitch.h better match upstream by adding a missing comment.

Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agoconntrack: Force commit.
Jarno Rajahalme [Thu, 9 Mar 2017 01:18:23 +0000 (17:18 -0800)]
conntrack: Force commit.

Userspace support for force commit.

Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agodatapath: Add force commit.
Jarno Rajahalme [Thu, 9 Mar 2017 01:18:23 +0000 (17:18 -0800)]
datapath: Add force commit.

Upstream patch:

    commit dd41d33f0b033885211a5d6f3ee19e73238aa9ee
    Author: Jarno Rajahalme <jarno@ovn.org>
    Date:   Thu Feb 9 11:22:00 2017 -0800

    openvswitch: Add force commit.

    Stateful network admission policy may allow connections to one
    direction and reject connections initiated in the other direction.
    After policy change it is possible that for a new connection an
    overlapping conntrack entry already exists, where the original
    direction of the existing connection is opposed to the new
    connection's initial packet.

    Most importantly, conntrack state relating to the current packet gets
    the "reply" designation based on whether the original direction tuple
    or the reply direction tuple matched.  If this "directionality" is
    wrong w.r.t. to the stateful network admission policy it may happen
    that packets in neither direction are correctly admitted.

    This patch adds a new "force commit" option to the OVS conntrack
    action that checks the original direction of an existing conntrack
    entry.  If that direction is opposed to the current packet, the
    existing conntrack entry is deleted and a new one is subsequently
    created in the correct direction.

Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agocompat: nf_ct_delete compat.
Jarno Rajahalme [Thu, 9 Mar 2017 01:18:23 +0000 (17:18 -0800)]
compat: nf_ct_delete compat.

Upstream commit:

    commit f330a7fdbe1611104622faff7e614a246a7d20f0
    Author: Florian Westphal <fw@strlen.de>
    Date:   Thu Aug 25 15:33:31 2016 +0200

    netfilter: conntrack: get rid of conntrack timer

    With stats enabled this eats 80 bytes on x86_64 per nf_conn entry, as
    Eric Dumazet pointed out during netfilter workshop 2016.

    Eric also says: "Another reason was the fact that Thomas was about to
    change max timer range [..]" (500462a9de657f8, 'timers: Switch to
    a non-cascading wheel').

    Remove the timer and use a 32bit jiffies value containing timestamp until
    entry is valid.

    During conntrack lookup, even before doing tuple comparision, check
    the timeout value and evict the entry in case it is too old.

    The dying bit is used as a synchronization point to avoid races where
    multiple cpus try to evict the same entry.

    Because lookup is always lockless, we need to bump the refcnt once
    when we evict, else we could try to evict already-dead entry that
    is being recycled.

    This is the standard/expected way when conntrack entries are destroyed.

    Followup patches will introduce garbage colliction via work queue
    and further places where we can reap obsoleted entries (e.g. during
    netlink dumps), this is needed to avoid expired conntracks from hanging
    around for too long when lookup rate is low after a busy period.

Signed-off-by: Florian Westphal <fw@strlen.de>
Acked-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Upstream commit f330a7fdbe16 ("netfilter: conntrack: get rid of
conntrack timer") changes the way nf_ct_delete() is called.  Prior to
commit the call pattern was like this:

       if (del_timer(&ct->timeout))
               nf_ct_delete(ct, ...);

After this change nf_ct_delete() is called directly:

       nf_ct_delete(ct, ...);

This patch provides a replacement implementation for nf_ct_delete()
that first calls the del_timer().  This replacement is only used if
the struct nf_conn has member 'timeout' of type 'struct timer_list'.

The following patch introduces the first caller to nf_ct_delete() in
the OVS kernel module.

Linux <3.12 does not have nf_ct_delete() at all, so we inline it if it
does not exist.  The inlined code is from 3.11 death_by_timeout(),
which in later versions simply calls nf_ct_delete().

Upstream commit 02982c27ba1e1bd9f9d4747214e19ca83aa88d0e introduced
nf_ct_delete() in Linux 3.12.  This commit has the original code that
is being inlined here.

Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agoactions: Add resubmit with conntrack tuple.
Jarno Rajahalme [Thu, 9 Mar 2017 01:18:23 +0000 (17:18 -0800)]
actions: Add resubmit with conntrack tuple.

Add resubmit option to use the conntrack original direction tuple
swapped with the corresponding packet header fields during the lookup.
This could allow the same ACL table be used for admitting return
and/or related traffic as is used for admitting the original direction
traffic.

Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agoodp: Support conntrack orig tuple key.
Jarno Rajahalme [Thu, 9 Mar 2017 01:18:23 +0000 (17:18 -0800)]
odp: Support conntrack orig tuple key.

Userspace support for datapath original direction conntrack tuple.

Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agoofp-util: Ignore unknown fields in ofputil_decode_packet_in2().
Jarno Rajahalme [Thu, 9 Mar 2017 01:18:23 +0000 (17:18 -0800)]
ofp-util: Ignore unknown fields in ofputil_decode_packet_in2().

The decoder of packet_in messages should not fail on encountering
unknown metadata fields.  This allows the switch to add new features
without breaking controllers.  The controllers should, however, copy
the metadata fields from the packet_int to packet_out so that the
switch gets back the full metadata.  OVN is already doing this.

Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agoflow: Make room after ct_state.
Jarno Rajahalme [Thu, 9 Mar 2017 01:18:23 +0000 (17:18 -0800)]
flow: Make room after ct_state.

'ct_state' currently only needs 8 bits, so we can make room for a new
CT field introduced in the next patch.

Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agodatapath: Add original direction conntrack tuple to sw_flow_key.
Jarno Rajahalme [Thu, 9 Mar 2017 01:18:22 +0000 (17:18 -0800)]
datapath: Add original direction conntrack tuple to sw_flow_key.

Upstream commit:

    commit 9dd7f8907c3705dc7a7a375d1c6e30b06e6daffc
    Author: Jarno Rajahalme <jarno@ovn.org>
    Date:   Thu Feb 9 11:21:59 2017 -0800

    openvswitch: Add original direction conntrack tuple to sw_flow_key.

    Add the fields of the conntrack original direction 5-tuple to struct
    sw_flow_key.  The new fields are initially marked as non-existent, and
    are populated whenever a conntrack action is executed and either finds
    or generates a conntrack entry.  This means that these fields exist
    for all packets that were not rejected by conntrack as untrackable.

    The original tuple fields in the sw_flow_key are filled from the
    original direction tuple of the conntrack entry relating to the
    current packet, or from the original direction tuple of the master
    conntrack entry, if the current conntrack entry has a master.
    Generally, expected connections of connections having an assigned
    helper (e.g., FTP), have a master conntrack entry.

    The main purpose of the new conntrack original tuple fields is to
    allow matching on them for policy decision purposes, with the premise
    that the admissibility of tracked connections reply packets (as well
    as original direction packets), and both direction packets of any
    related connections may be based on ACL rules applying to the master
    connection's original direction 5-tuple.  This also makes it easier to
    make policy decisions when the actual packet headers might have been
    transformed by NAT, as the original direction 5-tuple represents the
    packet headers before any such transformation.

    When using the original direction 5-tuple the admissibility of return
    and/or related packets need not be based on the mere existence of a
    conntrack entry, allowing separation of admission policy from the
    established conntrack state.  While existence of a conntrack entry is
    required for admission of the return or related packets, policy
    changes can render connections that were initially admitted to be
    rejected or dropped afterwards.  If the admission of the return and
    related packets was based on mere conntrack state (e.g., connection
    being in an established state), a policy change that would make the
    connection rejected or dropped would need to find and delete all
    conntrack entries affected by such a change.  When using the original
    direction 5-tuple matching the affected conntrack entries can be
    allowed to time out instead, as the established state of the
    connection would not need to be the basis for packet admission any
    more.

    It should be noted that the directionality of related connections may
    be the same or different than that of the master connection, and
    neither the original direction 5-tuple nor the conntrack state bits
    carry this information.  If needed, the directionality of the master
    connection can be stored in master's conntrack mark or labels, which
    are automatically inherited by the expected related connections.

    The fact that neither ARP nor ND packets are trackable by conntrack
    allows mutual exclusion between ARP/ND and the new conntrack original
    tuple fields.  Hence, the IP addresses are overlaid in union with ARP
    and ND fields.  This allows the sw_flow_key to not grow much due to
    this patch, but it also means that we must be careful to never use the
    new key fields with ARP or ND packets.  ARP is easy to distinguish and
    keep mutually exclusive based on the ethernet type, but ND being an
    ICMPv6 protocol requires a bit more attention.

Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
This patch squashes in minimal amount of OVS userspace code to not
break the build. Later patches contain the full userspace support.

Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agolib: Check match and action prerequisities with 'match'.
Jarno Rajahalme [Thu, 9 Mar 2017 01:18:22 +0000 (17:18 -0800)]
lib: Check match and action prerequisities with 'match'.

Supply the match mask to prerequisities checking when available.  This
allows checking for zero-valued matches.  Non-zero valued matches
imply the presense of corresponding mask bits, but for zero valued
matches we must explicitly check the mask, too.

This is required now only for conntrack validity checking due to the
conntrack state having and 'invalid' bit, but not 'valid' bit.  One
way to match an valid conntrack state is to match on the 'tracked' bit
being one and 'invalid' bit being zero.  The latter requires the
corresponding mask bit be verified.

Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agonetlink: Simplify nl_msg_start_nested().
Jarno Rajahalme [Thu, 9 Mar 2017 01:18:22 +0000 (17:18 -0800)]
netlink: Simplify nl_msg_start_nested().

Since there is no data to copy nl_msg_put_unspec_uninit() may be used
directly, rather than via nl_msg_put_unspec().

Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agodatapath: Inherit master's labels.
Jarno Rajahalme [Thu, 9 Mar 2017 01:18:22 +0000 (17:18 -0800)]
datapath: Inherit master's labels.

Upstream commit:

    commit 09aa98ad496d6b11a698b258bc64d7f64c55d682
    Author: Jarno Rajahalme <jarno@ovn.org>
    Date:   Thu Feb 9 11:21:58 2017 -0800

    openvswitch: Inherit master's labels.

    We avoid calling into nf_conntrack_in() for expected connections, as
    that would remove the expectation that we want to stick around until
    we are ready to commit the connection.  Instead, we do a lookup in the
    expectation table directly.  However, after a successful expectation
    lookup we have set the flow key label field from the master
    connection, whereas nf_conntrack_in() does not do this.  This leads to
    master's labels being inherited after an expectation lookup, but those
    labels not being inherited after the corresponding conntrack action
    with a commit flag.

    This patch resolves the problem by changing the commit code path to
    also inherit the master's labels to the expected connection.
    Resolving this conflict in favor of inheriting the labels allows more
    information be passed from the master connection to related
    connections, which would otherwise be much harder if the 32 bits in
    the connmark are not enough.  Labels can still be set explicitly, so
    this change only affects the default values of the labels in presense
    of a master connection.

Fixes: 7f8a436eaa2c ("openvswitch: Add conntrack action")
Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Fixes: a94ebc39996b ("datapath: Add conntrack action")
Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agodatapath: Refactor labels initialization.
Jarno Rajahalme [Thu, 9 Mar 2017 01:18:22 +0000 (17:18 -0800)]
datapath: Refactor labels initialization.

Upstream commit:

    Refactoring conntrack labels initialization makes changes in later
    patches easier to review.

Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agodatapath: Simplify labels length logic.
Jarno Rajahalme [Thu, 9 Mar 2017 01:18:22 +0000 (17:18 -0800)]
datapath: Simplify labels length logic.

Upstream commit:

    commit b87cec3814ccc7f6afb0a1378ee7e5110d07cdd3
    Author: Jarno Rajahalme <jarno@ovn.org>
    Date:   Thu Feb 9 11:21:56 2017 -0800

    openvswitch: Simplify labels length logic.

    Since 23014011ba42 ("netfilter: conntrack: support a fixed size of 128
    distinct labels"), the size of conntrack labels extension has fixed to
    128 bits, so we do not need to check for labels sizes shorter than 128
    at run-time.  This patch simplifies labels length logic accordingly,
    but allows the conntrack labels size to be increased in the future
    without breaking the build.  In the event of conntrack labels
    increasing in size OVS would still be able to deal with the 128 first
    label bits.

Suggested-by: Joe Stringer <joe@ovn.org>
Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agodatapath: Unionize ovs_key_ct_label with a u32 array.
Jarno Rajahalme [Thu, 9 Mar 2017 01:18:22 +0000 (17:18 -0800)]
datapath: Unionize ovs_key_ct_label with a u32 array.

Upstream commit:

    commit cb80d58fae76d8ea93555149b2b16e19b89a1f4f
    Author: Jarno Rajahalme <jarno@ovn.org>
    Date:   Thu Feb 9 11:21:55 2017 -0800

    openvswitch: Unionize ovs_key_ct_label with a u32 array.

    Make the array of labels in struct ovs_key_ct_label an union, adding a
    u32 array of the same byte size as the existing u8 array.  It is
    faster to loop through the labels 32 bits at the time, which is also
    the alignment of netlink attributes.

Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agodatapath: Do not trigger events for unconfirmed connections.
Jarno Rajahalme [Thu, 9 Mar 2017 01:18:22 +0000 (17:18 -0800)]
datapath: Do not trigger events for unconfirmed connections.

Upstream commit:

    commit 193e30967897f3a8b6f9f137ac30571d832c2c5c
    Author: Jarno Rajahalme <jarno@ovn.org>
    Date:   Thu Feb 9 11:21:54 2017 -0800

    openvswitch: Do not trigger events for unconfirmed connections.
    Receiving change events before the 'new' event for the connection has
    been received can be confusing.  Avoid triggering change events for
    setting conntrack mark or labels before the conntrack entry has been
    confirmed.

Fixes: 182e3042e15d ("openvswitch: Allow matching on conntrack mark")
Fixes: c2ac66735870 ("openvswitch: Allow matching on conntrack label")
Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Upstream commit:

    commit 2317c6b51e4249dbfa093e1b88cab0a9f0564b7f
    Author: Jarno Rajahalme <jarno@ovn.org>
    Date:   Fri Feb 17 18:11:58 2017 -0800

    openvswitch: Set event bit after initializing labels.

    Connlabels are included in conntrack netlink event messages only if
    the IPCT_LABEL bit is set in the event cache (see
    ctnetlink_conntrack_event()).  Set it after initializing labels for a
    new connection.

    Found upon further system testing, where it was noticed that labels
    were missing from the conntrack events.

Fixes: 193e30967897 ("openvswitch: Do not trigger events for unconfirmed con
nections.")
Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Fixes: 372ce9737d2b ("datapath: Allow matching on conntrack mark")
Fixes: 038e34abaa31 ("datapath: Allow matching on conntrack label")
Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agodatapath: Use inverted tuple in ovs_ct_find_existing() if NATted.
Jarno Rajahalme [Thu, 9 Mar 2017 01:18:22 +0000 (17:18 -0800)]
datapath: Use inverted tuple in ovs_ct_find_existing() if NATted.

Upstream commit:

    commit 9ff464db50e437eef131f719cc2e9902eea9c607
    Author: Jarno Rajahalme <jarno@ovn.org>
    Date:   Thu Feb 9 11:21:53 2017 -0800

    openvswitch: Use inverted tuple in ovs_ct_find_existing() if NATted.

    The conntrack lookup for existing connections fails to invert the
    packet 5-tuple for NATted packets, and therefore fails to find the
    existing conntrack entry.  Conntrack only stores 5-tuples for incoming
    packets, and there are various situations where a lookup on a packet
    that has already been transformed by NAT needs to be made.  Looking up
    an existing conntrack entry upon executing packet received from the
    userspace is one of them.

    This patch fixes ovs_ct_find_existing() to invert the packet 5-tuple
    for the conntrack lookup whenever the packet has already been
    transformed by conntrack from its input form as evidenced by one of
    the NAT flags being set in the conntrack state metadata.

Fixes: 05752523e565 ("openvswitch: Interface with NAT.")
Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
This patch also adds a test case to OVS system tests to verify the
behavior.

The following is a more thorough explanation of what is going on:

When we have evidence that an existing conntrack entry could exist, we
must invert the tuple if NAT has already been applied, as the current
packet headers do not match any tuple stored in conntrack.  For
example, if a packet from private address X to a public address B is
source-NATted to A, the conntrack entry will have the following tuples
(ignoring the protocol and port numbers) after the conntrack entry is
committed:

Original direction tuple: (X,B)
Reply direction tuple: (B,A)

Now, if a reply packet is already transformed back to the private
address space (e.g., with a CT(nat) action), the tuple corresponding
to the current packet headers is:

Current packet tuple: (B,X)

This does not match either of the conntrack tuples above.  Normally
this does not matter, as the conntrack lookup was already done using
the tuple (B,A), but if the current packet does not match any flow in
the OVS datapath, the packet is sent to userspace via an upcall,
during which the packet's skb is freed, and the conntrack entry
pointer in the skb is lost.  When the packet is reintroduced to the
datapath, any further conntrack action will need to perform a new
conntrack lookup to find the entry again.  Prior to this patch this
second lookup failed.  The datapath flow setup corresponding to the
upcall can succeed, however, allowing all further packets in the reply
direction to re-use the conntrack entry pointer in the skb, so
typically the lookup failure only causes a packet drop.

The solution is to invert the tuple derived from the current packet
headers in case the conntrack state stored in the packet metadata
indicates that the packet has been transformed by NAT:

Inverted tuple: (X,B)

With this the conntrack entry can be found, matching the original
direction tuple.

This same logic also works for the original direction packets:

Current packet tuple (after reverse NAT): (A,B)
Inverted tuple: (B,A)

While the current packet tuple (A,B) does not match either of the
conntrack tuples, the inverted one (B,A) does match the reply
direction tuple.

Since the inverted tuple matches the reverse direction tuple the
direction of the packet must be reversed as well.

Fixes: c5f6c06b58d6 ("datapath: Interface with NAT.")
Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agodatapath: Fix comments for skb->_nfct
Jarno Rajahalme [Thu, 9 Mar 2017 01:18:22 +0000 (17:18 -0800)]
datapath: Fix comments for skb->_nfct

Upstream commit:

    commit 5e17da634a21b1200853fe82ba67d6571f2beabe
    Author: Jarno Rajahalme <jarno@ovn.org>
    Date:   Thu Feb 9 11:21:52 2017 -0800

    openvswitch: Fix comments for skb->_nfct

    Fix comments referring to skb 'nfct' and 'nfctinfo' fields now that
    they are combined into '_nfct'.

Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agodatapath: add and use nf_ct_set helper
Florian Westphal [Thu, 9 Mar 2017 01:18:22 +0000 (17:18 -0800)]
datapath: add and use nf_ct_set helper

Upstream commit:

    commit c74454fadd5ea6fc866ffe2c417a0dba56b2bf1c
    Author: Florian Westphal <fw@strlen.de>
    Date:   Mon Jan 23 18:21:57 2017 +0100

    netfilter: add and use nf_ct_set helper

    Add a helper to assign a nf_conn entry and the ctinfo bits to an sk_buff.
    This avoids changing code in followup patch that merges skb->nfct and
    skb->nfctinfo into skb->_nfct.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agodatapath: add and use skb_nfct helper
Florian Westphal [Thu, 9 Mar 2017 01:18:22 +0000 (17:18 -0800)]
datapath: add and use skb_nfct helper

Upstream commit:

    commit cb9c68363efb6d1f950ec55fb06e031ee70db5fc
    Author: Florian Westphal <fw@strlen.de>
    Date:   Mon Jan 23 18:21:56 2017 +0100

    skbuff: add and use skb_nfct helper

    Followup patch renames skb->nfct and changes its type so add a helper to
    avoid intrusive rename change later.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agodatapath: Allow compiling against Linux 4.10
Jarno Rajahalme [Thu, 9 Mar 2017 01:18:22 +0000 (17:18 -0800)]
datapath: Allow compiling against Linux 4.10

OVS in-tree datapath compiles against Linux 4.10 kernel, so allow it.

Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
7 years agoid-pool: Allocate the lowest available ids.
Ilya Maximets [Tue, 21 Feb 2017 14:49:25 +0000 (17:49 +0300)]
id-pool: Allocate the lowest available ids.

This simple change makes id-pool to always allocate the
lowest possible id from the pool. No any other code affected
because, actually, there is no users of 'id_pool_free_id' in
OVS.

This behaviour of id-pool will be used in the next patch.

Signed-off-by: Ilya Maximets <i.maximets@samsung.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agoDocumentation: Fix DPDK doc
Cian Ferriter [Tue, 21 Feb 2017 11:13:32 +0000 (11:13 +0000)]
Documentation: Fix DPDK doc

OVS no longer expects DPDK devices to start with dpdk and end with a
portid. Update docs to reflect this.

Signed-off-by: Cian Ferriter <cian.ferriter@intel.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agoofp-actions: Fix translation of set_field for nw_ecn
Eric Garver [Tue, 21 Feb 2017 19:22:53 +0000 (14:22 -0500)]
ofp-actions: Fix translation of set_field for nw_ecn

When using set_field for nw_ecn with OF1.0 or OF1.1, you get an error
instead of a proper translation. This use to work before 4b684612d900
("ofp-actions: Translate mod_nw_ecn action to OF1.1 properly.") because
it would fallback to using NXM.

e.g.

[root@rhel7 ~]# ovs-ofctl -O OpenFlow10 add-flow br0 'ip actions=set_field:2->nw_ecn'
OFPT_ERROR (xid=0x4): OFPBAC_BAD_ARGUMENT
NXT_FLOW_MOD (xid=0x4):
...

$ ovs-ofctl -O OpenFlow11 add-flow br0 'ip actions=set_field:2->nw_ecn'
ovs-ofctl: none of the usable flow formats (NXM,OXM) is among the
allowed flow formats (OpenFlow11)

Fixes: 4b684612d900 ("ofp-actions: Translate mod_nw_ecn action to OF1.1 properly.")
Signed-off-by: Eric Garver <e@erig.me>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agoovs-tcpdump: Set mirror port mtu
Aaron Conole [Wed, 22 Feb 2017 19:59:41 +0000 (14:59 -0500)]
ovs-tcpdump: Set mirror port mtu

When using ovs-tcpdump to mirror interfaces with MTU larger than the default,
Open vSwitch will lower the interfaces we are interested in monitoring.
Instead, probe the MTU and set the mirrored port's MTU value correctly.

Fixes: 314ce6479a83 ("ovs-tcpdump: Add a tcpdump wrapper utility")
Reported-by: Dan Williams <dcbw@redhat.com>
Signed-off-by: Aaron Conole <aconole@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agoofproto/bond: Simplify bond_may_recirc()
Andy Zhou [Sat, 25 Feb 2017 01:57:48 +0000 (17:57 -0800)]
ofproto/bond: Simplify bond_may_recirc()

The extra information passed back is no longer used outside bond.c.
Make the API simpler.

Signed-off-by: Andy Zhou <azhou@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
7 years agodpdk: Export packet_set_ipv6_addr() for DPDK.
Darrell Ball [Thu, 16 Feb 2017 08:47:32 +0000 (00:47 -0800)]
dpdk: Export packet_set_ipv6_addr() for DPDK.

The NAT changes in this series need both packet_set_ipv4_addr()
and packet_set_ipv6_addr() exporting, however, the ipv4 api was
exported with an unrelated patch.

Signed-off-by: Darrell Ball <dlu998@gmail.com>
Acked-by: Flavio Leitner <fbl@sysclose.org>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agoovs-fields.7: Use a more general approach to groff encodings.
Ben Pfaff [Thu, 26 Jan 2017 18:26:30 +0000 (10:26 -0800)]
ovs-fields.7: Use a more general approach to groff encodings.

It turns out that, since groff 1.20 around 2009, groff comes with a
preprocessor named "preconv" that can fix encoding issues.  Use it instead
of the existing hack.

Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agodpif-netdev: Simple DROP meter implementation.
Jarno Rajahalme [Thu, 23 Feb 2017 19:27:57 +0000 (11:27 -0800)]
dpif-netdev: Simple DROP meter implementation.

Meters may be used by any flow, so some kind of locking must be used.
In this version we have an adaptive mutex for each meter, which may
not be optimal for DPDK.  However, this should serve as a basis for
further improvement.

A batch of packets is first tried as a whole, and only if some of the
meter bands are hit, we need to process the packets individually.

Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Signed-off-by: Andy Zhou <azhou@ovn.org>
7 years agoofproto: Meter translation.
Jarno Rajahalme [Thu, 23 Feb 2017 19:27:56 +0000 (11:27 -0800)]
ofproto: Meter translation.

Translate OpenFlow METER instructions to datapath meter actions.

Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Signed-off-by: Andy Zhou <azhou@ovn.org>
7 years agoofproto: Fix thread safety annotation.
Jarno Rajahalme [Thu, 23 Feb 2017 19:27:55 +0000 (11:27 -0800)]
ofproto: Fix thread safety annotation.

ofproto_check_ofpacts() requires ofproto_mutex, but the header did not
tell that so the trace did not take the mutex.

Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Signed-off-by: Andy Zhou <azhou@ovn.org>
7 years agodpif: Meter framework.
Jarno Rajahalme [Thu, 23 Feb 2017 19:27:54 +0000 (11:27 -0800)]
dpif: Meter framework.

Add DPIF-level infrastructure for meters.  Allow meter_set to modify
the meter configuration (e.g. set the burst size if unspecified).

Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Signed-off-by: Andy Zhou <azhou@ovn.org>
7 years agorhel: Use correct default port for OVN SB database
Lance Richardson [Wed, 8 Mar 2017 20:19:40 +0000 (15:19 -0500)]
rhel: Use correct default port for OVN SB database

Fix typo in OVN SB database TCP port number.

Fixes: commit 55f36be59122 ("rhel: Firewall service files for OVN.")
Signed-off-by: Lance Richardson <lrichard@redhat.com>
Signed-off-by: Russell Bryant <russell@ovn.org>
7 years agopython: List 3.5 as a supported version.
Russell Bryant [Tue, 28 Feb 2017 13:36:17 +0000 (08:36 -0500)]
python: List 3.5 as a supported version.

All tests pass with Python 3.5 so list it as supported.

Signed-off-by: Russell Bryant <russell@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
7 years agoMakefile: Drop vestiges of support for non-GNU Make.
Ben Pfaff [Wed, 8 Mar 2017 04:48:08 +0000 (20:48 -0800)]
Makefile: Drop vestiges of support for non-GNU Make.

Open vSwitch has documented a requirement for GNU Make for a long time, yet
it had vestiges catering to other make implementations.  This removes
those.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Russell Bryant <russell@ovn.org>
7 years agopackaging: Make Fedora spec file CentOS compatible
Leif Madsen [Mon, 6 Mar 2017 20:46:43 +0000 (15:46 -0500)]
packaging: Make Fedora spec file CentOS compatible

On CentOS, the package names aren't prefixed with python2, but rather
are prefixed with simply python. This change addresses that and fixes
up some documentation that was outdated, and updates the Vagrantfile
to use the proper spec file and package names.

Fixes: bb1a7ca21107 ("fedora: Add python3-openvswitch split package")
Signed-off-by: Leif Madsen <lmadsen@redhat.com>
Signed-off-by: Russell Bryant <russell@ovn.org>
7 years agovagrant: Use official boxes for Fedora and Centos
Timothy Redaelli [Thu, 9 Feb 2017 14:00:36 +0000 (15:00 +0100)]
vagrant: Use official boxes for Fedora and Centos

Change CentOS version to last 7 (7.3 at the moment),
since old kernel-devel version is no longer available.

Add net-tools to CentOS since netstat is needed for some tests.

Signed-off-by: Timothy Redaelli <tredaelli@redhat.com>
Signed-off-by: Andy Zhou <azhou@ovn.org>
7 years agoodp-execute: Apply clone action on batch of packets instead of one by one.
Sugesh Chandran [Thu, 9 Feb 2017 15:41:53 +0000 (15:41 +0000)]
odp-execute: Apply clone action on batch of packets instead of one by one.

Clone action is optimized by cloning a batch of packets together instead of
executing independently on every packet in a batch.

Signed-off-by: Sugesh Chandran <sugesh.chandran@intel.com>
Signed-off-by: Zoltán Balogh <zoltan.balogh@ericsson.com>
Co-authored-by: Zoltán Balogh <zoltan.balogh@ericsson.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agoMakefile: Break the build if .gitignore files are distributed.
Ben Pfaff [Wed, 8 Mar 2017 00:29:53 +0000 (16:29 -0800)]
Makefile: Break the build if .gitignore files are distributed.

This would have found a .gitignore file recently added to the distribution.

CC: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
Reviewed-by: Markos Chandras <mchandras@suse.de>
7 years agodoc: Add info on distributions shipping openvswitch package.
Bhanuprakash Bodireddy [Tue, 7 Feb 2017 21:18:23 +0000 (21:18 +0000)]
doc: Add info on distributions shipping openvswitch package.

List details of various popular distributions shipping Open vSwitch
packages. Also include the information of the distros supporting DPDK
accelerated datapath.

Signed-off-by: Bhanuprakash Bodireddy <bhanuprakash.bodireddy@intel.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agoDocumentation: Update DPDK doc with extended statistics.
Bhanuprakash Bodireddy [Tue, 7 Feb 2017 21:18:22 +0000 (21:18 +0000)]
Documentation: Update DPDK doc with extended statistics.

Add instructions on how to retrieve extended statistics for DPDK physical
and vhost ports.

Signed-off-by: Bhanuprakash Bodireddy <bhanuprakash.bodireddy@intel.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agowindows: Fix uninitialized variable in netlink-socket
Alin Serdean [Mon, 6 Mar 2017 16:22:39 +0000 (16:22 +0000)]
windows: Fix uninitialized variable in netlink-socket

The variable `request_nlmsg` was used without being initialized.

This patch assigns a value to it before being used.

Found by inspection.

Signed-off-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agowindows: automake.mk: Remove the .gitignore file from distributed files
Markos Chandras [Sat, 4 Feb 2017 17:11:11 +0000 (17:11 +0000)]
windows: automake.mk: Remove the .gitignore file from distributed files

Commit d183efc22b2b ("This commit adds the windows installer to the
OVS tree.) added the .gitignore file to the distributed files but this
file shouldn't be part of the distributed archive.

CC: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Fixes: d183efc22b2b ("This commit adds the windows installer to the OVS tree.")
Signed-off-by: Markos Chandras <mchandras@suse.de>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agoovn: specify options:nat-addresses as "router"
Mickey Spiegel [Fri, 3 Feb 2017 04:48:24 +0000 (20:48 -0800)]
ovn: specify options:nat-addresses as "router"

Currently in OVN, the "nat-addresses" in the "options" column of a
logical switch port of type "router" must be specified manually.
Typically the user would specify as "nat-addresses" all of the NAT
external IP addresses and load balancer IP addresses that have
already been specified separately on the router.

This patch allows the logical switch port's "nat-addresses" to be
specified as the string "router".  When ovn-northd sees this string,
it automatically copies the following into the southbound
Port_Binding's "nat-addresses" in the "options" column:
    The options:router-port's MAC address.
    Each NAT external IP address (of any NAT type) specified on the
    logical router of options:router-port.
    Each load balancer IP address specified on the logical router of
    options:router-port.
This will cause the controller where the gateway router resides to
issue gratuitous ARPs for each NAT external IP address and for each
load balancer IP address specified on the gateway router.

Signed-off-by: Mickey Spiegel <mickeys.dev@gmail.com>
Acked-by: Gurucharan Shetty <guru@ovn.org>
Signed-off-by: Ben Pfaff <blp@ovn.org>
7 years agowindows: add include to stream-windows.c
Alin Serdean [Mon, 6 Feb 2017 04:41:41 +0000 (04:41 +0000)]
windows: add include to stream-windows.c

fatal_signal_unlink_file_now is used but the header for it is missing in
the include section.

Signed-off-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Acked-by: Sairam Venugopal <vsairam@vmware.com>
Signed-off-by: Gurucharan Shetty <guru@ovn.org>
7 years agowindows: add function definition to poll-loop.h
Alin Serdean [Mon, 6 Feb 2017 04:41:41 +0000 (04:41 +0000)]
windows: add function definition to poll-loop.h

poll_wevent_wait_at is used in the #define but the function definition
is missing.

Signed-off-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Acked-by: Sairam Venugopal <vsairam@vmware.com>
Signed-off-by: Gurucharan Shetty <guru@ovn.org>
7 years agowindows: fix calls in netlink-socket
Alin Serdean [Mon, 6 Feb 2017 04:41:40 +0000 (04:41 +0000)]
windows: fix calls in netlink-socket

Add nl_sock_transact forward declaration, since it is used before
being on implemented. This applies only on Windows.

Move nl_sock_subscribe_packet__ function before it is used.

It makes more sense to move it rather than adding a forward declaration
since it is used by the two functions defined above it.

Signed-off-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Acked-by: Sairam Venugopal <vsairam@vmware.com>
Signed-off-by: Gurucharan Shetty <guru@ovn.org>
7 years agowindows: add forward declaration to dpif-netlink
Alin Serdean [Mon, 6 Feb 2017 04:41:40 +0000 (04:41 +0000)]
windows: add forward declaration to dpif-netlink

dpif_netlink_port_query__ is used before it is defined on Windows.

Add a forward declaration to it.

Signed-off-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Acked-by: Sairam Venugopal <vsairam@vmware.com>
Signed-off-by: Gurucharan Shetty <guru@ovn.org>
7 years agowindows: Add definition of getrusage
Alin Serdean [Mon, 6 Feb 2017 04:41:40 +0000 (04:41 +0000)]
windows: Add definition of getrusage

getrusage is implemented in lib/getrusage-windows.c.

This patch just adds its definition to include/windows/sys/resource.h,
which serves for files that include <sys/resource.h>.

Signed-off-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Acked-by: Sairam Venugopal <vsairam@vmware.com>
Signed-off-by: Gurucharan Shetty <guru@ovn.org>
7 years agowindows: Remove dead code in daemon-windows
Alin Serdean [Sun, 5 Feb 2017 23:49:29 +0000 (23:49 +0000)]
windows: Remove dead code in daemon-windows

Found by inspection.

Signed-off-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Acked-by: Sairam Venugopal <vsairam@vmware.com>
Signed-off-by: Gurucharan Shetty <guru@ovn.org>
7 years agodatapath-windows: Trigger conntrack event after setting mark and label
Sairam Venugopal [Thu, 2 Mar 2017 21:41:03 +0000 (13:41 -0800)]
datapath-windows: Trigger conntrack event after setting mark and label

New Conntrack Entry event should be triggered after setting the mark and
label fields. The current RW lock implementation prevents Event Handler
from reading the entry until mark/label is set.

Fixing the workflow to trigger the event after setting mark/label.

Signed-off-by: Sairam Venugopal <vsairam@vmware.com>
Acked-by: Shashank Ram <rams@vmware.com>
Signed-off-by: Gurucharan Shetty <guru@ovn.org>
7 years agoflake8: Fix build with flake8-import-order installed.
Russell Bryant [Tue, 7 Mar 2017 16:14:30 +0000 (11:14 -0500)]
flake8: Fix build with flake8-import-order installed.

OpenStack CI is currently failing due to some flake8 warnings
emitted from the flake8-import-order plugin.  Just ignore all of
those warnings since they're just style things that aren't important.

Signed-off-by: Russell Bryant <russell@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
7 years agoofproto-dpif-xlate: fix build.
Jarno Rajahalme [Tue, 7 Mar 2017 00:02:55 +0000 (16:02 -0800)]
ofproto-dpif-xlate: fix build.

Recent patch 27d931da3ac ("ofproto-dpif: Enhance
execute_controller_action().") missed some new action enumerations
added previously.

Fixes: 27d931da3ac ("ofproto-dpif: Enhance execute_controller_action().")
Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Andy Zhou <azhou@ovn.org>
7 years agoxlate: Translate openflow clone into odp sample action.
Andy Zhou [Tue, 14 Feb 2017 22:40:04 +0000 (14:40 -0800)]
xlate: Translate openflow clone into odp sample action.

When datapath does not support the 'clone' action directly, generate
sample action (with 100% probability) instead.

Specifically, currently, there is no plan to support the 'clone'
action on the Linux kernel datapath directly, so the sample action
will be used to translate the openflow clone action for this datapath.

Signed-off-by: Andy Zhou <azhou@ovn.org>
Acked-by: Jarno Rajahalme <jarno@ovn.org>
7 years agolib: Refactor nested netlink APIs.
Andy Zhou [Tue, 14 Feb 2017 22:39:48 +0000 (14:39 -0800)]
lib: Refactor nested netlink APIs.

Future patches will make use of those changes.

Signed-off-by: Andy Zhou <azhou@ovn.org>
Acked-by: Jarno Rajahalme <jarno@ovn.org>
7 years agoofproto-dpif: Enhance execute_controller_action().
Andy Zhou [Mon, 13 Feb 2017 22:28:35 +0000 (14:28 -0800)]
ofproto-dpif: Enhance execute_controller_action().

Allow execute_controller_action() to accept actions encoded with
nested netlink attributes.

execute_controller_action() can be called during 'xlate_actions'. It
tries executes all actions translated so far to get the current packet
that needs to be sent to the controller.  This works fine until when
the action is enclosed within a nested netlink message, and the
action translation has not finished yet.

For example;
A, clone(B, controller, C)

In this case, we can not execute 'clone' since its translation has not
be finished (missing C), However, A still needs to be executed before
the packet can be sent to the controller.

This solution is to make a copy of the odp actions translated so far,
and 'fix up' the copy so that it can be executed. The original odp
actions are left intact so that xlate can continue.

Signed-off-by: Andy Zhou <azhou@ovn.org>
Acked-by: Jarno Rajahalme <jarno@ovn.org>