diff mbox series

[ovs-dev,v5] netdev-afxdp: add new netdev type for AF_XDP.

Message ID 1555705334-4242-2-git-send-email-u9012063@gmail.com
State Superseded
Headers show
Series [ovs-dev,v5] netdev-afxdp: add new netdev type for AF_XDP. | expand

Commit Message

William Tu April 19, 2019, 8:22 p.m. UTC
The patch introduces experimental AF_XDP support for OVS netdev.
AF_XDP is a new address family working together with eBPF/XDP.
A socket with AF_XDP family can receive and send raw packets
from an eBPF/XDP program attached to the netdev.
For details introduction and configuration, see
Documentation/intro/install/afxdp.rst

Signed-off-by: William Tu <u9012063@gmail.com>
Co-authored-by: Yi-Hung Wei <yihung.wei@gmail.com>
Cc: Tim Rozet <trozet@redhat.com>
Cc: Eelco Chaudron <echaudro@redhat.com>
---
 Documentation/automake.mk             |   1 +
 Documentation/index.rst               |   1 +
 Documentation/intro/install/afxdp.rst | 299 +++++++++++
 Documentation/intro/install/index.rst |   1 +
 acinclude.m4                          |  23 +
 configure.ac                          |   1 +
 lib/automake.mk                       |   7 +-
 lib/dp-packet.c                       |  13 +
 lib/dp-packet.h                       |  32 +-
 lib/dpif-netdev-perf.h                |  13 +
 lib/netdev-afxdp.c                    | 592 ++++++++++++++++++++
 lib/netdev-afxdp.h                    |  46 ++
 lib/netdev-linux.c                    |  89 +++-
 lib/netdev-linux.h                    |   1 +
 lib/netdev-provider.h                 |   1 +
 lib/netdev.c                          |   1 +
 lib/xdpsock.c                         | 211 ++++++++
 lib/xdpsock.h                         | 133 +++++
 tests/automake.mk                     |  17 +
 tests/system-afxdp-macros.at          | 153 ++++++
 tests/system-afxdp-testsuite.at       |  26 +
 tests/system-afxdp-traffic.at         | 978 ++++++++++++++++++++++++++++++++++
 22 files changed, 2633 insertions(+), 6 deletions(-)
 create mode 100644 Documentation/intro/install/afxdp.rst
 create mode 100644 lib/netdev-afxdp.c
 create mode 100644 lib/netdev-afxdp.h
 create mode 100644 lib/xdpsock.c
 create mode 100644 lib/xdpsock.h
 create mode 100644 tests/system-afxdp-macros.at
 create mode 100644 tests/system-afxdp-testsuite.at
 create mode 100644 tests/system-afxdp-traffic.at

Comments

0-day Robot April 19, 2019, 10:16 p.m. UTC | #1
Bleep bloop.  Greetings William Tu, I am a robot and I have tried out your patch.
Thanks for your contribution.

I encountered some error that I wasn't expecting.  See the details below.


checkpatch:
ERROR: Co-author Yi-Hung Wei <yihung.wei@gmail.com> needs to sign off.
WARNING: Line is 80 characters long (recommended limit is 79)
#177 FILE: Documentation/intro/install/afxdp.rst:98:
- The following optional Kconfig options are also recommended, but not required:

WARNING: Line is 83 characters long (recommended limit is 79)
#185 FILE: Documentation/intro/install/afxdp.rst:106:
- If possible, run **./xdpsock -r -N -z -i <your device>** under linux/samples/bpf.

WARNING: Line is 81 characters long (recommended limit is 79)
#186 FILE: Documentation/intro/install/afxdp.rst:107:
  This is the OVS indepedent benchmark tools for AF_XDP. It makes sure your basic

WARNING: Line is 84 characters long (recommended limit is 79)
#197 FILE: Documentation/intro/install/afxdp.rst:118:
Second, go into the Linux source directory and build libbpf in the tools directory::

WARNING: Line is 95 characters long (recommended limit is 79)
#212 FILE: Documentation/intro/install/afxdp.rst:133:
Third, ensure the standard OVS requirements are installed and bootstrap/configure the package::

WARNING: Line is 81 characters long (recommended limit is 79)
#226 FILE: Documentation/intro/install/afxdp.rst:147:
  cat tests/system-afxdp-testsuite.dir/<failed number>/system-afxdp-testsuite.log

WARNING: Line is 82 characters long (recommended limit is 79)
#231 FILE: Documentation/intro/install/afxdp.rst:152:
Before running OVS with AF_XDP, make sure the libbpf and libelf are set-up right::

WARNING: Line is 88 characters long (recommended limit is 79)
#235 FILE: Documentation/intro/install/afxdp.rst:156:
Open vSwitch should be started using userspace datapath as described in :doc:`general`::

WARNING: Line is 87 characters long (recommended limit is 79)
#259 FILE: Documentation/intro/install/afxdp.rst:180:
    options:n_rxq=4 options:xdpmode=drv other_config:pmd-rxq-affinity="0:1,1:2,2:3,3:4"

WARNING: Line is 87 characters long (recommended limit is 79)
#311 FILE: Documentation/intro/install/afxdp.rst:232:
While running the traffic, use linux perf tool to see where your cpu spends its cycle::

WARNING: Line is 96 characters long (recommended limit is 79)
#329 FILE: Documentation/intro/install/afxdp.rst:250:
    ovs-vswitchd --no-chdir --pidfile -vvconn -vofproto_dpif -vunixctl --disable-system --detach

WARNING: Line is 85 characters long (recommended limit is 79)
#331 FILE: Documentation/intro/install/afxdp.rst:252:
        protocols=OpenFlow10,OpenFlow11,OpenFlow12,OpenFlow13,OpenFlow14,OpenFlow15 \

WARNING: Line is 81 characters long (recommended limit is 79)
#688 FILE: lib/netdev-afxdp.c:95:
    (struct dp_packet_afxdp *)((char *)base + i * sizeof(struct dp_packet_afxdp))

WARNING: Line is 81 characters long (recommended limit is 79)
#691 FILE: lib/netdev-afxdp.c:98:
static uint32_t opt_xdp_flags = XDP_FLAGS_UPDATE_IF_NOEXIST | XDP_FLAGS_SKB_MODE;

WARNING: Line is 81 characters long (recommended limit is 79)
#694 FILE: lib/netdev-afxdp.c:101:
static uint32_t opt_xdp_flags = XDP_FLAGS_UPDATE_IF_NOEXIST | XDP_FLAGS_DRV_MODE;

WARNING: Empty return followed by brace, consider omitting
#867 FILE: lib/netdev-afxdp.c:274:
}

WARNING: Empty return followed by brace, consider omitting
#881 FILE: lib/netdev-afxdp.c:288:
}

WARNING: Empty return followed by brace, consider omitting
#961 FILE: lib/netdev-afxdp.c:368:
}

WARNING: Empty return followed by brace, consider omitting
#1149 FILE: lib/netdev-afxdp.c:556:
}

Lines checked: 3063, Warnings: 19, Errors: 1


build:
make[2]: Leaving directory `/var/lib/jenkins/jobs/upstream_build_from_pw/workspace/datapath'
make[2]: Entering directory `/var/lib/jenkins/jobs/upstream_build_from_pw/workspace'
depbase=`echo lib/aes128.lo | sed 's|[^/]*$|.deps/&|;s|\.lo$||'`;\
/bin/sh ./libtool  --tag=CC   --mode=compile gcc -std=gnu99 -DHAVE_CONFIG_H -I.    -I ./include -I ./include -I ./lib -I ./lib    -Wstrict-prototypes -Wall -Wextra -Wno-sign-compare -Wpointer-arith -Wformat -Wformat-security -Wswitch-enum -Wunused-parameter -Wbad-function-cast -Wcast-align -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-field-initializers -fno-strict-aliasing -Wshadow -Werror -Werror   -g -O2 -MT lib/aes128.lo -MD -MP -MF $depbase.Tpo -c -o lib/aes128.lo lib/aes128.c &&\
mv -f $depbase.Tpo $depbase.Plo
libtool: compile:  gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I ./include -I ./include -I ./lib -I ./lib -Wstrict-prototypes -Wall -Wextra -Wno-sign-compare -Wpointer-arith -Wformat -Wformat-security -Wswitch-enum -Wunused-parameter -Wbad-function-cast -Wcast-align -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-field-initializers -fno-strict-aliasing -Wshadow -Werror -Werror -g -O2 -MT lib/aes128.lo -MD -MP -MF lib/.deps/aes128.Tpo -c lib/aes128.c -o lib/aes128.o
depbase=`echo lib/backtrace.lo | sed 's|[^/]*$|.deps/&|;s|\.lo$||'`;\
/bin/sh ./libtool  --tag=CC   --mode=compile gcc -std=gnu99 -DHAVE_CONFIG_H -I.    -I ./include -I ./include -I ./lib -I ./lib    -Wstrict-prototypes -Wall -Wextra -Wno-sign-compare -Wpointer-arith -Wformat -Wformat-security -Wswitch-enum -Wunused-parameter -Wbad-function-cast -Wcast-align -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-field-initializers -fno-strict-aliasing -Wshadow -Werror -Werror   -g -O2 -MT lib/backtrace.lo -MD -MP -MF $depbase.Tpo -c -o lib/backtrace.lo lib/backtrace.c &&\
mv -f $depbase.Tpo $depbase.Plo
libtool: compile:  gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I ./include -I ./include -I ./lib -I ./lib -Wstrict-prototypes -Wall -Wextra -Wno-sign-compare -Wpointer-arith -Wformat -Wformat-security -Wswitch-enum -Wunused-parameter -Wbad-function-cast -Wcast-align -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-field-initializers -fno-strict-aliasing -Wshadow -Werror -Werror -g -O2 -MT lib/backtrace.lo -MD -MP -MF lib/.deps/backtrace.Tpo -c lib/backtrace.c -o lib/backtrace.o
depbase=`echo lib/bfd.lo | sed 's|[^/]*$|.deps/&|;s|\.lo$||'`;\
/bin/sh ./libtool  --tag=CC   --mode=compile gcc -std=gnu99 -DHAVE_CONFIG_H -I.    -I ./include -I ./include -I ./lib -I ./lib    -Wstrict-prototypes -Wall -Wextra -Wno-sign-compare -Wpointer-arith -Wformat -Wformat-security -Wswitch-enum -Wunused-parameter -Wbad-function-cast -Wcast-align -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-field-initializers -fno-strict-aliasing -Wshadow -Werror -Werror   -g -O2 -MT lib/bfd.lo -MD -MP -MF $depbase.Tpo -c -o lib/bfd.lo lib/bfd.c &&\
mv -f $depbase.Tpo $depbase.Plo
libtool: compile:  gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I ./include -I ./include -I ./lib -I ./lib -Wstrict-prototypes -Wall -Wextra -Wno-sign-compare -Wpointer-arith -Wformat -Wformat-security -Wswitch-enum -Wunused-parameter -Wbad-function-cast -Wcast-align -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-field-initializers -fno-strict-aliasing -Wshadow -Werror -Werror -g -O2 -MT lib/bfd.lo -MD -MP -MF lib/.deps/bfd.Tpo -c lib/bfd.c -o lib/bfd.o
In file included from lib/dp-packet.h:33:0,
                 from lib/bfd.c:28:
./lib/xdpsock.h:21:23: fatal error: linux/bpf.h: No such file or directory
 #include <linux/bpf.h>
                       ^
compilation terminated.
make[2]: *** [lib/bfd.lo] Error 1
make[2]: Leaving directory `/var/lib/jenkins/jobs/upstream_build_from_pw/workspace'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/var/lib/jenkins/jobs/upstream_build_from_pw/workspace'
make: *** [all] Error 2


Please check this out.  If you feel there has been an error, please email aconole@bytheb.org

Thanks,
0-day Robot
Ben Pfaff April 22, 2019, 5:56 p.m. UTC | #2
On Fri, Apr 19, 2019 at 01:22:14PM -0700, William Tu wrote:
> The patch introduces experimental AF_XDP support for OVS netdev.
> AF_XDP is a new address family working together with eBPF/XDP.
> A socket with AF_XDP family can receive and send raw packets
> from an eBPF/XDP program attached to the netdev.
> For details introduction and configuration, see
> Documentation/intro/install/afxdp.rst
> 
> Signed-off-by: William Tu <u9012063@gmail.com>
> Co-authored-by: Yi-Hung Wei <yihung.wei@gmail.com>
> Cc: Tim Rozet <trozet@redhat.com>
> Cc: Eelco Chaudron <echaudro@redhat.com>

Thanks, William and Yi-Hung.

Before I installed libbpf, "configure" failed, even without
--enable-afxdp:

    config.status: error: Something went wrong bootstrapping makefile fragments
        for automatic dependency tracking.  Try re-running configure with the
        '--disable-dependency-tracking' option to at least be able to build
        the package (albeit without support for automatic dependency tracking).
    See `config.log' for more details

I'm attaching the full config.log in case it is helpful.

I would recommend adding a sentence or two to afxdp.rst explaining why
someone would want to use AF_XDP.  Currently it is kind of there
("...much better performance than AF_PACKET.") but it is not called out
very well.  Maybe something along the lines of saying that it aims to
have comparable performance to DPDK but cooperate better with existing
kernel mechanisms.  Otherwise, someone who is new to OVS or to AF_XDP
will not have any idea of the context.

In afxdp.rst, I'd also recommend explaining why the recommended kernel
config options are recommend.  I'd guess that the BPF_JIT ones are there
for performance and XDP_SOCKETS_DIAG is for debugging, but it'd be nice
to say so.

s/Fist/First/:
+Fist, clone a recent version of Linux bpf-next tree::

In the instructions for installing libbpf, I had to run plain "ldconfig"
by hand before the library showed up in "ldconfig -p" output.

I'm not sure everyone knows the system include path, so you might add
something like "e.g. /usr/local/include/bpf/xsk.h" to this note:
+.. note::
+   Make sure xsk.h is install in system's library path

"make install_headers" failed to install libbpf_util.h for me, so the
build failed.  I installed it by hand and it worked OK after that:

    blp@sigill:~/nicira/bpf-next/tools/lib/bpf(0)$ sudo cp libbpf_util.h /usr/local/include/bpf/

I didn't test AF_XDP at runtime, but I did verify that the binary
linked and started up OK.

I had to apply the following patch to suppress warnings from sparse and
GCC 8.x:

diff --git a/lib/netdev-afxdp.c b/lib/netdev-afxdp.c
index 56f313606190..17c99f389e63 100644
--- a/lib/netdev-afxdp.c
+++ b/lib/netdev-afxdp.c
@@ -91,8 +91,9 @@ VLOG_DEFINE_THIS_MODULE(netdev_afxdp);
 static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 20);
 
 #define UMEM2DESC(elem, base) ((uint64_t)((char *)elem - (char *)base))
-#define UMEM2XPKT(base, i) \
-    (struct dp_packet_afxdp *)((char *)base + i * sizeof(struct dp_packet_afxdp))
+#define UMEM2XPKT(base, i)                                          \
+    ALIGNED_CAST(struct dp_packet_afxdp *,                          \
+                 (char *)base + i * sizeof(struct dp_packet_afxdp))
 
 static uint32_t opt_xdp_bind_flags = XDP_COPY;
 static uint32_t opt_xdp_flags = XDP_FLAGS_UPDATE_IF_NOEXIST | XDP_FLAGS_SKB_MODE;
@@ -130,8 +131,8 @@ static struct xsk_umem_info *xsk_configure_umem(void *buffer, uint64_t size)
     for (i = NUM_FRAMES - 1; i >= 0; i--) {
         struct umem_elem *elem;
 
-        elem = (struct umem_elem *)((char *)umem->buffer
-                            + i * FRAME_SIZE);
+        elem = ALIGNED_CAST(struct umem_elem *,
+                            (char *)umem->buffer + i * FRAME_SIZE);
         umem_elem_push(&umem->mpool, elem);
     }
 
@@ -527,7 +528,8 @@ retry:
 
         addr = *xsk_ring_cons__comp_addr(&xsk->umem->cq, idx_cq++);
 
-        elem = (struct umem_elem *)((char *)xsk->umem->buffer + addr);
+        elem = ALIGNED_CAST(struct umem_elem *,
+                            (char *)xsk->umem->buffer + addr);
         umem_elem_push(&xsk->umem->mpool, elem);
     }
     xsk_ring_cons__release(&xsk->umem->cq, tx_done);

And the following to suppress additional warnings from Clang:

diff --git a/lib/netdev-afxdp.c b/lib/netdev-afxdp.c
index 56f313606190..c675cf2e51a8 100644
--- a/lib/netdev-afxdp.c
+++ b/lib/netdev-afxdp.c
@@ -273,7 +274,7 @@ xsk_destroy(struct xsk_socket_info *xsk)
     return;
 }
 
-static inline void
+static inline void OVS_UNUSED
 print_xsk_stat(struct xsk_socket_info *xsk OVS_UNUSED) {
     struct xdp_statistics stat;
     socklen_t optlen;
diff --git a/lib/xdpsock.c b/lib/xdpsock.c
index 9bd574e61774..8d6b37d3b6c2 100644
--- a/lib/xdpsock.c
+++ b/lib/xdpsock.c
@@ -70,7 +70,7 @@ static inline void ovs_spin_unlock(ovs_spinlock_t *sl)
     __atomic_store_n(&sl->locked, 0, __ATOMIC_RELEASE);
 }
 
-static inline int ovs_spin_trylock(ovs_spinlock_t *sl)
+static inline int OVS_UNUSED ovs_spin_trylock(ovs_spinlock_t *sl)
 {
     int exp = 0;
     return __atomic_compare_exchange_n(&sl->locked, &exp, 1,

Thanks,

Ben.
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.

It was created by openvswitch configure 2.11.90, which was
generated by GNU Autoconf 2.69.  Invocation command line was

  $ ../configure --enable-ssl --enable-Werror --prefix=/usr --localstatedir=/var KARCH=i386 --enable-silent-rules CFLAGS=-g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address P4C_BEHAVIORAL=/home/blp/.local/bin/p4c-behavioral --enable-sparse CC=gcc-8 --enable-afxdp

## --------- ##
## Platform. ##
## --------- ##

hostname = sigill
uname -m = x86_64
uname -r = 4.19.0-1-amd64
uname -s = Linux
uname -v = #1 SMP Debian 4.19.12-1 (2018-12-22)

/usr/bin/uname -p = unknown
/bin/uname -X     = unknown

/bin/arch              = x86_64
/usr/bin/arch -k       = unknown
/usr/convex/getsysinfo = unknown
/usr/bin/hostinfo      = unknown
/bin/machine           = unknown
/usr/bin/oslevel       = unknown
/bin/universe          = unknown

PATH: /home/blp/bin
PATH: /usr/local/bin
PATH: /usr/bin
PATH: /bin
PATH: /usr/local/games
PATH: /usr/games


## ----------- ##
## Core tests. ##
## ----------- ##

configure:3020: checking for a BSD-compatible install
configure:3088: result: /usr/bin/install -c
configure:3099: checking whether build environment is sane
configure:3154: result: yes
configure:3305: checking for a thread-safe mkdir -p
configure:3344: result: /usr/bin/mkdir -p
configure:3351: checking for gawk
configure:3381: result: no
configure:3351: checking for mawk
configure:3367: found /usr/bin/mawk
configure:3378: result: mawk
configure:3389: checking whether make sets $(MAKE)
configure:3411: result: yes
configure:3440: checking whether make supports nested variables
configure:3457: result: yes
configure:3536: checking how to create a pax tar archive
configure:3547: tar --version
tar (GNU tar) 1.30
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by John Gilmore and Jay Fenlason.
configure:3550: $? = 0
configure:3590: tardir=conftest.dir && eval tar --format=posix -chf - "$tardir" >conftest.tar
configure:3593: $? = 0
configure:3597: tar -xf - <conftest.tar
configure:3600: $? = 0
configure:3602: cat conftest.dir/file
GrepMe
configure:3605: $? = 0
configure:3618: result: gnutar
configure:3673: checking whether make supports the include directive
configure:3688: make -f confmf.GNU && cat confinc.out
this is the am__doit target
configure:3691: $? = 0
configure:3710: result: yes (GNU style)
configure:3780: checking for gcc
configure:3807: result: gcc-8
configure:4036: checking for C compiler version
configure:4045: gcc-8 --version >&5
gcc-8 (Debian 8.2.0-21) 8.2.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

configure:4056: $? = 0
configure:4045: gcc-8 -v >&5
Using built-in specs.
COLLECT_GCC=gcc-8
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/8/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 8.2.0-21' --with-bugurl=file:///usr/share/doc/gcc-8/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-8 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 8.2.0 (Debian 8.2.0-21) 
configure:4056: $? = 0
configure:4045: gcc-8 -V >&5
gcc-8: error: unrecognized command line option '-V'
gcc-8: fatal error: no input files
compilation terminated.
configure:4056: $? = 1
configure:4045: gcc-8 -qversion >&5
gcc-8: error: unrecognized command line option '-qversion'; did you mean '--version'?
gcc-8: fatal error: no input files
compilation terminated.
configure:4056: $? = 1
configure:4076: checking whether the C compiler works
configure:4098: gcc-8 -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c  >&5
configure:4102: $? = 0
configure:4150: result: yes
configure:4153: checking for C compiler default output file name
configure:4155: result: a.out
configure:4161: checking for suffix of executables
configure:4168: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c  >&5
configure:4172: $? = 0
configure:4194: result: 
configure:4216: checking whether we are cross compiling
configure:4224: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c  >&5
configure:4228: $? = 0
configure:4235: ./conftest
configure:4239: $? = 0
configure:4254: result: no
configure:4259: checking for suffix of object files
configure:4281: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:4285: $? = 0
configure:4306: result: o
configure:4310: checking whether we are using the GNU C compiler
configure:4329: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:4329: $? = 0
configure:4338: result: yes
configure:4347: checking whether gcc-8 accepts -g
configure:4367: gcc-8 -c -g  conftest.c >&5
configure:4367: $? = 0
configure:4408: result: yes
configure:4425: checking for gcc-8 option to accept ISO C89
configure:4488: gcc-8  -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:4488: $? = 0
configure:4501: result: none needed
configure:4526: checking whether gcc-8 understands -c and -o together
configure:4548: gcc-8 -c conftest.c -o conftest2.o
configure:4551: $? = 0
configure:4548: gcc-8 -c conftest.c -o conftest2.o
configure:4551: $? = 0
configure:4563: result: yes
configure:4582: checking dependency style of gcc-8
configure:4693: result: gcc3
configure:4708: checking for gcc-8 option to accept ISO C99
configure:4857: gcc-8  -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:4857: $? = 0
configure:4870: result: none needed
configure:4944: checking for g++
configure:4960: found /usr/bin/g++
configure:4971: result: g++
configure:4998: checking for C++ compiler version
configure:5007: g++ --version >&5
g++ (Debian 8.2.0-21) 8.2.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

configure:5018: $? = 0
configure:5007: g++ -v >&5
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/8/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 8.2.0-21' --with-bugurl=file:///usr/share/doc/gcc-8/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-8 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 8.2.0 (Debian 8.2.0-21) 
configure:5018: $? = 0
configure:5007: g++ -V >&5
g++: error: unrecognized command line option '-V'
g++: fatal error: no input files
compilation terminated.
configure:5018: $? = 1
configure:5007: g++ -qversion >&5
g++: error: unrecognized command line option '-qversion'; did you mean '--version'?
g++: fatal error: no input files
compilation terminated.
configure:5018: $? = 1
configure:5022: checking whether we are using the GNU C++ compiler
configure:5041: g++ -c   conftest.cpp >&5
configure:5041: $? = 0
configure:5050: result: yes
configure:5059: checking whether g++ accepts -g
configure:5079: g++ -c -g  conftest.cpp >&5
configure:5079: $? = 0
configure:5120: result: yes
configure:5145: checking dependency style of g++
configure:5256: result: gcc3
configure:5276: checking how to run the C preprocessor
configure:5307: gcc-8 -E  conftest.c
configure:5307: $? = 0
configure:5321: gcc-8 -E  conftest.c
conftest.c:11:10: fatal error: ac_nonexistent.h: No such file or directory
 #include <ac_nonexistent.h>
          ^~~~~~~~~~~~~~~~~~
compilation terminated.
configure:5321: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| /* end confdefs.h.  */
| #include <ac_nonexistent.h>
configure:5346: result: gcc-8 -E
configure:5366: gcc-8 -E  conftest.c
configure:5366: $? = 0
configure:5380: gcc-8 -E  conftest.c
conftest.c:11:10: fatal error: ac_nonexistent.h: No such file or directory
 #include <ac_nonexistent.h>
          ^~~~~~~~~~~~~~~~~~
compilation terminated.
configure:5380: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| /* end confdefs.h.  */
| #include <ac_nonexistent.h>
configure:5409: checking for grep that handles long lines and -e
configure:5467: result: /usr/bin/grep
configure:5472: checking for fgrep
configure:5534: result: /usr/bin/grep -F
configure:5539: checking for egrep
configure:5601: result: /usr/bin/grep -E
configure:5660: checking for pkg-config
configure:5678: found /usr/bin/pkg-config
configure:5690: result: /usr/bin/pkg-config
configure:5715: checking pkg-config is at least version 0.9.0
configure:5718: result: yes
configure:5733: checking for ANSI C header files
configure:5753: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:5753: $? = 0
configure:5826: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c  >&5
configure:5826: $? = 0
configure:5826: ./conftest
configure:5826: $? = 0
configure:5837: result: yes
configure:5850: checking for sys/types.h
configure:5850: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:5850: $? = 0
configure:5850: result: yes
configure:5850: checking for sys/stat.h
configure:5850: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:5850: $? = 0
configure:5850: result: yes
configure:5850: checking for stdlib.h
configure:5850: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:5850: $? = 0
configure:5850: result: yes
configure:5850: checking for string.h
configure:5850: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:5850: $? = 0
configure:5850: result: yes
configure:5850: checking for memory.h
configure:5850: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:5850: $? = 0
configure:5850: result: yes
configure:5850: checking for strings.h
configure:5850: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:5850: $? = 0
configure:5850: result: yes
configure:5850: checking for inttypes.h
configure:5850: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:5850: $? = 0
configure:5850: result: yes
configure:5850: checking for stdint.h
configure:5850: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:5850: $? = 0
configure:5850: result: yes
configure:5850: checking for unistd.h
configure:5850: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:5850: $? = 0
configure:5850: result: yes
configure:5863: checking minix/config.h usability
configure:5863: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
conftest.c:54:10: fatal error: minix/config.h: No such file or directory
compilation terminated.
configure:5863: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| /* end confdefs.h.  */
| #include <stdio.h>
| #ifdef HAVE_SYS_TYPES_H
| # include <sys/types.h>
| #endif
| #ifdef HAVE_SYS_STAT_H
| # include <sys/stat.h>
| #endif
| #ifdef STDC_HEADERS
| # include <stdlib.h>
| # include <stddef.h>
| #else
| # ifdef HAVE_STDLIB_H
| #  include <stdlib.h>
| # endif
| #endif
| #ifdef HAVE_STRING_H
| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
| #  include <memory.h>
| # endif
| # include <string.h>
| #endif
| #ifdef HAVE_STRINGS_H
| # include <strings.h>
| #endif
| #ifdef HAVE_INTTYPES_H
| # include <inttypes.h>
| #endif
| #ifdef HAVE_STDINT_H
| # include <stdint.h>
| #endif
| #ifdef HAVE_UNISTD_H
| # include <unistd.h>
| #endif
| #include <minix/config.h>
configure:5863: result: no
configure:5863: checking minix/config.h presence
configure:5863: gcc-8 -E  conftest.c
conftest.c:21:10: fatal error: minix/config.h: No such file or directory
 #include <minix/config.h>
          ^~~~~~~~~~~~~~~~
compilation terminated.
configure:5863: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| /* end confdefs.h.  */
| #include <minix/config.h>
configure:5863: result: no
configure:5863: checking for minix/config.h
configure:5863: result: no
configure:5884: checking whether it is safe to define __EXTENSIONS__
configure:5902: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:5902: $? = 0
configure:5909: result: yes
configure:5923: checking whether byte ordering is bigendian
configure:5938: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
conftest.c:27:9: error: unknown type name 'not'
conftest.c:27:15: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'universal'
conftest.c:27:15: error: unknown type name 'universal'
configure:5938: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define __EXTENSIONS__ 1
| #define _ALL_SOURCE 1
| #define _GNU_SOURCE 1
| #define _POSIX_PTHREAD_SEMANTICS 1
| #define _TANDEM_SOURCE 1
| /* end confdefs.h.  */
| #ifndef __APPLE_CC__
| 	       not a universal capable compiler
| 	     #endif
| 	     typedef int dummy;
| 
configure:5983: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:5983: $? = 0
configure:6001: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
conftest.c: In function 'main':
conftest.c:33:4: error: unknown type name 'not'; did you mean 'ino_t'?
conftest.c:33:12: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'endian'
configure:6001: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define __EXTENSIONS__ 1
| #define _ALL_SOURCE 1
| #define _GNU_SOURCE 1
| #define _POSIX_PTHREAD_SEMANTICS 1
| #define _TANDEM_SOURCE 1
| /* end confdefs.h.  */
| #include <sys/types.h>
| 		#include <sys/param.h>
| 
| int
| main ()
| {
| #if BYTE_ORDER != BIG_ENDIAN
| 		 not big endian
| 		#endif
| 
|   ;
|   return 0;
| }
configure:6129: result: no
configure:6154: checking for special C compiler options needed for large files
configure:6199: result: no
configure:6205: checking for _FILE_OFFSET_BITS value needed for large files
configure:6230: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:6230: $? = 0
configure:6262: result: no
configure:6377: checking build system type
configure:6391: result: x86_64-unknown-linux-gnu
configure:6411: checking host system type
configure:6424: result: x86_64-unknown-linux-gnu
configure:6465: checking how to print strings
configure:6492: result: printf
configure:6513: checking for a sed that does not truncate output
configure:6577: result: /usr/bin/sed
configure:6625: checking for ld used by gcc-8
configure:6692: result: /usr/bin/ld
configure:6699: checking if the linker (/usr/bin/ld) is GNU ld
configure:6714: result: yes
configure:6726: checking for BSD- or MS-compatible name lister (nm)
configure:6775: result: /usr/bin/nm -B
configure:6905: checking the name lister (/usr/bin/nm -B) interface
configure:6912: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:6915: /usr/bin/nm -B "conftest.o"
configure:6918: output
                 U _GLOBAL_OFFSET_TABLE_
0000000000000000 t _GLOBAL__sub_D_00099_0_some_variable
0000000000000000 t _GLOBAL__sub_I_00099_1_some_variable
                 U __asan_init
                 U __asan_register_globals
                 U __asan_unregister_globals
                 U __asan_version_mismatch_check_v8
0000000000000040 B __odr_asan.some_variable
0000000000000000 B some_variable
configure:6925: result: BSD nm
configure:6928: checking whether ln -s works
configure:6932: result: yes
configure:6940: checking the maximum length of command line arguments
configure:7071: result: 1572864
configure:7088: checking whether the shell understands some XSI constructs
configure:7098: result: yes
configure:7102: checking whether the shell understands "+="
configure:7108: result: yes
configure:7143: checking how to convert x86_64-unknown-linux-gnu file names to x86_64-unknown-linux-gnu format
configure:7183: result: func_convert_file_noop
configure:7190: checking how to convert x86_64-unknown-linux-gnu file names to toolchain format
configure:7210: result: func_convert_file_noop
configure:7217: checking for /usr/bin/ld option to reload object files
configure:7224: result: -r
configure:7298: checking for objdump
configure:7314: found /usr/bin/objdump
configure:7325: result: objdump
configure:7357: checking how to recognize dependent libraries
configure:7555: result: pass_all
configure:7640: checking for dlltool
configure:7670: result: no
configure:7700: checking how to associate runtime and link libraries
configure:7727: result: printf %s\n
configure:7787: checking for ar
configure:7803: found /usr/bin/ar
configure:7814: result: ar
configure:7851: checking for archiver @FILE support
configure:7868: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:7868: $? = 0
configure:7871: ar cru libconftest.a @conftest.lst >&5
ar: `u' modifier ignored since `D' is the default (see `U')
configure:7874: $? = 0
configure:7879: ar cru libconftest.a @conftest.lst >&5
ar: `u' modifier ignored since `D' is the default (see `U')
ar: conftest.o: No such file or directory
configure:7882: $? = 1
configure:7894: result: @
configure:7952: checking for strip
configure:7968: found /usr/bin/strip
configure:7979: result: strip
configure:8051: checking for ranlib
configure:8067: found /usr/bin/ranlib
configure:8078: result: ranlib
configure:8180: checking command to parse /usr/bin/nm -B output from gcc-8 object
configure:8300: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:8303: $? = 0
configure:8307: /usr/bin/nm -B conftest.o \| sed -n -e 's/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p' | sed '/ __gnu_lto/d' \> conftest.nm
configure:8310: $? = 0
configure:8376: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c conftstm.o >&5
configure:8379: $? = 0
configure:8417: result: ok
configure:8454: checking for sysroot
configure:8484: result: no
configure:8561: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:8564: $? = 0
configure:8753: checking for mt
configure:8769: found /usr/bin/mt
configure:8780: result: mt
configure:8803: checking if mt is a manifest tool
configure:8809: mt '-?'
configure:8817: result: no
configure:9456: checking for dlfcn.h
configure:9456: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:9456: $? = 0
configure:9456: result: yes
configure:9672: checking for objdir
configure:9687: result: .libs
configure:9958: checking if gcc-8 supports -fno-rtti -fno-exceptions
configure:9976: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  -fno-rtti -fno-exceptions conftest.c >&5
cc1: warning: command line option '-fno-rtti' is valid for C++/ObjC++ but not for C
configure:9980: $? = 0
configure:9993: result: no
configure:10320: checking for gcc-8 option to produce PIC
configure:10327: result: -fPIC -DPIC
configure:10335: checking if gcc-8 PIC flag -fPIC -DPIC works
configure:10353: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  -fPIC -DPIC -DPIC conftest.c >&5
configure:10357: $? = 0
configure:10370: result: yes
configure:10399: checking if gcc-8 static flag -static works
configure:10427: result: no
configure:10442: checking if gcc-8 supports -c -o file.o
configure:10463: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  -o out/conftest2.o conftest.c >&5
configure:10467: $? = 0
configure:10489: result: yes
configure:10497: checking if gcc-8 supports -c -o file.o
configure:10544: result: yes
configure:10577: checking whether the gcc-8 linker (/usr/bin/ld -m elf_x86_64) supports shared libraries
configure:11734: result: yes
configure:11974: checking dynamic linker characteristics
configure:12474: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   -Wl,-rpath -Wl,/foo conftest.c  >&5
configure:12474: $? = 0
configure:12708: result: GNU/Linux ld.so
configure:12815: checking how to hardcode library paths into programs
configure:12840: result: immediate
configure:13380: checking whether stripping libraries is possible
configure:13385: result: yes
configure:13420: checking if libtool supports shared libraries
configure:13422: result: yes
configure:13425: checking whether to build shared libraries
configure:13446: result: no
configure:13449: checking whether to build static libraries
configure:13453: result: yes
configure:13476: checking how to run the C++ preprocessor
configure:13503: g++ -E  conftest.cpp
configure:13503: $? = 0
configure:13517: g++ -E  conftest.cpp
conftest.cpp:28:10: fatal error: ac_nonexistent.h: No such file or directory
 #include <ac_nonexistent.h>
          ^~~~~~~~~~~~~~~~~~
