]> git.proxmox.com Git - ovs.git/log
ovs.git
5 years agoerspan: set bso bit based on mirrored packet's len
Greg Rose [Wed, 18 Jul 2018 16:22:13 +0000 (09:22 -0700)]
erspan: set bso bit based on mirrored packet's len

Upstream commit:
    Before the patch, the erspan BSO bit (Bad/Short/Oversized) is not
    handled.  BSO has 4 possible values:
      00 --> Good frame with no error, or unknown integrity
      11 --> Payload is a Bad Frame with CRC or Alignment Error
      01 --> Payload is a Short Frame
      10 --> Payload is an Oversized Frame

    Based the short/oversized definitions in RFC1757, the patch sets
    the bso bit based on the mirrored packet's size.

Reported-by: Xiaoyan Jin <xiaoyanj@vmware.com>
Signed-off-by: William Tu <u9012063@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Cc: William Tu <u9012063@gmail.com>
Signed-off-by: Greg Rose <gvrose8192@gmail.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: William Tu <u9012063@gmail.com>
5 years agoDocumentation: Add netstat to testing instructions
Greg Rose [Mon, 16 Jul 2018 16:54:01 +0000 (09:54 -0700)]
Documentation: Add netstat to testing instructions

Add netstat when mentioning testing.  Many check-kmod failures result
when it is not present.

Signed-off-by: Greg Rose <gvrose8192@gmail.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Aaron Conole <aconole@redhat.com>
5 years agoovn-nbctl: Initialize arguments to avoid compilation warnings.
Ian Stokes [Wed, 25 Jul 2018 14:00:43 +0000 (15:00 +0100)]
ovn-nbctl: Initialize arguments to avoid compilation warnings.

Output arguments for parse_priority() and dhcp_options_get() may not be
initialized when either function returns an error.

This causes compilation warnings for GCC 6.3.x regarding use of
uninitialized variable use and null-pointer-arithmetic.

Fix this by initializing priority_p* value to 0 for priority_parse()
when an error occurs during parsing.

For dhcp_options_get() set *dhcp_opts_p = dhcp_opts regardless as
dhcp_opts will be equal to NULL when an error occurs within the function
anyhow.