compilation terminated.
configure:13517: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define __EXTENSIONS__ 1
| #define _ALL_SOURCE 1
| #define _GNU_SOURCE 1
| #define _POSIX_PTHREAD_SEMANTICS 1
| #define _TANDEM_SOURCE 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| /* end confdefs.h.  */
| #include <ac_nonexistent.h>
configure:13542: result: g++ -E
configure:13562: g++ -E  conftest.cpp
configure:13562: $? = 0
configure:13576: g++ -E  conftest.cpp
conftest.cpp:28:10: fatal error: ac_nonexistent.h: No such file or directory
 #include <ac_nonexistent.h>
          ^~~~~~~~~~~~~~~~~~
compilation terminated.
configure:13576: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define __EXTENSIONS__ 1
| #define _ALL_SOURCE 1
| #define _GNU_SOURCE 1
| #define _POSIX_PTHREAD_SEMANTICS 1
| #define _TANDEM_SOURCE 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| /* end confdefs.h.  */
| #include <ac_nonexistent.h>
configure:13745: checking for ld used by g++
configure:13812: result: /usr/bin/ld -m elf_x86_64
configure:13819: checking if the linker (/usr/bin/ld -m elf_x86_64) is GNU ld
configure:13834: result: yes
configure:13889: checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries
configure:14891: result: yes
configure:14927: g++ -c -g -O2  conftest.cpp >&5
configure:14930: $? = 0
configure:15450: checking for g++ option to produce PIC
configure:15457: result: -fPIC -DPIC
configure:15465: checking if g++ PIC flag -fPIC -DPIC works
configure:15483: g++ -c -g -O2  -fPIC -DPIC -DPIC conftest.cpp >&5
configure:15487: $? = 0
configure:15500: result: yes
configure:15523: checking if g++ static flag -static works
configure:15551: result: yes
configure:15563: checking if g++ supports -c -o file.o
configure:15584: g++ -c -g -O2  -o out/conftest2.o conftest.cpp >&5
configure:15588: $? = 0
configure:15610: result: yes
configure:15615: checking if g++ supports -c -o file.o
configure:15662: result: yes
configure:15692: checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries
configure:15731: result: yes
configure:15872: checking dynamic linker characteristics
configure:16540: result: GNU/Linux ld.so
configure:16593: checking how to hardcode library paths into programs
configure:16618: result: immediate
configure:16715: checking for library containing pow
configure:16746: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c  >&5
conftest.c:35:6: warning: conflicting types for built-in function 'pow' [-Wbuiltin-declaration-mismatch]
/usr/bin/ld: /tmp/ccHizfzN.o: undefined reference to symbol 'pow@@GLIBC_2.2.5'
/usr/bin/ld: //lib/x86_64-linux-gnu/libm.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
configure:16746: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define __EXTENSIONS__ 1
| #define _ALL_SOURCE 1
| #define _GNU_SOURCE 1
| #define _POSIX_PTHREAD_SEMANTICS 1
| #define _TANDEM_SOURCE 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| /* end confdefs.h.  */
| 
| /* Override any GCC internal prototype to avoid an error.
|    Use char because int might match the return type of a GCC
|    builtin and then its argument prototype would still apply.  */
| #ifdef __cplusplus
| extern "C"
| #endif
| char pow ();
| int
| main ()
| {
| return pow ();
|   ;
|   return 0;
| }
configure:16746: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -lm   >&5
conftest.c:35:6: warning: conflicting types for built-in function 'pow' [-Wbuiltin-declaration-mismatch]
configure:16746: $? = 0
configure:16763: result: -lm
configure:16771: checking for library containing clock_gettime
configure:16802: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -lm  >&5
configure:16802: $? = 0
configure:16819: result: none required
configure:16827: checking for library containing timer_create
configure:16858: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -lm  >&5
/usr/bin/ld: /tmp/ccRXI7sX.o: undefined reference to symbol 'timer_create@@GLIBC_2.3.3'
/usr/bin/ld: //lib/x86_64-linux-gnu/librt.so.1: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
configure:16858: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define __EXTENSIONS__ 1
| #define _ALL_SOURCE 1
| #define _GNU_SOURCE 1
| #define _POSIX_PTHREAD_SEMANTICS 1
| #define _TANDEM_SOURCE 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| /* end confdefs.h.  */
| 
| /* Override any GCC internal prototype to avoid an error.
|    Use char because int might match the return type of a GCC
|    builtin and then its argument prototype would still apply.  */
| #ifdef __cplusplus
| extern "C"
| #endif
| char timer_create ();
| int
| main ()
| {
| return timer_create ();
|   ;
|   return 0;
| }
configure:16858: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -lrt  -lm  >&5
configure:16858: $? = 0
configure:16875: result: -lrt
configure:16883: checking for library containing pthread_rwlock_tryrdlock
configure:16914: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -lrt -lm  >&5
/usr/bin/ld: /tmp/ccMe6uD0.o: undefined reference to symbol 'pthread_rwlock_tryrdlock@@GLIBC_2.2.5'
/usr/bin/ld: //lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
configure:16914: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define __EXTENSIONS__ 1
| #define _ALL_SOURCE 1
| #define _GNU_SOURCE 1
| #define _POSIX_PTHREAD_SEMANTICS 1
| #define _TANDEM_SOURCE 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| /* end confdefs.h.  */
| 
| /* Override any GCC internal prototype to avoid an error.
|    Use char because int might match the return type of a GCC
|    builtin and then its argument prototype would still apply.  */
| #ifdef __cplusplus
| extern "C"
| #endif
| char pthread_rwlock_tryrdlock ();
| int
| main ()
| {
| return pthread_rwlock_tryrdlock ();
|   ;
|   return 0;
| }
configure:16914: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -lpthread  -lrt -lm  >&5
configure:16914: $? = 0
configure:16931: result: -lpthread
configure:16939: checking for library containing pthread_rwlockattr_destroy
configure:16970: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -lpthread -lrt -lm  >&5
configure:16970: $? = 0
configure:16987: result: none required
configure:16995: checking whether strerror_r is declared
configure:16995: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:16995: $? = 0
configure:16995: result: yes
configure:17008: checking for strerror_r
configure:17008: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -lpthread -lrt -lm  >&5
configure:17008: $? = 0
configure:17008: result: yes
configure:17017: checking whether strerror_r returns char *
configure:17041: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:17041: $? = 0
configure:17079: result: yes
configure:17088: checking vmware.h usability
configure:17088: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
conftest.c:64:10: fatal error: vmware.h: No such file or directory
compilation terminated.
configure:17088: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define __EXTENSIONS__ 1
| #define _ALL_SOURCE 1
| #define _GNU_SOURCE 1
| #define _POSIX_PTHREAD_SEMANTICS 1
| #define _TANDEM_SOURCE 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define HAVE_DECL_STRERROR_R 1
| #define HAVE_STRERROR_R 1
| #define STRERROR_R_CHAR_P 1
| /* end confdefs.h.  */
| #include <stdio.h>
| #ifdef HAVE_SYS_TYPES_H
| # include <sys/types.h>
| #endif
| #ifdef HAVE_SYS_STAT_H
| # include <sys/stat.h>
| #endif
| #ifdef STDC_HEADERS
| # include <stdlib.h>
| # include <stddef.h>
| #else
| # ifdef HAVE_STDLIB_H
| #  include <stdlib.h>
| # endif
| #endif
| #ifdef HAVE_STRING_H
| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
| #  include <memory.h>
| # endif
| # include <string.h>
| #endif
| #ifdef HAVE_STRINGS_H
| # include <strings.h>
| #endif
| #ifdef HAVE_INTTYPES_H
| # include <inttypes.h>
| #endif
| #ifdef HAVE_STDINT_H
| # include <stdint.h>
| #endif
| #ifdef HAVE_UNISTD_H
| # include <unistd.h>
| #endif
| #include <vmware.h>
configure:17088: result: no
configure:17088: checking vmware.h presence
configure:17088: gcc-8 -E  conftest.c
conftest.c:31:10: fatal error: vmware.h: No such file or directory
 #include <vmware.h>
          ^~~~~~~~~~
compilation terminated.
configure:17088: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define __EXTENSIONS__ 1
| #define _ALL_SOURCE 1
| #define _GNU_SOURCE 1
| #define _POSIX_PTHREAD_SEMANTICS 1
| #define _TANDEM_SOURCE 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define HAVE_DECL_STRERROR_R 1
| #define HAVE_STRERROR_R 1
| #define STRERROR_R_CHAR_P 1
| /* end confdefs.h.  */
| #include <vmware.h>
configure:17088: result: no
configure:17088: checking for vmware.h
configure:17088: result: no
configure:17109: checking for MSVC x64 compiler
configure:17124: result: no
configure:17129: checking windows.h usability
configure:17129: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
conftest.c:64:10: fatal error: windows.h: No such file or directory
compilation terminated.
configure:17129: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define __EXTENSIONS__ 1
| #define _ALL_SOURCE 1
| #define _GNU_SOURCE 1
| #define _POSIX_PTHREAD_SEMANTICS 1
| #define _TANDEM_SOURCE 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define HAVE_DECL_STRERROR_R 1
| #define HAVE_STRERROR_R 1
| #define STRERROR_R_CHAR_P 1
| /* end confdefs.h.  */
| #include <stdio.h>
| #ifdef HAVE_SYS_TYPES_H
| # include <sys/types.h>
| #endif
| #ifdef HAVE_SYS_STAT_H
| # include <sys/stat.h>
| #endif
| #ifdef STDC_HEADERS
| # include <stdlib.h>
| # include <stddef.h>
| #else
| # ifdef HAVE_STDLIB_H
| #  include <stdlib.h>
| # endif
| #endif
| #ifdef HAVE_STRING_H
| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
| #  include <memory.h>
| # endif
| # include <string.h>
| #endif
| #ifdef HAVE_STRINGS_H
| # include <strings.h>
| #endif
| #ifdef HAVE_INTTYPES_H
| # include <inttypes.h>
| #endif
| #ifdef HAVE_STDINT_H
| # include <stdint.h>
| #endif
| #ifdef HAVE_UNISTD_H
| # include <unistd.h>
| #endif
| #include <windows.h>
configure:17129: result: no
configure:17129: checking windows.h presence
configure:17129: gcc-8 -E  conftest.c
conftest.c:31:10: fatal error: windows.h: No such file or directory
 #include <windows.h>
          ^~~~~~~~~~~
compilation terminated.
configure:17129: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define __EXTENSIONS__ 1
| #define _ALL_SOURCE 1
| #define _GNU_SOURCE 1
| #define _POSIX_PTHREAD_SEMANTICS 1
| #define _TANDEM_SOURCE 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define HAVE_DECL_STRERROR_R 1
| #define HAVE_STRERROR_R 1
| #define STRERROR_R_CHAR_P 1
| /* end confdefs.h.  */
| #include <windows.h>
configure:17129: result: no
configure:17129: checking for windows.h
configure:17129: result: no
configure:17351: checking for linux/netlink.h
configure:17351: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:17351: $? = 0
configure:17351: result: yes
configure:17407: checking for pkg-config
configure:17437: result: /usr/bin/pkg-config
configure:17499: checking whether compiling and linking against OpenSSL works
Trying link with SSL_LDFLAGS=; SSL_LIBS=-lssl -lcrypto; SSL_INCLUDES=
configure:17521: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address     conftest.c -lssl -lcrypto -lpthread -lrt -lm  >&5
configure:17521: $? = 0
configure:17523: result: yes
configure:17583: checking whether SSL_set_tlsext_host_name is declared
configure:17583: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c >&5
configure:17583: $? = 0
configure:17583: result: yes
configure:17612: checking for capng_clear in -lcap-ng
configure:17637: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -lcap-ng  -lpthread -lrt -lm  >&5
/usr/bin/ld: cannot find -lcap-ng
collect2: error: ld returned 1 exit status
configure:17637: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define __EXTENSIONS__ 1
| #define _ALL_SOURCE 1
| #define _GNU_SOURCE 1
| #define _POSIX_PTHREAD_SEMANTICS 1
| #define _TANDEM_SOURCE 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define HAVE_DECL_STRERROR_R 1
| #define HAVE_STRERROR_R 1
| #define STRERROR_R_CHAR_P 1
| #define VSTUDIO_DDK 1
| #define HAVE_NETLINK 1
| #define HAVE_OPENSSL 1
| #define OPENSSL_SUPPORTS_SNI 1
| /* end confdefs.h.  */
| 
| /* Override any GCC internal prototype to avoid an error.
|    Use char because int might match the return type of a GCC
|    builtin and then its argument prototype would still apply.  */
| #ifdef __cplusplus
| extern "C"
| #endif
| char capng_clear ();
| int
| main ()
| {
| return capng_clear ();
|   ;
|   return 0;
| }
configure:17646: result: no
configure:17660: WARNING: cannot find libcap-ng.
--user option will not be supported on Linux.
(you may use --disable-libcapng to suppress this warning). 
configure:17693: checking for Python 2.x for x >= 7
configure:17726: result: /usr/bin/python2
configure:17746: checking for Python 3.x for x >= 4
configure:17779: result: /usr/bin/python3
configure:17799: checking for Python 2 or 3
configure:17817: result: /usr/bin/python2
configure:17831: checking for flake8
configure:17842: result: yes
configure:17852: checking for sphinx
configure:17863: result: yes
configure:17873: checking for dot
configure:17884: result: yes
configure:17894: checking net/if_dl.h usability
configure:17894: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
conftest.c:68:10: fatal error: net/if_dl.h: No such file or directory
compilation terminated.
configure:17894: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define __EXTENSIONS__ 1
| #define _ALL_SOURCE 1
| #define _GNU_SOURCE 1
| #define _POSIX_PTHREAD_SEMANTICS 1
| #define _TANDEM_SOURCE 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define HAVE_DECL_STRERROR_R 1
| #define HAVE_STRERROR_R 1
| #define STRERROR_R_CHAR_P 1
| #define VSTUDIO_DDK 1
| #define HAVE_NETLINK 1
| #define HAVE_OPENSSL 1
| #define OPENSSL_SUPPORTS_SNI 1
| /* end confdefs.h.  */
| #include <stdio.h>
| #ifdef HAVE_SYS_TYPES_H
| # include <sys/types.h>
| #endif
| #ifdef HAVE_SYS_STAT_H
| # include <sys/stat.h>
| #endif
| #ifdef STDC_HEADERS
| # include <stdlib.h>
| # include <stddef.h>
| #else
| # ifdef HAVE_STDLIB_H
| #  include <stdlib.h>
| # endif
| #endif
| #ifdef HAVE_STRING_H
| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
| #  include <memory.h>
| # endif
| # include <string.h>
| #endif
| #ifdef HAVE_STRINGS_H
| # include <strings.h>
| #endif
| #ifdef HAVE_INTTYPES_H
| # include <inttypes.h>
| #endif
| #ifdef HAVE_STDINT_H
| # include <stdint.h>
| #endif
| #ifdef HAVE_UNISTD_H
| # include <unistd.h>
| #endif
| #include <net/if_dl.h>
configure:17894: result: no
configure:17894: checking net/if_dl.h presence
configure:17894: gcc-8 -E  conftest.c
conftest.c:35:10: fatal error: net/if_dl.h: No such file or directory
 #include <net/if_dl.h>
          ^~~~~~~~~~~~~