Cc: Jakub Sitnicki <jkbs@redhat.com>
Fixes: 3844c85de979 ("ovn-nbctl: Don't die in dhcp_options_get()."
Fixes: bc8223df3b01 ("ovn-nbctl: Don't die in parse_priority().")
Signed-off-by: Ian Stokes <ian.stokes@intel.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Jakub Sitnicki <jkbs@redhat.com>
5 years agoovn-nbctl: Detect unrecognized short options in server mode.
Jakub Sitnicki [Wed, 25 Jul 2018 15:26:54 +0000 (17:26 +0200)]
ovn-nbctl: Detect unrecognized short options in server mode.

Because getopt() will set optopt for both known and unknown options,
we need to differentiate between them ourselves by checking if we
know the option. Do that by looking up its value.

Also, because we are using GNU extensions to getopt(), we need to be
resetting getopt() state by setting optind to 0 instead of 1 as
pointed out in NOTES in getopt(3) man-page. Not doing so results in
invalid reads and optopt being set to a garbarge value.

Fixes: 3ec06ea9c668 ("ovn-nbctl: Initial support for daemon mode.")
Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-northd: Propagate dynamic addresses to port group address sets.
Jakub Sitnicki [Mon, 30 Jul 2018 14:37:49 +0000 (16:37 +0200)]
ovn-northd: Propagate dynamic addresses to port group address sets.

If a logical switch port belongs to a port group and has dynamic
addresses assigned, propagate the addresses to the auto-generated
address sets for the port group.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Acked-by: Han Zhou <hzhou8@ebay.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-northd: Make use of svec for storing lists of addresses.
Jakub Sitnicki [Mon, 30 Jul 2018 14:37:48 +0000 (16:37 +0200)]
ovn-northd: Make use of svec for storing lists of addresses.

Get rid of what is, esentially, an open-coded version of svec.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Acked-by: Han Zhou <hzhou8@ebay.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Allow referring to port groups by name.
Jakub Sitnicki [Mon, 30 Jul 2018 14:37:47 +0000 (16:37 +0200)]
ovn-nbctl: Allow referring to port groups by name.

Be user-friendly and allow using port group's name as its identifier in
database commands.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Acked-by: Han Zhou <hzhou8@ebay.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn: Clean up log() action parsing errors.
Justin Pettit [Tue, 31 Jul 2018 03:00:23 +0000 (20:00 -0700)]
ovn: Clean up log() action parsing errors.

This also add some OVN action parsing tests.

Suggested-by: Ben Pfaff <blp@ovn.org>
Signed-off-by: Justin Pettit <jpettit@ovn.org>
Acked-by: Mark Michelson <mmichels@redhat.com>
5 years agoovn: Add rate-limiting for ACL logs.
Justin Pettit [Wed, 4 Jul 2018 05:05:40 +0000 (22:05 -0700)]
ovn: Add rate-limiting for ACL logs.

Signed-off-by: Justin Pettit <jpettit@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
5 years agoofproto: Add support for specifying a meter in controller actions.
Justin Pettit [Wed, 20 Jun 2018 01:28:46 +0000 (18:28 -0700)]
ofproto: Add support for specifying a meter in controller actions.

Signed-off-by: Justin Pettit <jpettit@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
5 years agoovn: Support configuring meters through SB Meter table.
Justin Pettit [Thu, 26 Jul 2018 18:27:04 +0000 (11:27 -0700)]
ovn: Support configuring meters through SB Meter table.

Add the ability to configure meters through the newly introduced Meter
table in the Southbound database.  Previously, meters were configured by
providing strings to describe the meter in the extended meter table.
This patch changes the behavior so that the extended meter table's
strings are references to names in the Meter table.  The old behavior is
still supported if the extended meter table entry begins with "__string: "

Signed-off-by: Justin Pettit <jpettit@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
5 years agoovn: Add Meter and Meter_Band tables to the NB and SB databases.
Justin Pettit [Sun, 1 Jul 2018 23:22:57 +0000 (16:22 -0700)]
ovn: Add Meter and Meter_Band tables to the NB and SB databases.

Add support for configuring meters through the Meter and Meter_Band
tables in the Northbound database.  This commit also has ovn-northd
sync those tables between the Northbound and Southbound databases.

Add support for configuring meters with ovn-nbctl.

Signed-off-by: Justin Pettit <jpettit@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-controller: Add "group-table-list" ovs-appctl command.
Justin Pettit [Mon, 2 Jul 2018 06:33:48 +0000 (23:33 -0700)]
ovn-controller: Add "group-table-list" ovs-appctl command.

Signed-off-by: Justin Pettit <jpettit@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-controller: Add "meter-table-list" ovs-appctl command.
Justin Pettit [Mon, 2 Jul 2018 06:27:38 +0000 (23:27 -0700)]
ovn-controller: Add "meter-table-list" ovs-appctl command.

Signed-off-by: Justin Pettit <jpettit@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
5 years agoovn: Use C strings instead of ds for extended tables.
Justin Pettit [Mon, 2 Jul 2018 22:28:07 +0000 (15:28 -0700)]
ovn: Use C strings instead of ds for extended tables.

Dynamic strings are not needed for the most part and are introduing
additional conversions back and forth with C strings.

Signed-off-by: Justin Pettit <jpettit@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
5 years agorhel: bug fix kmod-openvswitch spec file, rhel6
Martin Xu [Sun, 29 Jul 2018 07:02:57 +0000 (00:02 -0700)]
rhel: bug fix kmod-openvswitch spec file, rhel6

Previous patch removed the if condition for postun script by
mistake. The weak-update symlinks should be removed only for
uninstallation not upgrade.

VMware-BZ: #2169383
Fixes: 89dd5819cf18 ("rhel: support kmod-openvswitch build against multiple kernels, rhel6")
Signed-off-by: Martin Xu <martinxu9.ovs@gmail.com>
CC: Greg Rose <gvrose8192@gmail.com>
CC: Ben Pfaff <blp@ovn.org>
CC: Flavio Leitner <fbl@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agodatapath: Don't swap table in nlattr_set() after OVS_ATTR_NESTED is found
Stefano Brivio [Tue, 17 Jul 2018 00:56:01 +0000 (17:56 -0700)]
datapath: Don't swap table in nlattr_set() after OVS_ATTR_NESTED is found

Upstream commit:

    commit 72f17baf2352ded6a1d3f4bb2d15da8c678cd2cb
    Author: Stefano Brivio <sbrivio@redhat.com>
    Date:   Thu May 3 18:13:25 2018 +0200

    openvswitch: Don't swap table in nlattr_set() after OVS_ATTR_NESTED is found

    If an OVS_ATTR_NESTED attribute type is found while walking
    through netlink attributes, we call nlattr_set() recursively
    passing the length table for the following nested attributes, if
    different from the current one.

    However, once we're done with those sub-nested attributes, we
    should continue walking through attributes using the current
    table, instead of using the one related to the sub-nested
    attributes.

    For example, given this sequence:

    1  OVS_KEY_ATTR_PRIORITY
    2  OVS_KEY_ATTR_TUNNEL
    3 OVS_TUNNEL_KEY_ATTR_ID
    4 OVS_TUNNEL_KEY_ATTR_IPV4_SRC
    5 OVS_TUNNEL_KEY_ATTR_IPV4_DST
    6 OVS_TUNNEL_KEY_ATTR_TTL
    7 OVS_TUNNEL_KEY_ATTR_TP_SRC
    8 OVS_TUNNEL_KEY_ATTR_TP_DST
    9  OVS_KEY_ATTR_IN_PORT
    10 OVS_KEY_ATTR_SKB_MARK
    11 OVS_KEY_ATTR_MPLS

    we switch to the 'ovs_tunnel_key_lens' table on attribute #3,
    and we don't switch back to 'ovs_key_lens' while setting
    attributes #9 to #11 in the sequence. As OVS_KEY_ATTR_MPLS
    evaluates to 21, and the array size of 'ovs_tunnel_key_lens' is
    15, we also get this kind of KASan splat while accessing the
    wrong table:

    [ 7654.586496] ==================================================================
    [ 7654.594573] BUG: KASAN: global-out-of-bounds in nlattr_set+0x164/0xde9 [openvswitch]
    [ 7654.603214] Read of size 4 at addr ffffffffc169ecf0 by task handler29/87430
    [ 7654.610983]
    [ 7654.612644] CPU: 21 PID: 87430 Comm: handler29 Kdump: loaded Not tainted 3.10.0-866.el7.test.x86_64 #1
    [ 7654.623030] Hardware name: Dell Inc. PowerEdge R730/072T6D, BIOS 2.1.7 06/16/2016
    [ 7654.631379] Call Trace:
    [ 7654.634108]  [<ffffffffb65a7c50>] dump_stack+0x19/0x1b
    [ 7654.639843]  [<ffffffffb53ff373>] print_address_description+0x33/0x290
    [ 7654.647129]  [<ffffffffc169b37b>] ? nlattr_set+0x164/0xde9 [openvswitch]
    [ 7654.654607]  [<ffffffffb53ff812>] kasan_report.part.3+0x242/0x330
    [ 7654.661406]  [<ffffffffb53ff9b4>] __asan_report_load4_noabort+0x34/0x40
    [ 7654.668789]  [<ffffffffc169b37b>] nlattr_set+0x164/0xde9 [openvswitch]
    [ 7654.676076]  [<ffffffffc167ef68>] ovs_nla_get_match+0x10c8/0x1900 [openvswitch]
    [ 7654.684234]  [<ffffffffb61e9cc8>] ? genl_rcv+0x28/0x40
    [ 7654.689968]  [<ffffffffb61e7733>] ? netlink_unicast+0x3f3/0x590
    [ 7654.696574]  [<ffffffffc167dea0>] ? ovs_nla_put_tunnel_info+0xb0/0xb0 [openvswitch]
    [ 7654.705122]  [<ffffffffb4f41b50>] ? unwind_get_return_address+0xb0/0xb0
    [ 7654.712503]  [<ffffffffb65d9355>] ? system_call_fastpath+0x1c/0x21
    [ 7654.719401]  [<ffffffffb4f41d79>] ? update_stack_state+0x229/0x370
    [ 7654.726298]  [<ffffffffb4f41d79>] ? update_stack_state+0x229/0x370
    [ 7654.733195]  [<ffffffffb53fe4b5>] ? kasan_unpoison_shadow+0x35/0x50
    [ 7654.740187]  [<ffffffffb53fe62a>] ? kasan_kmalloc+0xaa/0xe0
    [ 7654.746406]  [<ffffffffb53fec32>] ? kasan_slab_alloc+0x12/0x20
    [ 7654.752914]  [<ffffffffb53fe711>] ? memset+0x31/0x40
    [ 7654.758456]  [<ffffffffc165bf92>] ovs_flow_cmd_new+0x2b2/0xf00 [openvswitch]

    [snip]

    [ 7655.132484] The buggy address belongs to the variable:
    [ 7655.138226]  ovs_tunnel_key_lens+0xf0/0xffffffffffffd400 [openvswitch]
    [ 7655.145507]
    [ 7655.147166] Memory state around the buggy address:
    [ 7655.152514]  ffffffffc169eb80: 00 00 00 00 00 00 00 00 00 00 fa fa fa fa fa fa
    [ 7655.160585]  ffffffffc169ec00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    [ 7655.168644] >ffffffffc169ec80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 fa fa
    [ 7655.176701]                                                              ^
    [ 7655.184372]  ffffffffc169ed00: fa fa fa fa 00 00 00 00 fa fa fa fa 00 00 00 05
    [ 7655.192431]  ffffffffc169ed80: fa fa fa fa 00 00 00 00 00 00 00 00 00 00 00 00
    [ 7655.200490] ==================================================================

Reported-by: Hangbin Liu <liuhangbin@gmail.com>
Fixes: 982b52700482 ("openvswitch: Fix mask generation for nested attributes.")
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Reviewed-by: Sabrina Dubroca <sd@queasysnail.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Yi-Hung Wei <yihung.wei@gmail.com>
Reviewed-by: Greg Rose <gvrose8192@gmail.com>
Tested-by: Greg Rose <gvrose8192@gmail.com>
Signed-off-by: Justin Pettit <jpettit@ovn.org>
5 years agodatapath: NAT support for shifted portmap ranges
Yi-Hung Wei [Tue, 17 Jul 2018 00:56:00 +0000 (17:56 -0700)]
datapath: NAT support for shifted portmap ranges

This patch backports the following upstream commit from net-next, and
defines HAVE_NF_NAT_RANGE2 to determine whether to use
'struct nf_nat_range2'.

Upstream commit:
    commit 2eb0f624b709e78ec8e2f4c3412947703db99301
    Author: Thierry Du Tre <thierry@dtsystems.be>
    Date:   Wed Apr 4 15:38:22 2018 +0200

    netfilter: add NAT support for shifted portmap ranges

    This is a patch proposal to support shifted ranges in portmaps.  (i.e. tcp/udp
    incoming port 5000-5100 on WAN redirected to LAN 192.168.1.5:2000-2100)

    Currently DNAT only works for single port or identical port ranges.  (i.e.
    ports 5000-5100 on WAN interface redirected to a LAN host while original
    destination port is not altered) When different port ranges are configured,
    either 'random' mode should be used, or else all incoming connections are
    mapped onto the first port in the redirect range. (in described example
    WAN:5000-5100 will all be mapped to 192.168.1.5:2000)

    This patch introduces a new mode indicated by flag NF_NAT_RANGE_PROTO_OFFSET
    which uses a base port value to calculate an offset with the destination port
    present in the incoming stream. That offset is then applied as index within the
    redirect port range (index modulo rangewidth to handle range overflow).

    In described example the base port would be 5000. An incoming stream with
    destination port 5004 would result in an offset value 4 which means that the
    NAT'ed stream will be using destination port 2004.

    Other possibilities include deterministic mapping of larger or multiple ranges
    to a smaller range : WAN:5000-5999 -> LAN:5000-5099 (maps WAN port 5*xx to port
    51xx)

    This patch does not change any current behavior. It just adds new NAT proto
    range functionality which must be selected via the specific flag when intended
    to use.

    A patch for iptables (libipt_DNAT.c + libip6t_DNAT.c) will also be proposed
    which makes this functionality immediately available.

Signed-off-by: Thierry Du Tre <thierry@dtsystems.be>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Yi-Hung Wei <yihung.wei@gmail.com>
Reviewed-by: Greg Rose <gvrose8192@gmail.com>
Signed-off-by: Justin Pettit <jpettit@ovn.org>
5 years agodatapath: Introduce net_rwsem and remove rtnl_lock()
Yi-Hung Wei [Tue, 17 Jul 2018 00:55:59 +0000 (17:55 -0700)]
datapath: Introduce net_rwsem and remove rtnl_lock()

This patch backports the following two upstream commits and
add a new symbol HAVE_NET_RWSEM in acinclude.m4 to determine
whether to use new introduced rw_semaphore, net_rwsem.

Upstream commit:
    commit f0b07bb151b098d291fd1fd71ef7a2df56fb124a
    Author: Kirill Tkhai <ktkhai@virtuozzo.com>
    Date:   Thu Mar 29 19:20:32 2018 +0300

    net: Introduce net_rwsem to protect net_namespace_list

    rtnl_lock() is used everywhere, and contention is very high.
    When someone wants to iterate over alive net namespaces,
    he/she has no a possibility to do that without exclusive lock.
    But the exclusive rtnl_lock() in such places is overkill,
    and it just increases the contention. Yes, there is already
    for_each_net_rcu() in kernel, but it requires rcu_read_lock(),
    and this can't be sleepable. Also, sometimes it may be need
    really prevent net_namespace_list growth, so for_each_net_rcu()
    is not fit there.

    This patch introduces new rw_semaphore, which will be used
    instead of rtnl_mutex to protect net_namespace_list. It is
    sleepable and allows not-exclusive iterations over net
    namespaces list. It allows to stop using rtnl_lock()
    in several places (what is made in next patches) and makes
    less the time, we keep rtnl_mutex. Here we just add new lock,
    while the explanation of we can remove rtnl_lock() there are
    in next patches.

    Fine grained locks generally are better, then one big lock,
    so let's do that with net_namespace_list, while the situation
    allows that.

Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Upstream commit:
    commit ec9c780925c57588637e1dbd8650d294107311c0
    Author: Kirill Tkhai <ktkhai@virtuozzo.com>
    Date:   Thu Mar 29 19:21:09 2018 +0300

    ovs: Remove rtnl_lock() from ovs_exit_net()

    Here we iterate for_each_net() and removes
    vport from alive net to the exiting net.

    ovs_net::dps are protected by ovs_mutex(),
    and the others, who change it (ovs_dp_cmd_new(),
    __dp_destroy()) also take it.
    The same with datapath::ports list.

    So, we remove rtnl_lock() here.

Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Yi-Hung Wei <yihung.wei@gmail.com>
Reviewed-by: Greg Rose <gvrose8192@gmail.com>
Signed-off-by: Justin Pettit <jpettit@ovn.org>
5 years agodatapath: meter: fix the incorrect calculation of max delta_t
zhangliping [Tue, 17 Jul 2018 00:55:58 +0000 (17:55 -0700)]
datapath: meter: fix the incorrect calculation of max delta_t

Upstream commit:
    commit ddc502dfed600bff0b61d899f70d95b76223fdfc
    Author: zhangliping <zhangliping02@baidu.com>
    Date:   Fri Mar 9 10:08:50 2018 +0800

    openvswitch: meter: fix the incorrect calculation of max delta_t

    Max delat_t should be the full_bucket/rate instead of the full_bucket.
    Also report EINVAL if the rate is zero.

Fixes: 96fbc13d7e77 ("openvswitch: Add meter infrastructure")
Cc: Andy Zhou <azhou@ovn.org>
Signed-off-by: zhangliping <zhangliping02@baidu.com>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Yi-Hung Wei <yihung.wei@gmail.com>
Reviewed-by: Greg Rose <gvrose8192@gmail.com>
Tested-by: Greg Rose <gvrose8192@gmail.com>
Signed-off-by: Justin Pettit <jpettit@ovn.org>
5 years agocompat: Allow IPv6 GRE/ERSPAN Tx when ip6_gre is loaded
Greg Rose [Fri, 27 Jul 2018 18:20:08 +0000 (11:20 -0700)]
compat: Allow IPv6 GRE/ERSPAN Tx when ip6_gre is loaded

When for some reason the built-in kernel ip6_gre module is loaded that
would prevent the openvswitch kernel driver from loading.  Even when
the built-in kernel ip6_gre module is loaded we can still perform
port mirroring via Tx.  Adjust the error handling and detect when
the ip6_gre kernel module is loaded and in that case still enable
IPv6 GRE/ERSPAN Tx.

Signed-off-by: Greg Rose <gvrose8192@gmail.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: William Tu <u9012063@gmail.com>
5 years agocompat: Initialize IPv4 reassembly secret timer
Greg Rose [Fri, 20 Jul 2018 01:48:31 +0000 (18:48 -0700)]
compat: Initialize IPv4 reassembly secret timer

The RHEL 7 kernels expect the secret timer interval to be initialized
before calling the inet_frags_init() function.  By not initializing it
the inet_frags_secret_rebuild() function was running on every tick
rather than on the expected interval.  This caused occasional panics
from page faults when inet_frags_secret_rebuild() would try to rearm a
timer from the openvswitch kernel module which had just been removed.

Also remove the prior, and now unnecessary, work around.

VMware BZ 2094203

Fixes: 595e069a ("compat: Backport IPv4 reassembly.")
Signed-off-by: Greg Rose <gvrose8192@gmail.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Yi-Hung Wei <yihung.wei@gmail.com>
5 years agoPrepare for 2.10.0.
Justin Pettit [Tue, 24 Jul 2018 22:28:08 +0000 (15:28 -0700)]
Prepare for 2.10.0.

Signed-off-by: Justin Pettit <jpettit@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
5 years agoPermit to build OVS with only Python3 installed
Timothy Redaelli [Fri, 22 Jun 2018 18:04:10 +0000 (20:04 +0200)]
Permit to build OVS with only Python3 installed

This commit renames HAVE_PYTHON to HAVE_PYTHON2 and PYTHON to PYTHON2
and adds HAVE_PYTHON and PYTHON with a different semantics:
- If PYTHON environment variable is set, use it as PYTHON
- If a python2 interpreter is available, PYTHON became the python2 interpreter
- If a python3 interpreter is available, PYTHON became the python3 interpreter

PYTHON is only used to run the python scripts needed by the build system

NOTE:
Since currently most of the utilities and bugtool doesn't support Python3,
they're installed only if python2 is available. This will be fixed in later
commits.

Signed-off-by: Timothy Redaelli <tredaelli@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovs-tcpdump: Fix incompatibilities with python3
Timothy Redaelli [Tue, 24 Jul 2018 16:35:13 +0000 (18:35 +0200)]
ovs-tcpdump: Fix incompatibilities with python3

Opening a file with 'rw' in Python3 returns an error, moreover using 'rw' in
Python2 is wrong too since it opens the file using O_RDONLY and not by using
O_RDWR.

This commit fixes it by using the low-level os.open function with O_RDWR
as suggested by the Linux kernel (tuntap.txt) documentation.

This commit fixes also some usual bytes vs string incompatibilities.

Tested on Python 2.7.15 and Python 3.6.5

Signed-off-by: Timothy Redaelli <tredaelli@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovs-tcpundump: Fix incompatibilities with python3
Timothy Redaelli [Tue, 24 Jul 2018 16:35:22 +0000 (18:35 +0200)]
ovs-tcpundump: Fix incompatibilities with python3

Added parenthesis after print and use "as" instead of "," in except.

This commit fixes also a couple of flake8 warnings:

    utilities/ovs-tcpundump:23:1: E302 expected 2 blank lines, found 1
    utilities/ovs-tcpundump:35:1: E305 expected 2 blank lines after class or
    function definition, found 1

Tested on Python 2.7.15 and Python 3.6.5

Signed-off-by: Timothy Redaelli <tredaelli@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agosparse: Add support for DPDK.
Ben Pfaff [Thu, 12 Jul 2018 21:55:44 +0000 (14:55 -0700)]
sparse: Add support for DPDK.

This allows netdev-dpdk.c to compile cleanly with sparse.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Signed-off-by: Ian Stokes <ian.stokes@intel.com>
5 years agonetdev-dpdk: Use ETH_ADDR_BYTES_ARGS instead of open-coding it.
Ben Pfaff [Thu, 12 Jul 2018 21:55:43 +0000 (14:55 -0700)]
netdev-dpdk: Use ETH_ADDR_BYTES_ARGS instead of open-coding it.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Reviewed-by: Yifeng Sun <pkusunyifeng@gmail.com>
Signed-off-by: Ian Stokes <ian.stokes@intel.com>
5 years agonetdev-dpdk: Fix sparse complaints.
Ben Pfaff [Thu, 12 Jul 2018 21:55:42 +0000 (14:55 -0700)]
netdev-dpdk: Fix sparse complaints.

Neither of these is a real problem.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Reviewed-by: Yifeng Sun <pkusunyifeng@gmail.com>
Signed-off-by: Ian Stokes <ian.stokes@intel.com>
5 years agonetdev-dpdk: Fix incorrect byte order conversion in log message.
Ben Pfaff [Thu, 12 Jul 2018 21:55:41 +0000 (14:55 -0700)]
netdev-dpdk: Fix incorrect byte order conversion in log message.

uint8_t values shouldn't be passed to ntohs().

Found by soarse.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Reviewed-by: Yifeng Sun <pkusunyifeng@gmail.com>
Signed-off-by: Ian Stokes <ian.stokes@intel.com>
5 years agoDocs: Improve OVS DPDK version mapping notice.
Ian Stokes [Thu, 12 Jul 2018 18:48:42 +0000 (19:48 +0100)]
Docs: Improve OVS DPDK version mapping notice.

A common issue is users pairing the incorrect version of OVS to DPDK
when working outside of the build tree.

To avoid this, this commit updates the OVS DPDK documentation to explicitly
flag that users should consult the OVS to DPDK release mapping in FAQ if
working outside of the OVS build tree.

Suggested-by: Ben Pfaff <blp@ovn.org>
Signed-off-by: Ian Stokes <ian.stokes@intel.com>
Acked-by: Flavio Leitner <fbl@sysclose.org>
5 years agodpif-netdev: Add SMC cache after EMC cache
Yipeng Wang [Tue, 10 Jul 2018 10:14:06 +0000 (03:14 -0700)]
dpif-netdev: Add SMC cache after EMC cache

This patch adds a signature match cache (SMC) after exact match
cache (EMC). The difference between SMC and EMC is SMC only stores
a signature of a flow thus it is much more memory efficient. With
same memory space, EMC can store 8k flows while SMC can store 1M
flows. It is generally beneficial to turn on SMC but turn off EMC
when traffic flow count is much larger than EMC size.

SMC cache will map a signature to an dp_netdev_flow index in
flow_table. Thus, we add two new APIs in cmap for lookup key by
index and lookup index by key.

For now, SMC is an experimental feature that it is turned off by
default. One can turn it on using ovsdb options.

Signed-off-by: Yipeng Wang <yipeng1.wang@intel.com>
Co-authored-by: Jan Scheurich <jan.scheurich@ericsson.com>
Signed-off-by: Jan Scheurich <jan.scheurich@ericsson.com>
Acked-by: Billy O'Mahony <billy.o.mahony@intel.com>
Signed-off-by: Ian Stokes <ian.stokes@intel.com>
5 years agoNEWS: Mention daemon mode support for ovn-nbctl.
Jakub Sitnicki [Tue, 24 Jul 2018 14:21:58 +0000 (16:21 +0200)]
NEWS: Mention daemon mode support for ovn-nbctl.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agotests: Add test for ovn-nbctl's command parser error paths.
Jakub Sitnicki [Thu, 19 Jul 2018 13:51:26 +0000 (15:51 +0200)]
tests: Add test for ovn-nbctl's command parser error paths.

Preparatory work for getting rid of ctl_fatal() in command parser.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agotests: Add test for oneline-formatted output for ovn-nbctl.
Jakub Sitnicki [Thu, 19 Jul 2018 13:51:25 +0000 (15:51 +0200)]
tests: Add test for oneline-formatted output for ovn-nbctl.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agotests: Add test for ovn-nbctl dry run mode.
Jakub Sitnicki [Thu, 19 Jul 2018 13:51:24 +0000 (15:51 +0200)]
tests: Add test for ovn-nbctl dry run mode.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Initial support for daemon mode.
Jakub Sitnicki [Thu, 19 Jul 2018 13:51:23 +0000 (15:51 +0200)]
ovn-nbctl: Initial support for daemon mode.

Make ovn-nbctl act as a unixctl server if we were asked to detach. This
turns ovn-nbctl into a long-lived process that acts a proxy for
interacting with NB DB. The main difference to regular mode of ovn-nbctl
is that in the daemon mode, a local copy of database contents has to be
obtained only once.

Just two unixctl commands are supported 'run' and 'exit'. The former can
be used to run any ovn-nbctl command or a batch of them as so:

  ovs-appctl -t ovn-nbctl run [OPTIONS] COMMAND [-- [OPTIONS] COMMAND] ...

Running commands that have not yet been converted to not use ctl_fatal()
will result in death of the daemon process. However, --monitor option
can be used to keep the daemon running.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Extract a helper for appending command options.
Jakub Sitnicki [Thu, 19 Jul 2018 13:51:22 +0000 (15:51 +0200)]
ovn-nbctl: Extract a helper for appending command options.

Will be reused when parsing options in daemon mode.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Extract a helper for building short options string.
Jakub Sitnicki [Thu, 19 Jul 2018 13:51:21 +0000 (15:51 +0200)]
ovn-nbctl: Extract a helper for building short options string.

Will be reused for parsing options in daemon mode.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Extract handling of options that affect main loop.
Jakub Sitnicki [Thu, 19 Jul 2018 13:51:20 +0000 (15:51 +0200)]
ovn-nbctl: Extract handling of options that affect main loop.

Provide a handler for options that change how the main loop behaves.

This will allow code reuse for option parsing in daemon mode.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Extract helper for printing oneline output.
Jakub Sitnicki [Thu, 19 Jul 2018 13:51:19 +0000 (15:51 +0200)]
ovn-nbctl: Extract helper for printing oneline output.

This will allow us to direct oneline-formatted output to other sinks
than stdout if needed. Preparatory work for daemon mode.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Introduce a poll_timer based wait timeout.
Jakub Sitnicki [Thu, 19 Jul 2018 13:51:18 +0000 (15:51 +0200)]
ovn-nbctl: Introduce a poll_timer based wait timeout.

Extend the main loop and the command runner so that the caller can
specify a timeout for poll_block(). This will allow us to break out of
the main loop when waiting on IDL, like in the blocked '--wait=sb/hv
sync' case.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Propagate errors from prerequisites runner.
Jakub Sitnicki [Thu, 19 Jul 2018 13:51:17 +0000 (15:51 +0200)]
ovn-nbctl: Propagate errors from prerequisites runner.

Instead of terminating the process, return the error to the caller.

This will allow us to reuse the prerequisites runner in daemon mode.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Propagate errors from the main loop.
Jakub Sitnicki [Thu, 19 Jul 2018 13:51:16 +0000 (15:51 +0200)]
ovn-nbctl: Propagate errors from the main loop.

Let the caller handle the errors instead of reporting it and
terminating. Prepare for reusing the main loop in daemon mode.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Propagate the error from do_nbctl().
Jakub Sitnicki [Thu, 19 Jul 2018 13:51:15 +0000 (15:51 +0200)]
ovn-nbctl: Propagate the error from do_nbctl().

Instead of terminating the process, return the error to the caller.

This will allow us to reuse the main loop in daemon mode.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agodb-ctl-base: Propagate errors from the commands parser.
Jakub Sitnicki [Thu, 19 Jul 2018 13:51:14 +0000 (15:51 +0200)]
db-ctl-base: Propagate errors from the commands parser.

Let the caller decide how to handle the error. Prepare for using the
parser in ovn-nbctl daemon mode.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agodb-ctl-base: Propagate error from parse_command().
Jakub Sitnicki [Thu, 19 Jul 2018 13:51:13 +0000 (15:51 +0200)]
db-ctl-base: Propagate error from parse_command().

Let the caller handle the error. Needed for ovn-nbctl daemon mode.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Don't destroy the transaction twice on error.
Jakub Sitnicki [Thu, 19 Jul 2018 13:51:12 +0000 (15:51 +0200)]
ovn-nbctl: Don't destroy the transaction twice on error.

Reset the global state, if transaction succeeded. Otherwise nbctl_exit()
callback will try to clean up on any fatal error.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Signal need to try again via an output param.
Jakub Sitnicki [Thu, 19 Jul 2018 13:51:11 +0000 (15:51 +0200)]
ovn-nbctl: Signal need to try again via an output param.

Introduce an output parameter for the flag that signals need to retry
running the command. This leaves the return value for error reporting.

Preparatory work for reusing the main loop in daemon mode.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Pull up releasing IDL from do_nbctl().
Jakub Sitnicki [Thu, 19 Jul 2018 13:51:10 +0000 (15:51 +0200)]
ovn-nbctl: Pull up releasing IDL from do_nbctl().

Destroy IDL resources in the routine where we allocated them.

Preparatory work for reusing the main loop in daemon mode.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Pull up destroying commands from do_nbctl().
Jakub Sitnicki [Thu, 19 Jul 2018 13:51:09 +0000 (15:51 +0200)]
ovn-nbctl: Pull up destroying commands from do_nbctl().

Destroy commands in the same routine where they were allocated.

Preparatory work for reusing the main loop in daemon mode.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Extract the main loop.
Jakub Sitnicki [Thu, 19 Jul 2018 13:51:08 +0000 (15:51 +0200)]
ovn-nbctl: Extract the main loop.

Split out a routine for the main ovn-nbctl loop.

Preparatory work for introducing daemon mode.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovsdb-idl: Allow monitoring columns that are already monitored.
Jakub Sitnicki [Thu, 19 Jul 2018 13:51:07 +0000 (15:51 +0200)]
ovsdb-idl: Allow monitoring columns that are already monitored.

If IDL was created with monitoring and alerts turned on by default for
all columns, then there is no harm in allowing the API users to ask
again for monitoring and alerts to be enabled for any given column.

This allows us to run prerequisites handlers for db-ctl and ovn-nbctl
commands once the IDL has already ran once.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agotable: Introduce a constant for default table style.
Jakub Sitnicki [Thu, 19 Jul 2018 13:51:06 +0000 (15:51 +0200)]
table: Introduce a constant for default table style.

Having a constant in addition to the constant expression for the default
table style allows us to reset 'struct table_style' variables to default
style.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Fix mem leak in nbctl_lrp_set_gateway_chassis().
Jakub Sitnicki [Tue, 17 Jul 2018 13:34:15 +0000 (15:34 +0200)]
ovn-nbctl: Fix mem leak in nbctl_lrp_set_gateway_chassis().

Fix fall-out from applying a semantic patch to propagate the error.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Remove pointless "return; " at ends of functions.
Jakub Sitnicki [Tue, 17 Jul 2018 13:34:14 +0000 (15:34 +0200)]
ovn-nbctl: Remove pointless "return; " at ends of functions.

Fix fall-out from applying a semantic patch that converts ctl_fatal()
calls to use ctl_error().

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Use ctl_error() in command handlers.
Jakub Sitnicki [Tue, 17 Jul 2018 13:34:13 +0000 (15:34 +0200)]
ovn-nbctl: Use ctl_error() in command handlers.

Instead of dying with ctl_fatal(), propagate the error thru the context.
This will allow us to report errors when running in daemon mode.

This patch is a result of applying the following semantic patch:

@@
identifier F, C;
expression S;
@@
  static void F(struct ctl_context *C) {
<...
-     ctl_fatal(S);
+     ctl_error(C, S);
+     return;
...>
  }
@@
identifier F, C;
expression S, A;
@@
  static void F(struct ctl_context *C) {
<...
-     ctl_fatal(S, A);
+     ctl_error(C, S, A);
+     return;
...>
  }

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Propagate error thru the context.
Jakub Sitnicki [Tue, 17 Jul 2018 13:34:12 +0000 (15:34 +0200)]
ovn-nbctl: Propagate error thru the context.

Instead of dying let the main loop handle the error.
This will allow us to report errors when running in daemon mode.

This is a result of applying the following semantic patch:

@@
identifier F;
identifier C;
identifier E;
@@
  static void F(struct ctl_context *C) {
<...
      if (E) {
-         ctl_fatal("%s", E);
+         C->error = E;
+         return;
      }
...>
  }

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Don't die in dhcp_options_get().
Jakub Sitnicki [Tue, 17 Jul 2018 13:34:11 +0000 (15:34 +0200)]
ovn-nbctl: Don't die in dhcp_options_get().

Let the caller handle the error. This prepares us for reporting errors
in daemon mode.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Don't die in parse_direction().
Jakub Sitnicki [Tue, 17 Jul 2018 13:34:10 +0000 (15:34 +0200)]
ovn-nbctl: Don't die in parse_direction().

Let the caller handle the error. This prepares us for reporting errors
in daemon mode.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Don't die in parse_priority().
Jakub Sitnicki [Tue, 17 Jul 2018 13:34:09 +0000 (15:34 +0200)]
ovn-nbctl: Don't die in parse_priority().

Let the caller handle the error. This prepares us for reporting errors
in daemon mode.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Don't die in lrp_to_lr().
Jakub Sitnicki [Tue, 17 Jul 2018 13:34:08 +0000 (15:34 +0200)]
ovn-nbctl: Don't die in lrp_to_lr().

Let the caller handle the error. This prepares us for reporting errors
in daemon mode.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Don't die in lsp_to_ls().
Jakub Sitnicki [Tue, 17 Jul 2018 13:34:07 +0000 (15:34 +0200)]
ovn-nbctl: Don't die in lsp_to_ls().

Let the caller handle the error. This prepares us for reporting errors
in daemon mode.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Don't die in gc_by_name_or_uuid().
Jakub Sitnicki [Tue, 17 Jul 2018 13:34:06 +0000 (15:34 +0200)]
ovn-nbctl: Don't die in gc_by_name_or_uuid().

Let the caller handle the error. This prepares us for reporting errors
in daemon mode.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Don't die in pg_by_name_or_uuid().
Jakub Sitnicki [Tue, 17 Jul 2018 13:34:05 +0000 (15:34 +0200)]
ovn-nbctl: Don't die in pg_by_name_or_uuid().

Let the caller handle the error. This prepares us for reporting errors
in daemon mode.

Also, extend the tests to cover this error path.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agobuild: Add gitattribute file to build-aux
Alin Gabriel Serdean [Thu, 19 Jul 2018 16:39:42 +0000 (19:39 +0300)]
build: Add gitattribute file to build-aux

The command: `make check-tabs` fails on Windows due to line ending conversions
caused by the following setting: `git config --global core.autocrlf true`
(the whitelist `build-aux/initial-tab-whitelist` becomes a blacklist)

This patch adds a .gittatribute file to build-aux to force LF endings
on Windows.

Signed-off-by: Alin Gabriel Serdean <aserdean@ovn.org>
Co-authored-by: Aaron Conole <aconole@redhat.com>
Signed-off-by: Aaron Conole <aconole@redhat.com>
Acked-by: Ben Pfaff <blp@ovn.org>
5 years agotests: Add more items to .gitignore
Alin Gabriel Serdean [Mon, 9 Jul 2018 14:11:02 +0000 (17:11 +0300)]
tests: Add more items to .gitignore

This patch adds the system* testsuite directory and logs to .gitignore.

Signed-off-by: Alin Gabriel Serdean <aserdean@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Fix compilation warnings.
Ian Stokes [Tue, 10 Jul 2018 18:46:55 +0000 (19:46 +0100)]
ovn-nbctl: Fix compilation warnings.

This commit fixes 'maybe-uninitialized' warnings for pointers in various
functions in ovn-nbctl when compiling with gcc 6.3.1 and -Werror.
Pointers to structs nbrec_logical_switch, nbrec_logical_switch_port,
nbrec_logical_router and nbrec_logical_router_port are now initialized
to NULL where required.

Cc: Justin Pettit <jpettit@ovn.org>
Cc: Venkata Anil <vkommadi@redhat.com>
Fixes: 31114af758c7 ("ovn-nbctl: Update logical router port commands.")
Fixes: 80f408f4cffb ("ovn: Use Logical_Switch_Port in NB.")
Fixes: 36f232bca2db ("ovn: l3ha, CLI for logical router port gateway
                      chassis")
Signed-off-by: Ian Stokes <ian.stokes@intel.com>
Signed-off-by: Justin Pettit <jpettit@ovn.org>
5 years agorhel: support kmod-openvswitch build against multiple kernels, rhel6
Martin Xu [Thu, 12 Jul 2018 23:25:24 +0000 (16:25 -0700)]
rhel: support kmod-openvswitch build against multiple kernels, rhel6

This patch only affects rhel6 spec file.

RHEL 7.4 introduced backward incompatible changes in the kernel. As
a result, prebuilt PRM packages against kernels newer than 693.17.1
will cannot be used on systems with older kernels, vice versa.

This patch allows multiple kernel version numbers delimited by
whitespace to be passed as variable "kversion". kmod-openvswitch RPM
packages the kernel module .ko files from all specified kernel
versions.

This patch also includes a script to update the weak-update symlinks
if the system kernel version is upgraded or downgraded after
kmod-openvswitch is installed.

Signed-off-by: Martin Xu <martinxu9.ovs@gmail.com>
Co-authored-by: Greg Rose <gvrose8192@gmail.com>
CC: Ben Pfaff <blp@ovn.org>
CC: Flavio Leitner <fbl@redhat.com>
CC: Aaron Conole <aconole@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agorhel: remove openvswitch-kmod package from build, rhel6
Martin Xu [Thu, 12 Jul 2018 23:25:23 +0000 (16:25 -0700)]
rhel: remove openvswitch-kmod package from build, rhel6

This patch only affects rhel6 spec file.

Previouly the kernel_module_package macro is used to generate spec file
template to build kmod-openvswitch RPM. The main package only contains
the openvswitch.conf for depmod. The macro is now removed. Everything is
built in the main package instead. This effectively removes the redudant
openvswitch-kmod package from the build.

Signed-off-by: Martin Xu <martinxu9.ovs@gmail.com>
CC: Greg Rose <gvrose8192@gmail.com>
CC: Ben Pfaff <blp@ovn.org>
CC: Flavio Leitner <fbl@redhat.com>
CC: Aaron Conole <aconole@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agorhel: rename openvswitch kmod rhel6 spec file
Martin Xu [Thu, 12 Jul 2018 23:25:22 +0000 (16:25 -0700)]
rhel: rename openvswitch kmod rhel6 spec file

This patch only affects rhel6 spec file.

The rhel6 kmod spec file is renamed from openvswitch-kmod-rhel6.spec
to kmod-openvswitch-rhel6.spec . This is to prepare for the next
patches to support building multiple kernel versions in the main
package. The rename makes the spec file consistent with the resulted
kmod-openvswitch-<version>.rpm, which is the real package with
kernel module files.

Signed-off-by: Martin Xu <martinxu9.ovs@gmail.com>
Reviewed-by: Flavio Leitner <fbl@redhat.com>
CC: Greg Rose <gvrose8192@gmail.com>
CC: Ben Pfaff <blp@ovn.org>
CC: Aaron Conole <aconole@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovs-ofctl: New helper command "parse-packet".
Ben Pfaff [Tue, 10 Jul 2018 20:40:45 +0000 (13:40 -0700)]
ovs-ofctl: New helper command "parse-packet".

This was useful for testing commit 4fe080160685 ("flow: Fix buffer overread
for crafted IPv6 packets.").

Signed-off-by: Ben Pfaff <blp@ovn.org>
Tested-by: Yifeng Sun <pkusunyifeng@gmail.com>
Reviewed-by: Yifeng Sun <pkusunyifeng@gmail.com>
5 years agoconfigure: Disable -Wnull-pointer-arithmetic Clang warning.
Ben Pfaff [Mon, 9 Jul 2018 21:37:55 +0000 (14:37 -0700)]
configure: Disable -Wnull-pointer-arithmetic Clang warning.

OVS trips over this warning all over the place, so it's not worth leaving
on.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Reviewed-by: Yifeng Sun <pkusunyifeng@gmail.com>
5 years agonetdev-bsd: Fix crash on FreeBSD.
Olivier Cochard-Labbé [Wed, 11 Jul 2018 09:02:28 +0000 (11:02 +0200)]
netdev-bsd: Fix crash on FreeBSD.

Working on bug https://github.com/openvswitch/ovs-issues/issues/152, I've
found wrong mapping of netdev functions on FreeBSD.

Signed-off-by: Olivier Cochard <olivier@FreeBSD.org>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agodatapath: work around the single GRE receive limitation.
William Tu [Wed, 11 Jul 2018 16:45:08 +0000 (09:45 -0700)]
datapath: work around the single GRE receive limitation.

Commit 9f57c67c379d ("gre: Remove support for sharing GRE protocol hook")
allows only single GRE packet receiver.  When upstream kernel's gre module
is loaded, the gre.ko exclusively becomes the only gre packet receiver,
preventing OVS kernel module from registering another gre receiver.

We can either try to unload the gre.ko by removing its dependencies,
or, in this patch, we try to register OVS as only the GRE transmit
portion when detecting there already exists another GRE receiver.

Signed-off-by: William Tu <u9012063@gmail.com>
Tested-by: Greg Rose <gvrose8192@gmail.com>
Reviewed-by: Greg Rose <gvrose8192@gmail.com>
Cc: Greg Rose <gvrose8192@gmail.com>
Cc: Yifeng Sun <pkusunyifeng@gmail.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoconntrack: Fix conn_update_state_alg use after free.
Darrell Ball [Tue, 10 Jul 2018 23:41:58 +0000 (16:41 -0700)]
conntrack: Fix conn_update_state_alg use after free.

When conn_update_state() returns true, conn has been freed, so skip calling
handle_ftp_ctl() with this conn and instead follow code path for new
connections.

Fixes: bd5e81a0e596 ("Userspace Datapath: Add ALG infra and FTP.")
Signed-off-by: Darrell Ball <dlu998@gmail.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoofproto-dpif-xlate: Check the right IPv6 address in is_nd_dst_correct().
Ben Pfaff [Tue, 10 Jul 2018 17:11:35 +0000 (10:11 -0700)]
ofproto-dpif-xlate: Check the right IPv6 address in is_nd_dst_correct().

Fixes test 815 "tunnel_push_pop_ipv6 - action".

CC: Aaron Conole <aconole@redhat.com>
Fixes: 6f231f7c3a9e ("xlate: use const struct in6_addr in linklocal check")
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Aaron Conole <aconole@redhat.com>
5 years agosparse: Make IN6_IS_ADDR_MC_LINKLOCAL and IN6_ARE_ADDR_EQUAL pickier.
Ben Pfaff [Tue, 10 Jul 2018 16:27:18 +0000 (09:27 -0700)]
sparse: Make IN6_IS_ADDR_MC_LINKLOCAL and IN6_ARE_ADDR_EQUAL pickier.

On GNU systems these macros work with arbitrary pointers, but the relevant
standards only require IN6_IS_ADDR_MC_LINKLOCAL to work with in6_addr (and
don't specify IN6_ARE_ADDR_EQUAL at all).  Make the "sparse"
implementations correspondingly pickier so that we catch any introduced
problems more quickly.

CC: Aaron Conole <aconole@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Aaron Conole <aconole@redhat.com>
5 years agoovn-nbctl: Always initialize output arguments in *_by_name_or_uuid().
Ben Pfaff [Tue, 10 Jul 2018 20:13:18 +0000 (13:13 -0700)]
ovn-nbctl: Always initialize output arguments in *_by_name_or_uuid().

This makes it easier to reason about the outputs, and fixes warnings for
GCC 6.3.x.

Reported-by: Ian Stokes <ian.stokes@intel.com>
Cc: Venkata Anil <vkommadi@redhat.com>
Fixes: 31114af758c7 ("ovn-nbctl: Update logical router port commands.")
Fixes: 80f408f4cffb ("ovn: Use Logical_Switch_Port in NB.")
Fixes: 36f232bca2db ("ovn: l3ha, CLI for logical router port gateway chassis")
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Ian Stokes <ian.stokes@intel.com>
5 years agotests: Fix ICMP related 2 false positives.
Darrell Ball [Fri, 6 Jul 2018 03:11:33 +0000 (20:11 -0700)]
tests: Fix ICMP related 2 false positives.

Filter out packet-ins for V6 packets as this is a V4 test.

Signed-off-by: Darrell Ball <dlu998@gmail.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoifupdown.sh: Correctly bring up bond slaves.
Ken Sanislo [Wed, 20 Jun 2018 21:44:08 +0000 (14:44 -0700)]
ifupdown.sh: Correctly bring up bond slaves.

It seems that line 70 needs to be operating on the $slave variable created
in the for loop at :68.  Bonded interfaces fail to bring up their links
with the current version, this will makes them work correctly.

Signed-off-by: Ken Sanislo <ken@intherack.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agobridge: Clean leaking netdevs when route is added.
Tiago Lam [Thu, 21 Jun 2018 17:39:16 +0000 (18:39 +0100)]
bridge: Clean leaking netdevs when route is added.

When adding a route to a bridge, by executing "$appctl ovs/route/add
$IP/$MASK $BR", a reference to the existing netdev is taken and stored
in an instantiated ip_dev struct which is then stored in an addr_list
list in tnl-ports.c. When OvS is signaled to exit, as a result of a
"$appctl $OVS_PID exit --cleanup", for example, the bridge takes care of
destroying its allocated port and iface structs. While destroying and
freeing an iface, the netdev associated with it is also destroyed.
However, for this to happen its ref_cnt must be 0.  Otherwise the
destructor of the netdev (specific to each datapath) won't be called. On
the userspace datapath this means a system interface, such as "br0",
wouldn't get deleted upon exit of OvS (when a route happens to be
assocaited).

This was first observed in the "ptap - triangle bridge setup with L2 and
L3 GRE tunnels" test, which runs as part of the system userspace
testsuite and uses the netdev datapath (as opoosed to several tests
which use the dummy datapath, where this issue isn't seen). The test
would pass every other time and fail the rest of the times because the
needed system interfaces (br-p1, br-p2 and br-p3) were already present
(from the previous successfull run which didn't clean up properly),
leading to a failure.

To fix the leak and clean up the interfaces upon exit, on its final
stage before destroying a netdev, in iface_destroy__(), the bridge calls
tnl_port_map_delete_ipdev() which takes care of freeing the instatiated
ip_dev structs that refer to a specific netdev.

An extra test is also introduced which verifies that the resources used
by OvS netdev datapath have been correctly cleaned up between
OVS_TRAFFIC_VSWITCHD_STOP and AT_CLEANUP.

Signed-off-by: Tiago Lam <tiago.lam@intel.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoconntrack: Fix using alg_exp_entry out of scope.
Ilya Maximets [Tue, 10 Jul 2018 11:05:50 +0000 (14:05 +0300)]
conntrack: Fix using alg_exp_entry out of scope.

'alg_exp_entry' is allocated on stack memory, but could be used via
'alg_exp' pointer inside 'write_ct_md' function, i.e. outside its scope.

CC: Darrell Ball <dlu998@gmail.com>
Fixes: bd5e81a0e596 ("Userspace Datapath: Add ALG infra and FTP.")
Signed-off-by: Ilya Maximets <i.maximets@samsung.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoNEWS: Re-add vhost zero copy support.
Ian Stokes [Tue, 10 Jul 2018 13:15:48 +0000 (14:15 +0100)]
NEWS: Re-add vhost zero copy support.

An entry for experimental vhost zero copy support was removed
incorrectly. Re-add this entry to NEWS.

Reported-by: Eelco Chaudron <echaudro@redhat.com>
Cc: Ciara Loftus <ciara.loftus@intel.com>
Fixes: c3c722d2c7ee ("Documentation: document ovs-dpdk flow offload")
Signed-off-by: Ian Stokes <ian.stokes@intel.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agotable: New function table_format() for formatting a table as a string.
Ben Pfaff [Mon, 9 Jul 2018 23:34:00 +0000 (16:34 -0700)]
table: New function table_format() for formatting a table as a string.

This will be useful for daemonized ovn-nbctl.

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Jakub Sitnicki <jkbs@redhat.com>
5 years agoxlate: use const struct in6_addr in linklocal check
Aaron Conole [Tue, 10 Jul 2018 13:34:38 +0000 (09:34 -0400)]
xlate: use const struct in6_addr in linklocal check

Commit 83c2757bd16e ("xlate: Move tnl_neigh_snoop() to
terminate_native_tunnel()") introduced a call to
IN6_IS_ADDR_MC_LINKLOCAL() when checking neighbor discovery.

The call to this assumes that the argument may be a const uint8_t *.
According to The Open Group Base Specifications Issue 7, 2018:

    macro is of type int and takes a single argument of
    type const struct in6_addr *

The GNU implementation allows a bit of flexibility, by internally
casting the argument.  However, other implementations (such as OS X)
more rigidly implement the standard and fail with errors like:

    error: member reference base type 'const uint8_t'
           (aka 'const unsigned char') is not a structure or union

Fixes: 83c2757bd16e ("xlate: Move tnl_neigh_snoop() to terminate_native_tunnel()")
Cc: Zoltan Balogh <zoltan.balogh.eth@gmail.com>
Cc: Jan Scheurich <jan.scheurich@ericsson.com>
Signed-off-by: Aaron Conole <aconole@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Clarify error messages in qos-add command.
Justin Pettit [Sat, 7 Jul 2018 21:07:27 +0000 (14:07 -0700)]
ovn-nbctl: Clarify error messages in qos-add command.

Signed-off-by: Justin Pettit <jpettit@ovn.org>
Reviewed-by: Yifeng Sun <pkusunyifeng@gmail.com>
5 years agoovn-nbctl: Correct qos-add documentation.
Justin Pettit [Sat, 7 Jul 2018 21:00:06 +0000 (14:00 -0700)]
ovn-nbctl: Correct qos-add documentation.

Signed-off-by: Justin Pettit <jpettit@ovn.org>
Reviewed-by: Yifeng Sun <pkusunyifeng@gmail.com>
5 years agoflow: Fix buffer overread for crafted IPv6 packets.
Ben Pfaff [Mon, 9 Jul 2018 20:04:03 +0000 (13:04 -0700)]
flow: Fix buffer overread for crafted IPv6 packets.

The ipv6_sanity_check() function implemented a check for IPv6 payload
length wrong: ip6_plen is the payload length but this function checked
whether it was longer than the total length of IPv6 header plus payload.
This meant that a packet with a crafted ip6_plen could result in a buffer
overread of up to the length of an IPv6 header (40 bytes).

The kernel datapath flow extraction code does not obviously have a similar
problem.

Reported-at: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9287
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Darrell Ball <dlu998@gmail.com>
5 years agotreewide: Remove pointless "return;" at ends of functions.
Ben Pfaff [Mon, 9 Jul 2018 23:47:03 +0000 (16:47 -0700)]
treewide: Remove pointless "return;" at ends of functions.

Found with:
    git ls-files | xargs pcregrep -n -M 'return;\n*}'

Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Darrell Ball <dlu998@gmail.com>
Tested-by: Darrell Ball <dlu998@gmail.com>
5 years agoovn-nbctl, ovn-sbctl, ovs-vsctl: Don't dup error message just to report it.
Jakub Sitnicki [Mon, 9 Jul 2018 23:40:06 +0000 (16:40 -0700)]
ovn-nbctl, ovn-sbctl, ovs-vsctl: Don't dup error message just to report it.

Get rid of a pointless copy operation.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Don't die in nbctl_lsp_set_type().
Jakub Sitnicki [Sat, 7 Jul 2018 11:10:04 +0000 (13:10 +0200)]
ovn-nbctl: Don't die in nbctl_lsp_set_type().

Propagate the error via the context instead.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Don't die in nbctl_lr_route_del().
Jakub Sitnicki [Sat, 7 Jul 2018 11:10:03 +0000 (13:10 +0200)]
ovn-nbctl: Don't die in nbctl_lr_route_del().

Propagate the error via the context instead.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Don't die in nbctl_lr_route_add().
Jakub Sitnicki [Sat, 7 Jul 2018 11:10:02 +0000 (13:10 +0200)]
ovn-nbctl: Don't die in nbctl_lr_route_add().

Propagate the error via the context instead.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Don't die in nbctl_lrp_set_enabled().
Jakub Sitnicki [Sat, 7 Jul 2018 11:10:01 +0000 (13:10 +0200)]
ovn-nbctl: Don't die in nbctl_lrp_set_enabled().

Propagate the error via the context instead.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Don't die in nbctl_lrp_del_gateway_chassis().
Jakub Sitnicki [Sat, 7 Jul 2018 11:10:00 +0000 (13:10 +0200)]
ovn-nbctl: Don't die in nbctl_lrp_del_gateway_chassis().

Propagate the error via the context instead.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Don't die in nbctl_lrp_get_gateway_chassis().
Jakub Sitnicki [Sat, 7 Jul 2018 11:09:59 +0000 (13:09 +0200)]
ovn-nbctl: Don't die in nbctl_lrp_get_gateway_chassis().

Propagate the error via the context instead.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Don't die in nbctl_lrp_set_gateway_chassis().
Jakub Sitnicki [Sat, 7 Jul 2018 11:09:58 +0000 (13:09 +0200)]
ovn-nbctl: Don't die in nbctl_lrp_set_gateway_chassis().

Propagate the error via the context instead.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Don't die in nbctl_lrp_add().
Jakub Sitnicki [Sat, 7 Jul 2018 11:09:57 +0000 (13:09 +0200)]
ovn-nbctl: Don't die in nbctl_lrp_add().

Propagate the error via the context instead.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
5 years agoovn-nbctl: Don't die in nbctl_lr_del().
Jakub Sitnicki [Sat, 7 Jul 2018 11:09:56 +0000 (13:09 +0200)]
ovn-nbctl: Don't die in nbctl_lr_del().

Propagate the error via the context instead.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>