compilation terminated.
configure:17894: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define __EXTENSIONS__ 1
| #define _ALL_SOURCE 1
| #define _GNU_SOURCE 1
| #define _POSIX_PTHREAD_SEMANTICS 1
| #define _TANDEM_SOURCE 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define HAVE_DECL_STRERROR_R 1
| #define HAVE_STRERROR_R 1
| #define STRERROR_R_CHAR_P 1
| #define VSTUDIO_DDK 1
| #define HAVE_NETLINK 1
| #define HAVE_OPENSSL 1
| #define OPENSSL_SUPPORTS_SNI 1
| /* end confdefs.h.  */
| #include <net/if_dl.h>
configure:17894: result: no
configure:17894: checking for net/if_dl.h
configure:17894: result: no
configure:17973: checking whether strtok_r macro segfaults on some inputs
configure:18009: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -lpthread -lrt -lm  >&5
configure:18009: $? = 0
configure:18009: ./conftest
configure:18009: $? = 0
configure:18019: result: no
configure:18028: checking whether AF_XDP is supported
configure:18037: checking bpf/libbpf.h usability
configure:18037: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:18037: $? = 0
configure:18037: result: yes
configure:18037: checking bpf/libbpf.h presence
configure:18037: gcc-8 -E  conftest.c
configure:18037: $? = 0
configure:18037: result: yes
configure:18037: checking for bpf/libbpf.h
configure:18037: result: yes
configure:18045: checking linux/if_xdp.h usability
configure:18045: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:18045: $? = 0
configure:18045: result: yes
configure:18045: checking linux/if_xdp.h presence
configure:18045: gcc-8 -E  conftest.c
configure:18045: $? = 0
configure:18045: result: yes
configure:18045: checking for linux/if_xdp.h
configure:18045: result: yes
configure:18071: checking whether sys_siglist is declared
configure:18071: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:18071: $? = 0
configure:18071: result: yes
configure:18083: checking for struct stat.st_mtim.tv_nsec
configure:18083: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:18083: $? = 0
configure:18083: result: yes
configure:18093: checking for struct stat.st_mtimensec
configure:18093: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
conftest.c: In function 'main':
conftest.c:44:13: error: 'struct stat' has no member named 'st_mtimensec'; did you mean 'st_mtim'?
configure:18093: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define __EXTENSIONS__ 1
| #define _ALL_SOURCE 1
| #define _GNU_SOURCE 1
| #define _POSIX_PTHREAD_SEMANTICS 1
| #define _TANDEM_SOURCE 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define HAVE_DECL_STRERROR_R 1
| #define HAVE_STRERROR_R 1
| #define STRERROR_R_CHAR_P 1
| #define VSTUDIO_DDK 1
| #define HAVE_NETLINK 1
| #define HAVE_OPENSSL 1
| #define OPENSSL_SUPPORTS_SNI 1
| #define HAVE_AF_XDP 1
| #define HAVE_DECL_SYS_SIGLIST 1
| #define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1
| /* end confdefs.h.  */
| #include <sys/stat.h>
| 
| int
| main ()
| {
| static struct stat ac_aggr;
| if (ac_aggr.st_mtimensec)
| return 0;
|   ;
|   return 0;
| }
configure:18093: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
conftest.c: In function 'main':
conftest.c:44:20: error: 'struct stat' has no member named 'st_mtimensec'; did you mean 'st_mtim'?
configure:18093: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define __EXTENSIONS__ 1
| #define _ALL_SOURCE 1
| #define _GNU_SOURCE 1
| #define _POSIX_PTHREAD_SEMANTICS 1
| #define _TANDEM_SOURCE 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define HAVE_DECL_STRERROR_R 1
| #define HAVE_STRERROR_R 1
| #define STRERROR_R_CHAR_P 1
| #define VSTUDIO_DDK 1
| #define HAVE_NETLINK 1
| #define HAVE_OPENSSL 1
| #define OPENSSL_SUPPORTS_SNI 1
| #define HAVE_AF_XDP 1
| #define HAVE_DECL_SYS_SIGLIST 1
| #define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1
| /* end confdefs.h.  */
| #include <sys/stat.h>
| 
| int
| main ()
| {
| static struct stat ac_aggr;
| if (sizeof ac_aggr.st_mtimensec)
| return 0;
|   ;
|   return 0;
| }
configure:18093: result: no
configure:18104: checking for struct ifreq.ifr_flagshigh
configure:18104: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
conftest.c: In function 'main':
conftest.c:44:12: error: 'struct ifreq' has no member named 'ifr_flagshigh'
configure:18104: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define __EXTENSIONS__ 1
| #define _ALL_SOURCE 1
| #define _GNU_SOURCE 1
| #define _POSIX_PTHREAD_SEMANTICS 1
| #define _TANDEM_SOURCE 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define HAVE_DECL_STRERROR_R 1
| #define HAVE_STRERROR_R 1
| #define STRERROR_R_CHAR_P 1
| #define VSTUDIO_DDK 1
| #define HAVE_NETLINK 1
| #define HAVE_OPENSSL 1
| #define OPENSSL_SUPPORTS_SNI 1
| #define HAVE_AF_XDP 1
| #define HAVE_DECL_SYS_SIGLIST 1
| #define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1
| /* end confdefs.h.  */
| #include <net/if.h>
| 
| int
| main ()
| {
| static struct ifreq ac_aggr;
| if (ac_aggr.ifr_flagshigh)
| return 0;
|   ;
|   return 0;
| }
configure:18104: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
conftest.c: In function 'main':
conftest.c:44:19: error: 'struct ifreq' has no member named 'ifr_flagshigh'
configure:18104: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define __EXTENSIONS__ 1
| #define _ALL_SOURCE 1
| #define _GNU_SOURCE 1
| #define _POSIX_PTHREAD_SEMANTICS 1
| #define _TANDEM_SOURCE 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define HAVE_DECL_STRERROR_R 1
| #define HAVE_STRERROR_R 1
| #define STRERROR_R_CHAR_P 1
| #define VSTUDIO_DDK 1
| #define HAVE_NETLINK 1
| #define HAVE_OPENSSL 1
| #define OPENSSL_SUPPORTS_SNI 1
| #define HAVE_AF_XDP 1
| #define HAVE_DECL_SYS_SIGLIST 1
| #define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1
| /* end confdefs.h.  */
| #include <net/if.h>
| 
| int
| main ()
| {
| static struct ifreq ac_aggr;
| if (sizeof ac_aggr.ifr_flagshigh)
| return 0;
|   ;
|   return 0;
| }
configure:18104: result: no
configure:18115: checking for struct mmsghdr.msg_len
configure:18115: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:18115: $? = 0
configure:18115: result: yes
configure:18126: checking for struct sockaddr_in6.sin6_scope_id
configure:18126: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:18126: $? = 0
configure:18126: result: yes
configure:18142: checking for mlockall
configure:18142: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -lpthread -lrt -lm  >&5
configure:18142: $? = 0
configure:18142: result: yes
configure:18142: checking for strnlen
configure:18142: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -lpthread -lrt -lm  >&5
configure:18142: $? = 0
configure:18142: result: yes
configure:18142: checking for getloadavg
configure:18142: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -lpthread -lrt -lm  >&5
configure:18142: $? = 0
configure:18142: result: yes
configure:18142: checking for statvfs
configure:18142: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -lpthread -lrt -lm  >&5
configure:18142: $? = 0
configure:18142: result: yes
configure:18142: checking for getmntent_r
configure:18142: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -lpthread -lrt -lm  >&5
configure:18142: $? = 0
configure:18142: result: yes
configure:18142: checking for sendmmsg
configure:18142: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -lpthread -lrt -lm  >&5
configure:18142: $? = 0
configure:18142: result: yes
configure:18142: checking for clock_gettime
configure:18142: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -lpthread -lrt -lm  >&5
configure:18142: $? = 0
configure:18142: result: yes
configure:18154: checking mntent.h usability
configure:18154: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:18154: $? = 0
configure:18154: result: yes
configure:18154: checking mntent.h presence
configure:18154: gcc-8 -E  conftest.c
configure:18154: $? = 0
configure:18154: result: yes
configure:18154: checking for mntent.h
configure:18154: result: yes
configure:18154: checking sys/statvfs.h usability
configure:18154: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:18154: $? = 0
configure:18154: result: yes
configure:18154: checking sys/statvfs.h presence
configure:18154: gcc-8 -E  conftest.c
configure:18154: $? = 0
configure:18154: result: yes
configure:18154: checking for sys/statvfs.h
configure:18154: result: yes
configure:18154: checking linux/types.h usability
configure:18154: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:18154: $? = 0
configure:18154: result: yes
configure:18154: checking linux/types.h presence
configure:18154: gcc-8 -E  conftest.c
configure:18154: $? = 0
configure:18154: result: yes
configure:18154: checking for linux/types.h
configure:18154: result: yes
configure:18154: checking linux/if_ether.h usability
configure:18154: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:18154: $? = 0
configure:18154: result: yes
configure:18154: checking linux/if_ether.h presence
configure:18154: gcc-8 -E  conftest.c
configure:18154: $? = 0
configure:18154: result: yes
configure:18154: checking for linux/if_ether.h
configure:18154: result: yes
configure:18167: checking linux/net_namespace.h usability
configure:18167: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:18167: $? = 0
configure:18167: result: yes
configure:18167: checking linux/net_namespace.h presence
configure:18167: gcc-8 -E  conftest.c
configure:18167: $? = 0
configure:18167: result: yes
configure:18167: checking for linux/net_namespace.h
configure:18167: result: yes
configure:18167: checking stdatomic.h usability
configure:18167: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:18167: $? = 0
configure:18167: result: yes
configure:18167: checking stdatomic.h presence
configure:18167: gcc-8 -E  conftest.c
configure:18167: $? = 0
configure:18167: result: yes
configure:18167: checking for stdatomic.h
configure:18167: result: yes
configure:18167: checking bits/floatn-common.h usability
configure:18167: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:18167: $? = 0
configure:18167: result: yes
configure:18167: checking bits/floatn-common.h presence
configure:18167: gcc-8 -E  conftest.c
configure:18167: $? = 0
configure:18167: result: yes
configure:18167: checking for bits/floatn-common.h
configure:18167: result: yes
configure:18179: checking for net/if_mib.h
configure:18179: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
conftest.c:57:10: fatal error: net/if_mib.h: No such file or directory
compilation terminated.
configure:18179: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define __EXTENSIONS__ 1
| #define _ALL_SOURCE 1
| #define _GNU_SOURCE 1
| #define _POSIX_PTHREAD_SEMANTICS 1
| #define _TANDEM_SOURCE 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define HAVE_DECL_STRERROR_R 1
| #define HAVE_STRERROR_R 1
| #define STRERROR_R_CHAR_P 1
| #define VSTUDIO_DDK 1
| #define HAVE_NETLINK 1
| #define HAVE_OPENSSL 1
| #define OPENSSL_SUPPORTS_SNI 1
| #define HAVE_AF_XDP 1
| #define HAVE_DECL_SYS_SIGLIST 1
| #define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1
| #define HAVE_STRUCT_MMSGHDR_MSG_LEN 1
| #define HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID 1
| #define HAVE_MLOCKALL 1
| #define HAVE_STRNLEN 1
| #define HAVE_GETLOADAVG 1
| #define HAVE_STATVFS 1
| #define HAVE_GETMNTENT_R 1
| #define HAVE_SENDMMSG 1
| #define HAVE_CLOCK_GETTIME 1
| #define HAVE_MNTENT_H 1
| #define HAVE_SYS_STATVFS_H 1
| #define HAVE_LINUX_TYPES_H 1
| #define HAVE_LINUX_IF_ETHER_H 1
| #define HAVE_LINUX_NET_NAMESPACE_H 1
| #define HAVE_STDATOMIC_H 1
| #define HAVE_BITS_FLOATN_COMMON_H 1
| /* end confdefs.h.  */
| #include <sys/types.h>
| #include <net/if.h>
| 
| #include <net/if_mib.h>
configure:18179: result: no
configure:18219: checking for library containing backtrace
configure:18250: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -lpthread -lrt -lm  >&5
configure:18250: $? = 0
configure:18267: result: none required
configure:18279: checking linux/perf_event.h usability
configure:18279: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:18279: $? = 0
configure:18279: result: yes
configure:18279: checking linux/perf_event.h presence
configure:18279: gcc-8 -E  conftest.c
configure:18279: $? = 0
configure:18279: result: yes
configure:18279: checking for linux/perf_event.h
configure:18279: result: yes
configure:18291: checking valgrind/valgrind.h usability
configure:18291: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:18291: $? = 0
configure:18291: result: yes
configure:18291: checking valgrind/valgrind.h presence
configure:18291: gcc-8 -E  conftest.c
configure:18291: $? = 0
configure:18291: result: yes
configure:18291: checking for valgrind/valgrind.h
configure:18291: result: yes
configure:18301: checking for connect in -lsocket
configure:18326: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -lsocket  -lpthread -lrt -lm  >&5
/usr/bin/ld: cannot find -lsocket
collect2: error: ld returned 1 exit status
configure:18326: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define __EXTENSIONS__ 1
| #define _ALL_SOURCE 1
| #define _GNU_SOURCE 1
| #define _POSIX_PTHREAD_SEMANTICS 1
| #define _TANDEM_SOURCE 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define HAVE_DECL_STRERROR_R 1
| #define HAVE_STRERROR_R 1
| #define STRERROR_R_CHAR_P 1
| #define VSTUDIO_DDK 1
| #define HAVE_NETLINK 1
| #define HAVE_OPENSSL 1
| #define OPENSSL_SUPPORTS_SNI 1
| #define HAVE_AF_XDP 1
| #define HAVE_DECL_SYS_SIGLIST 1
| #define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1
| #define HAVE_STRUCT_MMSGHDR_MSG_LEN 1
| #define HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID 1
| #define HAVE_MLOCKALL 1
| #define HAVE_STRNLEN 1
| #define HAVE_GETLOADAVG 1
| #define HAVE_STATVFS 1
| #define HAVE_GETMNTENT_R 1
| #define HAVE_SENDMMSG 1
| #define HAVE_CLOCK_GETTIME 1
| #define HAVE_MNTENT_H 1
| #define HAVE_SYS_STATVFS_H 1
| #define HAVE_LINUX_TYPES_H 1
| #define HAVE_LINUX_IF_ETHER_H 1
| #define HAVE_LINUX_NET_NAMESPACE_H 1
| #define HAVE_STDATOMIC_H 1
| #define HAVE_BITS_FLOATN_COMMON_H 1
| #define HAVE_BACKTRACE 1
| #define HAVE_LINUX_PERF_EVENT_H 1
| #define HAVE_VALGRIND_VALGRIND_H 1
| /* end confdefs.h.  */
| 
| /* Override any GCC internal prototype to avoid an error.
|    Use char because int might match the return type of a GCC
|    builtin and then its argument prototype would still apply.  */
| #ifdef __cplusplus
| extern "C"
| #endif
| char connect ();
| int
| main ()
| {
| return connect ();
|   ;
|   return 0;
| }
configure:18335: result: no
configure:18346: checking for library containing gethostbyname
configure:18377: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -lpthread -lrt -lm  >&5
configure:18377: $? = 0
configure:18394: result: none required
configure:18402: checking XenServer release
configure:18414: result: none
configure:18426: checking for groff
configure:18437: result: yes
configure:18447: checking whether gcc-8 has <threads.h> that supports thread_local
configure:18464: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -lpthread -lrt -lm  >&5
configure:18464: $? = 0
configure:18472: result: yes
configure:18511: checking for library containing __atomic_load_8
configure:18542: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -lpthread -lrt -lm  >&5
conftest.c:65:6: warning: conflicting types for built-in function '__atomic_load_8' [-Wbuiltin-declaration-mismatch]
/usr/bin/ld: /tmp/cc7wZec1.o: in function `main':
/home/blp/nicira/ovs/_build/conftest.c:69: undefined reference to `__atomic_load_8'
collect2: error: ld returned 1 exit status
configure:18542: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define __EXTENSIONS__ 1
| #define _ALL_SOURCE 1
| #define _GNU_SOURCE 1
| #define _POSIX_PTHREAD_SEMANTICS 1
| #define _TANDEM_SOURCE 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define HAVE_DECL_STRERROR_R 1
| #define HAVE_STRERROR_R 1
| #define STRERROR_R_CHAR_P 1
| #define VSTUDIO_DDK 1
| #define HAVE_NETLINK 1
| #define HAVE_OPENSSL 1
| #define OPENSSL_SUPPORTS_SNI 1
| #define HAVE_AF_XDP 1
| #define HAVE_DECL_SYS_SIGLIST 1
| #define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1
| #define HAVE_STRUCT_MMSGHDR_MSG_LEN 1
| #define HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID 1
| #define HAVE_MLOCKALL 1
| #define HAVE_STRNLEN 1
| #define HAVE_GETLOADAVG 1
| #define HAVE_STATVFS 1
| #define HAVE_GETMNTENT_R 1
| #define HAVE_SENDMMSG 1
| #define HAVE_CLOCK_GETTIME 1
| #define HAVE_MNTENT_H 1
| #define HAVE_SYS_STATVFS_H 1
| #define HAVE_LINUX_TYPES_H 1
| #define HAVE_LINUX_IF_ETHER_H 1
| #define HAVE_LINUX_NET_NAMESPACE_H 1
| #define HAVE_STDATOMIC_H 1
| #define HAVE_BITS_FLOATN_COMMON_H 1
| #define HAVE_BACKTRACE 1
| #define HAVE_LINUX_PERF_EVENT_H 1
| #define HAVE_VALGRIND_VALGRIND_H 1
| #define HAVE_THREAD_LOCAL 1
| /* end confdefs.h.  */
| 
| /* Override any GCC internal prototype to avoid an error.
|    Use char because int might match the return type of a GCC
|    builtin and then its argument prototype would still apply.  */
| #ifdef __cplusplus
| extern "C"
| #endif
| char __atomic_load_8 ();
| int
| main ()
| {
| return __atomic_load_8 ();
|   ;
|   return 0;
| }
configure:18542: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -latomic  -lpthread -lrt -lm  >&5
conftest.c:65:6: warning: conflicting types for built-in function '__atomic_load_8' [-Wbuiltin-declaration-mismatch]
configure:18542: $? = 0
configure:18559: result: -latomic
configure:18567: checking whether gcc-8 supports GCC 4.0+ atomic built-ins
configure:18634: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -latomic -lpthread -lrt -lm  >&5
configure:18634: $? = 0
configure:18642: result: yes
configure:18649: checking value of __atomic_always_lock_free(1)
configure:18654: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -latomic -lpthread -lrt -lm  >&5
configure:18654: $? = 0
configure:18654: ./conftest
configure:18654: $? = 0
configure:18661: result: 1
configure:18670: checking value of __atomic_always_lock_free(2)
configure:18675: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -latomic -lpthread -lrt -lm  >&5
configure:18675: $? = 0
configure:18675: ./conftest
configure:18675: $? = 0
configure:18682: result: 1
configure:18691: checking value of __atomic_always_lock_free(4)
configure:18696: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -latomic -lpthread -lrt -lm  >&5
configure:18696: $? = 0
configure:18696: ./conftest
configure:18696: $? = 0
configure:18703: result: 1
configure:18712: checking value of __atomic_always_lock_free(8)
configure:18717: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -latomic -lpthread -lrt -lm  >&5
configure:18717: $? = 0
configure:18717: ./conftest
configure:18717: $? = 0
configure:18724: result: 1
configure:18733: checking for library containing aio_write
configure:18764: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -latomic -lpthread -lrt -lm  >&5
configure:18764: $? = 0
configure:18781: result: none required
configure:18799: checking for pthread_set_name_np
configure:18799: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -latomic -lpthread -lrt -lm  >&5
/usr/bin/ld: /tmp/ccWx4Our.o: in function `main':
/home/blp/nicira/ovs/_build/conftest.c:97: undefined reference to `pthread_set_name_np'
collect2: error: ld returned 1 exit status
configure:18799: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define __EXTENSIONS__ 1
| #define _ALL_SOURCE 1
| #define _GNU_SOURCE 1
| #define _POSIX_PTHREAD_SEMANTICS 1
| #define _TANDEM_SOURCE 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define HAVE_DECL_STRERROR_R 1
| #define HAVE_STRERROR_R 1
| #define STRERROR_R_CHAR_P 1
| #define VSTUDIO_DDK 1
| #define HAVE_NETLINK 1
| #define HAVE_OPENSSL 1
| #define OPENSSL_SUPPORTS_SNI 1
| #define HAVE_AF_XDP 1
| #define HAVE_DECL_SYS_SIGLIST 1
| #define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1
| #define HAVE_STRUCT_MMSGHDR_MSG_LEN 1
| #define HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID 1
| #define HAVE_MLOCKALL 1
| #define HAVE_STRNLEN 1
| #define HAVE_GETLOADAVG 1
| #define HAVE_STATVFS 1
| #define HAVE_GETMNTENT_R 1
| #define HAVE_SENDMMSG 1
| #define HAVE_CLOCK_GETTIME 1
| #define HAVE_MNTENT_H 1
| #define HAVE_SYS_STATVFS_H 1
| #define HAVE_LINUX_TYPES_H 1
| #define HAVE_LINUX_IF_ETHER_H 1
| #define HAVE_LINUX_NET_NAMESPACE_H 1
| #define HAVE_STDATOMIC_H 1
| #define HAVE_BITS_FLOATN_COMMON_H 1
| #define HAVE_BACKTRACE 1
| #define HAVE_LINUX_PERF_EVENT_H 1
| #define HAVE_VALGRIND_VALGRIND_H 1
| #define HAVE_THREAD_LOCAL 1
| #define HAVE_GCC4_ATOMICS 1
| #define ATOMIC_ALWAYS_LOCK_FREE_1B 1
| #define ATOMIC_ALWAYS_LOCK_FREE_2B 1
| #define ATOMIC_ALWAYS_LOCK_FREE_4B 1
| #define ATOMIC_ALWAYS_LOCK_FREE_8B 1
| /* end confdefs.h.  */
| /* Define pthread_set_name_np to an innocuous variant, in case <limits.h> declares pthread_set_name_np.
|    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
| #define pthread_set_name_np innocuous_pthread_set_name_np
| 
| /* System header to define __stub macros and hopefully few prototypes,
|     which can conflict with char pthread_set_name_np (); below.
|     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
|     <limits.h> exists even on freestanding compilers.  */
| 
| #ifdef __STDC__
| # include <limits.h>
| #else
| # include <assert.h>
| #endif
| 
| #undef pthread_set_name_np
| 
| /* Override any GCC internal prototype to avoid an error.
|    Use char because int might match the return type of a GCC
|    builtin and then its argument prototype would still apply.  */
| #ifdef __cplusplus
| extern "C"
| #endif
| char pthread_set_name_np ();
| /* The GNU C library defines this for functions which it implements
|     to always fail with ENOSYS.  Some functions are actually named
|     something starting with __ and the normal name is an alias.  */
| #if defined __stub_pthread_set_name_np || defined __stub___pthread_set_name_np
| choke me
| #endif
| 
| int
| main ()
| {
| return pthread_set_name_np ();
|   ;
|   return 0;
| }
configure:18799: result: no
configure:18809: checking for pthread_setname_np() variant
configure:18826: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -latomic -lpthread -lrt -lm  >&5
configure:18826: $? = 0
configure:18852: result: glibc
configure:18867: checking whether __linux__ is defined
configure:18883: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:18883: $? = 0
configure:18890: result: true
configure:18900: checking linker output version information
configure:18908: result: libX-2.11.so.0.0.90)
configure:18947: checking whether g++ supports C++11 features by default
configure:19241: g++ -c -g -O2  conftest.cpp >&5
configure:19241: $? = 0
configure:19248: result: yes
configure:19935: checking atomic usability
configure:19935: g++ -c -g -O2  conftest.cpp >&5
configure:19935: $? = 0
configure:19935: result: yes
configure:19935: checking atomic presence
configure:19935: g++ -E  conftest.cpp
configure:19935: $? = 0
configure:19935: result: yes
configure:19935: checking for atomic
configure:19935: result: yes
configure:19962: checking for working posix_memalign
configure:19986: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -latomic -lpthread -lrt -lm  >&5
configure:19986: $? = 0
configure:19986: ./conftest
configure:19986: $? = 0
configure:19996: result: yes
configure:20004: checking for ub_ctx_create in -lunbound
configure:20029: gcc-8 -o conftest -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address   conftest.c -lunbound  -latomic -lpthread -lrt -lm  >&5
configure:20029: $? = 0
configure:20038: result: yes
configure:20064: checking whether the preprocessor supports include_next
configure:20102: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  -Iconftestd1b -Iconftestd2 conftest.c >&5
configure:20102: $? = 0
configure:20123: result: yes
configure:20144: checking whether system header files limit the line length
configure:20167: result: no
configure:20193: checking for stdio.h
configure:20193: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:20193: $? = 0
configure:20193: result: yes
configure:20193: checking for string.h
configure:20193: result: yes
configure:20358: checking whether gcc-8 accepts -Werror
configure:20369: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  -Werror  conftest.c >&5
configure:20369: $? = 0
configure:20382: result: yes
configure:20391: checking whether gcc-8 accepts -Wall
configure:20402: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -Wall  conftest.c >&5
configure:20402: $? = 0
configure:20415: result: yes
configure:20425: checking whether gcc-8 accepts -Wextra
configure:20436: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -Wextra  conftest.c >&5
configure:20436: $? = 0
configure:20449: result: yes
configure:20459: checking whether gcc-8 accepts -Wno-sign-compare
configure:20470: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -Wsign-compare  conftest.c >&5
configure:20470: $? = 0
configure:20483: result: yes
configure:20493: checking whether gcc-8 accepts -Wpointer-arith
configure:20504: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -Wpointer-arith  conftest.c >&5
configure:20504: $? = 0
configure:20517: result: yes
configure:20527: checking whether gcc-8 accepts -Wformat -Wformat-security
configure:20538: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -Wformat -Wformat-security  conftest.c >&5
configure:20538: $? = 0
configure:20551: result: yes
configure:20561: checking whether gcc-8 accepts -Wswitch-enum
configure:20572: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -Wswitch-enum  conftest.c >&5
configure:20572: $? = 0
configure:20585: result: yes
configure:20595: checking whether gcc-8 accepts -Wunused-parameter
configure:20606: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -Wunused-parameter  conftest.c >&5
configure:20606: $? = 0
configure:20619: result: yes
configure:20629: checking whether gcc-8 accepts -Wbad-function-cast
configure:20640: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -Wbad-function-cast  conftest.c >&5
configure:20640: $? = 0
configure:20653: result: yes
configure:20663: checking whether gcc-8 accepts -Wcast-align
configure:20674: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -Wcast-align  conftest.c >&5
configure:20674: $? = 0
configure:20687: result: yes
configure:20697: checking whether gcc-8 accepts -Wstrict-prototypes
configure:20708: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -Wstrict-prototypes  conftest.c >&5
configure:20708: $? = 0
configure:20721: result: yes
configure:20731: checking whether gcc-8 accepts -Wold-style-definition
configure:20742: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -Wold-style-definition  conftest.c >&5
configure:20742: $? = 0
configure:20755: result: yes
configure:20765: checking whether gcc-8 accepts -Wmissing-prototypes
configure:20776: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -Wmissing-prototypes  conftest.c >&5
configure:20776: $? = 0
configure:20789: result: yes
configure:20799: checking whether gcc-8 accepts -Wmissing-field-initializers
configure:20810: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -Wmissing-field-initializers  conftest.c >&5
configure:20810: $? = 0
configure:20823: result: yes
configure:20833: checking whether gcc-8 accepts -Wthread-safety
configure:20844: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -Wthread-safety  conftest.c >&5
gcc-8: error: unrecognized command line option '-Wthread-safety'; did you mean '-fthread-jumps'?
configure:20844: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define __EXTENSIONS__ 1
| #define _ALL_SOURCE 1
| #define _GNU_SOURCE 1
| #define _POSIX_PTHREAD_SEMANTICS 1
| #define _TANDEM_SOURCE 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define HAVE_DECL_STRERROR_R 1
| #define HAVE_STRERROR_R 1
| #define STRERROR_R_CHAR_P 1
| #define VSTUDIO_DDK 1
| #define HAVE_NETLINK 1
| #define HAVE_OPENSSL 1
| #define OPENSSL_SUPPORTS_SNI 1
| #define HAVE_AF_XDP 1
| #define HAVE_DECL_SYS_SIGLIST 1
| #define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1
| #define HAVE_STRUCT_MMSGHDR_MSG_LEN 1
| #define HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID 1
| #define HAVE_MLOCKALL 1
| #define HAVE_STRNLEN 1
| #define HAVE_GETLOADAVG 1
| #define HAVE_STATVFS 1
| #define HAVE_GETMNTENT_R 1
| #define HAVE_SENDMMSG 1
| #define HAVE_CLOCK_GETTIME 1
| #define HAVE_MNTENT_H 1
| #define HAVE_SYS_STATVFS_H 1
| #define HAVE_LINUX_TYPES_H 1
| #define HAVE_LINUX_IF_ETHER_H 1
| #define HAVE_LINUX_NET_NAMESPACE_H 1
| #define HAVE_STDATOMIC_H 1
| #define HAVE_BITS_FLOATN_COMMON_H 1
| #define HAVE_BACKTRACE 1
| #define HAVE_LINUX_PERF_EVENT_H 1
| #define HAVE_VALGRIND_VALGRIND_H 1
| #define HAVE_THREAD_LOCAL 1
| #define HAVE_GCC4_ATOMICS 1
| #define ATOMIC_ALWAYS_LOCK_FREE_1B 1
| #define ATOMIC_ALWAYS_LOCK_FREE_2B 1
| #define ATOMIC_ALWAYS_LOCK_FREE_4B 1
| #define ATOMIC_ALWAYS_LOCK_FREE_8B 1
| #define HAVE_GLIBC_PTHREAD_SETNAME_NP 1
| #define HAVE_CXX11 1
| #define HAVE_ATOMIC 1
| #define HAVE_POSIX_MEMALIGN 1
| #define HAVE_UNBOUND 1
| #define HAVE_STDIO_H 1
| #define HAVE_STRING_H 1
| /* end confdefs.h.  */
| int x;
configure:20857: result: no
configure:20867: checking whether gcc-8 accepts -fno-strict-aliasing
configure:20878: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -fno-strict-aliasing  conftest.c >&5
configure:20878: $? = 0
configure:20891: result: yes
configure:20901: checking whether gcc-8 accepts -Wswitch-bool
configure:20912: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -Wswitch-bool  conftest.c >&5
configure:20912: $? = 0
configure:20925: result: yes
configure:20935: checking whether gcc-8 accepts -Wlogical-not-parentheses
configure:20946: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -Wlogical-not-parentheses  conftest.c >&5
configure:20946: $? = 0
configure:20959: result: yes
configure:20969: checking whether gcc-8 accepts -Wsizeof-array-argument
configure:20980: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -Wsizeof-array-argument  conftest.c >&5
configure:20980: $? = 0
configure:20993: result: yes
configure:21003: checking whether gcc-8 accepts -Wbool-compare
configure:21014: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -Wbool-compare  conftest.c >&5
configure:21014: $? = 0
configure:21027: result: yes
configure:21037: checking whether gcc-8 accepts -Wshift-negative-value
configure:21048: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -Wshift-negative-value  conftest.c >&5
configure:21048: $? = 0
configure:21061: result: yes
configure:21071: checking whether gcc-8 accepts -Wduplicated-cond
configure:21082: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -Wduplicated-cond  conftest.c >&5
configure:21082: $? = 0
configure:21095: result: yes
configure:21105: checking whether gcc-8 accepts -Qunused-arguments
configure:21116: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -Qunused-arguments  conftest.c >&5
gcc-8: error: unrecognized command line option '-Qunused-arguments'; did you mean '-Wunused-parameter'?
configure:21116: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define __EXTENSIONS__ 1
| #define _ALL_SOURCE 1
| #define _GNU_SOURCE 1
| #define _POSIX_PTHREAD_SEMANTICS 1
| #define _TANDEM_SOURCE 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define HAVE_DECL_STRERROR_R 1
| #define HAVE_STRERROR_R 1
| #define STRERROR_R_CHAR_P 1
| #define VSTUDIO_DDK 1
| #define HAVE_NETLINK 1
| #define HAVE_OPENSSL 1
| #define OPENSSL_SUPPORTS_SNI 1
| #define HAVE_AF_XDP 1
| #define HAVE_DECL_SYS_SIGLIST 1
| #define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1
| #define HAVE_STRUCT_MMSGHDR_MSG_LEN 1
| #define HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID 1
| #define HAVE_MLOCKALL 1
| #define HAVE_STRNLEN 1
| #define HAVE_GETLOADAVG 1
| #define HAVE_STATVFS 1
| #define HAVE_GETMNTENT_R 1
| #define HAVE_SENDMMSG 1
| #define HAVE_CLOCK_GETTIME 1
| #define HAVE_MNTENT_H 1
| #define HAVE_SYS_STATVFS_H 1
| #define HAVE_LINUX_TYPES_H 1
| #define HAVE_LINUX_IF_ETHER_H 1
| #define HAVE_LINUX_NET_NAMESPACE_H 1
| #define HAVE_STDATOMIC_H 1
| #define HAVE_BITS_FLOATN_COMMON_H 1
| #define HAVE_BACKTRACE 1
| #define HAVE_LINUX_PERF_EVENT_H 1
| #define HAVE_VALGRIND_VALGRIND_H 1
| #define HAVE_THREAD_LOCAL 1
| #define HAVE_GCC4_ATOMICS 1
| #define ATOMIC_ALWAYS_LOCK_FREE_1B 1
| #define ATOMIC_ALWAYS_LOCK_FREE_2B 1
| #define ATOMIC_ALWAYS_LOCK_FREE_4B 1
| #define ATOMIC_ALWAYS_LOCK_FREE_8B 1
| #define HAVE_GLIBC_PTHREAD_SETNAME_NP 1
| #define HAVE_CXX11 1
| #define HAVE_ATOMIC 1
| #define HAVE_POSIX_MEMALIGN 1
| #define HAVE_UNBOUND 1
| #define HAVE_STDIO_H 1
| #define HAVE_STRING_H 1
| /* end confdefs.h.  */
| int x;
configure:21129: result: no
configure:21139: checking whether gcc-8 accepts -Wshadow
configure:21150: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -Wshadow  conftest.c >&5
configure:21150: $? = 0
configure:21163: result: yes
configure:21173: checking whether gcc-8 accepts -Wmultistatement-macros
configure:21184: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -Wmultistatement-macros  conftest.c >&5
configure:21184: $? = 0
configure:21197: result: yes
configure:21207: checking whether gcc-8 accepts -Wcast-align=strict
configure:21218: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -Wcast-align=strict  conftest.c >&5
configure:21218: $? = 0
configure:21231: result: yes
configure:21241: checking whether gcc-8 accepts -Wno-null-pointer-arithmetic
configure:21252: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -Wnull-pointer-arithmetic  conftest.c >&5
gcc-8: error: unrecognized command line option '-Wnull-pointer-arithmetic'; did you mean '-Wno-pointer-arith'?
configure:21252: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define __EXTENSIONS__ 1
| #define _ALL_SOURCE 1
| #define _GNU_SOURCE 1
| #define _POSIX_PTHREAD_SEMANTICS 1
| #define _TANDEM_SOURCE 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define HAVE_DECL_STRERROR_R 1
| #define HAVE_STRERROR_R 1
| #define STRERROR_R_CHAR_P 1
| #define VSTUDIO_DDK 1
| #define HAVE_NETLINK 1
| #define HAVE_OPENSSL 1
| #define OPENSSL_SUPPORTS_SNI 1
| #define HAVE_AF_XDP 1
| #define HAVE_DECL_SYS_SIGLIST 1
| #define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1
| #define HAVE_STRUCT_MMSGHDR_MSG_LEN 1
| #define HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID 1
| #define HAVE_MLOCKALL 1
| #define HAVE_STRNLEN 1
| #define HAVE_GETLOADAVG 1
| #define HAVE_STATVFS 1
| #define HAVE_GETMNTENT_R 1
| #define HAVE_SENDMMSG 1
| #define HAVE_CLOCK_GETTIME 1
| #define HAVE_MNTENT_H 1
| #define HAVE_SYS_STATVFS_H 1
| #define HAVE_LINUX_TYPES_H 1
| #define HAVE_LINUX_IF_ETHER_H 1
| #define HAVE_LINUX_NET_NAMESPACE_H 1
| #define HAVE_STDATOMIC_H 1
| #define HAVE_BITS_FLOATN_COMMON_H 1
| #define HAVE_BACKTRACE 1
| #define HAVE_LINUX_PERF_EVENT_H 1
| #define HAVE_VALGRIND_VALGRIND_H 1
| #define HAVE_THREAD_LOCAL 1
| #define HAVE_GCC4_ATOMICS 1
| #define ATOMIC_ALWAYS_LOCK_FREE_1B 1
| #define ATOMIC_ALWAYS_LOCK_FREE_2B 1
| #define ATOMIC_ALWAYS_LOCK_FREE_4B 1
| #define ATOMIC_ALWAYS_LOCK_FREE_8B 1
| #define HAVE_GLIBC_PTHREAD_SETNAME_NP 1
| #define HAVE_CXX11 1
| #define HAVE_ATOMIC 1
| #define HAVE_POSIX_MEMALIGN 1
| #define HAVE_UNBOUND 1
| #define HAVE_STDIO_H 1
| #define HAVE_STRING_H 1
| /* end confdefs.h.  */
| int x;
configure:21265: result: no
configure:21275: checking whether gcc-8 accepts -Warray-bounds-pointer-arithmetic
configure:21286: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -Warray-bounds-pointer-arithmetic  conftest.c >&5
gcc-8: error: unrecognized command line option '-Warray-bounds-pointer-arithmetic'; did you mean '--warn-no-pointer-arith'?
configure:21286: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "openvswitch"
| #define PACKAGE_TARNAME "openvswitch"
| #define PACKAGE_VERSION "2.11.90"
| #define PACKAGE_STRING "openvswitch 2.11.90"
| #define PACKAGE_BUGREPORT "bugs@openvswitch.org"
| #define PACKAGE_URL ""
| #define PACKAGE "openvswitch"
| #define VERSION "2.11.90"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define __EXTENSIONS__ 1
| #define _ALL_SOURCE 1
| #define _GNU_SOURCE 1
| #define _POSIX_PTHREAD_SEMANTICS 1
| #define _TANDEM_SOURCE 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define HAVE_DECL_STRERROR_R 1
| #define HAVE_STRERROR_R 1
| #define STRERROR_R_CHAR_P 1
| #define VSTUDIO_DDK 1
| #define HAVE_NETLINK 1
| #define HAVE_OPENSSL 1
| #define OPENSSL_SUPPORTS_SNI 1
| #define HAVE_AF_XDP 1
| #define HAVE_DECL_SYS_SIGLIST 1
| #define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1
| #define HAVE_STRUCT_MMSGHDR_MSG_LEN 1
| #define HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID 1
| #define HAVE_MLOCKALL 1
| #define HAVE_STRNLEN 1
| #define HAVE_GETLOADAVG 1
| #define HAVE_STATVFS 1
| #define HAVE_GETMNTENT_R 1
| #define HAVE_SENDMMSG 1
| #define HAVE_CLOCK_GETTIME 1
| #define HAVE_MNTENT_H 1
| #define HAVE_SYS_STATVFS_H 1
| #define HAVE_LINUX_TYPES_H 1
| #define HAVE_LINUX_IF_ETHER_H 1
| #define HAVE_LINUX_NET_NAMESPACE_H 1
| #define HAVE_STDATOMIC_H 1
| #define HAVE_BITS_FLOATN_COMMON_H 1
| #define HAVE_BACKTRACE 1
| #define HAVE_LINUX_PERF_EVENT_H 1
| #define HAVE_VALGRIND_VALGRIND_H 1
| #define HAVE_THREAD_LOCAL 1
| #define HAVE_GCC4_ATOMICS 1
| #define ATOMIC_ALWAYS_LOCK_FREE_1B 1
| #define ATOMIC_ALWAYS_LOCK_FREE_2B 1
| #define ATOMIC_ALWAYS_LOCK_FREE_4B 1
| #define ATOMIC_ALWAYS_LOCK_FREE_8B 1
| #define HAVE_GLIBC_PTHREAD_SETNAME_NP 1
| #define HAVE_CXX11 1
| #define HAVE_ATOMIC 1
| #define HAVE_POSIX_MEMALIGN 1
| #define HAVE_UNBOUND 1
| #define HAVE_STDIO_H 1
| #define HAVE_STRING_H 1
| /* end confdefs.h.  */
| int x;
configure:21299: result: no
configure:21309: checking whether gcc-8 accepts -Wno-unused
configure:21320: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -Wunused  conftest.c >&5
configure:21320: $? = 0
configure:21333: result: yes
configure:21350: checking whether gcc-8 accepts -Wno-unused-parameter
configure:21361: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address -Werror -Wunused-parameter  conftest.c >&5
configure:21361: $? = 0
configure:21374: result: yes
configure:21415: checking target hint for cgcc
configure:21429: result: x86_64
configure:28589: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:28589: $? = 0
configure:28610: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:28610: $? = 0
configure:28631: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:28631: $? = 0
configure:28652: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:28652: $? = 0
configure:28673: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
configure:28673: $? = 0
configure:28688: checking whether dpdk datapath is enabled
configure:28691: result: no
configure:29589: gcc-8 -c -g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address  conftest.c >&5
conftest.c:75:1: note: #pragma message: Checking for pragma message
configure:29589: $? = 0
configure:29645: checking whether make supports nested variables
configure:29662: result: yes
configure:29783: checking that generated files are newer than configure
configure:29789: result: done
configure:29936: creating ./config.status

## ---------------------- ##
## Running config.status. ##
## ---------------------- ##

This file was extended by openvswitch config.status 2.11.90, which was
generated by GNU Autoconf 2.69.  Invocation command line was

  CONFIG_FILES    = 
  CONFIG_HEADERS  = 
  CONFIG_LINKS    = 
  CONFIG_COMMANDS = 
  $ ./config.status 

on sigill

config.status:1343: creating lib/stdio.h
config.status:1343: creating lib/string.h
config.status:1343: creating ovsdb/libovsdb.sym
config.status:1343: creating ofproto/libofproto.sym
config.status:1343: creating lib/libsflow.sym
config.status:1343: creating lib/libopenvswitch.sym
config.status:1343: creating ovn/lib/libovn.sym
config.status:1343: creating vtep/libvtep.sym
config.status:1343: creating Makefile
config.status:1343: creating datapath/Makefile
config.status:1343: creating datapath/linux/Kbuild
config.status:1343: creating datapath/linux/Makefile
config.status:1343: creating datapath/linux/Makefile.main
config.status:1343: creating tests/atlocal
config.status:1343: creating lib/libopenvswitch.pc
config.status:1343: creating lib/libsflow.pc
config.status:1343: creating ofproto/libofproto.pc
config.status:1343: creating ovsdb/libovsdb.pc
config.status:1343: creating include/openvswitch/version.h
config.status:1343: creating config.h
config.status:1557: executing tests/atconfig commands
config.status:1557: executing depfiles commands
config.status:1657: cd .       && sed -e '/# am--include-marker/d' Makefile         | make -f - am--depfiles
make: Nothing to be done for 'am--depfiles'.
config.status:1662: $? = 0
config.status:1557: executing libtool commands
config.status:1557: executing include/openflow/openflow.h.stamp commands
config.status:1557: executing utilities/bugtool/dummy commands
config.status:1557: executing ovn/dummy commands
config.status:1557: executing ovn/utilities/dummy commands
config.status:1557: executing ipsec/dummy commands

## ---------------- ##
## Cache variables. ##
## ---------------- ##

ac_cv_build=x86_64-unknown-linux-gnu
ac_cv_c_bigendian=no
ac_cv_c_compiler_gnu=yes
ac_cv_cxx_compiler_gnu=yes
ac_cv_env_CCC_set=
ac_cv_env_CCC_value=
ac_cv_env_CC_set=set
ac_cv_env_CC_value=gcc-8
ac_cv_env_CFLAGS_set=set
ac_cv_env_CFLAGS_value='-g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address'
ac_cv_env_CPPFLAGS_set=
ac_cv_env_CPPFLAGS_value=
ac_cv_env_CPP_set=
ac_cv_env_CPP_value=
ac_cv_env_CXXCPP_set=
ac_cv_env_CXXCPP_value=
ac_cv_env_CXXFLAGS_set=
ac_cv_env_CXXFLAGS_value=
ac_cv_env_CXX_set=
ac_cv_env_CXX_value=
ac_cv_env_DPDK_CFLAGS_set=
ac_cv_env_DPDK_CFLAGS_value=
ac_cv_env_DPDK_LIBS_set=
ac_cv_env_DPDK_LIBS_value=
ac_cv_env_KARCH_set=set
ac_cv_env_KARCH_value=i386
ac_cv_env_LDFLAGS_set=
ac_cv_env_LDFLAGS_value=
ac_cv_env_LIBS_set=
ac_cv_env_LIBS_value=
ac_cv_env_PKG_CONFIG_LIBDIR_set=
ac_cv_env_PKG_CONFIG_LIBDIR_value=
ac_cv_env_PKG_CONFIG_PATH_set=
ac_cv_env_PKG_CONFIG_PATH_value=
ac_cv_env_PKG_CONFIG_set=
ac_cv_env_PKG_CONFIG_value=
ac_cv_env_build_alias_set=
ac_cv_env_build_alias_value=
ac_cv_env_host_alias_set=
ac_cv_env_host_alias_value=
ac_cv_env_target_alias_set=
ac_cv_env_target_alias_value=
ac_cv_func_clock_gettime=yes
ac_cv_func_getloadavg=yes
ac_cv_func_getmntent_r=yes
ac_cv_func_mlockall=yes
ac_cv_func_pthread_set_name_np=no
ac_cv_func_sendmmsg=yes
ac_cv_func_statvfs=yes
ac_cv_func_strerror_r=yes
ac_cv_func_strerror_r_char_p=yes
ac_cv_func_strnlen=yes
ac_cv_have_decl_SSL_set_tlsext_host_name=yes
ac_cv_have_decl_strerror_r=yes
ac_cv_have_decl_sys_siglist=yes
ac_cv_header_atomic=yes
ac_cv_header_bits_floatn_common_h=yes
ac_cv_header_bpf_libbpf_h=yes
ac_cv_header_dlfcn_h=yes
ac_cv_header_inttypes_h=yes
ac_cv_header_linux_if_ether_h=yes
ac_cv_header_linux_if_xdp_h=yes
ac_cv_header_linux_net_namespace_h=yes
ac_cv_header_linux_netlink_h=yes
ac_cv_header_linux_perf_event_h=yes
ac_cv_header_linux_types_h=yes
ac_cv_header_memory_h=yes
ac_cv_header_minix_config_h=no
ac_cv_header_mntent_h=yes
ac_cv_header_net_if_dl_h=no
ac_cv_header_net_if_mib_h=no
ac_cv_header_stdatomic_h=yes
ac_cv_header_stdc=yes
ac_cv_header_stdint_h=yes
ac_cv_header_stdio_h=yes
ac_cv_header_stdlib_h=yes
ac_cv_header_string_h=yes
ac_cv_header_strings_h=yes
ac_cv_header_sys_stat_h=yes
ac_cv_header_sys_statvfs_h=yes
ac_cv_header_sys_types_h=yes
ac_cv_header_unistd_h=yes
ac_cv_header_valgrind_valgrind_h=yes
ac_cv_header_vmware_h=no
ac_cv_header_windows_h=no
ac_cv_host=x86_64-unknown-linux-gnu
ac_cv_lib_cap_ng_capng_clear=no
ac_cv_lib_socket_connect=no
ac_cv_lib_unbound_ub_ctx_create=yes
ac_cv_member_struct_ifreq_ifr_flagshigh=no
ac_cv_member_struct_mmsghdr_msg_len=yes
ac_cv_member_struct_sockaddr_in6_sin6_scope_id=yes
ac_cv_member_struct_stat_st_mtim_tv_nsec=yes
ac_cv_member_struct_stat_st_mtimensec=no
ac_cv_objext=o
ac_cv_path_EGREP='/usr/bin/grep -E'
ac_cv_path_FGREP='/usr/bin/grep -F'
ac_cv_path_GREP=/usr/bin/grep
ac_cv_path_PKG_CONFIG=/usr/bin/pkg-config
ac_cv_path_SED=/usr/bin/sed
ac_cv_path_ac_pt_PKG_CONFIG=/usr/bin/pkg-config
ac_cv_path_install='/usr/bin/install -c'
ac_cv_path_mkdir=/usr/bin/mkdir
ac_cv_prog_AWK=mawk
ac_cv_prog_CPP='gcc-8 -E'
ac_cv_prog_CXXCPP='g++ -E'
ac_cv_prog_ac_ct_AR=ar
ac_cv_prog_ac_ct_CC=gcc-8
ac_cv_prog_ac_ct_CXX=g++
ac_cv_prog_ac_ct_MANIFEST_TOOL=mt
ac_cv_prog_ac_ct_OBJDUMP=objdump
ac_cv_prog_ac_ct_RANLIB=ranlib
ac_cv_prog_ac_ct_STRIP=strip
ac_cv_prog_cc_c89=
ac_cv_prog_cc_c99=
ac_cv_prog_cc_g=yes
ac_cv_prog_cxx_g=yes
ac_cv_prog_make_make_set=yes
ac_cv_safe_to_define___extensions__=yes
ac_cv_search___atomic_load_8=-latomic
ac_cv_search_aio_write='none required'
ac_cv_search_backtrace='none required'
ac_cv_search_clock_gettime='none required'
ac_cv_search_gethostbyname='none required'
ac_cv_search_pow=-lm
ac_cv_search_pthread_rwlock_tryrdlock=-lpthread
ac_cv_search_pthread_rwlockattr_destroy='none required'
ac_cv_search_timer_create=-lrt
ac_cv_sparse_target=x86_64
ac_cv_sys_file_offset_bits=no
ac_cv_sys_largefile_CC=no
am_cv_CC_dependencies_compiler_type=gcc3
am_cv_CXX_dependencies_compiler_type=gcc3
am_cv_make_support_nested_variables=yes
am_cv_prog_cc_c_o=yes
am_cv_prog_tar_pax=gnutar
ax_cv_cxx_compile_cxx11=yes
ax_cv_func_posix_memalign_works=yes
cl_cv_x64=no
gl_cv_have_include_next=yes
gl_cv_next_stdio_h='<stdio.h>'
gl_cv_next_string_h='<string.h>'
gl_cv_pragma_columns=no
lt_cv_ar_at_file=@
lt_cv_deplibs_check_method=pass_all
lt_cv_file_magic_cmd='$MAGIC_CMD'
lt_cv_file_magic_test_file=
lt_cv_ld_reload_flag=-r
lt_cv_nm_interface='BSD nm'
lt_cv_objdir=.libs
lt_cv_path_LD=/usr/bin/ld
lt_cv_path_LDCXX='/usr/bin/ld -m elf_x86_64'
lt_cv_path_NM='/usr/bin/nm -B'
lt_cv_path_mainfest_tool=no
lt_cv_prog_compiler_c_o=yes
lt_cv_prog_compiler_c_o_CXX=yes
lt_cv_prog_compiler_pic='-fPIC -DPIC'
lt_cv_prog_compiler_pic_CXX='-fPIC -DPIC'
lt_cv_prog_compiler_pic_works=yes
lt_cv_prog_compiler_pic_works_CXX=yes
lt_cv_prog_compiler_rtti_exceptions=no
lt_cv_prog_compiler_static_works=no
lt_cv_prog_compiler_static_works_CXX=yes
lt_cv_prog_gnu_ld=yes
lt_cv_prog_gnu_ldcxx=yes
lt_cv_sharedlib_from_linklib_cmd='printf %s\n'
lt_cv_shlibpath_overrides_runpath=yes
lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[	 ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[	 ][	 ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p'\'' | sed '\''/ __gnu_lto/d'\'''
lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \([^ ]*\)[ ]*$/  {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/  {"\2", (void *) \&\2},/p'\'''
lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \([^ ]*\)[ ]*$/  {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \(lib[^ ]*\)$/  {"\2", (void *) \&\2},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/  {"lib\2", (void *) \&\2},/p'\'''
lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\'''
lt_cv_sys_max_cmd_len=1572864
lt_cv_to_host_file_cmd=func_convert_file_noop
lt_cv_to_tool_file_cmd=func_convert_file_noop
ovs_cv__Qunused_arguments=no
ovs_cv__Wall=yes
ovs_cv__Warray_bounds_pointer_arithmetic=no
ovs_cv__Wbad_function_cast=yes
ovs_cv__Wbool_compare=yes
ovs_cv__Wcast_align=yes
ovs_cv__Wcast_align_strict=yes
ovs_cv__Wduplicated_cond=yes
ovs_cv__Werror=yes
ovs_cv__Wextra=yes
ovs_cv__Wformat_Wformat_security=yes
ovs_cv__Wlogical_not_parentheses=yes
ovs_cv__Wmissing_field_initializers=yes
ovs_cv__Wmissing_prototypes=yes
ovs_cv__Wmultistatement_macros=yes
ovs_cv__Wno_null_pointer_arithmetic=no
ovs_cv__Wno_sign_compare=yes
ovs_cv__Wno_unused=yes
ovs_cv__Wno_unused_parameter=yes
ovs_cv__Wold_style_definition=yes
ovs_cv__Wpointer_arith=yes
ovs_cv__Wshadow=yes
ovs_cv__Wshift_negative_value=yes
ovs_cv__Wsizeof_array_argument=yes
ovs_cv__Wstrict_prototypes=yes
ovs_cv__Wswitch_bool=yes
ovs_cv__Wswitch_enum=yes
ovs_cv__Wthread_safety=no
ovs_cv__Wunused_parameter=yes
ovs_cv__fno_strict_aliasing=yes
ovs_cv_atomic_always_lock_free_1=1
ovs_cv_atomic_always_lock_free_2=1
ovs_cv_atomic_always_lock_free_4=1
ovs_cv_atomic_always_lock_free_8=1
ovs_cv_dot=yes
ovs_cv_flake8=yes
ovs_cv_gcc4_atomics=yes
ovs_cv_groff=yes
ovs_cv_linux=true
ovs_cv_pthread_setname_np=glibc
ovs_cv_python2=/usr/bin/python2
ovs_cv_python3=/usr/bin/python3
ovs_cv_python=/usr/bin/python2
ovs_cv_sphinx=yes
ovs_cv_strtok_r_bug=no
ovs_cv_thread_local=yes
ovs_cv_xsversion=none

## ----------------- ##
## Output variables. ##
## ----------------- ##

ACLOCAL='${SHELL} /home/blp/nicira/ovs/build-aux/missing aclocal-1.16'
AMDEPBACKSLASH='\'
AMDEP_FALSE='#'
AMDEP_TRUE=''
AMTAR='$${TAR-tar}'
AM_BACKSLASH='\'
AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
AM_DEFAULT_VERBOSITY='0'
AM_V='$(V)'
AR='ar'
AUTOCONF='${SHELL} /home/blp/nicira/ovs/build-aux/missing autoconf'
AUTOHEADER='${SHELL} /home/blp/nicira/ovs/build-aux/missing autoheader'
AUTOM4TE='${SHELL} /home/blp/nicira/ovs/build-aux/missing autom4te'
AUTOMAKE='${SHELL} /home/blp/nicira/ovs/build-aux/missing automake-1.16'
AWK='mawk'
CAPNG_LDADD=''
CC='$(if $(C:0=),env REAL_CC="gcc-8" CHECK="$(SPARSE) $(SPARSE_WERROR) -I $(top_srcdir)/include/sparse $(SPARSEFLAGS) $(SPARSE_EXTRA_INCLUDES) " cgcc $(CGCCFLAGS),gcc-8)'
CCDEPMODE='depmode=gcc3'
CFLAGS='-g -O2 -fno-diagnostics-show-caret -fno-common -fno-omit-frame-pointer -fsanitize=address'
CGCCFLAGS='-target=x86_64'
CPP='gcc-8 -E'
CPPFLAGS=''
CXX='g++'
CXXCPP='g++ -E'
CXXDEPMODE='depmode=gcc3'
CXXFLAGS='-g -O2'
CYGPATH_W='echo'
DBDIR='${sysconfdir}/${PACKAGE}'
DEFS='-DHAVE_CONFIG_H'
DEPDIR='.deps'
DLLTOOL='false'
DPDK_CFLAGS=''
DPDK_LIBS=''
DPDK_NETDEV_FALSE=''
DPDK_NETDEV_TRUE='#'
DPDK_vswitchd_LDFLAGS=''
DSYMUTIL=''
DUMPBIN=''
ECHO_C=''
ECHO_N='-n'
ECHO_T=''
EGREP='/usr/bin/grep -E'
ENABLE_SPARSE_BY_DEFAULT_FALSE='#'
ENABLE_SPARSE_BY_DEFAULT_TRUE=''
ESX_FALSE=''
ESX_TRUE='#'
EXEEXT=''
FGREP='/usr/bin/grep -F'
FLAKE8_WERROR=''
GREP='/usr/bin/grep'
HAVE_CXX11='1'
HAVE_CXX_FALSE='#'
HAVE_CXX_TRUE=''
HAVE_DOT_FALSE='#'
HAVE_DOT_TRUE=''
HAVE_FLAKE8_FALSE='#'
HAVE_FLAKE8_TRUE=''
HAVE_GROFF_FALSE='#'
HAVE_GROFF_TRUE=''
HAVE_IF_DL_FALSE=''
HAVE_IF_DL_TRUE='#'
HAVE_LIBCAPNG=''
HAVE_LIBCAPNG_FALSE=''
HAVE_LIBCAPNG_TRUE='#'
HAVE_NETLINK_FALSE='#'
HAVE_NETLINK_TRUE=''
HAVE_OPENSSL='yes'
HAVE_OPENSSL_FALSE='#'
HAVE_OPENSSL_TRUE=''
HAVE_POSIX_AIO_FALSE='#'
HAVE_POSIX_AIO_TRUE=''
HAVE_PYTHON2='yes'
HAVE_PYTHON2_FALSE='#'
HAVE_PYTHON2_TRUE=''
HAVE_PYTHON3='yes'
HAVE_PYTHON3_FALSE='#'
HAVE_PYTHON3_TRUE=''
HAVE_PYTHON='yes'
HAVE_PYTHON_FALSE='#'
HAVE_PYTHON_TRUE=''
HAVE_SPHINX_FALSE='#'
HAVE_SPHINX_TRUE=''
HAVE_UNBOUND='yes'
HAVE_UNBOUND_FALSE='#'
HAVE_UNBOUND_TRUE=''
HAVE_WNO_UNUSED_FALSE='#'
HAVE_WNO_UNUSED_PARAMETER_FALSE='#'
HAVE_WNO_UNUSED_PARAMETER_TRUE=''
HAVE_WNO_UNUSED_TRUE=''
INCLUDE_NEXT='include_next'
INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
INSTALL_DATA='${INSTALL} -m 644'
INSTALL_PROGRAM='${INSTALL}'
INSTALL_SCRIPT='${INSTALL}'
INSTALL_STRIP_PROGRAM='$(install_sh) -c -s'
KARCH='i386'
KBUILD=''
LD='/usr/bin/ld -m elf_x86_64'
LDFLAGS=''
LIBBPF_LDADD=' -lbpf -lelf'
LIBOBJS=''
LIBS='-latomic -lpthread -lrt -lm  -lunbound'
LIBTOOL='$(SHELL) $(top_builddir)/libtool'
LINUX_ENABLED_FALSE=''
LINUX_ENABLED_TRUE='#'
LINUX_FALSE='#'
LINUX_TRUE=''
LIPO=''
LN_S='ln -s'
LOGDIR='${localstatedir}/log/${PACKAGE}'
LTLIBOBJS=''
LT_AGE='0'
LT_CURRENT='0'
LT_REVISION='0'
MAKEINFO='${SHELL} /home/blp/nicira/ovs/build-aux/missing makeinfo'
MANIFEST_TOOL=':'
MKDIR_P='/usr/bin/mkdir -p'
MSVC64_LDFLAGS=''
MSVC_CFLAGS=''
MSVC_PLATFORM='x86'
NDEBUG_FALSE=''
NDEBUG_TRUE='#'
NEXT_AS_FIRST_DIRECTIVE_STDIO_H='<stdio.h>'
NEXT_AS_FIRST_DIRECTIVE_STRING_H='<string.h>'
NEXT_STDIO_H='<stdio.h>'
NEXT_STRING_H='<string.h>'
NM='/usr/bin/nm -B'
NMEDIT=''
OBJDUMP='objdump'
OBJEXT='o'
OPENSSL_SUPPORTS_SNI='yes'
OTOOL64=''
OTOOL=''
OVS_CFLAGS=' -Werror -Werror'
OVS_CTAGS_IDENTIFIERS_LIST='-I "OVS_REQ_RDLOCK+ OVS_ACQ_RDLOCK+ OVS_REQ_WRLOCK+ OVS_ACQ_WRLOCK+ OVS_REQUIRES+ OVS_ACQUIRES+ OVS_TRY_WRLOCK+ OVS_TRY_RDLOCK+ OVS_TRY_LOCK+ OVS_GUARDED_BY+ OVS_EXCLUDED+ OVS_RELEASES+ OVS_ACQ_BEFORE+ OVS_ACQ_AFTER+ "'
OVS_LDFLAGS=''
OVS_LTINFO='-release 2.11 -version-info 0:90'
PACKAGE='openvswitch'
PACKAGE_BUGREPORT='bugs@openvswitch.org'
PACKAGE_NAME='openvswitch'
PACKAGE_STRING='openvswitch 2.11.90'
PACKAGE_TARNAME='openvswitch'
PACKAGE_URL=''
PACKAGE_VERSION='2.11.90'
PATH_SEPARATOR=':'
PKG_CONFIG='/usr/bin/pkg-config'
PKG_CONFIG_LIBDIR=''
PKG_CONFIG_PATH=''
PKIDIR='${localstatedir}/lib/openvswitch/pki'
PRAGMA_COLUMNS=''
PRAGMA_SYSTEM_HEADER='#pragma GCC system_header'
PTHREAD_INCLUDES=''
PTHREAD_LDFLAGS=''
PTHREAD_LIBS=''
PTHREAD_WIN32_DIR_DLL=''
PTHREAD_WIN32_DIR_DLL_WIN_FORM=''
PYTHON2='/usr/bin/python2'
PYTHON3='/usr/bin/python3'
PYTHON='/usr/bin/python2'
RANLIB='ranlib'
RUNDIR='${localstatedir}/run/openvswitch'
SED='/usr/bin/sed'
SET_MAKE=''
SHELL='/bin/bash'
SPARSE='sparse'
SPARSEFLAGS='-m64'
SPARSE_EXTRA_INCLUDES='-I /usr/local/include -I /usr/include/x86_64-linux-gnu '
SPARSE_WERROR='-Wsparse-error'
SSL_DIR=''
SSL_INCLUDES=''
SSL_LDFLAGS=''
SSL_LIBS='-lssl -lcrypto'
STRIP='strip'
SUPPORT_AF_XDP_FALSE='#'
SUPPORT_AF_XDP_TRUE=''
VERSION='2.11.90'
VSTUDIO_CONFIG=''
VSTUDIO_DDK_FALSE=''
VSTUDIO_DDK_TRUE='#'
VSTUDIO_WIN10_FALSE='#'
VSTUDIO_WIN10_TRUE=''
VSTUDIO_WIN8_1_FALSE='#'
VSTUDIO_WIN8_1_TRUE=''
VSTUDIO_WIN8_FALSE='#'
VSTUDIO_WIN8_TRUE=''
WARNING_FLAGS=' -Wall -Wextra -Wno-sign-compare -Wpointer-arith -Wformat -Wformat-security -Wswitch-enum -Wunused-parameter -Wbad-function-cast -Wcast-align -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-field-initializers -fno-strict-aliasing -Wswitch-bool -Wlogical-not-parentheses -Wsizeof-array-argument -Wbool-compare -Wshift-negative-value -Wduplicated-cond -Wshadow -Wmultistatement-macros -Wcast-align=strict'
WIN32_FALSE=''
WIN32_TRUE='#'
ac_ct_AR='ar'
ac_ct_CC='gcc-8'
ac_ct_CXX='g++'
ac_ct_DUMPBIN=''
am__EXEEXT_FALSE=''
am__EXEEXT_TRUE='#'
am__fastdepCC_FALSE='#'
am__fastdepCC_TRUE=''
am__fastdepCXX_FALSE='#'
am__fastdepCXX_TRUE=''
am__include='include'
am__isrc=' -I$(srcdir)'
am__leading_dot='.'
am__nodep='_no'
am__quote=''
am__tar='tar --format=posix -chf - "$$tardir"'
am__untar='tar -xf -'
bindir='${exec_prefix}/bin'
build='x86_64-unknown-linux-gnu'
build_alias=''
build_cpu='x86_64'
build_os='linux-gnu'
build_vendor='unknown'
datadir='${datarootdir}'
datarootdir='${prefix}/share'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
dvidir='${docdir}'
exec_prefix='${prefix}'
host='x86_64-unknown-linux-gnu'
host_alias=''
host_cpu='x86_64'
host_os='linux-gnu'
host_vendor='unknown'
htmldir='${docdir}'
includedir='${prefix}/include'
infodir='${datarootdir}/info'
install_sh='${SHELL} /home/blp/nicira/ovs/build-aux/install-sh'
libdir='${exec_prefix}/lib'
libexecdir='${exec_prefix}/libexec'
localedir='${datarootdir}/locale'
localstatedir='/var'
mandir='${datarootdir}/man'
mkdir_p='$(MKDIR_P)'
oldincludedir='/usr/include'
pdfdir='${docdir}'
prefix='/usr'
program_transform_name='s,x,x,'
psdir='${docdir}'
runstatedir='${localstatedir}/run'
sbindir='${exec_prefix}/sbin'
sharedstatedir='${prefix}/com'
sysconfdir='${prefix}/etc'
target_alias=''

## ----------- ##
## confdefs.h. ##
## ----------- ##

/* confdefs.h */
#define PACKAGE_NAME "openvswitch"
#define PACKAGE_TARNAME "openvswitch"
#define PACKAGE_VERSION "2.11.90"
#define PACKAGE_STRING "openvswitch 2.11.90"
#define PACKAGE_BUGREPORT "bugs@openvswitch.org"
#define PACKAGE_URL ""
#define PACKAGE "openvswitch"
#define VERSION "2.11.90"
#define STDC_HEADERS 1
#define HAVE_SYS_TYPES_H 1
#define HAVE_SYS_STAT_H 1
#define HAVE_STDLIB_H 1
#define HAVE_STRING_H 1
#define HAVE_MEMORY_H 1
#define HAVE_STRINGS_H 1
#define HAVE_INTTYPES_H 1
#define HAVE_STDINT_H 1
#define HAVE_UNISTD_H 1
#define __EXTENSIONS__ 1
#define _ALL_SOURCE 1
#define _GNU_SOURCE 1
#define _POSIX_PTHREAD_SEMANTICS 1
#define _TANDEM_SOURCE 1
#define HAVE_DLFCN_H 1
#define LT_OBJDIR ".libs/"
#define HAVE_DECL_STRERROR_R 1
#define HAVE_STRERROR_R 1
#define STRERROR_R_CHAR_P 1
#define VSTUDIO_DDK 1
#define HAVE_NETLINK 1
#define HAVE_OPENSSL 1
#define OPENSSL_SUPPORTS_SNI 1
#define HAVE_AF_XDP 1
#define HAVE_DECL_SYS_SIGLIST 1
#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1
#define HAVE_STRUCT_MMSGHDR_MSG_LEN 1
#define HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID 1
#define HAVE_MLOCKALL 1
#define HAVE_STRNLEN 1
#define HAVE_GETLOADAVG 1
#define HAVE_STATVFS 1
#define HAVE_GETMNTENT_R 1
#define HAVE_SENDMMSG 1
#define HAVE_CLOCK_GETTIME 1
#define HAVE_MNTENT_H 1
#define HAVE_SYS_STATVFS_H 1
#define HAVE_LINUX_TYPES_H 1
#define HAVE_LINUX_IF_ETHER_H 1
#define HAVE_LINUX_NET_NAMESPACE_H 1
#define HAVE_STDATOMIC_H 1
#define HAVE_BITS_FLOATN_COMMON_H 1
#define HAVE_BACKTRACE 1
#define HAVE_LINUX_PERF_EVENT_H 1
#define HAVE_VALGRIND_VALGRIND_H 1
#define HAVE_THREAD_LOCAL 1
#define HAVE_GCC4_ATOMICS 1
#define ATOMIC_ALWAYS_LOCK_FREE_1B 1
#define ATOMIC_ALWAYS_LOCK_FREE_2B 1
#define ATOMIC_ALWAYS_LOCK_FREE_4B 1
#define ATOMIC_ALWAYS_LOCK_FREE_8B 1
#define HAVE_GLIBC_PTHREAD_SETNAME_NP 1
#define HAVE_CXX11 1
#define HAVE_ATOMIC 1
#define HAVE_POSIX_MEMALIGN 1
#define HAVE_UNBOUND 1
#define HAVE_STDIO_H 1
#define HAVE_STRING_H 1
#define HAVE_TCA_FLOWER_KEY_ENC_IP_TTL_MASK 1
#define HAVE_TCA_VLAN_PUSH_VLAN_PRIORITY 1
#define HAVE_TCA_TUNNEL_KEY_ENC_TTL 1
#define HAVE_TCA_PEDIT_KEY_EX_HDR_TYPE_UDP 1
#define HAVE_TCA_SKBEDIT_FLAGS 1
#define HAVE_PRAGMA_MESSAGE 1

configure: exit 0
Ben Pfaff April 22, 2019, 6:04 p.m. UTC | #3
On Mon, Apr 22, 2019 at 10:56:57AM -0700, Ben Pfaff wrote:
> On Fri, Apr 19, 2019 at 01:22:14PM -0700, William Tu wrote:
> > The patch introduces experimental AF_XDP support for OVS netdev.
> > AF_XDP is a new address family working together with eBPF/XDP.
> > A socket with AF_XDP family can receive and send raw packets
> > from an eBPF/XDP program attached to the netdev.
> > For details introduction and configuration, see
> > Documentation/intro/install/afxdp.rst
> > 
> > Signed-off-by: William Tu <u9012063@gmail.com>
> > Co-authored-by: Yi-Hung Wei <yihung.wei@gmail.com>
> > Cc: Tim Rozet <trozet@redhat.com>
> > Cc: Eelco Chaudron <echaudro@redhat.com>
> 
> Thanks, William and Yi-Hung.
>
> [...more review...]

I should note that I didn't actually review the code, I just got it
building based on the documentation and the review is my notes for that.
William Tu April 22, 2019, 6:29 p.m. UTC | #4
Hi Ben,

Thanks for the feedback.

On Mon, Apr 22, 2019 at 10:57 AM Ben Pfaff <blp@ovn.org> wrote:

> On Fri, Apr 19, 2019 at 01:22:14PM -0700, William Tu wrote:
> > The patch introduces experimental AF_XDP support for OVS netdev.
> > AF_XDP is a new address family working together with eBPF/XDP.
> > A socket with AF_XDP family can receive and send raw packets
> > from an eBPF/XDP program attached to the netdev.
> > For details introduction and configuration, see
> > Documentation/intro/install/afxdp.rst
> >
> > Signed-off-by: William Tu <u9012063@gmail.com>
> > Co-authored-by: Yi-Hung Wei <yihung.wei@gmail.com>
> > Cc: Tim Rozet <trozet@redhat.com>
> > Cc: Eelco Chaudron <echaudro@redhat.com>
>
> Thanks, William and Yi-Hung.
>
> Before I installed libbpf, "configure" failed, even without
> --enable-afxdp:
>
>     config.status: error: Something went wrong bootstrapping makefile
> fragments
>         for automatic dependency tracking.  Try re-running configure with
> the
>         '--disable-dependency-tracking' option to at least be able to build
>         the package (albeit without support for automatic dependency
> tracking).
>     See `config.log' for more details
>
> Thanks, I will take a look.


> I'm attaching the full config.log in case it is helpful.
>
> I would recommend adding a sentence or two to afxdp.rst explaining why
> someone would want to use AF_XDP.  Currently it is kind of there
> ("...much better performance than AF_PACKET.") but it is not called out
> very well.  Maybe something along the lines of saying that it aims to
> have comparable performance to DPDK but cooperate better with existing
> kernel mechanisms.  Otherwise, someone who is new to OVS or to AF_XDP
> will not have any idea of the context.
>

OK


>
> In afxdp.rst, I'd also recommend explaining why the recommended kernel
> config options are recommend.  I'd guess that the BPF_JIT ones are there
> for performance and XDP_SOCKETS_DIAG is for debugging, but it'd be nice
> to say so.
>

OK


>
> s/Fist/First/:
> +Fist, clone a recent version of Linux bpf-next tree::
>
> In the instructions for installing libbpf, I had to run plain "ldconfig"
> by hand before the library showed up in "ldconfig -p" output.
>
> I'm not sure everyone knows the system include path, so you might add
> something like "e.g. /usr/local/include/bpf/xsk.h" to this note:
> +.. note::
> +   Make sure xsk.h is install in system's library path
>
> OK Thanks


> "make install_headers" failed to install libbpf_util.h for me, so the
> build failed.  I installed it by hand and it worked OK after that:
>
>     blp@sigill:~/nicira/bpf-next/tools/lib/bpf(0)$ sudo cp libbpf_util.h
> /usr/local/include/bpf/
>
> I didn't test AF_XDP at runtime, but I did verify that the binary
> linked and started up OK.
>
> I had to apply the following patch to suppress warnings from sparse and
> GCC 8.x:
>
> diff --git a/lib/netdev-afxdp.c b/lib/netdev-afxdp.c
> index 56f313606190..17c99f389e63 100644
> --- a/lib/netdev-afxdp.c
> +++ b/lib/netdev-afxdp.c
> @@ -91,8 +91,9 @@ VLOG_DEFINE_THIS_MODULE(netdev_afxdp);
>  static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 20);
>
>  #define UMEM2DESC(elem, base) ((uint64_t)((char *)elem - (char *)base))
> -#define UMEM2XPKT(base, i) \
> -    (struct dp_packet_afxdp *)((char *)base + i * sizeof(struct
> dp_packet_afxdp))
> +#define UMEM2XPKT(base, i)                                          \
> +    ALIGNED_CAST(struct dp_packet_afxdp *,                          \
> +                 (char *)base + i * sizeof(struct dp_packet_afxdp))
>
>  static uint32_t opt_xdp_bind_flags = XDP_COPY;
>  static uint32_t opt_xdp_flags = XDP_FLAGS_UPDATE_IF_NOEXIST |
> XDP_FLAGS_SKB_MODE;
> @@ -130,8 +131,8 @@ static struct xsk_umem_info *xsk_configure_umem(void
> *buffer, uint64_t size)
>      for (i = NUM_FRAMES - 1; i >= 0; i--) {
>          struct umem_elem *elem;
>
> -        elem = (struct umem_elem *)((char *)umem->buffer
> -                            + i * FRAME_SIZE);
> +        elem = ALIGNED_CAST(struct umem_elem *,
> +                            (char *)umem->buffer + i * FRAME_SIZE);
>          umem_elem_push(&umem->mpool, elem);
>      }
>
> @@ -527,7 +528,8 @@ retry:
>
>          addr = *xsk_ring_cons__comp_addr(&xsk->umem->cq, idx_cq++);
>
> -        elem = (struct umem_elem *)((char *)xsk->umem->buffer + addr);
> +        elem = ALIGNED_CAST(struct umem_elem *,
> +                            (char *)xsk->umem->buffer + addr);
>          umem_elem_push(&xsk->umem->mpool, elem);
>      }
>      xsk_ring_cons__release(&xsk->umem->cq, tx_done);
>
> And the following to suppress additional warnings from Clang:
>
> diff --git a/lib/netdev-afxdp.c b/lib/netdev-afxdp.c
> index 56f313606190..c675cf2e51a8 100644
> --- a/lib/netdev-afxdp.c
> +++ b/lib/netdev-afxdp.c
> @@ -273,7 +274,7 @@ xsk_destroy(struct xsk_socket_info *xsk)
>      return;
>  }
>
> -static inline void
> +static inline void OVS_UNUSED
>  print_xsk_stat(struct xsk_socket_info *xsk OVS_UNUSED) {
>      struct xdp_statistics stat;
>      socklen_t optlen;
> diff --git a/lib/xdpsock.c b/lib/xdpsock.c
> index 9bd574e61774..8d6b37d3b6c2 100644
> --- a/lib/xdpsock.c
> +++ b/lib/xdpsock.c
> @@ -70,7 +70,7 @@ static inline void ovs_spin_unlock(ovs_spinlock_t *sl)
>      __atomic_store_n(&sl->locked, 0, __ATOMIC_RELEASE);
>  }
>
> -static inline int ovs_spin_trylock(ovs_spinlock_t *sl)
> +static inline int OVS_UNUSED ovs_spin_trylock(ovs_spinlock_t *sl)
>  {
>      int exp = 0;
>      return __atomic_compare_exchange_n(&sl->locked, &exp, 1,
>
> Thanks, I did not test compile with clang and sparse.
I will make sure no error in next version

Regards,
William
diff mbox series

Patch

diff --git a/Documentation/automake.mk b/Documentation/automake.mk
index 082438e09a33..11cc59efc881 100644
--- a/Documentation/automake.mk
+++ b/Documentation/automake.mk
@@ -10,6 +10,7 @@  DOC_SOURCE = \
 	Documentation/intro/why-ovs.rst \
 	Documentation/intro/install/index.rst \
 	Documentation/intro/install/bash-completion.rst \
+	Documentation/intro/install/afxdp.rst \
 	Documentation/intro/install/debian.rst \
 	Documentation/intro/install/documentation.rst \
 	Documentation/intro/install/distributions.rst \
diff --git a/Documentation/index.rst b/Documentation/index.rst
index 46261235c732..aa9e7c49f179 100644
--- a/Documentation/index.rst
+++ b/Documentation/index.rst
@@ -59,6 +59,7 @@  vSwitch? Start here.
   :doc:`intro/install/windows` |
   :doc:`intro/install/xenserver` |
   :doc:`intro/install/dpdk` |
+  :doc:`intro/install/afxdp` |
   :doc:`Installation FAQs <faq/releases>`
 
 - **Tutorials:** :doc:`tutorials/faucet` |
diff --git a/Documentation/intro/install/afxdp.rst b/Documentation/intro/install/afxdp.rst
new file mode 100644
index 000000000000..db55d1bc4dd7
--- /dev/null
+++ b/Documentation/intro/install/afxdp.rst
@@ -0,0 +1,299 @@ 
+..
+      Licensed under the Apache License, Version 2.0 (the "License"); you may
+      not use this file except in compliance with the License. You may obtain
+      a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+      Unless required by applicable law or agreed to in writing, software
+      distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+      License for the specific language governing permissions and limitations
+      under the License.
+
+      Convention for heading levels in Open vSwitch documentation:
+
+      =======  Heading 0 (reserved for the title in a document)
+      -------  Heading 1
+      ~~~~~~~  Heading 2
+      +++++++  Heading 3
+      '''''''  Heading 4
+
+      Avoid deeper levels because they do not render well.
+
+
+========================
+Open vSwitch with AF_XDP
+========================
+
+This document describes how to build and install Open vSwitch using
+AF_XDP netdev.
+
+.. warning::
+  The AF_XDP support of Open vSwitch is considered 'experimental',
+  it is not compiled in by default.
+
+Introduction
+------------
+AF_XDP, Address Family eXpress Data Path, is a new address family
+working together with eBPF/XDP. An AF_XDP socket can receive and
+send packets from an eBPF/XDP program attached to the netdev and
+have much better performance than AF_PACKET.
+For more details about AF_XDP, please see linux kernel's
+Documentation/networking/af_xdp.rst
+
+AF_XDP Netdev
+-------------
+OVS has a couple of netdev types, i.e., system, tap, or
+internal.  The AF_XDP feature adds a new netdev types called
+"afxdp", and implement its configuration, packet reception,
+and transmit functions.  Since the AF_XDP socket, xsk,
+operates in userspace, once ovs-vswitchd receives packets
+from xsk, the proposed architecture re-uses the existing
+userspace dpif-netdev datapath.  As a result, most of
+the packet processing happens at the userspace instead of
+linux kernel.
+
+::
+
+              |   +-------------------+
+              |   |    ovs-vswitchd   |<-->ovsdb-server
+              |   +-------------------+
+              |   |      ofproto      |<-->OpenFlow controllers
+              |   +--------+-+--------+
+              |   | netdev | |ofproto-|
+    userspace |   +--------+ |  dpif  |
+              |   | afxdp  | +--------+
+              |   | netdev | |  dpif  |
+              |   +---||---+ +--------+
+              |       ||     |  dpif- |
+              |       ||     | netdev |
+              |_      ||     +--------+
+                      ||
+               _  +---||-----+--------+
+              |   | AF_XDP prog +     |
+       kernel |   |   xsk_map         |
+              |_  +--------||---------+
+                           ||
+                        physical
+                           NIC
+
+
+Build requirements
+------------------
+
+In addition to the requirements described in :doc:`general`, building Open
+vSwitch with AF_XDP will require the following:
+
+- libbpf from kernel source tree (kernel 5.0.0 or later)
+
+- Linux kernel XDP support, with the following options
+  ``_CONFIG_BPF=y``
+
+  ``_CONFIG_BPF_SYSCALL=y``
+
+  ``_CONFIG_XDP_SOCKETS=y``
+
+
+- The following optional Kconfig options are also recommended, but not required:
+
+  ``_CONFIG_BPF_JIT=y``
+
+  ``_CONFIG_HAVE_BPF_JIT=y``
+
+  ``_CONFIG_XDP_SOCKETS_DIAG=y``
+
+- If possible, run **./xdpsock -r -N -z -i <your device>** under linux/samples/bpf.
+  This is the OVS indepedent benchmark tools for AF_XDP. It makes sure your basic
+  kernel requirements are met for AF_XDP.
+
+
+Installing
+----------
+For OVS to use AF_XDP netdev, it has to be configured with LIBBPF support.
+Fist, clone a recent version of Linux bpf-next tree::
+
+  git clone git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git
+
+Second, go into the Linux source directory and build libbpf in the tools directory::
+
+  cd bpf-next/
+  cd tools/lib/bpf/
+  make && make install
+  make install_headers
+
+.. note::
+   Make sure xsk.h is install in system's library path
+
+Make sure the libbpf.so is installed correctly::
+
+  ldconfig -p | grep libbpf
+
+
+Third, ensure the standard OVS requirements are installed and bootstrap/configure the package::
+
+  ./boot.sh && ./configure --enable-afxdp
+
+Finally, build and install OVS::
+
+  make && make install
+
+To kick start end-to-end autotesting::
+
+  make check-afxdp
+
+if a test case fails, check the log at::
+
+  cat tests/system-afxdp-testsuite.dir/<failed number>/system-afxdp-testsuite.log
+
+
+Setup AF_XDP netdev
+-------------------
+Before running OVS with AF_XDP, make sure the libbpf and libelf are set-up right::
+
+  ldd vswitchd/ovs-vswitchd
+
+Open vSwitch should be started using userspace datapath as described in :doc:`general`::
+
+  ovs-vswitchd --disable-system
+  ovs-vsctl -- add-br br0 -- set Bridge br0 datapath_type=netdev
+
+.. note::
+   OVS AF_XDP netdev is using the userspace datapath, the same datapath
+   as used by OVS-DPDK.  So it requires --disable-system for ovs-vswitchd
+   and datapath_type=netdev when adding a new bridge.
+
+Make sure your device support AF_XDP, and to use 1 PMD (on core 4)
+on 1 queue (queue 0) device, configure these options: **pmd-cpu-mask,
+pmd-rxq-affinity, and n_rxq**. The **xdpmode** can be "drv" or "skb"::
+
+  ethtool -L enp2s0 combined 1
+  ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x10
+  ovs-vsctl add-port br0 enp2s0 -- set interface enp2s0 type="afxdp" \
+    options:n_rxq=1 options:xdpmode=drv other_config:pmd-rxq-affinity="0:4"
+
+Or, use 4 pmds/cores and 4 queues by doing::
+
+  ethtool -L enp2s0 combined 4
+  ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x36
+  ovs-vsctl add-port br0 enp2s0 -- set interface enp2s0 type="afxdp" \
+    options:n_rxq=4 options:xdpmode=drv other_config:pmd-rxq-affinity="0:1,1:2,2:3,3:4"
+
+To validate that the bridge has successfully instantiated, you can use the::
+
+  ovs-vsctl show
+
+should show something like::
+
+  Port "ens802f0"
+   Interface "ens802f0"
+      type: afxdp
+      options: {n_rxq="1", xdpmode=drv}
+
+Otherwise, enable debug by::
+
+  ovs-appctl vlog/set netdev_afxdp::dbg
+
+
+References
+----------
+Most of the design details are described in the paper presented at
+Linux Plumber 2018, "Bringing the Power of eBPF to Open vSwitch"[1],
+section 4, and slides[2][4].
+"The Path to DPDK Speeds for AF XDP"[3] gives a very good introduction
+about AF_XDP current and future work.
+
+
+[1] http://vger.kernel.org/lpc_net2018_talks/ovs-ebpf-afxdp.pdf
+
+[2] http://vger.kernel.org/lpc_net2018_talks/ovs-ebpf-lpc18-presentation.pdf
+
+[3] http://vger.kernel.org/lpc_net2018_talks/lpc18_paper_af_xdp_perf-v2.pdf
+
+[4] https://ovsfall2018.sched.com/event/IO7p/fast-userspace-ovs-with-afxdp
+
+
+Performance Tuning
+------------------
+The name of the game is to keep your CPU running in userspace, allowing PMD to
+keep polling the AF_XDP queues without any interferences from kernel.
+
+#. Make sure everything is in the same NUMA node (memory used by AF_XDP, pmd
+   running cores, device plug-in slot)
+
+#. Isolate your CPU by doing isolcpu at grub configure.
+
+#. IRQ should not set to pmd running core.
+
+#. The Spectre and Meltdown fixes increase the overhead of system calls.
+
+Debugging performance issue
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+While running the traffic, use linux perf tool to see where your cpu spends its cycle::
+
+  cd bpf-next/tools/perf
+  make
+  ./perf record -p `pidof ovs-vswitchd` sleep 10
+  ./perf report
+
+Or, use OVS pmd tool::
+
+  ovs-appctl dpif-netdev/pmd-stats-show
+
+
+Example Script
+--------------
+
+Below is a script using namespaces and veth peer::
+
+    #!/bin/bash
+    ovs-vswitchd --no-chdir --pidfile -vvconn -vofproto_dpif -vunixctl --disable-system --detach
+    ovs-vsctl -- add-br br0 -- set Bridge br0 \
+        protocols=OpenFlow10,OpenFlow11,OpenFlow12,OpenFlow13,OpenFlow14,OpenFlow15 \
+        fail-mode=secure datapath_type=netdev
+    ovs-vsctl -- add-br br0 -- set Bridge br0 datapath_type=netdev
+
+    ip netns add at_ns0
+    ovs-appctl vlog/set netdev_afxdp::dbg
+
+    ip link add p0 type veth peer name afxdp-p0
+    ip link set p0 netns at_ns0
+    ip link set dev afxdp-p0 up
+    ovs-vsctl add-port br0 afxdp-p0 -- \
+      set interface afxdp-p0 external-ids:iface-id="p0" type="afxdp"
+
+    ip netns exec at_ns0 sh << NS_EXEC_HEREDOC
+    ip addr add "10.1.1.1/24" dev p0
+    ip link set dev p0 up
+    NS_EXEC_HEREDOC
+
+    ip netns add at_ns1
+    ip link add p1 type veth peer name afxdp-p1
+    ip link set p1 netns at_ns1
+    ip link set dev afxdp-p1 up
+
+    ovs-vsctl add-port br0 afxdp-p1 -- \
+        set interface afxdp-p1 external-ids:iface-id="p1" type="afxdp"
+    ip netns exec at_ns1 sh << NS_EXEC_HEREDOC
+    ip addr add "10.1.1.2/24" dev p1
+    ip link set dev p1 up
+    NS_EXEC_HEREDOC
+
+    ip netns exec at_ns0 ping -i .2 10.1.1.2
+
+
+Limitations/Known Issues
+------------------------
+#. Device's numa ID is always 0, need a way to find numa id from a netdev.
+#. No QoS support because AF_XDP netdev by-pass the Linux TC layer. A possible
+   work-around is to use OpenFlow meter action.
+#. AF_XDP device added to bridge, remove, and added again will fail.
+#. Most of the tests are done using i40e single port. Multiple ports and
+   also ixgbe driver also needs to be tested.
+#. No latency test result (TODO items)
+
+
+Bug Reporting
+-------------
+
+Please report problems to dev@openvswitch.org.
diff --git a/Documentation/intro/install/index.rst b/Documentation/intro/install/index.rst
index 3193c736cf17..c27a9c9d16ff 100644
--- a/Documentation/intro/install/index.rst
+++ b/Documentation/intro/install/index.rst
@@ -45,6 +45,7 @@  Installation from Source
    xenserver
    userspace
    dpdk
+   afxdp
 
 Installation from Packages
 --------------------------
diff --git a/acinclude.m4 b/acinclude.m4
index 1607d5f4b1d9..9ff981e28c32 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -221,6 +221,29 @@  AC_DEFUN([OVS_FIND_DEPENDENCY], [
   ])
 ])
 
+dnl OVS_CHECK_LINUX_AF_XDP
+dnl
+dnl Check both Linux kernel AF_XDP and libbpf support
+AC_DEFUN([OVS_CHECK_LINUX_AF_XDP], [
+  AC_MSG_CHECKING([whether AF_XDP is supported])
+  AC_ARG_ENABLE([afxdp],
+                [AC_HELP_STRING([--enable-afxdp], [Enable AF-XDP support])],
+                [], [enable_afxdp=no])
+  AC_CHECK_HEADER([bpf/libbpf.h],
+                  [HAVE_LIBBPF=yes],
+                  [HAVE_LIBBPF=no])
+  AC_CHECK_HEADER([linux/if_xdp.h],
+                  [HAVE_IF_XDP=yes],
+                  [HAVE_IF_XDP=no])
+  AM_CONDITIONAL([SUPPORT_AF_XDP],
+                 [test "$enable_afxdp" = yes && test "$HAVE_LIBBPF" = yes && test "$HAVE_IF_XDP" = yes])
+  AM_COND_IF([SUPPORT_AF_XDP], [
+    AC_DEFINE([HAVE_AF_XDP], [1], [Define to 1 if AF-XDP support is available and enabled.])
+    LIBBPF_LDADD=" -lbpf -lelf"
+    AC_SUBST([LIBBPF_LDADD])
+  ])
+])
+
 dnl OVS_CHECK_DPDK
 dnl
 dnl Configure DPDK source tree
diff --git a/configure.ac b/configure.ac
index 505e3d041e93..29c90b73f836 100644
--- a/configure.ac
+++ b/configure.ac
@@ -99,6 +99,7 @@  OVS_CHECK_SPHINX
 OVS_CHECK_DOT
 OVS_CHECK_IF_DL
 OVS_CHECK_STRTOK_R
+OVS_CHECK_LINUX_AF_XDP
 AC_CHECK_DECLS([sys_siglist], [], [], [[#include <signal.h>]])
 AC_CHECK_MEMBERS([struct stat.st_mtim.tv_nsec, struct stat.st_mtimensec],
   [], [], [[#include <sys/stat.h>]])
diff --git a/lib/automake.mk b/lib/automake.mk
index cc5dccf39d6b..8b9df5635bbe 100644
--- a/lib/automake.mk
+++ b/lib/automake.mk
@@ -9,6 +9,7 @@  lib_LTLIBRARIES += lib/libopenvswitch.la
 
 lib_libopenvswitch_la_LIBADD = $(SSL_LIBS)
 lib_libopenvswitch_la_LIBADD += $(CAPNG_LDADD)
+lib_libopenvswitch_la_LIBADD += $(LIBBPF_LDADD)
 
 if WIN32
 lib_libopenvswitch_la_LIBADD += ${PTHREAD_LIBS}
@@ -327,7 +328,11 @@  lib_libopenvswitch_la_SOURCES = \
 	lib/lldp/lldpd.c \
 	lib/lldp/lldpd.h \
 	lib/lldp/lldpd-structs.c \
-	lib/lldp/lldpd-structs.h
+	lib/lldp/lldpd-structs.h \
+	lib/xdpsock.c \
+	lib/xdpsock.h \
+	lib/netdev-afxdp.c \
+	lib/netdev-afxdp.h
 
 if WIN32
 lib_libopenvswitch_la_SOURCES += \
diff --git a/lib/dp-packet.c b/lib/dp-packet.c
index 0976a35e758b..5db1aa4b67c0 100644
--- a/lib/dp-packet.c
+++ b/lib/dp-packet.c
@@ -122,6 +122,16 @@  dp_packet_uninit(struct dp_packet *b)
              * created as a dp_packet */
             free_dpdk_buf((struct dp_packet*) b);
 #endif
+        } else if (b->source == DPBUF_AFXDP) {
+#ifdef HAVE_AF_XDP
+            struct dp_packet_afxdp *xpacket;
+
+            xpacket = dp_packet_cast_afxdp(b);
+            if (xpacket->mpool) {
+                umem_elem_push(xpacket->mpool, dp_packet_base(b));
+            }
+#endif
+            return;
         }
     }
 }
@@ -248,6 +258,8 @@  dp_packet_resize__(struct dp_packet *b, size_t new_headroom, size_t new_tailroom
     case DPBUF_STACK:
         OVS_NOT_REACHED();
 
+    case DPBUF_AFXDP:
+        OVS_NOT_REACHED();
     case DPBUF_STUB:
         b->source = DPBUF_MALLOC;
         new_base = xmalloc(new_allocated);
@@ -433,6 +445,7 @@  dp_packet_steal_data(struct dp_packet *b)
 {
     void *p;
     ovs_assert(b->source != DPBUF_DPDK);
+    ovs_assert(b->source != DPBUF_AFXDP);
 
     if (b->source == DPBUF_MALLOC && dp_packet_data(b) == dp_packet_base(b)) {
         p = dp_packet_data(b);
diff --git a/lib/dp-packet.h b/lib/dp-packet.h
index a5e9ade1244a..78f92f0be583 100644
--- a/lib/dp-packet.h
+++ b/lib/dp-packet.h
@@ -30,6 +30,7 @@ 
 #include "packets.h"
 #include "util.h"
 #include "flow.h"
+#include "lib/xdpsock.h"
 
 #ifdef  __cplusplus
 extern "C" {
@@ -42,6 +43,7 @@  enum OVS_PACKED_ENUM dp_packet_source {
     DPBUF_DPDK,                /* buffer data is from DPDK allocated memory.
                                 * ref to dp_packet_init_dpdk() in dp-packet.c.
                                 */
+    DPBUF_AFXDP,                /* buffer data from XDP frame */
 };
 
 #define DP_PACKET_CONTEXT_SIZE 64
@@ -89,6 +91,20 @@  struct dp_packet {
     };
 };
 
+struct dp_packet_afxdp {
+    struct umem_pool *mpool;
+    struct dp_packet packet;
+};
+
+#if HAVE_AF_XDP
+static struct dp_packet_afxdp *
+dp_packet_cast_afxdp(const struct dp_packet *d OVS_UNUSED)
+{
+    ovs_assert(d->source == DPBUF_AFXDP);
+    return CONTAINER_OF(d, struct dp_packet_afxdp, packet);
+}
+#endif
+
 static inline void *dp_packet_data(const struct dp_packet *);
 static inline void dp_packet_set_data(struct dp_packet *, void *);
 static inline void *dp_packet_base(const struct dp_packet *);
@@ -183,7 +199,21 @@  dp_packet_delete(struct dp_packet *b)
             free_dpdk_buf((struct dp_packet*) b);
             return;
         }
-
+        if (b->source == DPBUF_AFXDP) {
+#ifdef HAVE_AF_XDP
+            struct dp_packet_afxdp *xpacket;
+
+            /* if a packet is received from afxdp port,
+             * and tx to a system port. Then we need to
+             * push the rx umem back here
+             */
+            xpacket = dp_packet_cast_afxdp(b);
+            if (xpacket->mpool) {
+                umem_elem_push(xpacket->mpool, dp_packet_base(b));
+            }
+#endif
+            return;
+        }
         dp_packet_uninit(b);
         free(b);
     }
diff --git a/lib/dpif-netdev-perf.h b/lib/dpif-netdev-perf.h
index 859c05613ddf..e47cf73bf3c9 100644
--- a/lib/dpif-netdev-perf.h
+++ b/lib/dpif-netdev-perf.h
@@ -198,6 +198,19 @@  cycles_counter_update(struct pmd_perf_stats *s)
 {
 #ifdef DPDK_NETDEV
     return s->last_tsc = rte_get_tsc_cycles();
+#elif HAVE_AF_XDP
+    union {
+        uint64_t tsc_64;
+        struct {
+            uint32_t lo_32;
+            uint32_t hi_32;
+        };
+    } tsc;
+    asm volatile("rdtsc" :
+             "=a" (tsc.lo_32),
+             "=d" (tsc.hi_32));
+
+    return s->last_tsc = tsc.tsc_64;
 #else
     return s->last_tsc = 0;
 #endif
diff --git a/lib/netdev-afxdp.c b/lib/netdev-afxdp.c
new file mode 100644
index 000000000000..56f313606190
--- /dev/null
+++ b/lib/netdev-afxdp.c
@@ -0,0 +1,592 @@ 
+/*
+ * Copyright (c) 2018, 2019 Nicira, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <config.h>
+#include "netdev-linux.h"
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <inttypes.h>
+#include <linux/filter.h>
+#include <linux/gen_stats.h>
+#include <linux/if_ether.h>
+#include <linux/if_tun.h>
+#include <linux/types.h>
+#include <linux/ethtool.h>
+#include <linux/mii.h>
+#include <linux/rtnetlink.h>
+#include <linux/sockios.h>
+#include <linux/if_xdp.h>
+#include <sys/ioctl.h>
+#include <sys/socket.h>
+#include <sys/utsname.h>
+#include <netpacket/packet.h>
+#include <net/if.h>
+#include <net/if_arp.h>
+#include <net/route.h>
+#include <poll.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "coverage.h"
+#include "dp-packet.h"
+#include "dpif-netlink.h"
+#include "dpif-netdev.h"
+#include "openvswitch/dynamic-string.h"
+#include "fatal-signal.h"
+#include "hash.h"
+#include "openvswitch/hmap.h"
+#include "netdev-provider.h"
+#include "netdev-tc-offloads.h"
+#include "netdev-vport.h"
+#include "netlink-notifier.h"
+#include "netlink-socket.h"
+#include "netlink.h"
+#include "netnsid.h"
+#include "openvswitch/ofpbuf.h"
+#include "openflow/openflow.h"
+#include "ovs-atomic.h"
+#include "packets.h"
+#include "openvswitch/poll-loop.h"
+#include "rtnetlink.h"
+#include "openvswitch/shash.h"
+#include "socket-util.h"
+#include "sset.h"
+#include "tc.h"
+#include "timer.h"
+#include "unaligned.h"
+#include "openvswitch/vlog.h"
+#include "util.h"
+#include "xdpsock.h"
+#include "netdev-afxdp.h"
+
+#ifdef HAVE_AF_XDP
+#ifndef SOL_XDP
+#define SOL_XDP 283
+#endif
+#ifndef AF_XDP
+#define AF_XDP 44
+#endif
+#ifndef PF_XDP
+#define PF_XDP AF_XDP
+#endif
+
+VLOG_DEFINE_THIS_MODULE(netdev_afxdp);
+static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 20);
+
+#define UMEM2DESC(elem, base) ((uint64_t)((char *)elem - (char *)base))
+#define UMEM2XPKT(base, i) \
+    (struct dp_packet_afxdp *)((char *)base + i * sizeof(struct dp_packet_afxdp))
+
+static uint32_t opt_xdp_bind_flags = XDP_COPY;
+static uint32_t opt_xdp_flags = XDP_FLAGS_UPDATE_IF_NOEXIST | XDP_FLAGS_SKB_MODE;
+#if 0
+static uint32_t opt_xdp_bind_flags = XDP_ZEROCOPY;
+static uint32_t opt_xdp_flags = XDP_FLAGS_UPDATE_IF_NOEXIST | XDP_FLAGS_DRV_MODE;
+#endif
+static uint32_t prog_id;
+
+static struct xsk_umem_info *xsk_configure_umem(void *buffer, uint64_t size)
+{
+    struct xsk_umem_info *umem;
+    int ret;
+    int i;
+
+    umem = xcalloc(1, sizeof(*umem));
+    if (!umem) {
+        VLOG_FATAL("xsk config umem failed (%s)", ovs_strerror(errno));
+    }
+
+    ret = xsk_umem__create(&umem->umem, buffer, size, &umem->fq, &umem->cq,
+                           NULL);
+
+    if (ret) {
+        VLOG_FATAL("xsk umem create failed (%s) mode: %s",
+            ovs_strerror(errno),
+            opt_xdp_bind_flags == XDP_COPY ? "SKB": "DRV");
+    }
+
+    umem->buffer = buffer;
+
+    /* set-up umem pool */
+    umem_pool_init(&umem->mpool, NUM_FRAMES);
+
+    for (i = NUM_FRAMES - 1; i >= 0; i--) {
+        struct umem_elem *elem;
+
+        elem = (struct umem_elem *)((char *)umem->buffer
+                            + i * FRAME_SIZE);
+        umem_elem_push(&umem->mpool, elem);
+    }
+
+    /* set-up metadata */
+    xpacket_pool_init(&umem->xpool, NUM_FRAMES);
+
+    VLOG_DBG("%s xpacket pool from %p to %p", __func__,
+              umem->xpool.array,
+              (char *)umem->xpool.array +
+              NUM_FRAMES * sizeof(struct dp_packet_afxdp));
+
+    for (i = NUM_FRAMES - 1; i >= 0; i--) {
+        struct dp_packet_afxdp *xpacket;
+        struct dp_packet *packet;
+
+        xpacket = UMEM2XPKT(umem->xpool.array, i);
+        xpacket->mpool = &umem->mpool;
+
+        packet = &xpacket->packet;
+        packet->source = DPBUF_AFXDP;
+    }
+
+    return umem;
+}
+
+static struct xsk_socket_info *
+xsk_configure_socket(struct xsk_umem_info *umem, uint32_t ifindex,
+                     uint32_t queue_id)
+{
+    struct xsk_socket_config cfg;
+    struct xsk_socket_info *xsk;
+    char devname[IF_NAMESIZE];
+    uint32_t idx;
+    int ret;
+    int i;
+
+    xsk = xcalloc(1, sizeof(*xsk));
+    if (!xsk) {
+        VLOG_FATAL("xsk calloc failed (%s)", ovs_strerror(errno));
+    }
+
+    xsk->umem = umem;
+    cfg.rx_size = CONS_NUM_DESCS;
+    cfg.tx_size = PROD_NUM_DESCS;
+    cfg.libbpf_flags = 0;
+    cfg.xdp_flags = opt_xdp_flags;
+    cfg.bind_flags = opt_xdp_bind_flags;
+
+    if (if_indextoname(ifindex, devname) == NULL) {
+        VLOG_FATAL("ifindex %d devname failed (%s)",
+                   ifindex, ovs_strerror(errno));
+    }
+
+    ret = xsk_socket__create(&xsk->xsk, devname, queue_id, umem->umem,
+                             &xsk->rx, &xsk->tx, &cfg);
+    if (ret) {
+        VLOG_FATAL("xsk_socket_create failed (%s) mode: %s qid: %d",
+                   ovs_strerror(errno),
+                   opt_xdp_bind_flags == XDP_COPY ? "SKB": "DRV",
+                   queue_id);
+    }
+
+    /* make sure the XDP program is there */
+    ret = bpf_get_link_xdp_id(ifindex, &prog_id, opt_xdp_flags);
+    if (ret) {
+        VLOG_FATAL("get XDP prog ID failed (%s)", ovs_strerror(errno));
+    }
+
+    ret = xsk_ring_prod__reserve(&xsk->umem->fq,
+                                 PROD_NUM_DESCS,
+                                 &idx);
+    if (ret != PROD_NUM_DESCS) {
+        VLOG_FATAL("fq set-up failed (%s)", ovs_strerror(errno));
+    }
+
+    for (i = 0;
+         i < PROD_NUM_DESCS * FRAME_SIZE;
+         i += FRAME_SIZE) {
+        struct umem_elem *elem;
+        uint64_t addr;
+
+        elem = umem_elem_pop(&xsk->umem->mpool);
+        addr = UMEM2DESC(elem, xsk->umem->buffer);
+
+        *xsk_ring_prod__fill_addr(&xsk->umem->fq, idx++) = addr;
+    }
+
+    xsk_ring_prod__submit(&xsk->umem->fq,
+                          PROD_NUM_DESCS);
+    return xsk;
+}
+
+struct xsk_socket_info *
+xsk_configure(int ifindex, int xdp_queue_id)
+{
+    struct xsk_socket_info *xsk;
+    struct xsk_umem_info *umem;
+    void *bufs;
+    int ret;
+
+    ret = posix_memalign(&bufs, getpagesize(),
+                         NUM_FRAMES * FRAME_SIZE);
+    ovs_assert(!ret);
+
+    /* Create sockets... */
+    umem = xsk_configure_umem(bufs,
+                              NUM_FRAMES * FRAME_SIZE);
+    xsk = xsk_configure_socket(umem, ifindex, xdp_queue_id);
+    return xsk;
+}
+
+static void OVS_UNUSED vlog_hex_dump(const void *buf, size_t count)
+{
+    struct ds ds = DS_EMPTY_INITIALIZER;
+    ds_put_hex_dump(&ds, buf, count, 0, false);
+    VLOG_DBG_RL(&rl, "%s", ds_cstr(&ds));
+    ds_destroy(&ds);
+}
+
+void
+xsk_destroy(struct xsk_socket_info *xsk)
+{
+    struct xsk_umem *umem;
+
+    if (!xsk) {
+        return;
+    }
+
+    umem = xsk->umem->umem;
+    xsk_socket__delete(xsk->xsk);
+    (void)xsk_umem__delete(umem);
+
+    /* cleanup umem pool */
+    umem_pool_cleanup(&xsk->umem->mpool);
+
+    /* cleanup metadata pool */
+    xpacket_pool_cleanup(&xsk->umem->xpool);
+
+    return;
+}
+
+static inline void
+print_xsk_stat(struct xsk_socket_info *xsk OVS_UNUSED) {
+    struct xdp_statistics stat;
+    socklen_t optlen;
+
+    optlen = sizeof(stat);
+    ovs_assert(getsockopt(xsk_socket__fd(xsk->xsk), SOL_XDP, XDP_STATISTICS,
+                &stat, &optlen) == 0);
+
+    VLOG_DBG_RL(&rl, "rx dropped %llu, rx_invalid %llu, tx_invalid %llu",
+                stat.rx_dropped, stat.rx_invalid_descs, stat.tx_invalid_descs);
+    return;
+}
+
+int
+netdev_afxdp_set_config(struct netdev *netdev, const struct smap *args,
+                        char **errp OVS_UNUSED)
+{
+    const char *xdpmode;
+    int new_n_rxq;
+
+    /* TODO: add mutex lock */
+    new_n_rxq = MAX(smap_get_int(args, "n_rxq", NR_QUEUE), 1);
+
+    if (netdev->n_rxq != new_n_rxq) {
+
+        if (new_n_rxq > MAX_XSKQ) {
+            VLOG_WARN("set n_rxq %d too large", new_n_rxq);
+            goto out;
+        }
+
+        netdev->n_rxq = new_n_rxq;
+        VLOG_INFO("set AF_XDP device %s to %d n_rxq", netdev->name, new_n_rxq);
+        netdev_request_reconfigure(netdev);
+    }
+
+    xdpmode = smap_get(args, "xdpmode");
+    if (xdpmode && strncmp(xdpmode, "drv", 3) == 0) {
+        if (opt_xdp_bind_flags != XDP_ZEROCOPY) {
+            opt_xdp_bind_flags = XDP_ZEROCOPY;
+            opt_xdp_flags = XDP_FLAGS_UPDATE_IF_NOEXIST | XDP_FLAGS_DRV_MODE;
+        }
+        VLOG_INFO("AF_XDP device %s in ZC driver mode", netdev->name);
+    } else {
+        opt_xdp_bind_flags = XDP_COPY;
+        opt_xdp_flags = XDP_FLAGS_UPDATE_IF_NOEXIST | XDP_FLAGS_SKB_MODE;
+        VLOG_INFO("AF_XDP device %s in SKB mode", netdev->name);
+    }
+
+out:
+    return 0;
+}
+
+int
+netdev_afxdp_get_config(const struct netdev *netdev, struct smap *args)
+{
+    /* TODO: add mutex lock */
+    smap_add_format(args, "n_rxq", "%d", netdev->n_rxq);
+    smap_add_format(args, "xdpmode", "%s",
+        opt_xdp_bind_flags == XDP_ZEROCOPY ? "drv" : "skb");
+
+    return 0;
+}
+
+int
+netdev_afxdp_get_numa_id(const struct netdev *netdev)
+{
+    /* FIXME: Get netdev's PCIe device ID, then find
+     * its NUMA node id.
+     */
+    VLOG_INFO("FIXME: Device %s always use numa id 0", netdev->name);
+    return 0;
+}
+
+void
+xsk_remove_xdp_program(uint32_t ifindex)
+{
+    uint32_t curr_prog_id = 0;
+
+    /* remove_xdp_program() */
+    if (bpf_get_link_xdp_id(ifindex, &curr_prog_id, opt_xdp_flags)) {
+        bpf_set_link_xdp_fd(ifindex, -1, opt_xdp_flags);
+    }
+    if (prog_id == curr_prog_id) {
+        bpf_set_link_xdp_fd(ifindex, -1, opt_xdp_flags);
+    } else if (!curr_prog_id) {
+        VLOG_WARN("couldn't find a prog id on a given interface");
+    } else {
+        VLOG_WARN("program on interface changed, not removing");
+    }
+
+    return;
+}
+
+/* Receive packet from AF_XDP socket */
+int
+netdev_linux_rxq_xsk(struct xsk_socket_info *xsk,
+                     struct dp_packet_batch *batch)
+{
+    unsigned int rcvd, i;
+    uint32_t idx_rx = 0, idx_fq = 0;
+    int ret = 0;
+
+    /* See if there is any packet on RX queue,
+     * if yes, idx_rx is the index having the packet.
+     */
+    rcvd = xsk_ring_cons__peek(&xsk->rx, BATCH_SIZE, &idx_rx);
+    if (!rcvd) {
+        return 0;
+    }
+
+    /* Form a dp_packet batch from descriptor in RX queue */
+    for (i = 0; i < rcvd; i++) {
+        uint64_t addr = xsk_ring_cons__rx_desc(&xsk->rx, idx_rx)->addr;
+        uint32_t len = xsk_ring_cons__rx_desc(&xsk->rx, idx_rx)->len;
+        char *pkt = xsk_umem__get_data(xsk->umem->buffer, addr);
+        uint64_t index;
+
+        struct dp_packet_afxdp *xpacket;
+        struct dp_packet *packet;
+
+        index = addr >> FRAME_SHIFT;
+        xpacket = UMEM2XPKT(xsk->umem->xpool.array, index);
+
+        packet = &xpacket->packet;
+        xpacket->mpool = &xsk->umem->mpool;
+
+        if (packet->source != DPBUF_AFXDP) {
+            /* FIXME: might be a bug */
+            continue;
+        }
+
+        /* Initialize the struct dp_packet */
+        if (opt_xdp_bind_flags == XDP_ZEROCOPY) {
+            dp_packet_set_base(packet, pkt - FRAME_HEADROOM);
+        } else {
+            /* SKB mode */
+            dp_packet_set_base(packet, pkt);
+        }
+        dp_packet_set_data(packet, pkt);
+        dp_packet_set_size(packet, len);
+
+        /* Add packet into batch, increase batch->count */
+        dp_packet_batch_add(batch, packet);
+
+        idx_rx++;
+    }
+
+    /* We've consume rcvd packets in RX, now re-fill the
+     * same number back to FILL queue.
+     */
+    for (i = 0; i < rcvd; i++) {
+        uint64_t index;
+        struct umem_elem *elem;
+
+        ret = xsk_ring_prod__reserve(&xsk->umem->fq, 1, &idx_fq);
+        while (ret == 0) {
+            /* The FILL queue is full, so retry. (or skip)? */
+            ret = xsk_ring_prod__reserve(&xsk->umem->fq, 1, &idx_fq);
+        }
+
+        /* Get one free umem, program it into FILL queue */
+        elem = umem_elem_pop(&xsk->umem->mpool);
+        index = (uint64_t)((char *)elem - (char *)xsk->umem->buffer);
+        ovs_assert((index & FRAME_SHIFT_MASK) == 0);
+        *xsk_ring_prod__fill_addr(&xsk->umem->fq, idx_fq) = index;
+
+        idx_fq++;
+    }
+    xsk_ring_prod__submit(&xsk->umem->fq, rcvd);
+
+    /* Release the RX queue */
+    xsk_ring_cons__release(&xsk->rx, rcvd);
+    xsk->rx_npkts += rcvd;
+
+#ifdef AFXDP_DEBUG
+    print_xsk_stat(xsk);
+#endif
+    return 0;
+}
+
+static void kick_tx(struct xsk_socket_info *xsk)
+{
+    int ret;
+
+    ret = sendto(xsk_socket__fd(xsk->xsk), NULL, 0, MSG_DONTWAIT, NULL, 0);
+    if (ret >= 0 || errno == ENOBUFS || errno == EAGAIN || errno == EBUSY) {
+        return;
+    }
+}
+
+/*
+ * A dp_packet might come from
+ * 1) AFXDP buffer
+ * 2) non-AFXDP buffer, ex: send from tap device
+ */
+int
+netdev_linux_afxdp_batch_send(struct xsk_socket_info *xsk,
+                              struct dp_packet_batch *batch)
+{
+    uint32_t tx_done, idx_cq = 0;
+    struct dp_packet *packet;
+    uint32_t idx;
+    int j;
+
+    /* Make sure we have enough TX descs */
+    if (xsk_ring_prod__reserve(&xsk->tx, batch->count, &idx) == 0) {
+        return -EAGAIN;
+    }
+
+    DP_PACKET_BATCH_FOR_EACH (i, packet, batch) {
+        struct dp_packet_afxdp *xpacket;
+        struct umem_elem *elem;
+        uint64_t index;
+
+        elem = umem_elem_pop(&xsk->umem->mpool);
+        if (!elem) {
+            return -EAGAIN;
+        }
+
+        memcpy(elem, dp_packet_data(packet), dp_packet_size(packet));
+
+        index = (uint64_t)((char *)elem - (char *)xsk->umem->buffer);
+        xsk_ring_prod__tx_desc(&xsk->tx, idx + i)->addr = index;
+        xsk_ring_prod__tx_desc(&xsk->tx, idx + i)->len
+            = dp_packet_size(packet);
+
+        if (packet->source == DPBUF_AFXDP) {
+            xpacket = dp_packet_cast_afxdp(packet);
+            umem_elem_push(xpacket->mpool, dp_packet_base(packet));
+             /* Avoid freeing it twice at dp_packet_uninit */
+            xpacket->mpool = NULL;
+        }
+    }
+    xsk_ring_prod__submit(&xsk->tx, batch->count);
+    xsk->outstanding_tx += batch->count;
+
+retry:
+    kick_tx(xsk);
+
+    /* Process CQ */
+    tx_done = xsk_ring_cons__peek(&xsk->umem->cq, batch->count, &idx_cq);
+    if (tx_done > 0) {
+        xsk->outstanding_tx -= tx_done;
+        xsk->tx_npkts += tx_done;
+    }
+
+    /* Recycle back to umem pool */
+    for (j = 0; j < tx_done; j++) {
+        struct umem_elem *elem;
+        uint64_t addr;
+
+        addr = *xsk_ring_cons__comp_addr(&xsk->umem->cq, idx_cq++);
+
+        elem = (struct umem_elem *)((char *)xsk->umem->buffer + addr);
+        umem_elem_push(&xsk->umem->mpool, elem);
+    }
+    xsk_ring_cons__release(&xsk->umem->cq, tx_done);
+
+    if (xsk->outstanding_tx > PROD_NUM_DESCS - (PROD_NUM_DESCS >> 2)) {
+        /* If there are still a lot not transmitted,
+         * try harder.
+         */
+        goto retry;
+    }
+
+    return 0;
+}
+
+#else
+struct xsk_socket_info *
+xsk_configure(int ifindex OVS_UNUSED, int xdp_queue_id OVS_UNUSED)
+{
+    return NULL;
+}
+
+void
+xsk_destroy(struct xsk_socket_info *xsk OVS_UNUSED)
+{
+    return;
+}
+
+int
+netdev_linux_rxq_xsk(struct xsk_socket_info *xsk OVS_UNUSED,
+                     struct dp_packet_batch *batch OVS_UNUSED)
+{
+    return 0;
+}
+
+int
+netdev_linux_afxdp_batch_send(struct xsk_socket_info *xsk OVS_UNUSED,
+                              struct dp_packet_batch *batch OVS_UNUSED)
+{
+    return 0;
+}
+
+int
+netdev_afxdp_set_config(struct netdev *netdev OVS_UNUSED,
+                        const struct smap *args OVS_UNUSED,
+                        char **errp OVS_UNUSED)
+{
+    return 0;
+}
+
+int
+netdev_afxdp_get_config(const struct netdev *netdev OVS_UNUSED,
+                        struct smap *args OVS_UNUSED)
+{
+    return 0;
+}
+
+int
+netdev_afxdp_get_numa_id(const struct netdev *netdev OVS_UNUSED)
+{
+    return 0;
+}
+#endif
diff --git a/lib/netdev-afxdp.h b/lib/netdev-afxdp.h
new file mode 100644
index 000000000000..dd78135c77dc
--- /dev/null
+++ b/lib/netdev-afxdp.h
@@ -0,0 +1,46 @@ 
+/*
+ * Copyright (c) 2018 Nicira, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef NETDEV_AFXDP_H
+#define NETDEV_AFXDP_H 1
+
+#include <stdint.h>
+#include <stdbool.h>
+
+/* These functions are Linux AF_XDP specific, so they should be used directly
+ * only by Linux-specific code. */
+#define MAX_XSKQ 16
+struct netdev;
+struct xsk_socket_info;
+struct xdp_umem;
+struct dp_packet_batch;
+
+struct xsk_socket_info *xsk_configure(int ifindex, int xdp_queue_id);
+void xsk_destroy(struct xsk_socket_info *xsk);
+
+int netdev_linux_rxq_xsk(struct xsk_socket_info *xsk,
+                         struct dp_packet_batch *batch);
+
+int netdev_linux_afxdp_batch_send(struct xsk_socket_info *xsk,
+                                  struct dp_packet_batch *batch);
+
+void xsk_remove_xdp_program(uint32_t ifindex);
+int netdev_afxdp_set_config(struct netdev *netdev, const struct smap *args,
+                            char **errp);
+int netdev_afxdp_get_config(const struct netdev *netdev, struct smap *args);
+int netdev_afxdp_get_numa_id(const struct netdev *netdev);
+
+#endif /* netdev-afxdp.h */
diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c
index 84e2f52dc7b8..d4058d3b1d18 100644
--- a/lib/netdev-linux.c
+++ b/lib/netdev-linux.c
@@ -75,6 +75,7 @@ 
 #include "unaligned.h"
 #include "openvswitch/vlog.h"
 #include "util.h"
+#include "netdev-afxdp.h"
 
 VLOG_DEFINE_THIS_MODULE(netdev_linux);
 
@@ -531,6 +532,7 @@  struct netdev_linux {
 
     /* LAG information. */
     bool is_lag_master;         /* True if the netdev is a LAG master. */
+    struct xsk_socket_info *xsk[MAX_XSKQ]; /* af_xdp socket */
 };
 
 struct netdev_rxq_linux {
@@ -580,12 +582,18 @@  is_netdev_linux_class(const struct netdev_class *netdev_class)
 }
 
 static bool
+is_afxdp_netdev(const struct netdev *netdev)
+{
+    return netdev_get_class(netdev) == &netdev_afxdp_class;
+}
+
+static bool
 is_tap_netdev(const struct netdev *netdev)
 {
     return netdev_get_class(netdev) == &netdev_tap_class;
 }
 
-static struct netdev_linux *
+struct netdev_linux *
 netdev_linux_cast(const struct netdev *netdev)
 {
     ovs_assert(is_netdev_linux_class(netdev_get_class(netdev)));
@@ -1084,6 +1092,25 @@  netdev_linux_destruct(struct netdev *netdev_)
         atomic_count_dec(&miimon_cnt);
     }
 
+#if HAVE_AF_XDP
+    if (is_afxdp_netdev(netdev_)) {
+        int ifindex;
+        int ret, i;
+
+        ret = get_ifindex(netdev_, &ifindex);
+        if (ret) {
+            VLOG_ERR("get ifindex error");
+        } else {
+            for (i = 0; i < MAX_XSKQ; i++) {
+                if (netdev->xsk[i]) {
+                    VLOG_INFO("destroy xsk[%d]", i);
+                    xsk_destroy(netdev->xsk[i]);
+                }
+            }
+            xsk_remove_xdp_program(ifindex);
+        }
+    }
+#endif
     ovs_mutex_destroy(&netdev->mutex);
 }
 
@@ -1113,6 +1140,32 @@  netdev_linux_rxq_construct(struct netdev_rxq *rxq_)
     rx->is_tap = is_tap_netdev(netdev_);
     if (rx->is_tap) {
         rx->fd = netdev->tap_fd;
+    } else if (is_afxdp_netdev(netdev_)) {
+#if HAVE_AF_XDP
+        struct rlimit r = {RLIM_INFINITY, RLIM_INFINITY};
+        int ifindex;
+        int xdp_queue_id = rxq_->queue_id;
+        struct xsk_socket_info *xsk;
+
+        if (setrlimit(RLIMIT_MEMLOCK, &r)) {
+            VLOG_ERR("ERROR: setrlimit(RLIMIT_MEMLOCK) \"%s\"\n",
+                      ovs_strerror(errno));
+            ovs_assert(0);
+        }
+
+        VLOG_DBG("%s: %s: queue=%d configuring xdp sock",
+                  __func__, netdev_->name, xdp_queue_id);
+
+        /* Get ethernet device index. */
+        error = get_ifindex(&netdev->up, &ifindex);
+        if (error) {
+            goto error;
+        }
+
+        xsk = xsk_configure(ifindex, xdp_queue_id);
+        netdev->xsk[xdp_queue_id] = xsk;
+        rx->fd = xsk_socket__fd(xsk->xsk); /* for netdev layer to poll */
+#endif
     } else {
         struct sockaddr_ll sll;
         int ifindex, val;
@@ -1318,9 +1371,16 @@  netdev_linux_rxq_recv(struct netdev_rxq *rxq_, struct dp_packet_batch *batch,
 {
     struct netdev_rxq_linux *rx = netdev_rxq_linux_cast(rxq_);
     struct netdev *netdev = rx->up.netdev;
-    struct dp_packet *buffer;
+    struct dp_packet *buffer = NULL;
     ssize_t retval;
     int mtu;
+    struct netdev_linux *netdev_ = netdev_linux_cast(netdev);
+
+    if (is_afxdp_netdev(netdev)) {
+        int qid = rxq_->queue_id;
+
+        return netdev_linux_rxq_xsk(netdev_->xsk[qid], batch);
+    }
 
     if (netdev_linux_get_mtu__(netdev_linux_cast(netdev), &mtu)) {
         mtu = ETH_PAYLOAD_MAX;
@@ -1329,6 +1389,7 @@  netdev_linux_rxq_recv(struct netdev_rxq *rxq_, struct dp_packet_batch *batch,
     /* Assume Ethernet port. No need to set packet_type. */
     buffer = dp_packet_new_with_headroom(VLAN_ETH_HEADER_LEN + mtu,
                                            DP_NETDEV_HEADROOM);
+
     retval = (rx->is_tap
               ? netdev_linux_rxq_recv_tap(rx->fd, buffer)
               : netdev_linux_rxq_recv_sock(rx->fd, buffer));
@@ -1473,14 +1534,15 @@  netdev_linux_tap_batch_send(struct netdev *netdev_,
  * The kernel maintains a packet transmission queue, so the caller is not
  * expected to do additional queuing of packets. */
 static int
-netdev_linux_send(struct netdev *netdev_, int qid OVS_UNUSED,
+netdev_linux_send(struct netdev *netdev_, int qid,
                   struct dp_packet_batch *batch,
                   bool concurrent_txq OVS_UNUSED)
 {
     int error = 0;
     int sock = 0;
 
-    if (!is_tap_netdev(netdev_)) {
+    if (!is_tap_netdev(netdev_) &&
+        !is_afxdp_netdev(netdev_)) {
         if (netdev_linux_netnsid_is_remote(netdev_linux_cast(netdev_))) {
             error = EOPNOTSUPP;
             goto free_batch;
@@ -1499,6 +1561,10 @@  netdev_linux_send(struct netdev *netdev_, int qid OVS_UNUSED,
         }
 
         error = netdev_linux_sock_batch_send(sock, ifindex, batch);
+    } else if (is_afxdp_netdev(netdev_)) {
+        struct netdev_linux *netdev = netdev_linux_cast(netdev_);
+
+        error = netdev_linux_afxdp_batch_send(netdev->xsk[qid], batch);
     } else {
         error = netdev_linux_tap_batch_send(netdev_, batch);
     }
@@ -3322,6 +3388,7 @@  const struct netdev_class netdev_linux_class = {
     NETDEV_LINUX_CLASS_COMMON,
     LINUX_FLOW_OFFLOAD_API,
     .type = "system",
+    .is_pmd = false,
     .construct = netdev_linux_construct,
     .get_stats = netdev_linux_get_stats,
     .get_features = netdev_linux_get_features,
@@ -3332,6 +3399,7 @@  const struct netdev_class netdev_linux_class = {
 const struct netdev_class netdev_tap_class = {
     NETDEV_LINUX_CLASS_COMMON,
     .type = "tap",
+    .is_pmd = false,
     .construct = netdev_linux_construct_tap,
     .get_stats = netdev_tap_get_stats,
     .get_features = netdev_linux_get_features,
@@ -3342,10 +3410,23 @@  const struct netdev_class netdev_internal_class = {
     NETDEV_LINUX_CLASS_COMMON,
     LINUX_FLOW_OFFLOAD_API,
     .type = "internal",
+    .is_pmd = false,
     .construct = netdev_linux_construct,
     .get_stats = netdev_internal_get_stats,
     .get_status = netdev_internal_get_status,
 };
+
+const struct netdev_class netdev_afxdp_class = {
+    NETDEV_LINUX_CLASS_COMMON,
+    .type = "afxdp",
+    .is_pmd = true,
+    .construct = netdev_linux_construct,
+    .get_stats = netdev_linux_get_stats,
+    .get_status = netdev_linux_get_status,
+    .set_config = netdev_afxdp_set_config,
+    .get_config = netdev_afxdp_get_config,
+    .get_numa_id = netdev_afxdp_get_numa_id,
+};
 
 
 #define CODEL_N_QUEUES 0x0000
diff --git a/lib/netdev-linux.h b/lib/netdev-linux.h
index 17ca9120168a..afcb20ee8d0a 100644
--- a/lib/netdev-linux.h
+++ b/lib/netdev-linux.h
@@ -28,6 +28,7 @@  struct netdev;
 int netdev_linux_ethtool_set_flag(struct netdev *netdev, uint32_t flag,
                                   const char *flag_name, bool enable);
 int linux_get_ifindex(const char *netdev_name);
+struct netdev_linux *netdev_linux_cast(const struct netdev *netdev);
 
 #define LINUX_FLOW_OFFLOAD_API                          \
    .flow_flush = netdev_tc_flow_flush,                  \
diff --git a/lib/netdev-provider.h b/lib/netdev-provider.h
index fb0c27e6e8e8..5bf041316503 100644
--- a/lib/netdev-provider.h
+++ b/lib/netdev-provider.h
@@ -902,6 +902,7 @@  extern const struct netdev_class netdev_linux_class;
 #endif
 extern const struct netdev_class netdev_internal_class;
 extern const struct netdev_class netdev_tap_class;
+extern const struct netdev_class netdev_afxdp_class;
 
 #ifdef  __cplusplus
 }
diff --git a/lib/netdev.c b/lib/netdev.c
index 7d7ecf6f0946..c30016b34033 100644
--- a/lib/netdev.c
+++ b/lib/netdev.c
@@ -145,6 +145,7 @@  netdev_initialize(void)
         netdev_register_provider(&netdev_linux_class);
         netdev_register_provider(&netdev_internal_class);
         netdev_register_provider(&netdev_tap_class);
+        netdev_register_provider(&netdev_afxdp_class);
         netdev_vport_tunnel_register();
 #endif
 #if defined(__FreeBSD__) || defined(__NetBSD__)
diff --git a/lib/xdpsock.c b/lib/xdpsock.c
new file mode 100644
index 000000000000..9bd574e61774
--- /dev/null
+++ b/lib/xdpsock.c
@@ -0,0 +1,211 @@ 
+/*
+ * Copyright (c) 2018, 2019 Nicira, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <config.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <syslog.h>
+#include <time.h>
+#include <unistd.h>
+#include "openvswitch/vlog.h"
+#include "async-append.h"
+#include "coverage.h"
+#include "dirs.h"
+#include "openvswitch/dynamic-string.h"
+#include "openvswitch/ofpbuf.h"
+#include "ovs-thread.h"
+#include "sat-math.h"
+#include "socket-util.h"
+#include "svec.h"
+#include "syslog-direct.h"
+#include "syslog-libc.h"
+#include "syslog-provider.h"
+#include "timeval.h"
+#include "unixctl.h"
+#include "util.h"
+#include "ovs-atomic.h"
+#include "xdpsock.h"
+#include "openvswitch/compiler.h"
+#include "dp-packet.h"
+
+#ifdef HAVE_AF_XDP
+static inline void ovs_spinlock_init(ovs_spinlock_t *sl)
+{
+    sl->locked = 0;
+}
+
+static inline void ovs_spin_lock(ovs_spinlock_t *sl)
+{
+    int exp = 0;
+
+    while (!__atomic_compare_exchange_n(&sl->locked, &exp, 1, 0,
+                __ATOMIC_ACQUIRE, __ATOMIC_RELAXED)) {
+        while (__atomic_load_n(&sl->locked, __ATOMIC_RELAXED)) {
+            ;
+        }
+        exp = 0;
+    }
+}
+
+static inline void ovs_spin_unlock(ovs_spinlock_t *sl)
+{
+    __atomic_store_n(&sl->locked, 0, __ATOMIC_RELEASE);
+}
+
+static inline int ovs_spin_trylock(ovs_spinlock_t *sl)
+{
+    int exp = 0;
+    return __atomic_compare_exchange_n(&sl->locked, &exp, 1,
+              0, /* disallow spurious failure */
+               __ATOMIC_ACQUIRE, __ATOMIC_RELAXED);
+}
+
+void
+__umem_elem_push_n(struct umem_pool *umemp OVS_UNUSED, void **addrs, int n)
+{
+    void *ptr;
+
+    if (OVS_UNLIKELY(umemp->index + n > umemp->size)) {
+        OVS_NOT_REACHED();
+    }
+
+    ptr = &umemp->array[umemp->index];
+    memcpy(ptr, addrs, n * sizeof(void *));
+    umemp->index += n;
+}
+
+inline void
+__umem_elem_push(struct umem_pool *umemp OVS_UNUSED, void *addr)
+{
+    umemp->array[umemp->index++] = addr;
+}
+
+void
+umem_elem_push(struct umem_pool *umemp OVS_UNUSED, void *addr)
+{
+
+    if (OVS_UNLIKELY(umemp->index >= umemp->size)) {
+        /* stack is full */
+        /* it's possible that one umem gets pushed twice,
+         * because actions=1,2,3... multiple ports?
+        */
+        OVS_NOT_REACHED();
+    }
+
+    ovs_assert(((uint64_t)addr & FRAME_SHIFT_MASK) == 0);
+
+    ovs_spin_lock(&umemp->mutex);
+    __umem_elem_push(umemp, addr);
+    ovs_spin_unlock(&umemp->mutex);
+}
+
+void
+__umem_elem_pop_n(struct umem_pool *umemp OVS_UNUSED, void **addrs, int n)
+{
+    void *ptr;
+
+    umemp->index -= n;
+
+    if (OVS_UNLIKELY(umemp->index < 0)) {
+        OVS_NOT_REACHED();
+    }
+
+    ptr = &umemp->array[umemp->index];
+    memcpy(addrs, ptr, n * sizeof(void *));
+}
+
+inline void *
+__umem_elem_pop(struct umem_pool *umemp OVS_UNUSED)
+{
+    return umemp->array[--umemp->index];
+}
+
+void *
+umem_elem_pop(struct umem_pool *umemp OVS_UNUSED)
+{
+    void *ptr;
+
+    ovs_spin_lock(&umemp->mutex);
+    ptr = __umem_elem_pop(umemp);
+    ovs_spin_unlock(&umemp->mutex);
+
+    return ptr;
+}
+
+void **
+__umem_pool_alloc(unsigned int size)
+{
+    void *bufs;
+
+    ovs_assert(posix_memalign(&bufs, getpagesize(),
+                              size * sizeof(void *)) == 0);
+    memset(bufs, 0, size * sizeof(void *));
+    return (void **)bufs;
+}
+
+unsigned int
+umem_elem_count(struct umem_pool *mpool)
+{
+    return mpool->index;
+}
+
+int
+umem_pool_init(struct umem_pool *umemp OVS_UNUSED, unsigned int size)
+{
+    umemp->array = __umem_pool_alloc(size);
+    if (!umemp->array) {
+        OVS_NOT_REACHED();
+    }
+
+    umemp->size = size;
+    umemp->index = 0;
+    ovs_spinlock_init(&umemp->mutex);
+    return 0;
+}
+
+void
+umem_pool_cleanup(struct umem_pool *umemp OVS_UNUSED)
+{
+    free(umemp->array);
+}
+
+/* AF_XDP metadata init/destroy */
+int
+xpacket_pool_init(struct xpacket_pool *xp, unsigned int size)
+{
+    void *bufs;
+
+    ovs_assert(posix_memalign(&bufs, getpagesize(),
+                              size * sizeof(struct dp_packet_afxdp)) == 0);
+    memset(bufs, 0, size * sizeof(struct dp_packet_afxdp));
+
+    xp->array = bufs;
+    xp->size = size;
+    return 0;
+}
+
+void
+xpacket_pool_cleanup(struct xpacket_pool *xp)
+{
+    free(xp->array);
+}
+#else   /* !HAVE_AF_XDP below */
+#endif
diff --git a/lib/xdpsock.h b/lib/xdpsock.h
new file mode 100644
index 000000000000..cb64befe7dba
--- /dev/null
+++ b/lib/xdpsock.h
@@ -0,0 +1,133 @@ 
+/*
+ * Copyright (c) 2018, 2019 Nicira, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef XDPSOCK_H
+#define XDPSOCK_H 1
+#include <errno.h>
+#include <getopt.h>
+#include <libgen.h>
+#include <linux/bpf.h>
+#include <linux/if_link.h>
+#include <linux/if_xdp.h>
+#include <linux/if_ether.h>
+#include <net/if.h>
+#include <signal.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <net/ethernet.h>
+#include <sys/resource.h>
+#include <sys/socket.h>
+#include <sys/mman.h>
+#include <time.h>
+#include <unistd.h>
+#include <pthread.h>
+#include <locale.h>
+#include <sys/types.h>
+#include <poll.h>
+#include <bpf/libbpf.h>
+
+#include "ovs-atomic.h"
+#include "openvswitch/thread.h"
+
+/* bpf/xsk.h uses the following macros not defined in OVS,
+ * so re-define them before include.
+ */
+#define unlikely OVS_UNLIKELY
+#define likely OVS_LIKELY
+#define barrier() __asm__ __volatile__("": : :"memory")
+#define smp_rmb() barrier()
+#define smp_wmb() barrier()
+#include <bpf/xsk.h>
+
+#define FRAME_HEADROOM  XDP_PACKET_HEADROOM
+#define FRAME_SIZE      XSK_UMEM__DEFAULT_FRAME_SIZE
+#define BATCH_SIZE      NETDEV_MAX_BURST
+#define FRAME_SHIFT     XSK_UMEM__DEFAULT_FRAME_SHIFT
+#define FRAME_SHIFT_MASK    ((1<<FRAME_SHIFT)-1)
+
+#define NUM_FRAMES  1024
+#define PROD_NUM_DESCS 128
+#define CONS_NUM_DESCS 128
+
+#ifdef USE_XSK_DEFAULT
+#define PROD_NUM_DESCS XSK_RING_PROD__DEFAULT_NUM_DESCS
+#define CONS_NUM_DESCS XSK_RING_CONS__DEFAULT_NUM_DESCS
+#endif
+
+typedef struct {
+    volatile int locked;
+} ovs_spinlock_t;
+
+/* LIFO ptr_array */
+struct umem_pool {
+    int index;      /* point to top */
+    unsigned int size;
+    ovs_spinlock_t mutex;
+    void **array;   /* a pointer array */
+};
+
+/* array-based dp_packet_afxdp */
+struct xpacket_pool {
+    unsigned int size;
+    struct dp_packet_afxdp **array;
+};
+
+struct xsk_umem_info {
+    struct umem_pool mpool;
+    struct xpacket_pool xpool;
+    struct xsk_ring_prod fq;
+    struct xsk_ring_cons cq;
+    struct xsk_umem *umem;
+    void *buffer;
+};
+
+struct xsk_socket_info {
+    struct xsk_ring_cons rx;
+    struct xsk_ring_prod tx;
+    struct xsk_umem_info *umem;
+    struct xsk_socket *xsk;
+    unsigned long rx_npkts;
+    unsigned long tx_npkts;
+    unsigned long prev_rx_npkts;
+    unsigned long prev_tx_npkts;
+    uint32_t outstanding_tx;
+};
+
+struct umem_elem_head {
+    unsigned int index;
+    struct ovs_mutex mutex;
+    uint32_t n;
+};
+
+struct umem_elem {
+    struct umem_elem *next;
+};
+
+void __umem_elem_push(struct umem_pool *umemp, void *addr);
+void umem_elem_push(struct umem_pool *umemp, void *addr);
+void *__umem_elem_pop(struct umem_pool *umemp);
+void *umem_elem_pop(struct umem_pool *umemp);
+void **__umem_pool_alloc(unsigned int size);
+int umem_pool_init(struct umem_pool *umemp, unsigned int size);
+void umem_pool_cleanup(struct umem_pool *umemp);
+unsigned int umem_elem_count(struct umem_pool *mpool);
+void __umem_elem_pop_n(struct umem_pool *umemp, void **addrs, int n);
+void __umem_elem_push_n(struct umem_pool *umemp, void **addrs, int n);
+int xpacket_pool_init(struct xpacket_pool *xp, unsigned int size);
+void xpacket_pool_cleanup(struct xpacket_pool *xp);
+
+#endif
diff --git a/tests/automake.mk b/tests/automake.mk
index 017d2d416156..b591405c1a21 100644
--- a/tests/automake.mk
+++ b/tests/automake.mk
@@ -4,12 +4,14 @@  EXTRA_DIST += \
 	$(SYSTEM_TESTSUITE_AT) \
 	$(SYSTEM_KMOD_TESTSUITE_AT) \
 	$(SYSTEM_USERSPACE_TESTSUITE_AT) \
+	$(SYSTEM_AFXDP_TESTSUITE_AT) \
 	$(SYSTEM_OFFLOADS_TESTSUITE_AT) \
 	$(SYSTEM_DPDK_TESTSUITE_AT) \
 	$(OVSDB_CLUSTER_TESTSUITE_AT) \
 	$(TESTSUITE) \
 	$(SYSTEM_KMOD_TESTSUITE) \
 	$(SYSTEM_USERSPACE_TESTSUITE) \
+	$(SYSTEM_AFXDP_TESTSUITE) \
 	$(SYSTEM_OFFLOADS_TESTSUITE) \
 	$(SYSTEM_DPDK_TESTSUITE) \
 	$(OVSDB_CLUSTER_TESTSUITE) \
@@ -157,6 +159,11 @@  SYSTEM_USERSPACE_TESTSUITE_AT = \
 	tests/system-userspace-macros.at \
 	tests/system-userspace-packet-type-aware.at
 
+SYSTEM_AFXDP_TESTSUITE_AT = \
+	tests/system-afxdp-testsuite.at \
+	tests/system-afxdp-traffic.at \
+	tests/system-afxdp-macros.at
+
 SYSTEM_TESTSUITE_AT = \
 	tests/system-common-macros.at \
 	tests/system-ovn.at \
@@ -181,6 +188,7 @@  TESTSUITE = $(srcdir)/tests/testsuite
 TESTSUITE_PATCH = $(srcdir)/tests/testsuite.patch
 SYSTEM_KMOD_TESTSUITE = $(srcdir)/tests/system-kmod-testsuite
 SYSTEM_USERSPACE_TESTSUITE = $(srcdir)/tests/system-userspace-testsuite
+SYSTEM_AFXDP_TESTSUITE = $(srcdir)/tests/system-afxdp-testsuite
 SYSTEM_OFFLOADS_TESTSUITE = $(srcdir)/tests/system-offloads-testsuite
 SYSTEM_DPDK_TESTSUITE = $(srcdir)/tests/system-dpdk-testsuite
 OVSDB_CLUSTER_TESTSUITE = $(srcdir)/tests/ovsdb-cluster-testsuite
@@ -314,6 +322,11 @@  check-system-userspace: all
 	set $(SHELL) '$(SYSTEM_USERSPACE_TESTSUITE)' -C tests  AUTOTEST_PATH='$(AUTOTEST_PATH)'; \
 	"$$@" $(TESTSUITEFLAGS) -j1 || (test X'$(RECHECK)' = Xyes && "$$@" --recheck)
 
+check-afxdp: all
+	$(MAKE) install
+	set $(SHELL) '$(SYSTEM_AFXDP_TESTSUITE)' -C tests  AUTOTEST_PATH='$(AUTOTEST_PATH)' $(TESTSUITEFLAGS) -j1; \
+	"$$@" || (test X'$(RECHECK)' = Xyes && "$$@" --recheck)
+
 check-offloads: all
 	set $(SHELL) '$(SYSTEM_OFFLOADS_TESTSUITE)' -C tests  AUTOTEST_PATH='$(AUTOTEST_PATH)'; \
 	"$$@" $(TESTSUITEFLAGS) -j1 || (test X'$(RECHECK)' = Xyes && "$$@" --recheck)
@@ -351,6 +364,10 @@  $(SYSTEM_USERSPACE_TESTSUITE): package.m4 $(SYSTEM_TESTSUITE_AT) $(SYSTEM_USERSP
 	$(AM_V_GEN)$(AUTOTEST) -I '$(srcdir)' -o $@.tmp $@.at
 	$(AM_V_at)mv $@.tmp $@
 
+$(SYSTEM_AFXDP_TESTSUITE): package.m4 $(SYSTEM_TESTSUITE_AT) $(SYSTEM_AFXDP_TESTSUITE_AT) $(COMMON_MACROS_AT)
+	$(AM_V_GEN)$(AUTOTEST) -I '$(srcdir)' -o $@.tmp $@.at
+	$(AM_V_at)mv $@.tmp $@
+
 $(SYSTEM_OFFLOADS_TESTSUITE): package.m4 $(SYSTEM_TESTSUITE_AT) $(SYSTEM_OFFLOADS_TESTSUITE_AT) $(COMMON_MACROS_AT)
 	$(AM_V_GEN)$(AUTOTEST) -I '$(srcdir)' -o $@.tmp $@.at
 	$(AM_V_at)mv $@.tmp $@
diff --git a/tests/system-afxdp-macros.at b/tests/system-afxdp-macros.at
new file mode 100644
index 000000000000..2c58c2d6554b
--- /dev/null
+++ b/tests/system-afxdp-macros.at
@@ -0,0 +1,153 @@ 
+# _ADD_BR([name])
+#
+# Expands into the proper ovs-vsctl commands to create a bridge with the
+# appropriate type and properties
+m4_define([_ADD_BR], [[add-br $1 -- set Bridge $1 datapath_type=netdev protocols=OpenFlow10,OpenFlow11,OpenFlow12,OpenFlow13,OpenFlow14,OpenFlow15 fail-mode=secure ]])
+
+# OVS_TRAFFIC_VSWITCHD_START([vsctl-args], [vsctl-output], [=override])
+#
+# Creates a database and starts ovsdb-server, starts ovs-vswitchd
+# connected to that database, calls ovs-vsctl to create a bridge named
+# br0 with predictable settings, passing 'vsctl-args' as additional
+# commands to ovs-vsctl.  If 'vsctl-args' causes ovs-vsctl to provide
+# output (e.g. because it includes "create" commands) then 'vsctl-output'
+# specifies the expected output after filtering through uuidfilt.
+m4_define([OVS_TRAFFIC_VSWITCHD_START],
+  [
+   export OVS_PKGDATADIR=$(`pwd`)
+   _OVS_VSWITCHD_START([--disable-system])
+   AT_CHECK([ovs-vsctl -- _ADD_BR([br0]) -- $1 m4_if([$2], [], [], [| uuidfilt])], [0], [$2])
+])
+
+# OVS_TRAFFIC_VSWITCHD_STOP([WHITELIST], [extra_cmds])
+#
+# Gracefully stops ovs-vswitchd and ovsdb-server, checking their log files
+# for messages with severity WARN or higher and signaling an error if any
+# is present.  The optional WHITELIST may contain shell-quoted "sed"
+# commands to delete any warnings that are actually expected, e.g.:
+#
+#   OVS_TRAFFIC_VSWITCHD_STOP(["/expected error/d"])
+#
+# 'extra_cmds' are shell commands to be executed afte OVS_VSWITCHD_STOP() is
+# invoked. They can be used to perform additional cleanups such as name space
+# removal.
+m4_define([OVS_TRAFFIC_VSWITCHD_STOP],
+  [OVS_VSWITCHD_STOP([dnl
+$1";/netdev_linux.*obtaining netdev stats via vport failed/d
+/dpif_netlink.*Generic Netlink family 'ovs_datapath' does not exist. The Open vSwitch kernel module is probably not loaded./d
+/dpif_netdev(revalidator.*)|ERR|internal error parsing flow key/d
+/dpif(revalidator.*)|WARN|netdev@ovs-netdev: failed to put/d
+"])
+   AT_CHECK([:; $2])
+  ])
+
+m4_define([ADD_VETH_AFXDP],
+    [ AT_CHECK([ip link add $1 type veth peer name ovs-$1 || return 77])
+      CONFIGURE_AFXDP_VETH_OFFLOADS([$1])
+      AT_CHECK([ip link set $1 netns $2])
+      AT_CHECK([ip link set dev ovs-$1 up])
+      AT_CHECK([ovs-vsctl add-port $3 ovs-$1 -- \
+                set interface ovs-$1 external-ids:iface-id="$1" type="afxdp"])
+      NS_CHECK_EXEC([$2], [ip addr add $4 dev $1 $7])
+      NS_CHECK_EXEC([$2], [ip link set dev $1 up])
+      if test -n "$5"; then
+        NS_CHECK_EXEC([$2], [ip link set dev $1 address $5])
+      fi
+      if test -n "$6"; then
+        NS_CHECK_EXEC([$2], [ip route add default via $6])
+      fi
+      on_exit 'ip link del ovs-$1'
+    ]
+)
+
+# CONFIGURE_AFXDP_VETH_OFFLOADS([VETH])
+#
+# Disable TX offloads and VLAN offloads for veths used in AF_XDP.
+m4_define([CONFIGURE_AFXDP_VETH_OFFLOADS],
+    [AT_CHECK([ethtool -K $1 tx off], [0], [ignore], [ignore])
+     AT_CHECK([ethtool -K $1 rxvlan off], [0], [ignore], [ignore])
+     AT_CHECK([ethtool -K $1 txvlan off], [0], [ignore], [ignore])
+    ]
+)
+
+# CONFIGURE_VETH_OFFLOADS([VETH])
+#
+# Disable TX offloads for veths.  The userspace datapath uses the AF_PACKET
+# socket to receive packets for veths.  Unfortunately, the AF_PACKET socket
+# doesn't play well with offloads:
+# 1. GSO packets are received without segmentation and therefore discarded.
+# 2. Packets with offloaded partial checksum are received with the wrong
+#    checksum, therefore discarded by the receiver.
+#
+# By disabling tx offloads in the non-OVS side of the veth peer we make sure
+# that the AF_PACKET socket will not receive bad packets.
+#
+# This is a workaround, and should be removed when offloads are properly
+# supported in netdev-linux.
+m4_define([CONFIGURE_VETH_OFFLOADS],
+    [AT_CHECK([ethtool -K $1 tx off], [0], [ignore], [ignore])]
+)
+
+# CHECK_CONNTRACK()
+#
+# Perform requirements checks for running conntrack tests.
+#
+m4_define([CHECK_CONNTRACK],
+    [AT_SKIP_IF([test $HAVE_PYTHON = no])]
+)
+
+# CHECK_CONNTRACK_ALG()
+#
+# Perform requirements checks for running conntrack ALG tests. The userspace
+# supports FTP and TFTP.
+#
+m4_define([CHECK_CONNTRACK_ALG])
+
+# CHECK_CONNTRACK_FRAG()
+#
+# Perform requirements checks for running conntrack fragmentations tests.
+# The userspace doesn't support fragmentation yet, so skip the tests.
+m4_define([CHECK_CONNTRACK_FRAG],
+[
+    AT_SKIP_IF([:])
+])
+
+# CHECK_CONNTRACK_LOCAL_STACK()
+#
+# Perform requirements checks for running conntrack tests with local stack.
+# While the kernel connection tracker automatically passes all the connection
+# tracking state from an internal port to the OpenvSwitch kernel module, there
+# is simply no way of doing that with the userspace, so skip the tests.
+m4_define([CHECK_CONNTRACK_LOCAL_STACK],
+[
+    AT_SKIP_IF([:])
+])
+
+# CHECK_CONNTRACK_NAT()
+#
+# Perform requirements checks for running conntrack NAT tests. The userspace
+# datapath supports NAT.
+#
+m4_define([CHECK_CONNTRACK_NAT])
+
+# CHECK_CT_DPIF_FLUSH_BY_CT_TUPLE()
+#
+# Perform requirements checks for running ovs-dpctl flush-conntrack by
+# conntrack 5-tuple test. The userspace datapath does not support
+# this feature yet.
+m4_define([CHECK_CT_DPIF_FLUSH_BY_CT_TUPLE],
+[
+    AT_SKIP_IF([:])
+])
+
+# CHECK_CT_DPIF_SET_GET_MAXCONNS()
+#
+# Perform requirements checks for running ovs-dpctl ct-set-maxconns or
+# ovs-dpctl ct-get-maxconns. The userspace datapath does support this feature.
+m4_define([CHECK_CT_DPIF_SET_GET_MAXCONNS])
+
+# CHECK_CT_DPIF_GET_NCONNS()
+#
+# Perform requirements checks for running ovs-dpctl ct-get-nconns. The
+# userspace datapath does support this feature.
+m4_define([CHECK_CT_DPIF_GET_NCONNS])
diff --git a/tests/system-afxdp-testsuite.at b/tests/system-afxdp-testsuite.at
new file mode 100644
index 000000000000..538c0d15d556
--- /dev/null
+++ b/tests/system-afxdp-testsuite.at
@@ -0,0 +1,26 @@ 
+AT_INIT
+
+AT_COPYRIGHT([Copyright (c) 2018 Nicira, Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at:
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.])
+
+m4_ifdef([AT_COLOR_TESTS], [AT_COLOR_TESTS])
+
+m4_include([tests/ovs-macros.at])
+m4_include([tests/ovsdb-macros.at])
+m4_include([tests/ofproto-macros.at])
+m4_include([tests/system-afxdp-macros.at])
+m4_include([tests/system-common-macros.at])
+
+m4_include([tests/system-afxdp-traffic.at])
+m4_include([tests/system-ovn.at])
diff --git a/tests/system-afxdp-traffic.at b/tests/system-afxdp-traffic.at
new file mode 100644
index 000000000000..26f72acf48ef
--- /dev/null
+++ b/tests/system-afxdp-traffic.at
@@ -0,0 +1,978 @@ 
+AT_BANNER([AF_XDP netdev datapath-sanity])
+
+AT_SETUP([datapath - ping between two ports])
+OVS_TRAFFIC_VSWITCHD_START()
+
+ulimit -l unlimited
+
+ADD_NAMESPACES(at_ns0, at_ns1)
+AT_CHECK([ovs-ofctl add-flow br0 "actions=normal"])
+
+ADD_VETH_AFXDP(p0, at_ns0, br0, "10.1.1.1/24")
+ADD_VETH_AFXDP(p1, at_ns1, br0, "10.1.1.2/24")
+
+NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -w 2 10.1.1.2 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+OVS_TRAFFIC_VSWITCHD_STOP
+AT_CLEANUP
+
+AT_SETUP([datapath - ping between two ports on vlan])
+OVS_TRAFFIC_VSWITCHD_START()
+
+AT_CHECK([ovs-ofctl add-flow br0 "actions=normal"])
+
+ADD_NAMESPACES(at_ns0, at_ns1)
+
+ADD_VETH_AFXDP(p0, at_ns0, br0, "10.1.1.1/24")
+ADD_VETH_AFXDP(p1, at_ns1, br0, "10.1.1.2/24")
+
+ADD_VLAN(p0, at_ns0, 100, "10.2.2.1/24")
+ADD_VLAN(p1, at_ns1, 100, "10.2.2.2/24")
+
+NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -w 2 10.2.2.2 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+
+OVS_TRAFFIC_VSWITCHD_STOP
+AT_CLEANUP
+
+AT_SETUP([datapath - ping6 between two ports])
+OVS_TRAFFIC_VSWITCHD_START()
+
+AT_CHECK([ovs-ofctl add-flow br0 "actions=normal"])
+
+ADD_NAMESPACES(at_ns0, at_ns1)
+
+ADD_VETH_AFXDP(p0, at_ns0, br0, "fc00::1/96")
+ADD_VETH_AFXDP(p1, at_ns1, br0, "fc00::2/96")
+
+dnl Linux seems to take a little time to get its IPv6 stack in order. Without
+dnl waiting, we get occasional failures due to the following error:
+dnl "connect: Cannot assign requested address"
+OVS_WAIT_UNTIL([ip netns exec at_ns0 ping6 -c 1 fc00::2])
+
+NS_CHECK_EXEC([at_ns0], [ping6 -q -c 3 -i 0.3 -w 6 fc00::2 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+
+OVS_TRAFFIC_VSWITCHD_STOP
+AT_CLEANUP
+
+AT_SETUP([datapath - ping6 between two ports on vlan])
+OVS_TRAFFIC_VSWITCHD_START()
+
+AT_CHECK([ovs-ofctl add-flow br0 "actions=normal"])
+
+ADD_NAMESPACES(at_ns0, at_ns1)
+
+ADD_VETH_AFXDP(p0, at_ns0, br0, "fc00::1/96")
+ADD_VETH_AFXDP(p1, at_ns1, br0, "fc00::2/96")
+
+ADD_VLAN(p0, at_ns0, 100, "fc00:1::1/96")
+ADD_VLAN(p1, at_ns1, 100, "fc00:1::2/96")
+
+dnl Linux seems to take a little time to get its IPv6 stack in order. Without
+dnl waiting, we get occasional failures due to the following error:
+dnl "connect: Cannot assign requested address"
+OVS_WAIT_UNTIL([ip netns exec at_ns0 ping6 -c 1 fc00:1::2])
+
+NS_CHECK_EXEC([at_ns0], [ping6 -q -c 3 -i 0.3 -w 2 fc00:1::2 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+NS_CHECK_EXEC([at_ns0], [ping6 -s 1600 -q -c 3 -i 0.3 -w 2 fc00:1::2 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+NS_CHECK_EXEC([at_ns0], [ping6 -s 3200 -q -c 3 -i 0.3 -w 2 fc00:1::2 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+
+OVS_TRAFFIC_VSWITCHD_STOP
+AT_CLEANUP
+
+AT_SETUP([datapath - ping over vxlan tunnel])
+OVS_CHECK_VXLAN()
+
+OVS_TRAFFIC_VSWITCHD_START()
+ADD_BR([br-underlay])
+
+AT_CHECK([ovs-ofctl add-flow br0 "actions=normal"])
+AT_CHECK([ovs-ofctl add-flow br-underlay "actions=normal"])
+
+ADD_NAMESPACES(at_ns0)
+
+dnl Set up underlay link from host into the namespace using veth pair.
+ADD_VETH_AFXDP(p0, at_ns0, br-underlay, "172.31.1.1/24")
+AT_CHECK([ip addr add dev br-underlay "172.31.1.100/24"])
+AT_CHECK([ip link set dev br-underlay up])
+
+
+dnl Set up tunnel endpoints on OVS outside the namespace and with a native
+dnl linux device inside the namespace.
+ADD_OVS_TUNNEL([vxlan], [br0], [at_vxlan0], [172.31.1.1], [10.1.1.100/24])
+ADD_NATIVE_TUNNEL([vxlan], [at_vxlan1], [at_ns0], [172.31.1.100], [10.1.1.1/24],
+                  [id 0 dstport 4789])
+
+AT_CHECK([ovs-appctl ovs/route/add 10.1.1.100/24 br0], [0], [OK
+])
+AT_CHECK([ovs-appctl ovs/route/add 172.31.1.92/24 br-underlay], [0], [OK
+])
+
+dnl First, check the underlay
+NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -w 2 172.31.1.100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+
+dnl Okay, now check the overlay with different packet sizes
+NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -w 2 10.1.1.100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+NS_CHECK_EXEC([at_ns0], [ping -s 1600 -q -c 3 -i 0.3 -w 2 10.1.1.100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+NS_CHECK_EXEC([at_ns0], [ping -s 3200 -q -c 3 -i 0.3 -w 2 10.1.1.100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+
+OVS_TRAFFIC_VSWITCHD_STOP
+AT_CLEANUP
+
+AT_SETUP([datapath - ping over vxlan6 tunnel])
+OVS_CHECK_VXLAN_UDP6ZEROCSUM()
+
+OVS_TRAFFIC_VSWITCHD_START()
+ADD_BR([br-underlay])
+
+AT_CHECK([ovs-ofctl add-flow br0 "actions=normal"])
+AT_CHECK([ovs-ofctl add-flow br-underlay "actions=normal"])
+
+ADD_NAMESPACES(at_ns0)
+
+dnl Set up underlay link from host into the namespace using veth pair.
+ADD_VETH_AFXDP(p0, at_ns0, br-underlay, "fc00::1/64", [], [], "nodad")
+AT_CHECK([ip addr add dev br-underlay "fc00::100/64" nodad])
+AT_CHECK([ip link set dev br-underlay up])
+
+dnl Set up tunnel endpoints on OVS outside the namespace and with a native
+dnl linux device inside the namespace.
+ADD_OVS_TUNNEL6([vxlan], [br0], [at_vxlan0], [fc00::1], [10.1.1.100/24])
+ADD_NATIVE_TUNNEL6([vxlan], [at_vxlan1], [at_ns0], [fc00::100], [10.1.1.1/24],
+                   [id 0 dstport 4789 udp6zerocsumtx udp6zerocsumrx])
+
+AT_CHECK([ovs-appctl ovs/route/add 10.1.1.100/24 br0], [0], [OK
+])
+AT_CHECK([ovs-appctl ovs/route/add fc00::100/64 br-underlay], [0], [OK
+])
+
+OVS_WAIT_UNTIL([ip netns exec at_ns0 ping6 -c 1 fc00::100])
+
+dnl First, check the underlay
+NS_CHECK_EXEC([at_ns0], [ping6 -q -c 3 -i 0.3 -w 2 fc00::100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+
+dnl Okay, now check the overlay with different packet sizes
+NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -w 2 10.1.1.100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+NS_CHECK_EXEC([at_ns0], [ping -s 1600 -q -c 3 -i 0.3 -w 2 10.1.1.100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+NS_CHECK_EXEC([at_ns0], [ping -s 3200 -q -c 3 -i 0.3 -w 2 10.1.1.100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+
+OVS_TRAFFIC_VSWITCHD_STOP
+AT_CLEANUP
+
+AT_SETUP([datapath - ping over gre tunnel])
+OVS_CHECK_GRE()
+
+OVS_TRAFFIC_VSWITCHD_START()
+ADD_BR([br-underlay])
+
+AT_CHECK([ovs-ofctl add-flow br0 "actions=normal"])
+AT_CHECK([ovs-ofctl add-flow br-underlay "actions=normal"])
+
+ADD_NAMESPACES(at_ns0)
+
+dnl Set up underlay link from host into the namespace using veth pair.
+ADD_VETH_AFXDP(p0, at_ns0, br-underlay, "172.31.1.1/24")
+AT_CHECK([ip addr add dev br-underlay "172.31.1.100/24"])
+AT_CHECK([ip link set dev br-underlay up])
+
+dnl Set up tunnel endpoints on OVS outside the namespace and with a native
+dnl linux device inside the namespace.
+ADD_OVS_TUNNEL([gre], [br0], [at_gre0], [172.31.1.1], [10.1.1.100/24])
+ADD_NATIVE_TUNNEL([gretap], [ns_gre0], [at_ns0], [172.31.1.100], [10.1.1.1/24])
+
+AT_CHECK([ovs-appctl ovs/route/add 10.1.1.100/24 br0], [0], [OK
+])
+AT_CHECK([ovs-appctl ovs/route/add 172.31.1.92/24 br-underlay], [0], [OK
+])
+
+dnl First, check the underlay
+NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -w 2 172.31.1.100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+
+dnl Okay, now check the overlay with different packet sizes
+NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -w 2 10.1.1.100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+NS_CHECK_EXEC([at_ns0], [ping -s 1600 -q -c 3 -i 0.3 -w 2 10.1.1.100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+NS_CHECK_EXEC([at_ns0], [ping -s 3200 -q -c 3 -i 0.3 -w 2 10.1.1.100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+
+OVS_TRAFFIC_VSWITCHD_STOP
+AT_CLEANUP
+
+AT_SETUP([datapath - ping over erspan v1 tunnel])
+OVS_CHECK_GRE()
+OVS_CHECK_ERSPAN()
+
+OVS_TRAFFIC_VSWITCHD_START()
+ADD_BR([br-underlay])
+
+AT_CHECK([ovs-ofctl add-flow br0 "actions=normal"])
+AT_CHECK([ovs-ofctl add-flow br-underlay "actions=normal"])
+
+ADD_NAMESPACES(at_ns0)
+
+dnl Set up underlay link from host into the namespace using veth pair.
+ADD_VETH_AFXDP(p0, at_ns0, br-underlay, "172.31.1.1/24")
+AT_CHECK([ip addr add dev br-underlay "172.31.1.100/24"])
+AT_CHECK([ip link set dev br-underlay up])
+
+dnl Set up tunnel endpoints on OVS outside the namespace and with a native
+dnl linux device inside the namespace.
+ADD_OVS_TUNNEL([erspan], [br0], [at_erspan0], [172.31.1.1], [10.1.1.100/24], [options:key=1 options:erspan_ver=1 options:erspan_idx=7])
+ADD_NATIVE_TUNNEL([erspan], [ns_erspan0], [at_ns0], [172.31.1.100], [10.1.1.1/24], [seq key 1 erspan_ver 1 erspan 7])
+
+AT_CHECK([ovs-appctl ovs/route/add 10.1.1.100/24 br0], [0], [OK
+])
+AT_CHECK([ovs-appctl ovs/route/add 172.31.1.92/24 br-underlay], [0], [OK
+])
+
+dnl First, check the underlay
+NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -w 2 172.31.1.100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+
+dnl Okay, now check the overlay with different packet sizes
+dnl NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -w 2 10.1.1.100 | FORMAT_PING], [0], [dnl
+NS_CHECK_EXEC([at_ns0], [ping -s 1200 -i 0.3 -c 3 10.1.1.100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+OVS_TRAFFIC_VSWITCHD_STOP
+AT_CLEANUP
+
+AT_SETUP([datapath - ping over erspan v2 tunnel])
+OVS_CHECK_GRE()
+OVS_CHECK_ERSPAN()
+
+OVS_TRAFFIC_VSWITCHD_START()
+ADD_BR([br-underlay])
+
+AT_CHECK([ovs-ofctl add-flow br0 "actions=normal"])
+AT_CHECK([ovs-ofctl add-flow br-underlay "actions=normal"])
+
+ADD_NAMESPACES(at_ns0)
+
+dnl Set up underlay link from host into the namespace using veth pair.
+ADD_VETH_AFXDP(p0, at_ns0, br-underlay, "172.31.1.1/24")
+AT_CHECK([ip addr add dev br-underlay "172.31.1.100/24"])
+AT_CHECK([ip link set dev br-underlay up])
+
+dnl Set up tunnel endpoints on OVS outside the namespace and with a native
+dnl linux device inside the namespace.
+ADD_OVS_TUNNEL([erspan], [br0], [at_erspan0], [172.31.1.1], [10.1.1.100/24], [options:key=1 options:erspan_ver=2 options:erspan_dir=1 options:erspan_hwid=0x7])
+ADD_NATIVE_TUNNEL([erspan], [ns_erspan0], [at_ns0], [172.31.1.100], [10.1.1.1/24], [seq key 1 erspan_ver 2 erspan_dir egress erspan_hwid 7])
+
+AT_CHECK([ovs-appctl ovs/route/add 10.1.1.100/24 br0], [0], [OK
+])
+AT_CHECK([ovs-appctl ovs/route/add 172.31.1.92/24 br-underlay], [0], [OK
+])
+
+dnl First, check the underlay
+NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -w 2 172.31.1.100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+
+dnl Okay, now check the overlay with different packet sizes
+dnl NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -w 2 10.1.1.100 | FORMAT_PING], [0], [dnl
+NS_CHECK_EXEC([at_ns0], [ping -s 1200 -i 0.3 -c 3 10.1.1.100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+OVS_TRAFFIC_VSWITCHD_STOP
+AT_CLEANUP
+
+AT_SETUP([datapath - ping over ip6erspan v1 tunnel])
+OVS_CHECK_GRE()
+OVS_CHECK_ERSPAN()
+
+OVS_TRAFFIC_VSWITCHD_START()
+ADD_BR([br-underlay])
+
+AT_CHECK([ovs-ofctl add-flow br0 "actions=normal"])
+AT_CHECK([ovs-ofctl add-flow br-underlay "actions=normal"])
+
+ADD_NAMESPACES(at_ns0)
+
+dnl Set up underlay link from host into the namespace using veth pair.
+ADD_VETH_AFXDP(p0, at_ns0, br-underlay, "fc00:100::1/96", [], [], nodad)
+AT_CHECK([ip addr add dev br-underlay "fc00:100::100/96" nodad])
+AT_CHECK([ip link set dev br-underlay up])
+
+dnl Set up tunnel endpoints on OVS outside the namespace and with a native
+dnl linux device inside the namespace.
+ADD_OVS_TUNNEL6([ip6erspan], [br0], [at_erspan0], [fc00:100::1], [10.1.1.100/24],
+                [options:key=123 options:erspan_ver=1 options:erspan_idx=0x7])
+ADD_NATIVE_TUNNEL6([ip6erspan], [ns_erspan0], [at_ns0], [fc00:100::100],
+                   [10.1.1.1/24], [local fc00:100::1 seq key 123 erspan_ver 1 erspan 7])
+
+AT_CHECK([ovs-appctl ovs/route/add 10.1.1.100/24 br0], [0], [OK
+])
+AT_CHECK([ovs-appctl ovs/route/add fc00:100::1/96 br-underlay], [0], [OK
+])
+
+OVS_WAIT_UNTIL([ip netns exec at_ns0 ping6 -c 2 fc00:100::100])
+
+dnl First, check the underlay
+NS_CHECK_EXEC([at_ns0], [ping6 -q -c 3 -i 0.3 -w 2 fc00:100::100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+
+dnl Okay, now check the overlay with different packet sizes
+NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -w 2 10.1.1.100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+OVS_TRAFFIC_VSWITCHD_STOP
+AT_CLEANUP
+
+AT_SETUP([datapath - ping over ip6erspan v2 tunnel])
+OVS_CHECK_GRE()
+OVS_CHECK_ERSPAN()
+
+OVS_TRAFFIC_VSWITCHD_START()
+ADD_BR([br-underlay])
+
+AT_CHECK([ovs-ofctl add-flow br0 "actions=normal"])
+AT_CHECK([ovs-ofctl add-flow br-underlay "actions=normal"])
+
+ADD_NAMESPACES(at_ns0)
+
+dnl Set up underlay link from host into the namespace using veth pair.
+ADD_VETH_AFXDP(p0, at_ns0, br-underlay, "fc00:100::1/96", [], [], nodad)
+AT_CHECK([ip addr add dev br-underlay "fc00:100::100/96" nodad])
+AT_CHECK([ip link set dev br-underlay up])
+
+dnl Set up tunnel endpoints on OVS outside the namespace and with a native
+dnl linux device inside the namespace.
+ADD_OVS_TUNNEL6([ip6erspan], [br0], [at_erspan0], [fc00:100::1], [10.1.1.100/24],
+                [options:key=121 options:erspan_ver=2 options:erspan_dir=0 options:erspan_hwid=0x7])
+ADD_NATIVE_TUNNEL6([ip6erspan], [ns_erspan0], [at_ns0], [fc00:100::100],
+                   [10.1.1.1/24],
+                   [local fc00:100::1 seq key 121 erspan_ver 2 erspan_dir ingress erspan_hwid 0x7])
+
+AT_CHECK([ovs-appctl ovs/route/add 10.1.1.100/24 br0], [0], [OK
+])
+AT_CHECK([ovs-appctl ovs/route/add fc00:100::1/96 br-underlay], [0], [OK
+])
+
+OVS_WAIT_UNTIL([ip netns exec at_ns0 ping6 -c 2 fc00:100::100])
+
+dnl First, check the underlay
+NS_CHECK_EXEC([at_ns0], [ping6 -q -c 3 -i 0.3 -w 2 fc00:100::100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+
+dnl Okay, now check the overlay with different packet sizes
+NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -w 2 10.1.1.100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+OVS_TRAFFIC_VSWITCHD_STOP
+AT_CLEANUP
+
+AT_SETUP([datapath - ping over geneve tunnel])
+OVS_CHECK_GENEVE()
+
+OVS_TRAFFIC_VSWITCHD_START()
+ADD_BR([br-underlay])
+
+AT_CHECK([ovs-ofctl add-flow br0 "actions=normal"])
+AT_CHECK([ovs-ofctl add-flow br-underlay "actions=normal"])
+
+ADD_NAMESPACES(at_ns0)
+
+dnl Set up underlay link from host into the namespace using veth pair.
+ADD_VETH_AFXDP(p0, at_ns0, br-underlay, "172.31.1.1/24")
+AT_CHECK([ip addr add dev br-underlay "172.31.1.100/24"])
+AT_CHECK([ip link set dev br-underlay up])
+
+dnl Set up tunnel endpoints on OVS outside the namespace and with a native
+dnl linux device inside the namespace.
+ADD_OVS_TUNNEL([geneve], [br0], [at_gnv0], [172.31.1.1], [10.1.1.100/24])
+ADD_NATIVE_TUNNEL([geneve], [ns_gnv0], [at_ns0], [172.31.1.100], [10.1.1.1/24],
+                  [vni 0])
+
+AT_CHECK([ovs-appctl ovs/route/add 10.1.1.100/24 br0], [0], [OK
+])
+AT_CHECK([ovs-appctl ovs/route/add 172.31.1.100/24 br-underlay], [0], [OK
+])
+
+dnl First, check the underlay
+NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -w 2 172.31.1.100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+
+dnl Okay, now check the overlay with different packet sizes
+NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -w 2 10.1.1.100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+NS_CHECK_EXEC([at_ns0], [ping -s 1600 -q -c 3 -i 0.3 -w 2 10.1.1.100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+NS_CHECK_EXEC([at_ns0], [ping -s 3200 -q -c 3 -i 0.3 -w 2 10.1.1.100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+
+OVS_TRAFFIC_VSWITCHD_STOP
+AT_CLEANUP
+
+AT_SETUP([datapath - ping over geneve6 tunnel])
+OVS_CHECK_GENEVE_UDP6ZEROCSUM()
+
+OVS_TRAFFIC_VSWITCHD_START()
+ADD_BR([br-underlay])
+
+AT_CHECK([ovs-ofctl add-flow br0 "actions=normal"])
+AT_CHECK([ovs-ofctl add-flow br-underlay "actions=normal"])
+
+ADD_NAMESPACES(at_ns0)
+
+dnl Set up underlay link from host into the namespace using veth pair.
+ADD_VETH_AFXDP(p0, at_ns0, br-underlay, "fc00::1/64", [], [], "nodad")
+AT_CHECK([ip addr add dev br-underlay "fc00::100/64" nodad])
+AT_CHECK([ip link set dev br-underlay up])
+
+dnl Set up tunnel endpoints on OVS outside the namespace and with a native
+dnl linux device inside the namespace.
+ADD_OVS_TUNNEL6([geneve], [br0], [at_gnv0], [fc00::1], [10.1.1.100/24])
+ADD_NATIVE_TUNNEL6([geneve], [ns_gnv0], [at_ns0], [fc00::100], [10.1.1.1/24],
+                   [vni 0 udp6zerocsumtx udp6zerocsumrx])
+
+AT_CHECK([ovs-appctl ovs/route/add 10.1.1.100/24 br0], [0], [OK
+])
+AT_CHECK([ovs-appctl ovs/route/add fc00::100/64 br-underlay], [0], [OK
+])
+
+OVS_WAIT_UNTIL([ip netns exec at_ns0 ping6 -c 1 fc00::100])
+
+dnl First, check the underlay
+NS_CHECK_EXEC([at_ns0], [ping6 -q -c 3 -i 0.3 -w 2 fc00::100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+
+dnl Okay, now check the overlay with different packet sizes
+NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -w 2 10.1.1.100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+NS_CHECK_EXEC([at_ns0], [ping -s 1600 -q -c 3 -i 0.3 -w 2 10.1.1.100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+NS_CHECK_EXEC([at_ns0], [ping -s 3200 -q -c 3 -i 0.3 -w 2 10.1.1.100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+
+OVS_TRAFFIC_VSWITCHD_STOP
+AT_CLEANUP
+
+AT_SETUP([datapath - clone action])
+OVS_TRAFFIC_VSWITCHD_START()
+
+ADD_NAMESPACES(at_ns0, at_ns1, at_ns2)
+
+ADD_VETH_AFXDP(p0, at_ns0, br0, "10.1.1.1/24")
+ADD_VETH_AFXDP(p1, at_ns1, br0, "10.1.1.2/24")
+
+AT_CHECK([ovs-vsctl -- set interface ovs-p0 ofport_request=1 \
+                    -- set interface ovs-p1 ofport_request=2])
+
+AT_DATA([flows.txt], [dnl
+priority=1 actions=NORMAL
+priority=10 in_port=1,ip,actions=clone(mod_dl_dst(50:54:00:00:00:0a),set_field:192.168.3.3->ip_dst), output:2
+priority=10 in_port=2,ip,actions=clone(mod_dl_src(ae:c6:7e:54:8d:4d),mod_dl_dst(50:54:00:00:00:0b),set_field:192.168.4.4->ip_dst, controller), output:1
+])
+AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
+
+AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
+NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -w 2 10.1.1.2 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+
+AT_CHECK([cat ofctl_monitor.log | STRIP_MONITOR_CSUM], [0], [dnl
+icmp,vlan_tci=0x0000,dl_src=ae:c6:7e:54:8d:4d,dl_dst=50:54:00:00:00:0b,nw_src=10.1.1.2,nw_dst=192.168.4.4,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=0,icmp_code=0 icmp_csum: <skip>
+icmp,vlan_tci=0x0000,dl_src=ae:c6:7e:54:8d:4d,dl_dst=50:54:00:00:00:0b,nw_src=10.1.1.2,nw_dst=192.168.4.4,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=0,icmp_code=0 icmp_csum: <skip>
+icmp,vlan_tci=0x0000,dl_src=ae:c6:7e:54:8d:4d,dl_dst=50:54:00:00:00:0b,nw_src=10.1.1.2,nw_dst=192.168.4.4,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=0,icmp_code=0 icmp_csum: <skip>
+])
+
+OVS_TRAFFIC_VSWITCHD_STOP
+AT_CLEANUP
+
+AT_SETUP([datapath - basic truncate action])
+AT_SKIP_IF([test $HAVE_NC = no])
+OVS_TRAFFIC_VSWITCHD_START()
+AT_CHECK([ovs-ofctl del-flows br0])
+
+dnl Create p0 and ovs-p0(1)
+ADD_NAMESPACES(at_ns0)
+ADD_VETH_AFXDP(p0, at_ns0, br0, "10.1.1.1/24")
+NS_CHECK_EXEC([at_ns0], [ip link set dev p0 address e6:66:c1:11:11:11])
+NS_CHECK_EXEC([at_ns0], [arp -s 10.1.1.2 e6:66:c1:22:22:22])
+
+dnl Create p1(3) and ovs-p1(2), packets received from ovs-p1 will appear in p1
+AT_CHECK([ip link add p1 type veth peer name ovs-p1])
+on_exit 'ip link del ovs-p1'
+AT_CHECK([ip link set dev ovs-p1 up])
+AT_CHECK([ip link set dev p1 up])
+AT_CHECK([ovs-vsctl add-port br0 ovs-p1 -- set interface ovs-p1 ofport_request=2])
+dnl Use p1 to check the truncated packet
+AT_CHECK([ovs-vsctl add-port br0 p1 -- set interface p1 ofport_request=3])
+
+dnl Create p2(5) and ovs-p2(4)
+AT_CHECK([ip link add p2 type veth peer name ovs-p2])
+on_exit 'ip link del ovs-p2'
+AT_CHECK([ip link set dev ovs-p2 up])
+AT_CHECK([ip link set dev p2 up])
+AT_CHECK([ovs-vsctl add-port br0 ovs-p2 -- set interface ovs-p2 ofport_request=4])
+dnl Use p2 to check the truncated packet
+AT_CHECK([ovs-vsctl add-port br0 p2 -- set interface p2 ofport_request=5])
+
+dnl basic test
+AT_CHECK([ovs-ofctl del-flows br0])
+AT_DATA([flows.txt], [dnl
+in_port=3 dl_dst=e6:66:c1:22:22:22 actions=drop
+in_port=5 dl_dst=e6:66:c1:22:22:22 actions=drop
+in_port=1 dl_dst=e6:66:c1:22:22:22 actions=output(port=2,max_len=100),output:4
+])
+AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
+
+dnl use this file as payload file for ncat
+AT_CHECK([dd if=/dev/urandom of=payload200.bin bs=200 count=1 2> /dev/null])
+on_exit 'rm -f payload200.bin'
+NS_CHECK_EXEC([at_ns0], [nc $NC_EOF_OPT -u 10.1.1.2 1234 < payload200.bin])
+
+dnl packet with truncated size
+AT_CHECK([ovs-appctl revalidator/purge], [0])
+AT_CHECK([ovs-ofctl dump-flows br0 table=0 | grep "in_port=3" |  sed -n 's/.*\(n\_bytes=[[0-9]]*\).*/\1/p'], [0], [dnl
+n_bytes=100
+])
+dnl packet with original size
+AT_CHECK([ovs-appctl revalidator/purge], [0])
+AT_CHECK([ovs-ofctl dump-flows br0 table=0 | grep "in_port=5" | sed -n 's/.*\(n\_bytes=[[0-9]]*\).*/\1/p'], [0], [dnl
+n_bytes=242
+])
+
+dnl more complicated output actions
+AT_CHECK([ovs-ofctl del-flows br0])
+AT_DATA([flows.txt], [dnl
+in_port=3 dl_dst=e6:66:c1:22:22:22 actions=drop
+in_port=5 dl_dst=e6:66:c1:22:22:22 actions=drop
+in_port=1 dl_dst=e6:66:c1:22:22:22 actions=output(port=2,max_len=100),output:4,output(port=2,max_len=100),output(port=4,max_len=100),output:2,output(port=4,max_len=200),output(port=2,max_len=65535)
+])
+AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
+
+NS_CHECK_EXEC([at_ns0], [nc $NC_EOF_OPT -u 10.1.1.2 1234 < payload200.bin])
+
+dnl 100 + 100 + 242 + min(65535,242) = 684
+AT_CHECK([ovs-appctl revalidator/purge], [0])
+AT_CHECK([ovs-ofctl dump-flows br0 table=0 | grep "in_port=3" | sed -n 's/.*\(n\_bytes=[[0-9]]*\).*/\1/p'], [0], [dnl
+n_bytes=684
+])
+dnl 242 + 100 + min(242,200) = 542
+AT_CHECK([ovs-ofctl dump-flows br0 table=0 | grep "in_port=5" | sed -n 's/.*\(n\_bytes=[[0-9]]*\).*/\1/p'], [0], [dnl
+n_bytes=542
+])
+
+dnl SLOW_ACTION: disable kernel datapath truncate support
+dnl Repeat the test above, but exercise the SLOW_ACTION code path
+AT_CHECK([ovs-appctl dpif/set-dp-features br0 trunc false], [0])
+
+dnl SLOW_ACTION test1: check datapatch actions
+AT_CHECK([ovs-ofctl del-flows br0])
+AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
+
+AT_CHECK([ovs-appctl ofproto/trace br0 "in_port=1,dl_type=0x800,dl_src=e6:66:c1:11:11:11,dl_dst=e6:66:c1:22:22:22,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=6,tp_src=8,tp_dst=9"], [0], [stdout])
+AT_CHECK([tail -3 stdout], [0],
+[Datapath actions: trunc(100),3,5,trunc(100),3,trunc(100),5,3,trunc(200),5,trunc(65535),3
+This flow is handled by the userspace slow path because it:
+  - Uses action(s) not supported by datapath.
+])
+
+dnl SLOW_ACTION test2: check actual packet truncate
+AT_CHECK([ovs-ofctl del-flows br0])
+AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
+NS_CHECK_EXEC([at_ns0], [nc $NC_EOF_OPT -u 10.1.1.2 1234 < payload200.bin])
+
+dnl 100 + 100 + 242 + min(65535,242) = 684
+AT_CHECK([ovs-appctl revalidator/purge], [0])
+AT_CHECK([ovs-ofctl dump-flows br0 table=0 | grep "in_port=3" | sed -n 's/.*\(n\_bytes=[[0-9]]*\).*/\1/p'], [0], [dnl
+n_bytes=684
+])
+
+dnl 242 + 100 + min(242,200) = 542
+AT_CHECK([ovs-ofctl dump-flows br0 table=0 | grep "in_port=5" | sed -n 's/.*\(n\_bytes=[[0-9]]*\).*/\1/p'], [0], [dnl
+n_bytes=542
+])
+
+OVS_TRAFFIC_VSWITCHD_STOP
+AT_CLEANUP
+
+
+AT_BANNER([conntrack])
+
+AT_SETUP([conntrack - controller])
+CHECK_CONNTRACK()
+OVS_TRAFFIC_VSWITCHD_START()
+AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg ofproto_dpif_upcall:dbg])
+
+ADD_NAMESPACES(at_ns0, at_ns1)
+
+ADD_VETH_AFXDP(p0, at_ns0, br0, "10.1.1.1/24")
+ADD_VETH_AFXDP(p1, at_ns1, br0, "10.1.1.2/24")
+
+dnl Allow any traffic from ns0->ns1. Only allow nd, return traffic from ns1->ns0.
+AT_DATA([flows.txt], [dnl
+priority=1,action=drop
+priority=10,arp,action=normal
+priority=100,in_port=1,udp,action=ct(commit),controller
+priority=100,in_port=2,ct_state=-trk,udp,action=ct(table=0)
+priority=100,in_port=2,ct_state=+trk+est,udp,action=controller
+])
+
+AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt])
+
+AT_CAPTURE_FILE([ofctl_monitor.log])
+AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
+
+dnl Send an unsolicited reply from port 2. This should be dropped.
+AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 2 ct\(table=0\) '50540000000a50540000000908004500001c000000000011a4cd0a0101020a0101010002000100080000'])
+
+dnl OK, now start a new connection from port 1.
+AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 1 ct\(commit\),controller '50540000000a50540000000908004500001c000000000011a4cd0a0101010a0101020001000200080000'])
+
+dnl Now try a reply from port 2.
+AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 2 ct\(table=0\) '50540000000a50540000000908004500001c000000000011a4cd0a0101020a0101010002000100080000'])
+
+dnl Check this output. We only see the latter two packets, not the first.
+AT_CHECK([cat ofctl_monitor.log], [0], [dnl
+NXT_PACKET_IN2 (xid=0x0): total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1,tp_dst=2 udp_csum:0
+NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 ct_state=est|rpl|trk,ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2,ip,in_port=2 (via action) data_len=42 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=2,tp_dst=1 udp_csum:0
+])
+
+OVS_TRAFFIC_VSWITCHD_STOP
+AT_CLEANUP
+
+AT_SETUP([conntrack - force commit])
+CHECK_CONNTRACK()
+OVS_TRAFFIC_VSWITCHD_START()
+AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg ofproto_dpif_upcall:dbg])
+
+ADD_NAMESPACES(at_ns0, at_ns1)
+
+ADD_VETH_AFXDP(p0, at_ns0, br0, "10.1.1.1/24")
+ADD_VETH_AFXDP(p1, at_ns1, br0, "10.1.1.2/24")
+
+AT_DATA([flows.txt], [dnl
+priority=1,action=drop
+priority=10,arp,action=normal
+priority=100,in_port=1,udp,action=ct(force,commit),controller
+priority=100,in_port=2,ct_state=-trk,udp,action=ct(table=0)
+priority=100,in_port=2,ct_state=+trk+est,udp,action=ct(force,commit,table=1)
+table=1,in_port=2,ct_state=+trk,udp,action=controller
+])
+
+AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt])
+
+AT_CAPTURE_FILE([ofctl_monitor.log])
+AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile 2> ofctl_monitor.log])
+
+dnl Send an unsolicited reply from port 2. This should be dropped.
+AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 "in_port=2 packet=50540000000a50540000000908004500001c000000000011a4cd0a0101020a0101010002000100080000 actions=resubmit(,0)"])
+
+dnl OK, now start a new connection from port 1.
+AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 "in_port=1 packet=50540000000a50540000000908004500001c000000000011a4cd0a0101010a0101020001000200080000 actions=resubmit(,0)"])
+
+dnl Now try a reply from port 2.
+AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 "in_port=2 packet=50540000000a50540000000908004500001c000000000011a4cd0a0101020a0101010002000100080000 actions=resubmit(,0)"])
+
+AT_CHECK([ovs-appctl revalidator/purge], [0])
+
+dnl Check this output. We only see the latter two packets, not the first.
+AT_CHECK([cat ofctl_monitor.log], [0], [dnl
+NXT_PACKET_IN2 (xid=0x0): cookie=0x0 total_len=42 in_port=1 (via action) data_len=42 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.1,nw_dst=10.1.1.2,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=1,tp_dst=2 udp_csum:0
+NXT_PACKET_IN2 (xid=0x0): table_id=1 cookie=0x0 total_len=42 ct_state=new|trk,ct_nw_src=10.1.1.2,ct_nw_dst=10.1.1.1,ct_nw_proto=17,ct_tp_src=2,ct_tp_dst=1,ip,in_port=2 (via action) data_len=42 (unbuffered)
+udp,vlan_tci=0x0000,dl_src=50:54:00:00:00:09,dl_dst=50:54:00:00:00:0a,nw_src=10.1.1.2,nw_dst=10.1.1.1,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=2,tp_dst=1 udp_csum:0
+])
+
+dnl
+dnl Check that the directionality has been changed by force commit.
+dnl
+AT_CHECK([ovs-appctl dpctl/dump-conntrack | grep "orig=.src=10\.1\.1\.2,"], [], [dnl
+udp,orig=(src=10.1.1.2,dst=10.1.1.1,sport=2,dport=1),reply=(src=10.1.1.1,dst=10.1.1.2,sport=1,dport=2)
+])
+
+dnl OK, now send another packet from port 1 and see that it switches again
+AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 "in_port=1 packet=50540000000a50540000000908004500001c000000000011a4cd0a0101010a0101020001000200080000 actions=resubmit(,0)"])
+AT_CHECK([ovs-appctl revalidator/purge], [0])
+
+AT_CHECK([ovs-appctl dpctl/dump-conntrack | grep "orig=.src=10\.1\.1\.1,"], [], [dnl
+udp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=1,dport=2),reply=(src=10.1.1.2,dst=10.1.1.1,sport=2,dport=1)
+])
+
+OVS_TRAFFIC_VSWITCHD_STOP
+AT_CLEANUP
+
+AT_SETUP([conntrack - ct flush by 5-tuple])
+CHECK_CONNTRACK()
+OVS_TRAFFIC_VSWITCHD_START()
+
+ADD_NAMESPACES(at_ns0, at_ns1)
+
+ADD_VETH_AFXDP(p0, at_ns0, br0, "10.1.1.1/24")
+ADD_VETH_AFXDP(p1, at_ns1, br0, "10.1.1.2/24")
+
+AT_DATA([flows.txt], [dnl
+priority=1,action=drop
+priority=10,arp,action=normal
+priority=100,in_port=1,udp,action=ct(commit),2
+priority=100,in_port=2,udp,action=ct(zone=5,commit),1
+priority=100,in_port=1,icmp,action=ct(commit),2
+priority=100,in_port=2,icmp,action=ct(zone=5,commit),1
+])
+
+AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt])
+
+dnl Test UDP from port 1
+AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 "in_port=1 packet=50540000000a50540000000908004500001c000000000011a4cd0a0101010a0101020001000200080000 actions=resubmit(,0)"])
+
+AT_CHECK([ovs-appctl dpctl/dump-conntrack | grep "orig=.src=10\.1\.1\.1,"], [], [dnl
+udp,orig=(src=10.1.1.1,dst=10.1.1.2,sport=1,dport=2),reply=(src=10.1.1.2,dst=10.1.1.1,sport=2,dport=1)
+])
+
+AT_CHECK([ovs-appctl dpctl/flush-conntrack 'ct_nw_src=10.1.1.2,ct_nw_dst=10.1.1.1,ct_nw_proto=17,ct_tp_src=2,ct_tp_dst=1'])
+
+AT_CHECK([ovs-appctl dpctl/dump-conntrack | grep "orig=.src=10\.1\.1\.1,"], [1], [dnl
+])
+
+dnl Test UDP from port 2
+AT_CHECK([ovs-ofctl -O OpenFlow13 packet-out br0 "in_port=2 packet=50540000000a50540000000908004500001c000000000011a4cd0a0101020a0101010002000100080000 actions=resubmit(,0)"])
+
+AT_CHECK([ovs-appctl dpctl/dump-conntrack | grep "orig=.src=10\.1\.1\.2,"], [0], [dnl
+udp,orig=(src=10.1.1.2,dst=10.1.1.1,sport=2,dport=1),reply=(src=10.1.1.1,dst=10.1.1.2,sport=1,dport=2),zone=5
+])
+
+AT_CHECK([ovs-appctl dpctl/flush-conntrack zone=5 'ct_nw_src=10.1.1.1,ct_nw_dst=10.1.1.2,ct_nw_proto=17,ct_tp_src=1,ct_tp_dst=2'])
+
+AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl
+])
+
+dnl Test ICMP traffic
+NS_CHECK_EXEC([at_ns1], [ping -q -c 3 -i 0.3 -w 2 10.1.1.1 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+
+AT_CHECK([ovs-appctl dpctl/dump-conntrack | grep "orig=.src=10\.1\.1\.2,"], [0], [stdout])
+AT_CHECK([cat stdout | FORMAT_CT(10.1.1.1)], [0],[dnl
+icmp,orig=(src=10.1.1.2,dst=10.1.1.1,id=<cleared>,type=8,code=0),reply=(src=10.1.1.1,dst=10.1.1.2,id=<cleared>,type=0,code=0),zone=5
+])
+
+ICMP_ID=`cat stdout | cut -d ',' -f4 | cut -d '=' -f2`
+ICMP_TUPLE=ct_nw_src=10.1.1.2,ct_nw_dst=10.1.1.1,ct_nw_proto=1,icmp_id=$ICMP_ID,icmp_type=8,icmp_code=0
+AT_CHECK([ovs-appctl dpctl/flush-conntrack zone=5 $ICMP_TUPLE])
+
+AT_CHECK([ovs-appctl dpctl/dump-conntrack | grep "orig=.src=10\.1\.1\.2,"], [1], [dnl
+])
+
+OVS_TRAFFIC_VSWITCHD_STOP
+AT_CLEANUP
+
+AT_SETUP([conntrack - IPv4 ping])
+CHECK_CONNTRACK()
+OVS_TRAFFIC_VSWITCHD_START()
+
+ADD_NAMESPACES(at_ns0, at_ns1)
+
+ADD_VETH_AFXDP(p0, at_ns0, br0, "10.1.1.1/24")
+ADD_VETH_AFXDP(p1, at_ns1, br0, "10.1.1.2/24")
+
+dnl Allow any traffic from ns0->ns1. Only allow nd, return traffic from ns1->ns0.
+AT_DATA([flows.txt], [dnl
+priority=1,action=drop
+priority=10,arp,action=normal
+priority=100,in_port=1,icmp,action=ct(commit),2
+priority=100,in_port=2,icmp,ct_state=-trk,action=ct(table=0)
+priority=100,in_port=2,icmp,ct_state=+trk+est,action=1
+])
+
+AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt])
+
+dnl Pings from ns0->ns1 should work fine.
+NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -w 2 10.1.1.2 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+
+AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl
+icmp,orig=(src=10.1.1.1,dst=10.1.1.2,id=<cleared>,type=8,code=0),reply=(src=10.1.1.2,dst=10.1.1.1,id=<cleared>,type=0,code=0)
+])
+
+AT_CHECK([ovs-appctl dpctl/flush-conntrack])
+
+dnl Pings from ns1->ns0 should fail.
+NS_CHECK_EXEC([at_ns1], [ping -q -c 3 -i 0.3 -w 2 10.1.1.1 | FORMAT_PING], [0], [dnl
+7 packets transmitted, 0 received, 100% packet loss, time 0ms
+])
+
+OVS_TRAFFIC_VSWITCHD_STOP
+AT_CLEANUP
+
+AT_SETUP([conntrack - get_nconns and get/set_maxconns])
+CHECK_CONNTRACK()
+CHECK_CT_DPIF_SET_GET_MAXCONNS()
+CHECK_CT_DPIF_GET_NCONNS()
+OVS_TRAFFIC_VSWITCHD_START()
+
+ADD_NAMESPACES(at_ns0, at_ns1)
+
+ADD_VETH_AFXDP(p0, at_ns0, br0, "10.1.1.1/24")
+ADD_VETH_AFXDP(p1, at_ns1, br0, "10.1.1.2/24")
+
+dnl Allow any traffic from ns0->ns1. Only allow nd, return traffic from ns1->ns0.
+AT_DATA([flows.txt], [dnl
+priority=1,action=drop
+priority=10,arp,action=normal
+priority=100,in_port=1,icmp,action=ct(commit),2
+priority=100,in_port=2,icmp,ct_state=-trk,action=ct(table=0)
+priority=100,in_port=2,icmp,ct_state=+trk+est,action=1
+])
+
+AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt])
+
+dnl Pings from ns0->ns1 should work fine.
+NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -w 2 10.1.1.2 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+
+AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(10.1.1.2)], [0], [dnl
+icmp,orig=(src=10.1.1.1,dst=10.1.1.2,id=<cleared>,type=8,code=0),reply=(src=10.1.1.2,dst=10.1.1.1,id=<cleared>,type=0,code=0)
+])
+
+AT_CHECK([ovs-appctl dpctl/ct-set-maxconns one-bad-dp], [2], [], [dnl
+ovs-vswitchd: maxconns missing or malformed (Invalid argument)
+ovs-appctl: ovs-vswitchd: server returned an error
+])
+
+AT_CHECK([ovs-appctl dpctl/ct-set-maxconns a], [2], [], [dnl
+ovs-vswitchd: maxconns missing or malformed (Invalid argument)
+ovs-appctl: ovs-vswitchd: server returned an error
+])
+
+AT_CHECK([ovs-appctl dpctl/ct-set-maxconns one-bad-dp 10], [2], [], [dnl
+ovs-vswitchd: datapath not found (Invalid argument)
+ovs-appctl: ovs-vswitchd: server returned an error
+])
+
+AT_CHECK([ovs-appctl dpctl/ct-get-maxconns one-bad-dp], [2], [], [dnl
+ovs-vswitchd: datapath not found (Invalid argument)
+ovs-appctl: ovs-vswitchd: server returned an error
+])
+
+AT_CHECK([ovs-appctl dpctl/ct-get-nconns one-bad-dp], [2], [], [dnl
+ovs-vswitchd: datapath not found (Invalid argument)
+ovs-appctl: ovs-vswitchd: server returned an error
+])
+
+AT_CHECK([ovs-appctl dpctl/ct-get-nconns], [], [dnl
+1
+])
+
+AT_CHECK([ovs-appctl dpctl/ct-get-maxconns], [], [dnl
+3000000
+])
+
+AT_CHECK([ovs-appctl dpctl/ct-set-maxconns 10], [], [dnl
+setting maxconns successful
+])
+
+AT_CHECK([ovs-appctl dpctl/ct-get-maxconns], [], [dnl
+10
+])
+
+AT_CHECK([ovs-appctl dpctl/flush-conntrack])
+
+AT_CHECK([ovs-appctl dpctl/ct-get-nconns], [], [dnl
+0
+])
+
+AT_CHECK([ovs-appctl dpctl/ct-get-maxconns], [], [dnl
+10
+])
+
+OVS_TRAFFIC_VSWITCHD_STOP
+AT_CLEANUP
+
+AT_SETUP([conntrack - IPv6 ping])
+CHECK_CONNTRACK()
+OVS_TRAFFIC_VSWITCHD_START()
+
+ADD_NAMESPACES(at_ns0, at_ns1)
+
+ADD_VETH_AFXDP(p0, at_ns0, br0, "fc00::1/96")
+ADD_VETH_AFXDP(p1, at_ns1, br0, "fc00::2/96")
+
+AT_DATA([flows.txt], [dnl
+
+dnl ICMPv6 echo request and reply go to table 1.  The rest of the traffic goes
+dnl through normal action.
+table=0,priority=10,icmp6,icmp_type=128,action=goto_table:1
+table=0,priority=10,icmp6,icmp_type=129,action=goto_table:1
+table=0,priority=1,action=normal
+
+dnl Allow everything from ns0->ns1. Only allow return traffic from ns1->ns0.
+table=1,priority=100,in_port=1,icmp6,action=ct(commit),2
+table=1,priority=100,in_port=2,icmp6,ct_state=-trk,action=ct(table=0)
+table=1,priority=100,in_port=2,icmp6,ct_state=+trk+est,action=1
+table=1,priority=1,action=drop
+])
+
+AT_CHECK([ovs-ofctl --bundle add-flows br0 flows.txt])
+
+OVS_WAIT_UNTIL([ip netns exec at_ns0 ping6 -c 1 fc00::2])
+
+dnl The above ping creates state in the connection tracker.  We're not
+dnl interested in that state.
+AT_CHECK([ovs-appctl dpctl/flush-conntrack])
+
+dnl Pings from ns1->ns0 should fail.
+NS_CHECK_EXEC([at_ns1], [ping6 -q -c 3 -i 0.3 -w 2 fc00::1 | FORMAT_PING], [0], [dnl
+7 packets transmitted, 0 received, 100% packet loss, time 0ms
+])
+
+dnl Pings from ns0->ns1 should work fine.
+NS_CHECK_EXEC([at_ns0], [ping6 -q -c 3 -i 0.3 -w 2 fc00::2 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+
+AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(fc00::2)], [0], [dnl
+icmpv6,orig=(src=fc00::1,dst=fc00::2,id=<cleared>,type=128,code=0),reply=(src=fc00::2,dst=fc00::1,id=<cleared>,type=129,code=0)
+])
+
+OVS_TRAFFIC_VSWITCHD_STOP
+AT_CLEANUP