diff --git a/.openvswitch.metadata b/.openvswitch.metadata
new file mode 100644
index 0000000..af1aabc
--- /dev/null
+++ b/.openvswitch.metadata
@@ -0,0 +1,5 @@
+002450621b33c5690060345b0aac25bc2426d675 SOURCES/docutils-0.12.tar.gz
+e704a36f712c1c81f253f77d1bd7c60d85b8a7ff SOURCES/dpdk-19.11.1.tar.xz
+0c5f78212173d2cac286f8f78aa95ebdea9e2444 SOURCES/openvswitch-2.13.0.tar.gz
+d34f96421a86004aa5d26ecf975edefd09f948b1 SOURCES/Pygments-1.4.tar.gz
+6beb30f18ffac3de7689b7fd63e9a8a7d9c8df3a SOURCES/Sphinx-1.1.3.tar.gz
diff --git a/SOURCES/arm64-armv8a-linuxapp-gcc-config b/SOURCES/arm64-armv8a-linuxapp-gcc-config
new file mode 100644
index 0000000..c219def
--- /dev/null
+++ b/SOURCES/arm64-armv8a-linuxapp-gcc-config
@@ -0,0 +1,607 @@
+# -*- cfg-sha: c5b6330ff61c71cf3196f55aad5cc3766b44dd62560396f67c2fee4f7ab46780
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2015 Cavium, Inc
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2017 Cavium, Inc
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2010-2016 Intel Corporation
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2010-2017 Intel Corporation
+# String that appears before the version number
+CONFIG_RTE_VER_PREFIX="DPDK"
+# Version information completed when this file is processed for a build
+CONFIG_RTE_VER_YEAR=19
+CONFIG_RTE_VER_MONTH=11
+CONFIG_RTE_VER_MINOR=1
+CONFIG_RTE_VER_SUFFIX=""
+CONFIG_RTE_VER_RELEASE=99
+ # RTE_EXEC_ENV values are the directories in mk/exec-env/
+CONFIG_RTE_EXEC_ENV="linuxapp"
+# RTE_ARCH values are architecture we compile for. directories in mk/arch/
+CONFIG_RTE_ARCH="arm64"
+# machine can define specific variables or action for a specific board
+# RTE_MACHINE values are architecture we compile for. directories in mk/machine/
+CONFIG_RTE_MACHINE="armv8a"
+# The compiler we use.
+# RTE_TOOLCHAIN values are architecture we compile for. directories in mk/toolchain/
+CONFIG_RTE_TOOLCHAIN="gcc"
+# Use intrinsics or assembly code for key routines
+CONFIG_RTE_FORCE_INTRINSICS=y
+# Machine forces strict alignment constraints.
+CONFIG_RTE_ARCH_STRICT_ALIGN=n
+# Enable link time optimization
+CONFIG_RTE_ENABLE_LTO=n
+# Compile to share library
+CONFIG_RTE_BUILD_SHARED_LIB=n
+# Use newest code breaking previous ABI
+CONFIG_RTE_NEXT_ABI=n
+# Machine's cache line size
+CONFIG_RTE_CACHE_LINE_SIZE=128
+# Memory model
+CONFIG_RTE_USE_C11_MEM_MODEL=y
+# Compile Environment Abstraction Layer
+CONFIG_RTE_LIBRTE_EAL=y
+CONFIG_RTE_MAX_LCORE=256
+CONFIG_RTE_MAX_NUMA_NODES=8
+CONFIG_RTE_MAX_HEAPS=32
+CONFIG_RTE_MAX_MEMSEG_LISTS=64
+# each memseg list will be limited to either RTE_MAX_MEMSEG_PER_LIST pages
+# or RTE_MAX_MEM_MB_PER_LIST megabytes worth of memory, whichever is smaller
+CONFIG_RTE_MAX_MEMSEG_PER_LIST=8192
+CONFIG_RTE_MAX_MEM_MB_PER_LIST=32768
+# a "type" is a combination of page size and NUMA node. total number of memseg
+# lists per type will be limited to either RTE_MAX_MEMSEG_PER_TYPE pages (split
+# over multiple lists of RTE_MAX_MEMSEG_PER_LIST pages), or
+# RTE_MAX_MEM_MB_PER_TYPE megabytes of memory (split over multiple lists of
+# RTE_MAX_MEM_MB_PER_LIST), whichever is smaller
+CONFIG_RTE_MAX_MEMSEG_PER_TYPE=32768
+CONFIG_RTE_MAX_MEM_MB_PER_TYPE=131072
+# global maximum usable amount of VA, in megabytes
+CONFIG_RTE_MAX_MEM_MB=524288
+CONFIG_RTE_MAX_MEMZONE=2560
+CONFIG_RTE_MAX_TAILQ=32
+CONFIG_RTE_ENABLE_ASSERT=n
+CONFIG_RTE_LOG_DP_LEVEL=RTE_LOG_INFO
+CONFIG_RTE_LOG_HISTORY=256
+CONFIG_RTE_BACKTRACE=y
+CONFIG_RTE_LIBEAL_USE_HPET=n
+CONFIG_RTE_EAL_ALWAYS_PANIC_ON_ERROR=n
+CONFIG_RTE_EAL_IGB_UIO=n
+CONFIG_RTE_EAL_VFIO=y
+CONFIG_RTE_MAX_VFIO_GROUPS=64
+CONFIG_RTE_MAX_VFIO_CONTAINERS=64
+CONFIG_RTE_MALLOC_DEBUG=n
+CONFIG_RTE_EAL_NUMA_AWARE_HUGEPAGES=y
+CONFIG_RTE_USE_LIBBSD=n
+# Recognize/ignore architecture we compile for. AVX/AVX512 CPU flags for performance/power testing.
+# AVX512 is marked as experimental for now, will enable it after enough
+# field test and possible optimization.
+CONFIG_RTE_ENABLE_AVX=y
+CONFIG_RTE_ENABLE_AVX512=n
+# Use ARM LSE ATOMIC instructions
+CONFIG_RTE_ARM_FEATURE_ATOMICS=n
+# Default driver path (or "" to disable)
+CONFIG_RTE_EAL_PMD_PATH=""
+# Compile Environment Abstraction Layer to support Vmware TSC map
+CONFIG_RTE_LIBRTE_EAL_VMWARE_TSC_MAP_SUPPORT=y
+# Compile architecture we compile for. PCI library
+CONFIG_RTE_LIBRTE_PCI=y
+# Compile architecture we compile for. argument parser library
+CONFIG_RTE_LIBRTE_KVARGS=y
+# Compile generic ethernet library
+CONFIG_RTE_LIBRTE_ETHER=y
+CONFIG_RTE_LIBRTE_ETHDEV_DEBUG=n
+CONFIG_RTE_MAX_ETHPORTS=128
+CONFIG_RTE_MAX_QUEUES_PER_PORT=1024
+CONFIG_RTE_LIBRTE_IEEE1588=n
+CONFIG_RTE_ETHDEV_QUEUE_STAT_CNTRS=16
+CONFIG_RTE_ETHDEV_RXTX_CALLBACKS=y
+CONFIG_RTE_ETHDEV_PROFILE_WITH_VTUNE=n
+# Turn off Tx preparation stage
+# Warning: rte_eth_tx_prepare() can be safely disabled only if using a
+# driver which do not implement any Tx preparation.
+CONFIG_RTE_ETHDEV_TX_PREPARE_NOOP=n
+# Common libraries, before Bus/PMDs
+CONFIG_RTE_LIBRTE_COMMON_DPAAX=n
+# Compile architecture we compile for. Intel FPGA bus
+CONFIG_RTE_LIBRTE_IFPGA_BUS=n
+# Compile PCI bus driver
+CONFIG_RTE_LIBRTE_PCI_BUS=y
+# Compile architecture we compile for. vdev bus
+CONFIG_RTE_LIBRTE_VDEV_BUS=y
+# Compile ARK PMD
+CONFIG_RTE_LIBRTE_ARK_PMD=n
+CONFIG_RTE_LIBRTE_ARK_PAD_TX=y
+CONFIG_RTE_LIBRTE_ARK_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_ARK_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_ARK_DEBUG_STATS=n
+CONFIG_RTE_LIBRTE_ARK_DEBUG_TRACE=n
+# Compile Aquantia Atlantic PMD driver
+CONFIG_RTE_LIBRTE_ATLANTIC_PMD=n
+# Compile AMD PMD
+CONFIG_RTE_LIBRTE_AXGBE_PMD=n
+CONFIG_RTE_LIBRTE_AXGBE_PMD_DEBUG=n
+# Compile burst-oriented Broadcom PMD driver
+CONFIG_RTE_LIBRTE_BNX2X_PMD=n
+CONFIG_RTE_LIBRTE_BNX2X_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_BNX2X_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_BNX2X_MF_SUPPORT=n
+CONFIG_RTE_LIBRTE_BNX2X_DEBUG_PERIODIC=n
+# Compile burst-oriented Broadcom BNXT PMD driver
+CONFIG_RTE_LIBRTE_BNXT_PMD=n
+# Compile burst-oriented Chelsio Terminator (CXGBE) PMD
+CONFIG_RTE_LIBRTE_CXGBE_PMD=n
+# Compile burst-oriented NXP PFE PMD driver
+CONFIG_RTE_LIBRTE_PFE_PMD=n
+# NXP DPAA Bus
+CONFIG_RTE_LIBRTE_DPAA_BUS=n
+CONFIG_RTE_LIBRTE_DPAA_MEMPOOL=n
+CONFIG_RTE_LIBRTE_DPAA_PMD=n
+CONFIG_RTE_LIBRTE_DPAA_HWDEBUG=n
+# Compile NXP DPAA2 FSL-MC Bus
+CONFIG_RTE_LIBRTE_FSLMC_BUS=n
+# Compile Support Libraries for NXP DPAA2
+CONFIG_RTE_LIBRTE_DPAA2_MEMPOOL=n
+CONFIG_RTE_LIBRTE_DPAA2_USE_PHYS_IOVA=y
+# Compile burst-oriented NXP DPAA2 PMD driver
+CONFIG_RTE_LIBRTE_DPAA2_PMD=n
+CONFIG_RTE_LIBRTE_DPAA2_DEBUG_DRIVER=n
+# Compile NXP ENETC PMD Driver
+CONFIG_RTE_LIBRTE_ENETC_PMD=n
+# Compile burst-oriented Amazon ENA PMD driver
+CONFIG_RTE_LIBRTE_ENA_PMD=n
+CONFIG_RTE_LIBRTE_ENA_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_ENA_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_ENA_DEBUG_TX_FREE=n
+CONFIG_RTE_LIBRTE_ENA_COM_DEBUG=n
+# Compile burst-oriented Cisco ENIC PMD driver
+CONFIG_RTE_LIBRTE_ENIC_PMD=n
+# Compile burst-oriented IGB & EM PMD drivers
+CONFIG_RTE_LIBRTE_EM_PMD=n
+CONFIG_RTE_LIBRTE_IGB_PMD=y
+CONFIG_RTE_LIBRTE_E1000_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_E1000_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_E1000_DEBUG_TX_FREE=n
+CONFIG_RTE_LIBRTE_E1000_PF_DISABLE_STRIP_CRC=n
+# Compile burst-oriented HINIC PMD driver
+CONFIG_RTE_LIBRTE_HINIC_PMD=n
+# Compile burst-oriented HNS3 PMD driver
+CONFIG_RTE_LIBRTE_HNS3_PMD=n
+# Compile burst-oriented IXGBE PMD driver
+CONFIG_RTE_LIBRTE_IXGBE_PMD=y
+CONFIG_RTE_LIBRTE_IXGBE_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_IXGBE_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_IXGBE_DEBUG_TX_FREE=n
+CONFIG_RTE_LIBRTE_IXGBE_PF_DISABLE_STRIP_CRC=n
+CONFIG_RTE_IXGBE_INC_VECTOR=y
+CONFIG_RTE_LIBRTE_IXGBE_BYPASS=n
+# Compile burst-oriented I40E PMD driver
+CONFIG_RTE_LIBRTE_I40E_PMD=y
+CONFIG_RTE_LIBRTE_I40E_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_I40E_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_I40E_DEBUG_TX_FREE=n
+CONFIG_RTE_LIBRTE_I40E_RX_ALLOW_BULK_ALLOC=y
+CONFIG_RTE_LIBRTE_I40E_INC_VECTOR=y
+CONFIG_RTE_LIBRTE_I40E_16BYTE_RX_DESC=n
+CONFIG_RTE_LIBRTE_I40E_QUEUE_NUM_PER_PF=64
+CONFIG_RTE_LIBRTE_I40E_QUEUE_NUM_PER_VM=4
+# Compile burst-oriented FM10K PMD
+CONFIG_RTE_LIBRTE_FM10K_PMD=n
+CONFIG_RTE_LIBRTE_FM10K_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_FM10K_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_FM10K_DEBUG_TX_FREE=n
+CONFIG_RTE_LIBRTE_FM10K_RX_OLFLAGS_ENABLE=y
+CONFIG_RTE_LIBRTE_FM10K_INC_VECTOR=y
+# Compile burst-oriented ICE PMD driver
+CONFIG_RTE_LIBRTE_ICE_PMD=n
+CONFIG_RTE_LIBRTE_ICE_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_ICE_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_ICE_DEBUG_TX_FREE=n
+CONFIG_RTE_LIBRTE_ICE_RX_ALLOW_BULK_ALLOC=y
+CONFIG_RTE_LIBRTE_ICE_16BYTE_RX_DESC=n
+# Compile burst-oriented IAVF PMD driver
+CONFIG_RTE_LIBRTE_IAVF_PMD=n
+CONFIG_RTE_LIBRTE_IAVF_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_IAVF_DEBUG_TX_FREE=n
+CONFIG_RTE_LIBRTE_IAVF_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_IAVF_DEBUG_DUMP_DESC=n
+CONFIG_RTE_LIBRTE_IAVF_16BYTE_RX_DESC=n
+# Compile burst-oriented IPN3KE PMD driver
+CONFIG_RTE_LIBRTE_IPN3KE_PMD=n
+# Compile burst-oriented Mellanox ConnectX-3 (MLX4) PMD
+CONFIG_RTE_LIBRTE_MLX4_PMD=n
+CONFIG_RTE_LIBRTE_MLX4_DEBUG=n
+# Compile burst-oriented Mellanox ConnectX-4, ConnectX-5,
+# ConnectX-6 & BlueField (MLX5) PMD
+CONFIG_RTE_LIBRTE_MLX5_PMD=n
+CONFIG_RTE_LIBRTE_MLX5_DEBUG=n
+# Linking method for mlx4/5 dependency on ibverbs and related libraries
+# Default linking is dynamic by linker.
+# Other options are: dynamic by dlopen at run-time, or statically embedded.
+CONFIG_RTE_IBVERBS_LINK_DLOPEN=n
+CONFIG_RTE_IBVERBS_LINK_STATIC=n
+# Compile burst-oriented Netronome NFP PMD driver
+CONFIG_RTE_LIBRTE_NFP_PMD=n
+CONFIG_RTE_LIBRTE_NFP_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_NFP_DEBUG_RX=n
+# QLogic 10G/25G/40G/50G/100G PMD
+CONFIG_RTE_LIBRTE_QEDE_PMD=n
+CONFIG_RTE_LIBRTE_QEDE_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_QEDE_DEBUG_RX=n
+#Provides abs path/name of architecture we compile for. firmware file.
+#Empty string denotes driver will use default firmware
+CONFIG_RTE_LIBRTE_QEDE_FW=""
+# Compile burst-oriented Solarflare libefx-based PMD
+CONFIG_RTE_LIBRTE_SFC_EFX_PMD=n
+CONFIG_RTE_LIBRTE_SFC_EFX_DEBUG=n
+# Compile software PMD backed by SZEDATA2 device
+CONFIG_RTE_LIBRTE_PMD_SZEDATA2=n
+# Compile software PMD backed by NFB device
+CONFIG_RTE_LIBRTE_NFB_PMD=n
+# Compile burst-oriented Cavium Thunderx NICVF PMD driver
+CONFIG_RTE_LIBRTE_THUNDERX_NICVF_PMD=n
+CONFIG_RTE_LIBRTE_THUNDERX_NICVF_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_THUNDERX_NICVF_DEBUG_TX=n
+# Compile burst-oriented Cavium LiquidIO PMD driver
+CONFIG_RTE_LIBRTE_LIO_PMD=n
+CONFIG_RTE_LIBRTE_LIO_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_LIO_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_LIO_DEBUG_MBOX=n
+CONFIG_RTE_LIBRTE_LIO_DEBUG_REGS=n
+# Compile burst-oriented Cavium OCTEONTX network PMD driver
+CONFIG_RTE_LIBRTE_OCTEONTX_PMD=n
+# Compile burst-oriented Marvell OCTEON TX2 network PMD driver
+CONFIG_RTE_LIBRTE_OCTEONTX2_PMD=n
+# Compile WRS accelerated virtual port (AVP) guest PMD driver
+CONFIG_RTE_LIBRTE_AVP_PMD=n
+CONFIG_RTE_LIBRTE_AVP_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_AVP_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_AVP_DEBUG_BUFFERS=n
+# Compile burst-oriented VIRTIO PMD driver
+CONFIG_RTE_LIBRTE_VIRTIO_PMD=y
+CONFIG_RTE_LIBRTE_VIRTIO_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_VIRTIO_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_VIRTIO_DEBUG_DUMP=n
+# Compile virtio device emulation inside virtio PMD driver
+CONFIG_RTE_VIRTIO_USER=n
+# Compile burst-oriented VMXNET3 PMD driver
+CONFIG_RTE_LIBRTE_VMXNET3_PMD=n
+CONFIG_RTE_LIBRTE_VMXNET3_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_VMXNET3_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_VMXNET3_DEBUG_TX_FREE=n
+# Compile software PMD backed by AF_PACKET sockets (Linux only)
+CONFIG_RTE_LIBRTE_PMD_AF_PACKET=n
+# Compile software PMD backed by AF_XDP sockets (Linux only)
+CONFIG_RTE_LIBRTE_PMD_AF_XDP=n
+# Compile Memory Interface PMD driver (Linux only)
+CONFIG_RTE_LIBRTE_PMD_MEMIF=n
+# Compile link bonding PMD library
+CONFIG_RTE_LIBRTE_PMD_BOND=n
+CONFIG_RTE_LIBRTE_BOND_DEBUG_ALB=n
+CONFIG_RTE_LIBRTE_BOND_DEBUG_ALB_L1=n
+# Compile fail-safe PMD
+CONFIG_RTE_LIBRTE_PMD_FAILSAFE=y
+# Compile Marvell PMD driver
+CONFIG_RTE_LIBRTE_MVPP2_PMD=n
+# Compile Marvell MVNETA PMD driver
+CONFIG_RTE_LIBRTE_MVNETA_PMD=n
+# Compile support for VMBus library
+CONFIG_RTE_LIBRTE_VMBUS=n
+# Compile native PMD for Hyper-V/Azure
+CONFIG_RTE_LIBRTE_NETVSC_PMD=n
+CONFIG_RTE_LIBRTE_NETVSC_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_NETVSC_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_NETVSC_DEBUG_DUMP=n
+# Compile virtual device driver for NetVSC on Hyper-V/Azure
+CONFIG_RTE_LIBRTE_VDEV_NETVSC_PMD=n
+# Compile null PMD
+CONFIG_RTE_LIBRTE_PMD_NULL=n
+# Compile software PMD backed by PCAP files
+CONFIG_RTE_LIBRTE_PMD_PCAP=n
+# Compile example software rings based PMD
+CONFIG_RTE_LIBRTE_PMD_RING=y
+CONFIG_RTE_PMD_RING_MAX_RX_RINGS=16
+CONFIG_RTE_PMD_RING_MAX_TX_RINGS=16
+# Compile SOFTNIC PMD
+CONFIG_RTE_LIBRTE_PMD_SOFTNIC=n
+# Compile architecture we compile for. TAP PMD
+# It is enabled by default for Linux only.
+CONFIG_RTE_LIBRTE_PMD_TAP=y
+# Do prefetch of packet data within PMD driver receive function
+CONFIG_RTE_PMD_PACKET_PREFETCH=y
+# Compile generic wireless base band device library
+# EXPERIMENTAL: API may change without prior notice
+CONFIG_RTE_LIBRTE_BBDEV=n
+CONFIG_RTE_LIBRTE_BBDEV_DEBUG=n
+CONFIG_RTE_BBDEV_MAX_DEVS=128
+CONFIG_RTE_BBDEV_OFFLOAD_COST=y
+CONFIG_RTE_BBDEV_SDK_AVX2=n
+CONFIG_RTE_BBDEV_SDK_AVX512=n
+# Compile PMD for NULL bbdev device
+CONFIG_RTE_LIBRTE_PMD_BBDEV_NULL=n
+# Compile PMD for turbo software bbdev device
+CONFIG_RTE_LIBRTE_PMD_BBDEV_TURBO_SW=n
+# Compile PMD for Intel FPGA LTE FEC bbdev device
+CONFIG_RTE_LIBRTE_PMD_BBDEV_FPGA_LTE_FEC=n
+# Compile generic crypto device library
+CONFIG_RTE_LIBRTE_CRYPTODEV=n
+CONFIG_RTE_CRYPTO_MAX_DEVS=64
+# Compile PMD for ARMv8 Crypto device
+CONFIG_RTE_LIBRTE_PMD_ARMV8_CRYPTO=n
+CONFIG_RTE_LIBRTE_PMD_ARMV8_CRYPTO_DEBUG=n
+# Compile NXP CAAM JR crypto Driver
+CONFIG_RTE_LIBRTE_PMD_CAAM_JR=n
+CONFIG_RTE_LIBRTE_PMD_CAAM_JR_BE=n
+# Compile NXP DPAA2 crypto sec driver for CAAM HW
+CONFIG_RTE_LIBRTE_PMD_DPAA2_SEC=n
+# NXP DPAA caam - crypto driver
+CONFIG_RTE_LIBRTE_PMD_DPAA_SEC=n
+CONFIG_RTE_LIBRTE_DPAA_MAX_CRYPTODEV=4
+# Compile PMD for Cavium OCTEON TX crypto device
+CONFIG_RTE_LIBRTE_PMD_OCTEONTX_CRYPTO=n
+# Compile PMD for Marvell OCTEON TX2 crypto device
+CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_CRYPTO=n
+# Compile PMD for QuickAssist based devices - see docs for details
+CONFIG_RTE_LIBRTE_PMD_QAT=n
+CONFIG_RTE_LIBRTE_PMD_QAT_SYM=n
+CONFIG_RTE_LIBRTE_PMD_QAT_ASYM=n
+# Max. number of QuickAssist devices, which can be detected and attached
+CONFIG_RTE_PMD_QAT_MAX_PCI_DEVICES=48
+CONFIG_RTE_PMD_QAT_COMP_IM_BUFFER_SIZE=65536
+# Compile PMD for virtio crypto devices
+CONFIG_RTE_LIBRTE_PMD_VIRTIO_CRYPTO=n
+# Number of maximum virtio crypto devices
+CONFIG_RTE_MAX_VIRTIO_CRYPTO=32
+# Compile PMD for AESNI backed device
+CONFIG_RTE_LIBRTE_PMD_AESNI_MB=n
+# Compile PMD for Software backed device
+CONFIG_RTE_LIBRTE_PMD_OPENSSL=n
+# Compile PMD for AESNI GCM device
+CONFIG_RTE_LIBRTE_PMD_AESNI_GCM=n
+# Compile PMD for SNOW 3G device
+CONFIG_RTE_LIBRTE_PMD_SNOW3G=n
+CONFIG_RTE_LIBRTE_PMD_SNOW3G_DEBUG=n
+# Compile PMD for KASUMI device
+CONFIG_RTE_LIBRTE_PMD_KASUMI=n
+# Compile PMD for ZUC device
+CONFIG_RTE_LIBRTE_PMD_ZUC=n
+# Compile PMD for Crypto Scheduler device
+CONFIG_RTE_LIBRTE_PMD_CRYPTO_SCHEDULER=n
+# Compile PMD for NULL Crypto device
+CONFIG_RTE_LIBRTE_PMD_NULL_CRYPTO=n
+# Compile PMD for AMD CCP crypto device
+CONFIG_RTE_LIBRTE_PMD_CCP=n
+# Compile PMD for Marvell Crypto device
+CONFIG_RTE_LIBRTE_PMD_MVSAM_CRYPTO=n
+# Compile PMD for NITROX crypto device
+CONFIG_RTE_LIBRTE_PMD_NITROX=n
+# Compile generic security library
+CONFIG_RTE_LIBRTE_SECURITY=n
+# Compile generic compression device library
+CONFIG_RTE_LIBRTE_COMPRESSDEV=n
+CONFIG_RTE_COMPRESS_MAX_DEVS=64
+# Compile compressdev unit test
+CONFIG_RTE_COMPRESSDEV_TEST=n
+# Compile PMD for Octeontx ZIPVF compression device
+CONFIG_RTE_LIBRTE_PMD_OCTEONTX_ZIPVF=n
+# Compile PMD for ISA-L compression device
+CONFIG_RTE_LIBRTE_PMD_ISAL=n
+# Compile PMD for ZLIB compression device
+CONFIG_RTE_LIBRTE_PMD_ZLIB=n
+# Compile generic event device library
+CONFIG_RTE_LIBRTE_EVENTDEV=n
+CONFIG_RTE_LIBRTE_EVENTDEV_DEBUG=n
+CONFIG_RTE_EVENT_MAX_DEVS=16
+CONFIG_RTE_EVENT_MAX_QUEUES_PER_DEV=64
+CONFIG_RTE_EVENT_TIMER_ADAPTER_NUM_MAX=32
+CONFIG_RTE_EVENT_ETH_INTR_RING_SIZE=1024
+CONFIG_RTE_EVENT_CRYPTO_ADAPTER_MAX_INSTANCE=32
+CONFIG_RTE_EVENT_ETH_TX_ADAPTER_MAX_INSTANCE=32
+# Compile PMD for skeleton event device
+CONFIG_RTE_LIBRTE_PMD_SKELETON_EVENTDEV=n
+CONFIG_RTE_LIBRTE_PMD_SKELETON_EVENTDEV_DEBUG=n
+# Compile PMD for software event device
+CONFIG_RTE_LIBRTE_PMD_SW_EVENTDEV=n
+# Compile PMD for distributed software event device
+CONFIG_RTE_LIBRTE_PMD_DSW_EVENTDEV=n
+# Compile PMD for octeontx sso event device
+CONFIG_RTE_LIBRTE_PMD_OCTEONTX_SSOVF=n
+# Compile PMD for octeontx2 sso event device
+CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_EVENTDEV=n
+# Compile PMD for OPDL event device
+CONFIG_RTE_LIBRTE_PMD_OPDL_EVENTDEV=n
+# Compile PMD for NXP DPAA event device
+CONFIG_RTE_LIBRTE_PMD_DPAA_EVENTDEV=n
+# Compile PMD for NXP DPAA2 event device
+CONFIG_RTE_LIBRTE_PMD_DPAA2_EVENTDEV=n
+# Compile raw device support
+# EXPERIMENTAL: API may change without prior notice
+CONFIG_RTE_LIBRTE_RAWDEV=n
+CONFIG_RTE_RAWDEV_MAX_DEVS=64
+CONFIG_RTE_LIBRTE_PMD_SKELETON_RAWDEV=n
+# Compile PMD for NXP DPAA2 CMDIF raw device
+CONFIG_RTE_LIBRTE_PMD_DPAA2_CMDIF_RAWDEV=n
+# Compile PMD for NXP DPAA2 QDMA raw device
+CONFIG_RTE_LIBRTE_PMD_DPAA2_QDMA_RAWDEV=n
+# Compile PMD for Intel FPGA raw device
+CONFIG_RTE_LIBRTE_PMD_IFPGA_RAWDEV=n
+# Compile PMD for Intel IOAT raw device
+CONFIG_RTE_LIBRTE_PMD_IOAT_RAWDEV=n
+# Compile PMD for octeontx2 DMA raw device
+CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_DMA_RAWDEV=n
+# Compile PMD for NTB raw device
+CONFIG_RTE_LIBRTE_PMD_NTB_RAWDEV=n
+# Compile librte_ring
+CONFIG_RTE_LIBRTE_RING=y
+# Compile librte_stack
+CONFIG_RTE_LIBRTE_STACK=y
+# Compile librte_mempool
+CONFIG_RTE_LIBRTE_MEMPOOL=y
+CONFIG_RTE_MEMPOOL_CACHE_MAX_SIZE=512
+CONFIG_RTE_LIBRTE_MEMPOOL_DEBUG=n
+# Compile Mempool drivers
+CONFIG_RTE_DRIVER_MEMPOOL_BUCKET=y
+CONFIG_RTE_DRIVER_MEMPOOL_BUCKET_SIZE_KB=64
+CONFIG_RTE_DRIVER_MEMPOOL_RING=y
+CONFIG_RTE_DRIVER_MEMPOOL_STACK=y
+# Compile PMD for octeontx fpa mempool device
+CONFIG_RTE_LIBRTE_OCTEONTX_MEMPOOL=n
+# Compile PMD for octeontx2 npa mempool device
+CONFIG_RTE_LIBRTE_OCTEONTX2_MEMPOOL=n
+# Compile librte_mbuf
+CONFIG_RTE_LIBRTE_MBUF=y
+CONFIG_RTE_LIBRTE_MBUF_DEBUG=n
+CONFIG_RTE_MBUF_DEFAULT_MEMPOOL_OPS="ring_mp_mc"
+CONFIG_RTE_MBUF_REFCNT_ATOMIC=y
+CONFIG_RTE_PKTMBUF_HEADROOM=128
+# Compile librte_timer
+CONFIG_RTE_LIBRTE_TIMER=n
+CONFIG_RTE_LIBRTE_TIMER_DEBUG=n
+# Compile librte_cfgfile
+CONFIG_RTE_LIBRTE_CFGFILE=n
+# Compile librte_cmdline
+CONFIG_RTE_LIBRTE_CMDLINE=y
+CONFIG_RTE_LIBRTE_CMDLINE_DEBUG=n
+# Compile librte_hash
+CONFIG_RTE_LIBRTE_HASH=y
+CONFIG_RTE_LIBRTE_HASH_DEBUG=n
+# Compile librte_efd
+CONFIG_RTE_LIBRTE_EFD=n
+# Compile librte_member
+CONFIG_RTE_LIBRTE_MEMBER=y
+# Compile librte_jobstats
+CONFIG_RTE_LIBRTE_JOBSTATS=n
+# Compile architecture we compile for. device metrics library
+CONFIG_RTE_LIBRTE_METRICS=y
+# Compile architecture we compile for. bitrate statistics library
+CONFIG_RTE_LIBRTE_BITRATE=y
+# Compile architecture we compile for. latency statistics library
+CONFIG_RTE_LIBRTE_LATENCY_STATS=y
+# Compile librte_telemetry
+CONFIG_RTE_LIBRTE_TELEMETRY=n
+# Compile librte_rcu
+CONFIG_RTE_LIBRTE_RCU=n
+CONFIG_RTE_LIBRTE_RCU_DEBUG=n
+# Compile librte_rib
+CONFIG_RTE_LIBRTE_RIB=n
+# Compile librte_fib
+CONFIG_RTE_LIBRTE_FIB=n
+CONFIG_RTE_LIBRTE_FIB_DEBUG=n
+# Compile librte_lpm
+CONFIG_RTE_LIBRTE_LPM=n
+CONFIG_RTE_LIBRTE_LPM_DEBUG=n
+# Compile librte_acl
+CONFIG_RTE_LIBRTE_ACL=n
+CONFIG_RTE_LIBRTE_ACL_DEBUG=n
+# Compile librte_power
+CONFIG_RTE_LIBRTE_POWER=n
+CONFIG_RTE_LIBRTE_POWER_DEBUG=n
+CONFIG_RTE_MAX_LCORE_FREQS=64
+# Compile librte_net
+CONFIG_RTE_LIBRTE_NET=y
+# Compile librte_ip_frag
+CONFIG_RTE_LIBRTE_IP_FRAG=y
+CONFIG_RTE_LIBRTE_IP_FRAG_DEBUG=n
+CONFIG_RTE_LIBRTE_IP_FRAG_MAX_FRAG=4
+CONFIG_RTE_LIBRTE_IP_FRAG_TBL_STAT=n
+# Compile GRO library
+CONFIG_RTE_LIBRTE_GRO=y
+# Compile GSO library
+CONFIG_RTE_LIBRTE_GSO=y
+# Compile librte_meter
+CONFIG_RTE_LIBRTE_METER=y
+# Compile librte_classify
+CONFIG_RTE_LIBRTE_FLOW_CLASSIFY=n
+# Compile librte_sched
+CONFIG_RTE_LIBRTE_SCHED=n
+CONFIG_RTE_SCHED_DEBUG=n
+CONFIG_RTE_SCHED_RED=n
+CONFIG_RTE_SCHED_COLLECT_STATS=n
+CONFIG_RTE_SCHED_SUBPORT_TC_OV=n
+CONFIG_RTE_SCHED_PORT_N_GRINDERS=8
+CONFIG_RTE_SCHED_VECTOR=n
+# Compile architecture we compile for. distributor library
+CONFIG_RTE_LIBRTE_DISTRIBUTOR=n
+# Compile architecture we compile for. reorder library
+CONFIG_RTE_LIBRTE_REORDER=n
+# Compile librte_port
+CONFIG_RTE_LIBRTE_PORT=n
+CONFIG_RTE_PORT_STATS_COLLECT=n
+CONFIG_RTE_PORT_PCAP=n
+# Compile librte_table
+CONFIG_RTE_LIBRTE_TABLE=n
+CONFIG_RTE_TABLE_STATS_COLLECT=n
+# Compile librte_pipeline
+CONFIG_RTE_LIBRTE_PIPELINE=n
+CONFIG_RTE_PIPELINE_STATS_COLLECT=n
+# Compile librte_kni
+CONFIG_RTE_LIBRTE_KNI=n
+CONFIG_RTE_LIBRTE_PMD_KNI=n
+CONFIG_RTE_KNI_KMOD=n
+CONFIG_RTE_KNI_PREEMPT_DEFAULT=y
+# Compile architecture we compile for. pdump library
+CONFIG_RTE_LIBRTE_PDUMP=y
+# Compile vhost user library
+CONFIG_RTE_LIBRTE_VHOST=y
+CONFIG_RTE_LIBRTE_VHOST_NUMA=y
+CONFIG_RTE_LIBRTE_VHOST_DEBUG=n
+# Compile vhost PMD
+# To compile, CONFIG_RTE_LIBRTE_VHOST should be enabled.
+CONFIG_RTE_LIBRTE_PMD_VHOST=y
+# Compile IFC driver
+# To compile, CONFIG_RTE_LIBRTE_VHOST and CONFIG_RTE_EAL_VFIO
+# should be enabled.
+CONFIG_RTE_LIBRTE_IFC_PMD=n
+# Compile librte_bpf
+CONFIG_RTE_LIBRTE_BPF=n
+# allow load BPF from ELF files (requires libelf)
+CONFIG_RTE_LIBRTE_BPF_ELF=n
+# Compile librte_ipsec
+CONFIG_RTE_LIBRTE_IPSEC=n
+# Compile architecture we compile for. test application
+CONFIG_RTE_APP_TEST=y
+CONFIG_RTE_APP_TEST_RESOURCE_TAR=n
+# Compile architecture we compile for. procinfo application
+CONFIG_RTE_PROC_INFO=n
+# Compile architecture we compile for. PMD test application
+CONFIG_RTE_TEST_PMD=n
+CONFIG_RTE_TEST_PMD_RECORD_CORE_CYCLES=n
+CONFIG_RTE_TEST_PMD_RECORD_BURST_STATS=n
+# Compile architecture we compile for. bbdev test application
+CONFIG_RTE_TEST_BBDEV=n
+# Compile architecture we compile for. compression performance application
+CONFIG_RTE_APP_COMPRESS_PERF=n
+# Compile architecture we compile for. crypto performance application
+CONFIG_RTE_APP_CRYPTO_PERF=n
+# Compile architecture we compile for. eventdev application
+CONFIG_RTE_APP_EVENTDEV=n
+CONFIG_RTE_EXEC_ENV_LINUX=y
+CONFIG_RTE_EXEC_ENV_LINUXAPP=y
+CONFIG_RTE_LIBRTE_VHOST_POSTCOPY=n
+# Common libraries, before Bus/PMDs
+# NXP DPAA BUS and drivers
+# NXP FSLMC BUS and DPAA2 drivers
+# NXP ENETC PMD Driver
+# HINIC PMD driver
+# Hisilicon HNS3 PMD driver
+# Compile PMD for Intel FPGA raw device
+# To compile, CONFIG_RTE_EAL_VFIO should be enabled.
+CONFIG_RTE_ARCH_ARM64=y
+CONFIG_RTE_ARCH_64=y
+# Maximum available cache line size in arm64 implementations.
+# Setting to maximum available cache line size in generic config
+# to address minimum DMA alignment across all arm64 implementations.
+# Accelarate rte_memcpy. Be sure to run unit test (memcpy_perf_autotest)
+# to determine architecture we compile for. best threshold in code. Refer to notes in source file
+# (lib/librte_eal/common/include/arch/arm/rte_memcpy_64.h) for more info.
+CONFIG_RTE_ARCH_ARM64_MEMCPY=n
+#CONFIG_RTE_ARM64_MEMCPY_ALIGNED_THRESHOLD=2048
+#CONFIG_RTE_ARM64_MEMCPY_UNALIGNED_THRESHOLD=512
+# Leave below RTE_ARM64_MEMCPY_xxx options commented out, unless there're
+# strong reasons.
+#CONFIG_RTE_ARM64_MEMCPY_SKIP_GCC_VER_CHECK=n
+#CONFIG_RTE_ARM64_MEMCPY_ALIGN_MASK=0xF
+#CONFIG_RTE_ARM64_MEMCPY_STRICT_ALIGN=n
+# NXP PFE PMD Driver
+CONFIG_RTE_TOOLCHAIN_GCC=y
+CONFIG_RTE_LIBRTE_PMD_XENVIRT=n
diff --git a/SOURCES/configlib.sh b/SOURCES/configlib.sh
new file mode 100644
index 0000000..a1049b3
--- /dev/null
+++ b/SOURCES/configlib.sh
@@ -0,0 +1,105 @@
+# Copyright (C) 2017, Red Hat, Inc.
+#
+# Core configuration file library.
+
+# Configurations are determined by sha values.  The way to determine is by
+# the special text:
+# $FILE_COMMENT_TYPE -*- cfg-sha: $SHA256 -*-
+
+export LC_ALL=C
+
+# check required binaries
+__check_reqd_binaries() {
+    local BIN __binaries=("egrep" "sort" "sha256sum" "sed")
+    for BIN in $__binaries; do
+        if ! type -P $BIN >/dev/null 2>&1; then
+            echo "Binary $BIN not found.  Please install."
+            exit 1
+        fi
+    done
+}
+
+# Calculates a sha from a file
+# The algorithm for generating a sha from a config is thus:
+#
+# 1. Remove all comment lines and blank lines
+# 2. Sort the content
+# 3. generate the sha-256 sum
+#
+# From a script perspective, this means:
+#   egrep -v ^\# %file% | egrep -v ^$ | sort -u | sha256sum
+#
+# Params:
+#  $1 = output variable
+#  $2 = file to use to calculate the shasum
+#  $3 = file comment type (defaults to # if unspecified)
+calc_sha() {
+    __check_reqd_binaries
+
+    if [ "$1" == "" ]; then
+        echo "Please pass in a storage variable."
+        return 1
+    fi
+
+    local __resultvar=$1
+    __retval=1
+    shift
+
+    local __file=$1
+    local cmnt=${2:-#}
+
+    if [ -f "$__file" ]; then
+        local __shasum=$(egrep -v ^"$cmnt" "$__file" | egrep -v ^$ | sort -u | sha256sum -t | cut -d" " -f1)
+        eval $__resultvar="'$__shasum'"
+        __retval=0
+    fi
+    return $__retval
+}
+
+# Retrieves a sha stored in a file
+# Param:
+#  $1 = output variable
+#  $2 = file to use to calculate the shasum
+#  $3 = file comment type (defaults to # if unspecified)
+retr_sha() {
+    __check_reqd_binaries
+
+    if [ "$1" == "" ]; then
+        echo "Please pass in a storage variable."
+        return 1
+    fi
+
+    local __resultvar=$1
+    __retval=1
+    shift
+
+    local __file=$1
+    local cmnt=${2:-#}
+
+    if [ -f "$__file" ]; then
+        if grep -q "$cmnt -\*- cfg-sha:" "$__file"; then
+            local __shasum=$(grep "$cmnt -\*- cfg-sha:" "$__file" | sed -e "s@$cmnt -\*- cfg-sha: @@" | cut -d" " -f1)
+            eval $__resultvar="'$__shasum'"
+            __retval=0
+        fi
+    fi
+    return $__retval
+}
+
+
+# Set a config value
+# set_conf dpdk_build_tree parameter value
+# dpdk_build_tree is the directory where the .config lives
+# parameter is the config parameter
+# value is the value to set for the config parameter
+set_conf() {
+    c="$1/.config"
+    shift
+
+    if grep -q "$1" "$c"; then
+        sed -i "s:^$1=.*$:$1=$2:g" $c
+    else
+        echo $1=$2 >> "$c"
+    fi
+}
+
diff --git a/SOURCES/openvswitch-2.13.0.patch b/SOURCES/openvswitch-2.13.0.patch
new file mode 100644
index 0000000..930e9e4
--- /dev/null
+++ b/SOURCES/openvswitch-2.13.0.patch
@@ -0,0 +1,1615 @@
+From 4ee0f6af9e601cbb5f69a486526d1011314bbfed Mon Sep 17 00:00:00 2001
+From: Ben Pfaff <blp@ovn.org>
+Date: Thu, 19 Mar 2020 17:53:10 -0700
+Subject: [PATCH 01/15] ofproto-dpif-xlate: Fix recirculation when in_port is
+ OFPP_CONTROLLER.
+
+[ upstream commit c5a910dd92ecbad24f86b4c59b4ff8105b5149fd ]
+
+Recirculation usually requires finding the pre-recirculation input port.
+Packets sent by the controller, with in_port of OFPP_CONTROLLER or
+OFPP_NONE, do not have a real input port data structure, only a port
+number.  The code in xlate_lookup_ofproto_() mishandled this case,
+failing to return the ofproto data structure.  This commit fixes the
+problem and adds a test to guard against regression.
+
+Reported-by: Numan Siddique <numans@ovn.org>
+Reported-at: https://mail.openvswitch.org/pipermail/ovs-dev/2020-March/368642.html
+Tested-by: Numan Siddique <numans@ovn.org>
+Acked-by: Numan Siddique <numans@ovn.org>
+Signed-off-by: Ben Pfaff <blp@ovn.org>
+
+Resolves: #1775160
+Signed-off-by: Numan Siddique <nusiddiq@redhat.com>
+---
+ ofproto/ofproto-dpif-xlate.c | 25 +++++++++++++++++++++----
+ tests/ofproto-dpif.at        | 30 ++++++++++++++++++++++++++++++
+ 2 files changed, 51 insertions(+), 4 deletions(-)
+
+diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
+index 4407f9c97a..54cfbfbdff 100644
+--- a/ofproto/ofproto-dpif-xlate.c
++++ b/ofproto/ofproto-dpif-xlate.c
+@@ -1516,15 +1516,32 @@ xlate_lookup_ofproto_(const struct dpif_backer *backer,
+             return NULL;
+         }
+ 
+-        /* If recirculation was initiated due to bond (in_port = OFPP_NONE)
+-         * then frozen state is static and xport_uuid is not defined, so xport
+-         * cannot be restored from frozen state. */
+-        if (recirc_id_node->state.metadata.in_port != OFPP_NONE) {
++        ofp_port_t in_port = recirc_id_node->state.metadata.in_port;
++        if (in_port != OFPP_NONE && in_port != OFPP_CONTROLLER) {
+             struct uuid xport_uuid = recirc_id_node->state.xport_uuid;
+             xport = xport_lookup_by_uuid(xcfg, &xport_uuid);
+             if (xport && xport->xbridge && xport->xbridge->ofproto) {
+                 goto out;
+             }
++        } else {
++            /* OFPP_NONE and OFPP_CONTROLLER are not real ports.  They indicate
++             * that the packet originated from the controller via an OpenFlow
++             * "packet-out".  The right thing to do is to find just the
++             * ofproto.  There is no xport, which is OK.
++             *
++             * OFPP_NONE can also indicate that a bond caused recirculation. */
++            struct uuid uuid = recirc_id_node->state.ofproto_uuid;
++            const struct xbridge *bridge = xbridge_lookup_by_uuid(xcfg, &uuid);
++            if (bridge && bridge->ofproto) {
++                if (errorp) {
++                    *errorp = NULL;
++                }
++                *xportp = NULL;
++                if (ofp_in_port) {
++                    *ofp_in_port = in_port;
++                }
++                return bridge->ofproto;
++            }
+         }
+     }
+ 
+diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at
+index ff1cc93707..d444cf0844 100644
+--- a/tests/ofproto-dpif.at
++++ b/tests/ofproto-dpif.at
+@@ -5171,6 +5171,36 @@ AT_CHECK_UNQUOTED([tail -1 stdout], [0], [Datapath actions: 2
+ OVS_VSWITCHD_STOP
+ AT_CLEANUP
+ 
++# Checks for regression against a bug in which OVS dropped packets
++# with in_port=CONTROLLER when they were recirculated (because
++# CONTROLLER isn't a real port and could not be looked up).
++AT_SETUP([ofproto-dpif - packet-out recirculation])
++OVS_VSWITCHD_START
++add_of_ports br0 1 2
++
++AT_DATA([flows.txt], [dnl
++table=0 ip actions=mod_dl_dst:83:83:83:83:83:83,ct(table=1)
++table=1 ip actions=ct(commit),output:2
++])
++AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
++
++packet=ffffffffffff00102030405008004500001c00000000401100000a000002ffffffff0035111100080000
++AT_CHECK([ovs-ofctl packet-out br0 "in_port=controller packet=$packet actions=table"])
++
++# Dumps out the flow table, extracts the number of packets that have gone
++# through the (single) flow in table 1, and returns success if it's exactly 1.
++#
++# If this remains 0, then the recirculation isn't working properly since the
++# packet never goes through flow in table 1.
++check_flows () {
++    n=$(ovs-ofctl dump-flows br0 table=1 | sed -n 's/.*n_packets=\([[0-9]]\{1,\}\).*/\1/p')
++    echo "n_packets=$n"
++    test "$n" = 1
++}
++OVS_WAIT_UNTIL([check_flows], [ovs dump-flows br0])
++
++OVS_VSWITCHD_STOP
++AT_CLEANUP
+ 
+ AT_SETUP([ofproto-dpif - debug_slow action])
+ OVS_VSWITCHD_START
+-- 
+2.25.1
+
+
+From 71f25b7920093daa59827a0a4be4095309aec6ff Mon Sep 17 00:00:00 2001
+From: Timothy Redaelli <tredaelli@redhat.com>
+Date: Thu, 19 Mar 2020 20:05:39 +0100
+Subject: [PATCH 02/15] bugtool: Fix for Python3.
+
+Currently ovs-bugtool tool doesn't start on Python 3.
+This commit fixes ovs-bugtool to make it works on Python 3.
+
+Replaced StringIO.StringIO with io.BytesIO since the script is
+processing binary data.
+
+Reported-at: https://bugzilla.redhat.com/1809241
+Reported-by: Flavio Leitner <fbl@sysclose.org>
+Signed-off-by: Timothy Redaelli <tredaelli@redhat.com>
+Co-authored-by: William Tu <u9012063@gmail.com>
+Signed-off-by: William Tu <u9012063@gmail.com>
+(cherry picked from commit 9e6c00bca9af29031d0e160d33174b7ae99b9244)
+---
+ utilities/bugtool/ovs-bugtool.in | 48 +++++++++++++++++---------------
+ 1 file changed, 25 insertions(+), 23 deletions(-)
+
+diff --git a/utilities/bugtool/ovs-bugtool.in b/utilities/bugtool/ovs-bugtool.in
+index e55bfc2ed5..47f3c4629f 100755
+--- a/utilities/bugtool/ovs-bugtool.in
++++ b/utilities/bugtool/ovs-bugtool.in
+@@ -33,8 +33,7 @@
+ # or func_output().
+ #
+ 
+-import StringIO
+-import commands
++from io import BytesIO
+ import fcntl
+ import getopt
+ import hashlib
+@@ -48,7 +47,7 @@ import warnings
+ import zipfile
+ from select import select
+ from signal import SIGTERM
+-from subprocess import PIPE, Popen
++from subprocess import PIPE, Popen, check_output
+ 
+ from xml.dom.minidom import getDOMImplementation, parse
+ 
+@@ -348,7 +347,7 @@ def collect_data():
+             cap = v['cap']
+             if 'cmd_args' in v:
+                 if 'output' not in v.keys():
+-                    v['output'] = StringIOmtime()
++                    v['output'] = BytesIOmtime()
+                 if v['repeat_count'] > 0:
+                     if cap not in process_lists:
+                         process_lists[cap] = []
+@@ -373,20 +372,23 @@ def collect_data():
+         if 'filename' in v and v['filename'].startswith('/proc/'):
+             # proc files must be read into memory
+             try:
+-                f = open(v['filename'], 'r')
++                f = open(v['filename'], 'rb')
+                 s = f.read()
+                 f.close()
+                 if check_space(cap, v['filename'], len(s)):
+-                    v['output'] = StringIOmtime(s)
++                    v['output'] = BytesIOmtime(s)
+             except:
+                 pass
+         elif 'func' in v:
+             try:
+                 s = v['func'](cap)
+             except Exception as e:
+-                s = str(e)
++                s = str(e).encode()
+             if check_space(cap, k, len(s)):
+-                v['output'] = StringIOmtime(s)
++                if isinstance(s, str):
++                    v['output'] = BytesIOmtime(s.encode())
++                else:
++                    v['output'] = BytesIOmtime(s)
+ 
+ 
+ def main(argv=None):
+@@ -704,7 +706,7 @@ exclude those logs from the archive.
+ 
+     # permit the user to filter out data
+     # We cannot use iteritems, since we modify 'data' as we pass through
+-    for (k, v) in sorted(data.items()):
++    for (k, v) in data.items():
+         cap = v['cap']
+         if 'filename' in v:
+             key = k[0]
+@@ -721,7 +723,7 @@ exclude those logs from the archive.
+ 
+     # include inventory
+     data['inventory.xml'] = {'cap': None,
+-                        'output': StringIOmtime(make_inventory(data, subdir))}
++                        'output': BytesIOmtime(make_inventory(data, subdir))}
+ 
+     # create archive
+     if output_fd == -1:
+@@ -782,7 +784,7 @@ def dump_scsi_hosts(cap):
+ 
+ 
+ def module_info(cap):
+-    output = StringIO.StringIO()
++    output = BytesIO()
+     modules = open(PROC_MODULES, 'r')
+     procs = []
+ 
+@@ -806,7 +808,7 @@ def multipathd_topology(cap):
+ 
+ 
+ def dp_list():
+-    output = StringIO.StringIO()
++    output = BytesIO()
+     procs = [ProcOutput([OVS_DPCTL, 'dump-dps'],
+              caps[CAP_NETWORK_STATUS][MAX_TIME], output)]
+ 
+@@ -828,7 +830,7 @@ def collect_ovsdb():
+             if os.path.isfile(OPENVSWITCH_COMPACT_DB):
+                 os.unlink(OPENVSWITCH_COMPACT_DB)
+ 
+-            output = StringIO.StringIO()
++            output = BytesIO()
+             max_time = 5
+             procs = [ProcOutput(['ovsdb-tool', 'compact',
+                                 OPENVSWITCH_CONF_DB, OPENVSWITCH_COMPACT_DB],
+@@ -871,7 +873,7 @@ def fd_usage(cap):
+ 
+ 
+ def dump_rdac_groups(cap):
+-    output = StringIO.StringIO()
++    output = BytesIO()
+     procs = [ProcOutput([MPPUTIL, '-a'], caps[cap][MAX_TIME], output)]
+ 
+     run_procs([procs])
+@@ -896,7 +898,7 @@ def load_plugins(just_capabilities=False, filter=None):
+         for node in nodelist:
+             if node.nodeType == node.TEXT_NODE:
+                 rc += node.data
+-        return rc.encode()
++        return rc
+ 
+     def getBoolAttr(el, attr, default=False):
+         ret = default
+@@ -1037,7 +1039,7 @@ def make_tar(subdir, suffix, output_fd, output_file):
+                     s = os.stat(v['filename'])
+                     ti.mtime = s.st_mtime
+                     ti.size = s.st_size
+-                    tf.addfile(ti, open(v['filename']))
++                    tf.addfile(ti, open(v['filename'], 'rb'))
+             except:
+                 pass
+     finally:
+@@ -1095,12 +1097,12 @@ def make_inventory(inventory, subdir):
+     s.setAttribute('date', time.strftime('%c'))
+     s.setAttribute('hostname', platform.node())
+     s.setAttribute('uname', ' '.join(platform.uname()))
+-    s.setAttribute('uptime', commands.getoutput(UPTIME))
++    s.setAttribute('uptime', check_output(UPTIME).decode())
+     document.getElementsByTagName(INVENTORY_XML_ROOT)[0].appendChild(s)
+ 
+     map(lambda k_v: inventory_entry(document, subdir, k_v[0], k_v[1]),
+         inventory.items())
+-    return document.toprettyxml()
++    return document.toprettyxml().encode()
+ 
+ 
+ def inventory_entry(document, subdir, k, v):
+@@ -1301,7 +1303,7 @@ class ProcOutput(object):
+             line = self.proc.stdout.readline()
+         else:
+             line = self.proc.stdout.read(self.bufsize)
+-        if line == '':
++        if line == b'':
+             # process exited
+             self.proc.stdout.close()
+             self.status = self.proc.wait()
+@@ -1391,13 +1393,13 @@ def get_free_disk_space(path):
+     return s.f_frsize * s.f_bfree
+ 
+ 
+-class StringIOmtime(StringIO.StringIO):
+-    def __init__(self, buf=''):
+-        StringIO.StringIO.__init__(self, buf)
++class BytesIOmtime(BytesIO):
++    def __init__(self, buf=b''):
++        BytesIO.__init__(self, buf)
+         self.mtime = time.time()
+ 
+     def write(self, s):
+-        StringIO.StringIO.write(self, s)
++        BytesIO.write(self, s)
+         self.mtime = time.time()
+ 
+ 
+-- 
+2.25.1
+
+
+From 914d885061c9f7e7e6e5f921065301e08837e122 Mon Sep 17 00:00:00 2001
+From: Han Zhou <hzhou@ovn.org>
+Date: Fri, 28 Feb 2020 18:07:04 -0800
+Subject: [PATCH 03/15] raft-rpc: Fix message format.
+
+[ upstream commit 78c8011f58daec41ec97440f2e42795699322742 ]
+
+Signed-off-by: Han Zhou <hzhou@ovn.org>
+Signed-off-by: Ben Pfaff <blp@ovn.org>
+
+Resolves: #1836305
+Signed-off-by: Dumitru Ceara <dceara@redhat.com>
+---
+ ovsdb/raft-rpc.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/ovsdb/raft-rpc.c b/ovsdb/raft-rpc.c
+index 18c83fe9c2..dd14d81091 100644
+--- a/ovsdb/raft-rpc.c
++++ b/ovsdb/raft-rpc.c
+@@ -544,8 +544,8 @@ raft_format_install_snapshot_request(
+     ds_put_format(s, " last_index=%"PRIu64, rq->last_index);
+     ds_put_format(s, " last_term=%"PRIu64, rq->last_term);
+     ds_put_format(s, " last_eid="UUID_FMT, UUID_ARGS(&rq->last_eid));
+-    ds_put_cstr(s, " last_servers=");
+     ds_put_format(s, " election_timer=%"PRIu64, rq->election_timer);
++    ds_put_cstr(s, " last_servers=");
+ 
+     struct hmap servers;
+     struct ovsdb_error *error =
+-- 
+2.25.1
+
+
+From 8ff30dfee6cb075e36ed38b77695ff03321ce12b Mon Sep 17 00:00:00 2001
+From: Han Zhou <hzhou@ovn.org>
+Date: Fri, 28 Feb 2020 18:07:05 -0800
+Subject: [PATCH 04/15] ovsdb-server: Don't disconnect clients after raft
+ install_snapshot.
+
+[ upstream commit f0c8b44c5832c36989fad78927407fc14e64ce46 ]
+
+When "schema" field is found in read_db(), there can be two cases:
+1. There is a schema change in clustered DB and the "schema" is the new one.
+2. There is a install_snapshot RPC happened, which caused log compaction on the
+server and the next log is just the snapshot, which always constains "schema"
+field, even though the schema hasn't been changed.
+
+The current implementation doesn't handle case 2), and always assume the schema
+is changed hence disconnect all clients of the server. It can cause stability
+problem when there are big number of clients connected when this happens in
+a large scale environment.
+
+Signed-off-by: Han Zhou <hzhou@ovn.org>
+Signed-off-by: Ben Pfaff <blp@ovn.org>
+
+Resolves: #1836305
+Signed-off-by: Dumitru Ceara <dceara@redhat.com>
+---
+ ovsdb/ovsdb-server.c   |  3 ++-
+ tests/ovsdb-cluster.at | 56 ++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 58 insertions(+), 1 deletion(-)
+
+diff --git a/ovsdb/ovsdb-server.c b/ovsdb/ovsdb-server.c
+index b6957d7300..d416f1b606 100644
+--- a/ovsdb/ovsdb-server.c
++++ b/ovsdb/ovsdb-server.c
+@@ -543,7 +543,8 @@ parse_txn(struct server_config *config, struct db *db,
+           struct ovsdb_schema *schema, const struct json *txn_json,
+           const struct uuid *txnid)
+ {
+-    if (schema) {
++    if (schema && (!db->db->schema || strcmp(schema->version,
++                                             db->db->schema->version))) {
+         /* We're replacing the schema (and the data).  Destroy the database
+          * (first grabbing its storage), then replace it with the new schema.
+          * The transaction must also include the replacement data.
+diff --git a/tests/ovsdb-cluster.at b/tests/ovsdb-cluster.at
+index 3a0bd4579e..5b6188b96f 100644
+--- a/tests/ovsdb-cluster.at
++++ b/tests/ovsdb-cluster.at
+@@ -273,6 +273,62 @@ OVS_WAIT_UNTIL([ovs-appctl -t "`pwd`"/s4 cluster/status $schema_name | grep "Ele
+ 
+ AT_CLEANUP
+ 
++
++AT_BANNER([OVSDB cluster install snapshot RPC])
++
++AT_SETUP([OVSDB cluster - install snapshot RPC])
++AT_KEYWORDS([ovsdb server positive unix cluster snapshot])
++
++n=3
++schema_name=`ovsdb-tool schema-name $abs_srcdir/idltest.ovsschema`
++ordinal_schema > schema
++AT_CHECK([ovsdb-tool '-vPATTERN:console:%c|%p|%m' create-cluster s1.db $abs_srcdir/idltest.ovsschema unix:s1.raft], [0], [], [stderr])
++cid=`ovsdb-tool db-cid s1.db`
++schema_name=`ovsdb-tool schema-name $abs_srcdir/idltest.ovsschema`
++for i in `seq 2 $n`; do
++    AT_CHECK([ovsdb-tool join-cluster s$i.db $schema_name unix:s$i.raft unix:s1.raft])
++done
++
++on_exit 'kill `cat *.pid`'
++for i in `seq $n`; do
++    AT_CHECK([ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i --remote=punix:s$i.ovsdb s$i.db])
++done
++for i in `seq $n`; do
++    AT_CHECK([ovsdb_client_wait unix:s$i.ovsdb $schema_name connected])
++done
++
++# Kill one follower (s2) and write some data to cluster, so that the follower is falling behind
++printf "\ns2: stopping\n"
++OVS_APP_EXIT_AND_WAIT_BY_TARGET([`pwd`/s2], [s2.pid])
++
++AT_CHECK([ovsdb-client transact unix:s1.ovsdb '[["idltest",
++      {"op": "insert",
++       "table": "simple",
++       "row": {"i": 1}}]]'], [0], [ignore], [ignore])
++
++# Compact leader online to generate snapshot
++AT_CHECK([ovs-appctl -t "`pwd`"/s1 ovsdb-server/compact])
++
++# Start the follower s2 again.
++AT_CHECK([ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s2.log --pidfile=s2.pid --unixctl=s2 --remote=punix:s2.ovsdb s2.db])
++AT_CHECK([ovsdb_client_wait unix:s2.ovsdb $schema_name connected])
++
++# A client transaction through s2. During this transaction, there will be a
++# install_snapshot RPC because s2 detects it is behind and s1 doesn't have the
++# pre_log_index requested by s2 because it is already compacted.
++# After the install_snapshot RPC process, the transaction through s2 should
++# succeed.
++AT_CHECK([ovsdb-client transact unix:s2.ovsdb '[["idltest",
++      {"op": "insert",
++       "table": "simple",
++       "row": {"i": 1}}]]'], [0], [ignore], [ignore])
++
++for i in `seq $n`; do
++    OVS_APP_EXIT_AND_WAIT_BY_TARGET([`pwd`/s$i], [s$i.pid])
++done
++
++AT_CLEANUP
++
+ 
+ 
+ OVS_START_SHELL_HELPERS
+-- 
+2.25.1
+
+
+From e732012d7be335650398ff03c2431c64b2c4aaba Mon Sep 17 00:00:00 2001
+From: Han Zhou <hzhou@ovn.org>
+Date: Fri, 28 Feb 2020 18:07:06 -0800
+Subject: [PATCH 05/15] raft: Fix raft_is_connected() when there is no leader
+ yet.
+
+[ upstream commit adc64ab057345f7004c44bf92363b9adda862134 ]
+
+If there is never a leader known by the current server, it's status
+should be "disconnected" to the cluster. Without this patch, when
+a server in cluster is restarted, before it successfully connecting
+back to the cluster it will appear as connected, which is wrong.
+
+Signed-off-by: Han Zhou <hzhou@ovn.org>
+Signed-off-by: Ben Pfaff <blp@ovn.org>
+
+Resolves: #1836305
+Signed-off-by: Dumitru Ceara <dceara@redhat.com>
+---
+ ovsdb/raft.c           | 10 ++++++++--
+ tests/ovsdb-cluster.at | 35 +++++++++++++++++++++++++++++++++++
+ 2 files changed, 43 insertions(+), 2 deletions(-)
+
+diff --git a/ovsdb/raft.c b/ovsdb/raft.c
+index 4789bc4f22..6cd7b0041a 100644
+--- a/ovsdb/raft.c
++++ b/ovsdb/raft.c
+@@ -298,6 +298,11 @@ struct raft {
+     bool had_leader;            /* There has been leader elected since last
+                                    election initiated. This is to help setting
+                                    candidate_retrying. */
++
++    /* For all. */
++    bool ever_had_leader;       /* There has been leader elected since the raft
++                                   is initialized, meaning it is ever
++                                   connected. */
+ };
+ 
+ /* All Raft structures. */
+@@ -1024,7 +1029,8 @@ raft_is_connected(const struct raft *raft)
+             && !raft->joining
+             && !raft->leaving
+             && !raft->left
+-            && !raft->failed);
++            && !raft->failed
++            && raft->ever_had_leader);
+     VLOG_DBG("raft_is_connected: %s\n", ret? "true": "false");
+     return ret;
+ }
+@@ -2519,7 +2525,7 @@ static void
+ raft_set_leader(struct raft *raft, const struct uuid *sid)
+ {
+     raft->leader_sid = *sid;
+-    raft->had_leader = true;
++    raft->ever_had_leader = raft->had_leader = true;
+     raft->candidate_retrying = false;
+ }
+ 
+diff --git a/tests/ovsdb-cluster.at b/tests/ovsdb-cluster.at
+index 5b6188b96f..0aa4564480 100644
+--- a/tests/ovsdb-cluster.at
++++ b/tests/ovsdb-cluster.at
+@@ -179,6 +179,41 @@ AT_KEYWORDS([ovsdb server negative unix cluster disconnect])
+ ovsdb_test_cluster_disconnect 5 leader yes
+ AT_CLEANUP
+ 
++AT_SETUP([OVSDB cluster - initial status should be disconnected])
++AT_KEYWORDS([ovsdb server negative unix cluster disconnect])
++
++n=3
++schema_name=`ovsdb-tool schema-name $abs_srcdir/idltest.ovsschema`
++ordinal_schema > schema
++AT_CHECK([ovsdb-tool '-vPATTERN:console:%c|%p|%m' create-cluster s1.db $abs_srcdir/idltest.ovsschema unix:s1.raft], [0], [], [stderr])
++cid=`ovsdb-tool db-cid s1.db`
++schema_name=`ovsdb-tool schema-name $abs_srcdir/idltest.ovsschema`
++for i in `seq 2 $n`; do
++    AT_CHECK([ovsdb-tool join-cluster s$i.db $schema_name unix:s$i.raft unix:s1.raft])
++done
++
++on_exit 'kill `cat *.pid`'
++for i in `seq $n`; do
++    AT_CHECK([ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i --remote=punix:s$i.ovsdb s$i.db])
++done
++for i in `seq $n`; do
++    AT_CHECK([ovsdb_client_wait unix:s$i.ovsdb $schema_name connected])
++done
++
++# Stop all servers, and start the s1 only, to test initial connection status
++# when there is no leader yet.
++for i in `seq 1 $n`; do
++    OVS_APP_EXIT_AND_WAIT_BY_TARGET([`pwd`/s$i], [s$i.pid])
++done
++i=1
++AT_CHECK([ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i --remote=punix:s$i.ovsdb s$i.db])
++
++# The initial status should be disconnected. So wait should fail.
++AT_CHECK([ovsdb_client_wait --timeout=1 unix:s$i.ovsdb $schema_name connected], [142], [ignore], [ignore])
++OVS_APP_EXIT_AND_WAIT_BY_TARGET([`pwd`/s$i], [s$i.pid])
++
++AT_CLEANUP
++
+ 
+ 
+ AT_BANNER([OVSDB cluster election timer change])
+-- 
+2.25.1
+
+
+From 053b78c8d60ffb4d212fd7894f91be52027f291f Mon Sep 17 00:00:00 2001
+From: Han Zhou <hzhou@ovn.org>
+Date: Fri, 28 Feb 2020 18:07:07 -0800
+Subject: [PATCH 06/15] raft: Avoid busy loop during leader election.
+
+[ upstream commit 3ae90e1899c5a05148ea1870d9bb4ac3c05e3a19 ]
+
+When a server doesn't see a leader yet, e.g. during leader re-election,
+if a transaction comes from a client, it will cause 100% CPU busy loop.
+With debug log enabled it is like:
+
+2020-02-28T04:04:35.631Z|00059|poll_loop|DBG|wakeup due to 0-ms timeout at ../ovsdb/trigger.c:164
+2020-02-28T04:04:35.631Z|00062|poll_loop|DBG|wakeup due to 0-ms timeout at ../ovsdb/trigger.c:164
+2020-02-28T04:04:35.631Z|00065|poll_loop|DBG|wakeup due to 0-ms timeout at ../ovsdb/trigger.c:164
+2020-02-28T04:04:35.631Z|00068|poll_loop|DBG|wakeup due to 0-ms timeout at ../ovsdb/trigger.c:164
+2020-02-28T04:04:35.631Z|00071|poll_loop|DBG|wakeup due to 0-ms timeout at ../ovsdb/trigger.c:164
+2020-02-28T04:04:35.631Z|00074|poll_loop|DBG|wakeup due to 0-ms timeout at ../ovsdb/trigger.c:164
+2020-02-28T04:04:35.631Z|00077|poll_loop|DBG|wakeup due to 0-ms timeout at ../ovsdb/trigger.c:164
+...
+
+The problem is that in ovsdb_trigger_try(), all cluster errors are treated
+as temporary error and retry immediately. This patch fixes it by introducing
+'run_triggers_now', which tells if a retry is needed immediately. When the
+cluster error is with detail 'not leader', we don't immediately retry, but
+will wait for the next poll event to trigger the retry. When 'not leader'
+status changes, there must be a event, i.e. raft RPC that changes the
+status, so the trigger is guaranteed to be triggered, without busy loop.
+
+Signed-off-by: Han Zhou <hzhou@ovn.org>
+Signed-off-by: Ben Pfaff <blp@ovn.org>
+
+Resolves: #1836305
+Signed-off-by: Dumitru Ceara <dceara@redhat.com>
+---
+ ovsdb/ovsdb.c       |  2 +-
+ ovsdb/ovsdb.h       |  1 +
+ ovsdb/transaction.c |  2 +-
+ ovsdb/trigger.c     | 11 +++++++++--
+ 4 files changed, 12 insertions(+), 4 deletions(-)
+
+diff --git a/ovsdb/ovsdb.c b/ovsdb/ovsdb.c
+index cfc96b32f8..7e683e6815 100644
+--- a/ovsdb/ovsdb.c
++++ b/ovsdb/ovsdb.c
+@@ -414,7 +414,7 @@ ovsdb_create(struct ovsdb_schema *schema, struct ovsdb_storage *storage)
+     db->storage = storage;
+     ovs_list_init(&db->monitors);
+     ovs_list_init(&db->triggers);
+-    db->run_triggers = false;
++    db->run_triggers_now = db->run_triggers = false;
+ 
+     shash_init(&db->tables);
+     if (schema) {
+diff --git a/ovsdb/ovsdb.h b/ovsdb/ovsdb.h
+index 32e5333163..5c30a83d92 100644
+--- a/ovsdb/ovsdb.h
++++ b/ovsdb/ovsdb.h
+@@ -83,6 +83,7 @@ struct ovsdb {
+     /* Triggers. */
+     struct ovs_list triggers;   /* Contains "struct ovsdb_trigger"s. */
+     bool run_triggers;
++    bool run_triggers_now;
+ 
+     struct ovsdb_table *rbac_role;
+ 
+diff --git a/ovsdb/transaction.c b/ovsdb/transaction.c
+index 369436bffb..8ffefcf7c9 100644
+--- a/ovsdb/transaction.c
++++ b/ovsdb/transaction.c
+@@ -967,7 +967,7 @@ ovsdb_txn_complete(struct ovsdb_txn *txn)
+ {
+     if (!ovsdb_txn_is_empty(txn)) {
+ 
+-        txn->db->run_triggers = true;
++        txn->db->run_triggers_now = txn->db->run_triggers = true;
+         ovsdb_monitors_commit(txn->db, txn);
+         ovsdb_error_assert(for_each_txn_row(txn, ovsdb_txn_update_weak_refs));
+         ovsdb_error_assert(for_each_txn_row(txn, ovsdb_txn_row_commit));
+diff --git a/ovsdb/trigger.c b/ovsdb/trigger.c
+index 7e62e90ae3..0372302af4 100644
+--- a/ovsdb/trigger.c
++++ b/ovsdb/trigger.c
+@@ -141,7 +141,7 @@ ovsdb_trigger_run(struct ovsdb *db, long long int now)
+     struct ovsdb_trigger *t, *next;
+ 
+     bool run_triggers = db->run_triggers;
+-    db->run_triggers = false;
++    db->run_triggers_now = db->run_triggers = false;
+ 
+     bool disconnect_all = false;
+ 
+@@ -160,7 +160,7 @@ ovsdb_trigger_run(struct ovsdb *db, long long int now)
+ void
+ ovsdb_trigger_wait(struct ovsdb *db, long long int now)
+ {
+-    if (db->run_triggers) {
++    if (db->run_triggers_now) {
+         poll_immediate_wake();
+     } else {
+         long long int deadline = LLONG_MAX;
+@@ -319,9 +319,16 @@ ovsdb_trigger_try(struct ovsdb_trigger *t, long long int now)
+             if (!strcmp(ovsdb_error_get_tag(error), "cluster error")) {
+                 /* Temporary error.  Transition back to "initialized" state to
+                  * try again. */
++                char *err_s = ovsdb_error_to_string(error);
++                VLOG_DBG("cluster error %s", err_s);
++
+                 jsonrpc_msg_destroy(t->reply);
+                 t->reply = NULL;
+                 t->db->run_triggers = true;
++                if (!strstr(err_s, "not leader")) {
++                    t->db->run_triggers_now = true;
++                }
++                free(err_s);
+                 ovsdb_error_destroy(error);
+             } else {
+                 /* Permanent error.  Transition to "completed" state to report
+-- 
+2.25.1
+
+
+From cc3d02699203e2fe9d9fd384d09e268ba614828d Mon Sep 17 00:00:00 2001
+From: Han Zhou <hzhou@ovn.org>
+Date: Fri, 28 Feb 2020 18:07:10 -0800
+Subject: [PATCH 07/15] raft: Fix next_index in install_snapshot reply
+ handling.
+
+[ upstream commit 877618fc833273d1e29e012b5e925d51cba80ff5 ]
+
+When a leader handles install_snapshot reply, the next_index for
+the follower should be log_start instead of log_end, because there
+can be new entries added in leader's log after initiating the
+install_snapshot procedure.  Also, it should send all the accumulated
+entries to follower in the following append-request message, instead
+of sending 0 entries, to speed up the converge.
+
+Without this fix, there is no functional problem, but it takes
+uncessary extra rounds of append-requests responsed with "inconsistency"
+by follower, although finally will be converged.
+
+Signed-off-by: Han Zhou <hzhou@ovn.org>
+Signed-off-by: Ben Pfaff <blp@ovn.org>
+
+Resolves: #1836305
+Signed-off-by: Dumitru Ceara <dceara@redhat.com>
+---
+ ovsdb/raft.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/ovsdb/raft.c b/ovsdb/raft.c
+index 6cd7b0041a..fa04d8c80b 100644
+--- a/ovsdb/raft.c
++++ b/ovsdb/raft.c
+@@ -3998,8 +3998,9 @@ raft_handle_install_snapshot_reply(
+     VLOG_INFO_RL(&rl, "cluster "CID_FMT": installed snapshot on server %s "
+                  " up to %"PRIu64":%"PRIu64, CID_ARGS(&raft->cid),
+                  s->nickname, rpy->last_term, rpy->last_index);
+-    s->next_index = raft->log_end;
+-    raft_send_append_request(raft, s, 0, "snapshot installed");
++    s->next_index = raft->log_start;
++    raft_send_append_request(raft, s, raft->log_end - s->next_index,
++                             "snapshot installed");
+ }
+ 
+ /* Returns true if 'raft' has grown enough since the last snapshot that
+-- 
+2.25.1
+
+
+From 9c76350e271546eedfeb18720975e35b4e36e1f1 Mon Sep 17 00:00:00 2001
+From: Han Zhou <hzhou@ovn.org>
+Date: Thu, 5 Mar 2020 23:48:45 -0800
+Subject: [PATCH 08/15] raft: Fix the problem of stuck in candidate role
+ forever.
+
+[ upstream commit 25a7e5547f1e107db0f032ad269f447c57401531 ]
+
+Sometimes a server can stay in candidate role forever, even if the server
+already see the new leader and handles append-requests normally. However,
+because of the wrong role, it appears as disconnected from cluster and
+so the clients are disconnected.
+
+This problem happens when 2 servers become candidates in the same
+term, and one of them is elected as leader in that term. It can be
+reproduced by the test cases added in this patch.
+
+The root cause is that the current implementation only changes role to
+follower when a bigger term is observed (in raft_receive_term__()).
+According to the RAFT paper, if another candidate becomes leader with
+the same term, the candidate should change to follower.
+
+This patch fixes it by changing the role to follower when leader
+is being updated in raft_update_leader().
+
+Signed-off-by: Han Zhou <hzhou@ovn.org>
+Signed-off-by: Ben Pfaff <blp@ovn.org>
+
+Resolves: #1836305
+Signed-off-by: Dumitru Ceara <dceara@redhat.com>
+---
+ ovsdb/raft.c           | 19 +++++++++++++--
+ tests/ovsdb-cluster.at | 55 ++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 72 insertions(+), 2 deletions(-)
+
+diff --git a/ovsdb/raft.c b/ovsdb/raft.c
+index fa04d8c80b..6452182ba6 100644
+--- a/ovsdb/raft.c
++++ b/ovsdb/raft.c
+@@ -73,7 +73,8 @@ enum raft_failure_test {
+     FT_CRASH_BEFORE_SEND_EXEC_REQ,
+     FT_CRASH_AFTER_SEND_EXEC_REQ,
+     FT_CRASH_AFTER_RECV_APPEND_REQ_UPDATE,
+-    FT_DELAY_ELECTION
++    FT_DELAY_ELECTION,
++    FT_DONT_SEND_VOTE_REQUEST
+ };
+ static enum raft_failure_test failure_test;
+ 
+@@ -1647,6 +1648,7 @@ raft_start_election(struct raft *raft, bool leadership_transfer)
+     }
+ 
+     ovs_assert(raft->role != RAFT_LEADER);
++
+     raft->role = RAFT_CANDIDATE;
+     /* If there was no leader elected since last election, we know we are
+      * retrying now. */
+@@ -1690,7 +1692,9 @@ raft_start_election(struct raft *raft, bool leadership_transfer)
+                 .leadership_transfer = leadership_transfer,
+             },
+         };
+-        raft_send(raft, &rq);
++        if (failure_test != FT_DONT_SEND_VOTE_REQUEST) {
++            raft_send(raft, &rq);
++        }
+     }
+ 
+     /* Vote for ourselves. */
+@@ -2966,6 +2970,15 @@ raft_update_leader(struct raft *raft, const struct uuid *sid)
+         };
+         ignore(ovsdb_log_write_and_free(raft->log, raft_record_to_json(&r)));
+     }
++    if (raft->role == RAFT_CANDIDATE) {
++        /* Section 3.4: While waiting for votes, a candidate may
++         * receive an AppendEntries RPC from another server claiming to
++         * be leader. If the leader’s term (included in its RPC) is at
++         * least as large as the candidate’s current term, then the
++         * candidate recognizes the leader as legitimate and returns to
++         * follower state. */
++        raft->role = RAFT_FOLLOWER;
++    }
+     return true;
+ }
+ 
+@@ -4674,6 +4687,8 @@ raft_unixctl_failure_test(struct unixctl_conn *conn OVS_UNUSED,
+                 raft_reset_election_timer(raft);
+             }
+         }
++    } else if (!strcmp(test, "dont-send-vote-request")) {
++        failure_test = FT_DONT_SEND_VOTE_REQUEST;
+     } else if (!strcmp(test, "clear")) {
+         failure_test = FT_NO_TEST;
+         unixctl_command_reply(conn, "test dismissed");
+diff --git a/tests/ovsdb-cluster.at b/tests/ovsdb-cluster.at
+index 0aa4564480..9714545151 100644
+--- a/tests/ovsdb-cluster.at
++++ b/tests/ovsdb-cluster.at
+@@ -527,6 +527,61 @@ AT_KEYWORDS([ovsdb server negative unix cluster pending-txn])
+ ovsdb_cluster_failure_test 2 2 3 crash-after-receiving-append-request-update
+ AT_CLEANUP
+ 
++
++AT_SETUP([OVSDB cluster - competing candidates])
++AT_KEYWORDS([ovsdb server negative unix cluster competing-candidates])
++
++n=3
++schema_name=`ovsdb-tool schema-name $abs_srcdir/idltest.ovsschema`
++ordinal_schema > schema
++AT_CHECK([ovsdb-tool '-vPATTERN:console:%c|%p|%m' create-cluster s1.db $abs_srcdir/idltest.ovsschema unix:s1.raft], [0], [], [stderr])
++cid=`ovsdb-tool db-cid s1.db`
++schema_name=`ovsdb-tool schema-name $abs_srcdir/idltest.ovsschema`
++for i in `seq 2 $n`; do
++    AT_CHECK([ovsdb-tool join-cluster s$i.db $schema_name unix:s$i.raft unix:s1.raft])
++done
++
++on_exit 'kill `cat *.pid`'
++for i in `seq $n`; do
++    AT_CHECK([ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i --remote=punix:s$i.ovsdb s$i.db])
++done
++for i in `seq $n`; do
++    AT_CHECK([ovsdb_client_wait unix:s$i.ovsdb $schema_name connected])
++done
++
++# We need to simulate the situation when 2 candidates starts election with same
++# term.
++#
++# Before triggering leader election, tell follower s2 don't send vote request (simulating
++# vote-request lost or not handled in time), and tell follower s3 to delay
++# election timer to make sure s3 doesn't send vote-request before s2 enters
++# term 2.
++AT_CHECK([ovs-appctl -t "`pwd`"/s2 cluster/failure-test dont-send-vote-request], [0], [ignore])
++AT_CHECK([ovs-appctl -t "`pwd`"/s3 cluster/failure-test delay-election], [0], [ignore])
++
++# Restart leader, which will become follower, and both old followers will start
++# election as candidate. The new follower (old leader) will vote one of them,
++# and the other candidate should step back as follower as again.
++kill -9 `cat s1.pid`
++AT_CHECK([ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s1.log --pidfile=s1.pid --unixctl=s1 --remote=punix:s1.ovsdb s1.db])
++
++# Tell s1 to delay election timer so that it won't start election before s3
++# becomes candidate.
++AT_CHECK([ovs-appctl -t "`pwd`"/s1 cluster/failure-test delay-election], [0], [ignore])
++
++OVS_WAIT_UNTIL([ovs-appctl -t "`pwd`"/s1 cluster/status $schema_name | grep "Term: 2"])
++
++for i in `seq $n`; do
++    OVS_WAIT_WHILE([ovs-appctl -t "`pwd`"/s$i cluster/status $schema_name | grep "candidate"])
++    AT_CHECK([ovsdb_client_wait unix:s$i.ovsdb $schema_name connected])
++done
++
++for i in `seq $n`; do
++    OVS_APP_EXIT_AND_WAIT_BY_TARGET([`pwd`/s$i], [s$i.pid])
++done
++
++AT_CLEANUP
++
+ 
+ AT_BANNER([OVSDB - cluster tests])
+ 
+-- 
+2.25.1
+
+
+From 5c38ccd52fb3925e82eda20f1897ec02abb390d9 Mon Sep 17 00:00:00 2001
+From: Ilya Maximets <i.maximets@ovn.org>
+Date: Mon, 4 May 2020 21:55:41 +0200
+Subject: [PATCH 09/15] raft: Fix leak of the incomplete command.
+
+[ upstream commit 168beb87ca63056e8896b09a60031565b7b60728 ]
+
+Function raft_command_initiate() returns correctly referenced command
+instance.  'n_ref' equals 1 for complete commands and 2 for incomplete
+commands because one more reference is in raft->commands list.
+raft_handle_execute_command_request__() leaks the reference by not
+returning pointer anywhere and not unreferencing incomplete commands.
+
+ 792 bytes in 11 blocks are definitely lost in loss record 258 of 262
+    at 0x483BB1A: calloc (vg_replace_malloc.c:762)
+    by 0x44BA32: xcalloc (util.c:121)
+    by 0x422E5F: raft_command_create_incomplete (raft.c:2038)
+    by 0x422E5F: raft_command_initiate (raft.c:2061)
+    by 0x428651: raft_handle_execute_command_request__ (raft.c:4161)
+    by 0x428651: raft_handle_execute_command_request (raft.c:4177)
+    by 0x428651: raft_handle_rpc (raft.c:4230)
+    by 0x428651: raft_conn_run (raft.c:1445)
+    by 0x428DEA: raft_run (raft.c:1803)
+    by 0x407392: main_loop (ovsdb-server.c:226)
+    by 0x407392: main (ovsdb-server.c:469)
+
+Fixes: 1b1d2e6daa56 ("ovsdb: Introduce experimental support for clustered databases.")
+Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
+Acked-by: Han Zhou <hzhou@ovn.org>
+Signed-off-by: William Tu <u9012063@gmail.com>
+
+Resolves: #1836307
+Signed-off-by: Dumitru Ceara <dceara@redhat.com>
+---
+ ovsdb/raft.c | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/ovsdb/raft.c b/ovsdb/raft.c
+index 6452182ba6..1505814138 100644
+--- a/ovsdb/raft.c
++++ b/ovsdb/raft.c
+@@ -4163,9 +4163,7 @@ raft_handle_execute_command_request__(
+     cmd->sid = rq->common.sid;
+ 
+     enum raft_command_status status = cmd->status;
+-    if (status != RAFT_CMD_INCOMPLETE) {
+-        raft_command_unref(cmd);
+-    }
++    raft_command_unref(cmd);
+     return status;
+ }
+ 
+-- 
+2.25.1
+
+
+From 3d9b529afb098531190d57d6f35d1622bb4093cd Mon Sep 17 00:00:00 2001
+From: Zhen Wang <zhewang@nvidia.com>
+Date: Mon, 30 Mar 2020 17:21:04 -0700
+Subject: [PATCH 10/15] raft: Disable RAFT jsonrpc inactivity probe.
+
+[ upstream commit 1600e0040caded7eaa9b1f41926f9619d8e0ec8d ]
+
+With the scale test of 640 nodes k8s cluster, raft DB nodes' jsonrpc
+session got closed due to the timeout of default 5 seconds probe.
+It will cause disturbance of the raft cluster. Since we already have
+the heartbeat for RAFT, just disable the probe between the servers
+to avoid the unnecessary jsonrpc inactivity probe.
+
+Acked-by: Han Zhou <hzhou@ovn.org>
+Signed-off-by: Zhen Wang <zhewang@nvidia.com>
+Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
+
+Resolves: #1836308
+Signed-off-by: Dumitru Ceara <dceara@redhat.com>
+---
+ ovsdb/raft.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/ovsdb/raft.c b/ovsdb/raft.c
+index 1505814138..395cc56113 100644
+--- a/ovsdb/raft.c
++++ b/ovsdb/raft.c
+@@ -938,6 +938,7 @@ raft_add_conn(struct raft *raft, struct jsonrpc_session *js,
+                                               &conn->sid);
+     conn->incoming = incoming;
+     conn->js_seqno = jsonrpc_session_get_seqno(conn->js);
++    jsonrpc_session_set_probe_interval(js, 0);
+ }
+ 
+ /* Starts the local server in an existing Raft cluster, using the local copy of
+-- 
+2.25.1
+
+
+From 8b155475749cdb7a1817810d447e4cf6598cb6fa Mon Sep 17 00:00:00 2001
+From: Aaron Conole <aconole@redhat.com>
+Date: Fri, 15 May 2020 16:36:18 -0400
+Subject: [PATCH 11/15] netdev-linux: Update LAG in all cases.
+
+In some cases, when processing a netlink change event, it's possible for
+an alternate part of OvS (like the IPv6 endpoint processing) to hold an
+active netdev interface.  This creates a race-condition, where sometimes
+the OvS change processing will take the normal path.  This doesn't work
+because the netdev device object won't actually be enslaved to the
+ovs-system (for instance, a linux bond) and ingress qdisc entries will
+be missing.
+
+To address this, we update the LAG information in ALL cases where
+LAG information could come in.
+
+Fixes: d22f8927c3c9 ("netdev-linux: monitor and offload LAG slaves to TC")
+Cc: Marcelo Leitner <mleitner@redhat.com>
+Cc: John Hurley <john.hurley@netronome.com>
+Acked-by: Roi Dayan <roid@mellanox.com>
+Signed-off-by: Aaron Conole <aconole@redhat.com>
+Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
+---
+ lib/netdev-linux.c | 11 +++++------
+ 1 file changed, 5 insertions(+), 6 deletions(-)
+
+diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c
+index c6f3d27409..2bf8d4c477 100644
+--- a/lib/netdev-linux.c
++++ b/lib/netdev-linux.c
+@@ -659,10 +659,6 @@ netdev_linux_update_lag(struct rtnetlink_change *change)
+ {
+     struct linux_lag_slave *lag;
+ 
+-    if (!rtnetlink_type_is_rtnlgrp_link(change->nlmsg_type)) {
+-        return;
+-    }
+-
+     if (change->slave && netdev_linux_kind_is_lag(change->slave)) {
+         lag = shash_find_data(&lag_shash, change->ifname);
+ 
+@@ -760,8 +756,11 @@ netdev_linux_run(const struct netdev_class *netdev_class OVS_UNUSED)
+                     netdev_linux_update(netdev, nsid, &change);
+                     ovs_mutex_unlock(&netdev->mutex);
+                 }
+-                else if (!netdev_ && change.ifname) {
+-                    /* Netdev is not present in OvS but its master could be. */
++
++                if (change.ifname &&
++                    rtnetlink_type_is_rtnlgrp_link(change.nlmsg_type)) {
++
++                    /* Need to try updating the LAG information. */
+                     ovs_mutex_lock(&lag_mutex);
+                     netdev_linux_update_lag(&change);
+                     ovs_mutex_unlock(&lag_mutex);
+-- 
+2.25.1
+
+
+From d14e39f81bec29064a58df0177ce457765305f8b Mon Sep 17 00:00:00 2001
+From: Aaron Conole <aconole@redhat.com>
+Date: Fri, 15 May 2020 16:36:19 -0400
+Subject: [PATCH 12/15] netdev-offload-tc: Re-fetch block ID after probing.
+
+It's possible that block_id could changes after the probe for block
+support.  Therefore, fetch the block_id again after the probe.
+
+Fixes: edc2055a2bf7 ("netdev-offload-tc: Flush rules on ingress block when init tc flow api")
+Cc: Dmytro Linkin <dmitrolin@mellanox.com>
+Acked-by: Roi Dayan <roid@mellanox.com>
+Co-authored-by: Marcelo Leitner <mleitner@redhat.com>
+Signed-off-by: Marcelo Leitner <mleitner@redhat.com>
+Signed-off-by: Aaron Conole <aconole@redhat.com>
+Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
+---
+ lib/netdev-offload-tc.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/lib/netdev-offload-tc.c b/lib/netdev-offload-tc.c
+index 550e440b3a..f577311aec 100644
+--- a/lib/netdev-offload-tc.c
++++ b/lib/netdev-offload-tc.c
+@@ -1922,6 +1922,8 @@ netdev_tc_init_flow_api(struct netdev *netdev)
+ 
+     if (ovsthread_once_start(&block_once)) {
+         probe_tc_block_support(ifindex);
++        /* Need to re-fetch block id as it depends on feature availability. */
++        block_id = get_block_id_from_netdev(netdev);
+         ovsthread_once_done(&block_once);
+     }
+ 
+-- 
+2.25.1
+
+
+From fb32a78921e50b1ffa0c52f873167f68622e8723 Mon Sep 17 00:00:00 2001
+From: Ilya Maximets <i.maximets@ovn.org>
+Date: Fri, 22 May 2020 18:31:19 +0200
+Subject: [PATCH 13/15] ovsdb: Add raft memory usage to memory report.
+
+[ upstream commit 3423cd97f88fe6a8de8b649d79fe6ac83bce94d1 ]
+
+Memory reports could be found in logs or by calling 'memory/show'
+appctl command.  For ovsdb-server it includes information about db
+cells, monitor connections with their backlog size, etc.  But it
+doesn't contain any information about memory consumed by raft.
+Backlogs of raft connections could be insanely large because of
+snapshot installation requests that simply contains the whole database.
+In not that healthy clusters where one of ovsdb servers is not able to
+timely handle all the incoming raft traffic, backlog on a sender's side
+could cause significant memory consumption issues.
+
+Adding new 'raft-connections' and 'raft-backlog' counters to the
+memory report to better track such conditions.
+
+Acked-by: Han Zhou <hzhou@ovn.org>
+Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
+
+Related: #1834838
+Signed-off-by: Ilya Maximets <i.maximets@redhat.com>
+---
+ ovsdb/ovsdb.c   |  4 ++++
+ ovsdb/raft.c    | 16 ++++++++++++++++
+ ovsdb/raft.h    |  2 ++
+ ovsdb/storage.c | 10 ++++++++++
+ ovsdb/storage.h |  3 +++
+ 5 files changed, 35 insertions(+)
+
+diff --git a/ovsdb/ovsdb.c b/ovsdb/ovsdb.c
+index 7e683e6815..2da117cb36 100644
+--- a/ovsdb/ovsdb.c
++++ b/ovsdb/ovsdb.c
+@@ -502,6 +502,10 @@ ovsdb_get_memory_usage(const struct ovsdb *db, struct simap *usage)
+     }
+ 
+     simap_increase(usage, "cells", cells);
++
++    if (db->storage) {
++        ovsdb_storage_get_memory_usage(db->storage, usage);
++    }
+ }
+ 
+ struct ovsdb_table *
+diff --git a/ovsdb/raft.c b/ovsdb/raft.c
+index 395cc56113..6ca63b4352 100644
+--- a/ovsdb/raft.c
++++ b/ovsdb/raft.c
+@@ -36,6 +36,7 @@
+ #include "ovsdb/log.h"
+ #include "raft-rpc.h"
+ #include "random.h"
++#include "simap.h"
+ #include "socket-util.h"
+ #include "stream.h"
+ #include "timeval.h"
+@@ -1014,6 +1015,21 @@ raft_get_sid(const struct raft *raft)
+     return &raft->sid;
+ }
+ 
++/* Adds memory consumption info to 'usage' for later use by memory_report(). */
++void
++raft_get_memory_usage(const struct raft *raft, struct simap *usage)
++{
++    struct raft_conn *conn;
++    int cnt = 0;
++
++    LIST_FOR_EACH (conn, list_node, &raft->conns) {
++        simap_increase(usage, "raft-backlog",
++                       jsonrpc_session_get_backlog(conn->js));
++        cnt++;
++    }
++    simap_increase(usage, "raft-connections", cnt);
++}
++
+ /* Returns true if 'raft' has completed joining its cluster, has not left or
+  * initiated leaving the cluster, does not have failed disk storage, and is
+  * apparently connected to the leader in a healthy way (or is itself the
+diff --git a/ovsdb/raft.h b/ovsdb/raft.h
+index 3d448995af..99d5307e54 100644
+--- a/ovsdb/raft.h
++++ b/ovsdb/raft.h
+@@ -67,6 +67,7 @@
+ struct json;
+ struct ovsdb_log;
+ struct raft;
++struct simap;
+ struct sset;
+ 
+ #define RAFT_MAGIC "CLUSTER"
+@@ -113,6 +114,7 @@ const struct uuid *raft_get_cid(const struct raft *);
+ const struct uuid *raft_get_sid(const struct raft *);
+ bool raft_is_connected(const struct raft *);
+ bool raft_is_leader(const struct raft *);
++void raft_get_memory_usage(const struct raft *, struct simap *usage);
+ 
+ /* Joining a cluster. */
+ bool raft_is_joining(const struct raft *);
+diff --git a/ovsdb/storage.c b/ovsdb/storage.c
+index e26252b066..7b4ad16f60 100644
+--- a/ovsdb/storage.c
++++ b/ovsdb/storage.c
+@@ -26,6 +26,7 @@
+ #include "ovsdb.h"
+ #include "raft.h"
+ #include "random.h"
++#include "simap.h"
+ #include "timeval.h"
+ #include "util.h"
+ 
+@@ -188,6 +189,15 @@ ovsdb_storage_get_applied_index(const struct ovsdb_storage *storage)
+     return storage->raft ? raft_get_applied_index(storage->raft) : 0;
+ }
+ 
++void
++ovsdb_storage_get_memory_usage(const struct ovsdb_storage *storage,
++                               struct simap *usage)
++{
++    if (storage->raft) {
++        raft_get_memory_usage(storage->raft, usage);
++    }
++}
++
+ void
+ ovsdb_storage_run(struct ovsdb_storage *storage)
+ {
+diff --git a/ovsdb/storage.h b/ovsdb/storage.h
+index 8a9bbab709..a223968912 100644
+--- a/ovsdb/storage.h
++++ b/ovsdb/storage.h
+@@ -23,6 +23,7 @@
+ struct json;
+ struct ovsdb_schema;
+ struct ovsdb_storage;
++struct simap;
+ struct uuid;
+ 
+ struct ovsdb_error *ovsdb_storage_open(const char *filename, bool rw,
+@@ -39,6 +40,8 @@ bool ovsdb_storage_is_leader(const struct ovsdb_storage *);
+ const struct uuid *ovsdb_storage_get_cid(const struct ovsdb_storage *);
+ const struct uuid *ovsdb_storage_get_sid(const struct ovsdb_storage *);
+ uint64_t ovsdb_storage_get_applied_index(const struct ovsdb_storage *);
++void ovsdb_storage_get_memory_usage(const struct ovsdb_storage *,
++                                    struct simap *usage);
+ 
+ void ovsdb_storage_run(struct ovsdb_storage *);
+ void ovsdb_storage_wait(struct ovsdb_storage *);
+-- 
+2.25.1
+
+
+From 92a1e56c8a37927441fb1742e6054a9118654ef0 Mon Sep 17 00:00:00 2001
+From: Ilya Maximets <i.maximets@ovn.org>
+Date: Thu, 14 May 2020 22:10:45 +0200
+Subject: [PATCH 14/15] ovsdb-server: Fix schema leak while reading db.
+
+[ upstream commit 16e3a80cf646f6c53d22ef98599d5aecb8310414 ]
+
+parse_txn() function doesn't always take ownership of the 'schema'
+passed.  So, if the schema of the clustered db has same version as the
+one that already in use, parse_txn() will not use it, resulting with a
+memory leak:
+
+ 7,827 (56 direct, 7,771 indirect) bytes in 1 blocks are definitely lost
+    at 0x483BB1A: calloc (vg_replace_malloc.c:762)
+    by 0x44AD02: xcalloc (util.c:121)
+    by 0x40E70E: ovsdb_schema_create (ovsdb.c:41)
+    by 0x40EA6D: ovsdb_schema_from_json (ovsdb.c:217)
+    by 0x415EDD: ovsdb_storage_read (storage.c:280)
+    by 0x408968: read_db (ovsdb-server.c:607)
+    by 0x40733D: main_loop (ovsdb-server.c:227)
+    by 0x40733D: main (ovsdb-server.c:469)
+
+While we could put ovsdb_schema_destroy() in a few places inside
+'parse_txn()', from the users' point of view it seems better to have a
+constant argument and just clone the 'schema' if needed.  The caller
+will be responsible for destroying the 'schema' it owns.
+
+Fixes: 1b1d2e6daa56 ("ovsdb: Introduce experimental support for clustered databases.")
+Acked-by: Han Zhou <hzhou@ovn.org>
+Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
+
+Related: #1834838
+Signed-off-by: Ilya Maximets <i.maximets@redhat.com>
+---
+ ovsdb/ovsdb-server.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/ovsdb/ovsdb-server.c b/ovsdb/ovsdb-server.c
+index d416f1b606..ef4e996df2 100644
+--- a/ovsdb/ovsdb-server.c
++++ b/ovsdb/ovsdb-server.c
+@@ -540,7 +540,7 @@ close_db(struct server_config *config, struct db *db, char *comment)
+ 
+ static struct ovsdb_error * OVS_WARN_UNUSED_RESULT
+ parse_txn(struct server_config *config, struct db *db,
+-          struct ovsdb_schema *schema, const struct json *txn_json,
++          const struct ovsdb_schema *schema, const struct json *txn_json,
+           const struct uuid *txnid)
+ {
+     if (schema && (!db->db->schema || strcmp(schema->version,
+@@ -565,7 +565,7 @@ parse_txn(struct server_config *config, struct db *db,
+              ? xasprintf("database %s schema changed", db->db->name)
+              : xasprintf("database %s connected to storage", db->db->name)));
+ 
+-        ovsdb_replace(db->db, ovsdb_create(schema, NULL));
++        ovsdb_replace(db->db, ovsdb_create(ovsdb_schema_clone(schema), NULL));
+ 
+         /* Force update to schema in _Server database. */
+         db->row_uuid = UUID_ZERO;
+@@ -614,6 +614,7 @@ read_db(struct server_config *config, struct db *db)
+         } else {
+             error = parse_txn(config, db, schema, txn_json, &txnid);
+             json_destroy(txn_json);
++            ovsdb_schema_destroy(schema);
+             if (error) {
+                 break;
+             }
+-- 
+2.25.1
+
+
+From 3168eba559cbce28937be4e785c3337030694455 Mon Sep 17 00:00:00 2001
+From: Ilya Maximets <i.maximets@ovn.org>
+Date: Fri, 22 May 2020 22:36:27 +0200
+Subject: [PATCH 15/15] raft: Avoid sending equal snapshots.
+
+[ upstream commit 8c2c503bdb0da1ce6044a53d462f905fd4f8acf5 ]
+
+Snapshots are huge.  In some cases we could receive several outdated
+append replies from the remote server.  This could happen in high
+scale cases if the remote server is overloaded and not able to process
+all the raft requests in time.  As an action to each outdated append
+reply we're sending full database snapshot.  While remote server is
+already overloaded those snapshots will stuck in jsonrpc backlog for
+a long time making it grow up to few GB.  Since remote server wasn't
+able to timely process incoming messages it will likely not able to
+process snapshots leading to the same situation with low chances to
+recover.  Remote server will likely stuck in 'candidate' state, other
+servers will grow their memory consumption due to growing jsonrpc
+backlogs:
+
+jsonrpc|INFO|excessive sending backlog, jsonrpc: ssl:192.16.0.3:6644,
+             num of msgs: 3795, backlog: 8838994624.
+
+This patch is trying to avoid that situation by avoiding sending of
+equal snapshot install requests.  This helps maintain reasonable memory
+consumption and allows the cluster to recover on a larger scale.
+
+Acked-by: Han Zhou <hzhou@ovn.org>
+Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
+
+Related: #1834838
+Signed-off-by: Ilya Maximets <i.maximets@redhat.com>
+---
+ ovsdb/raft-private.c |  1 +
+ ovsdb/raft-private.h |  4 ++++
+ ovsdb/raft.c         | 39 ++++++++++++++++++++++++++++++++++++++-
+ 3 files changed, 43 insertions(+), 1 deletion(-)
+
+diff --git a/ovsdb/raft-private.c b/ovsdb/raft-private.c
+index 26d39a087f..9468fdaf4a 100644
+--- a/ovsdb/raft-private.c
++++ b/ovsdb/raft-private.c
+@@ -137,6 +137,7 @@ raft_server_destroy(struct raft_server *s)
+     if (s) {
+         free(s->address);
+         free(s->nickname);
++        free(s->last_install_snapshot_request);
+         free(s);
+     }
+ }
+diff --git a/ovsdb/raft-private.h b/ovsdb/raft-private.h
+index ac8656d42f..1f366b4ab3 100644
+--- a/ovsdb/raft-private.h
++++ b/ovsdb/raft-private.h
+@@ -27,6 +27,7 @@
+ 
+ struct ds;
+ struct ovsdb_parser;
++struct raft_install_snapshot_request;
+ 
+ /* Formatting server IDs and cluster IDs for use in human-readable logs.  Do
+  * not use these in cases where the whole server or cluster ID is needed; use
+@@ -83,6 +84,9 @@ struct raft_server {
+     bool replied;            /* Reply to append_request was received from this
+                                 node during current election_timeout interval.
+                                 */
++    /* Copy of the last install_snapshot_request sent to this server. */
++    struct raft_install_snapshot_request *last_install_snapshot_request;
++
+     /* For use in adding and removing servers: */
+     struct uuid requester_sid;  /* Nonzero if requested via RPC. */
+     struct unixctl_conn *requester_conn; /* Only if requested via unixctl. */
+diff --git a/ovsdb/raft.c b/ovsdb/raft.c
+index 6ca63b4352..8df386fa19 100644
+--- a/ovsdb/raft.c
++++ b/ovsdb/raft.c
+@@ -1421,8 +1421,20 @@ raft_conn_run(struct raft *raft, struct raft_conn *conn)
+     jsonrpc_session_run(conn->js);
+ 
+     unsigned int new_seqno = jsonrpc_session_get_seqno(conn->js);
+-    bool just_connected = (new_seqno != conn->js_seqno
++    bool reconnected = new_seqno != conn->js_seqno;
++    bool just_connected = (reconnected
+                            && jsonrpc_session_is_connected(conn->js));
++
++    if (reconnected) {
++        /* Clear 'last_install_snapshot_request' since it might not reach the
++         * destination or server was restarted. */
++        struct raft_server *server = raft_find_server(raft, &conn->sid);
++        if (server) {
++            free(server->last_install_snapshot_request);
++            server->last_install_snapshot_request = NULL;
++        }
++    }
++
+     conn->js_seqno = new_seqno;
+     if (just_connected) {
+         if (raft->joining) {
+@@ -3296,6 +3308,31 @@ raft_send_install_snapshot_request(struct raft *raft,
+             .election_timer = raft->election_timer, /* use latest value */
+         }
+     };
++
++    if (s->last_install_snapshot_request) {
++        struct raft_install_snapshot_request *old, *new;
++
++        old = s->last_install_snapshot_request;
++        new = &rpc.install_snapshot_request;
++        if (   old->term           == new->term
++            && old->last_index     == new->last_index
++            && old->last_term      == new->last_term
++            && old->last_servers   == new->last_servers
++            && old->data           == new->data
++            && old->election_timer == new->election_timer
++            && uuid_equals(&old->last_eid, &new->last_eid)) {
++            static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 5);
++
++            VLOG_WARN_RL(&rl, "not sending exact same install_snapshot_request"
++                              " to server %s again", s->nickname);
++            return;
++        }
++    }
++    free(s->last_install_snapshot_request);
++    CONST_CAST(struct raft_server *, s)->last_install_snapshot_request
++        = xmemdup(&rpc.install_snapshot_request,
++                  sizeof rpc.install_snapshot_request);
++
+     raft_send(raft, &rpc);
+ }
+ 
+-- 
+2.25.1
+
+diff --git a/dpdk/drivers/bus/pci/linux/pci_vfio.c b/dpdk/drivers/bus/pci/linux/pci_vfio.c
+index 64cd84a689..ba60e7ce99 100644
+--- a/dpdk/drivers/bus/pci/linux/pci_vfio.c
++++ b/dpdk/drivers/bus/pci/linux/pci_vfio.c
+@@ -149,6 +149,38 @@ pci_vfio_get_msix_bar(int fd, struct pci_msix_table *msix_table)
+ 	return 0;
+ }
+ 
++/* enable PCI bus memory space */
++static int
++pci_vfio_enable_bus_memory(int dev_fd)
++{
++	uint16_t cmd;
++	int ret;
++
++	ret = pread64(dev_fd, &cmd, sizeof(cmd),
++		      VFIO_GET_REGION_ADDR(VFIO_PCI_CONFIG_REGION_INDEX) +
++		      PCI_COMMAND);
++
++	if (ret != sizeof(cmd)) {
++		RTE_LOG(ERR, EAL, "Cannot read command from PCI config space!\n");
++		return -1;
++	}
++
++	if (cmd & PCI_COMMAND_MEMORY)
++		return 0;
++
++	cmd |= PCI_COMMAND_MEMORY;
++	ret = pwrite64(dev_fd, &cmd, sizeof(cmd),
++		       VFIO_GET_REGION_ADDR(VFIO_PCI_CONFIG_REGION_INDEX) +
++		       PCI_COMMAND);
++
++	if (ret != sizeof(cmd)) {
++		RTE_LOG(ERR, EAL, "Cannot write command to PCI config space!\n");
++		return -1;
++	}
++
++	return 0;
++}
++
+ /* set PCI bus mastering */
+ static int
+ pci_vfio_set_bus_master(int dev_fd, bool op)
+@@ -427,6 +459,11 @@ pci_rte_vfio_setup_device(struct rte_pci_device *dev, int vfio_dev_fd)
+ 		return -1;
+ 	}
+ 
++	if (pci_vfio_enable_bus_memory(vfio_dev_fd)) {
++		RTE_LOG(ERR, EAL, "Cannot enable bus memory!\n");
++		return -1;
++	}
++
+ 	/* set bus mastering for the device */
+ 	if (pci_vfio_set_bus_master(vfio_dev_fd, true)) {
+ 		RTE_LOG(ERR, EAL, "Cannot set up bus mastering!\n");
+diff --git a/dpdk/lib/librte_vhost/vhost_user.c b/dpdk/lib/librte_vhost/vhost_user.c
+index 40c4520c08..8954f7930e 100644
+--- a/dpdk/lib/librte_vhost/vhost_user.c
++++ b/dpdk/lib/librte_vhost/vhost_user.c
+@@ -206,7 +206,7 @@ vhost_backend_cleanup(struct virtio_net *dev)
+ 			dev->inflight_info->addr = NULL;
+ 		}
+ 
+-		if (dev->inflight_info->fd > 0) {
++		if (dev->inflight_info->fd >= 0) {
+ 			close(dev->inflight_info->fd);
+ 			dev->inflight_info->fd = -1;
+ 		}
+@@ -1408,6 +1408,7 @@ vhost_user_get_inflight_fd(struct virtio_net **pdev,
+ 				"failed to alloc dev inflight area\n");
+ 			return RTE_VHOST_MSG_RESULT_ERR;
+ 		}
++		dev->inflight_info->fd = -1;
+ 	}
+ 
+ 	num_queues = msg->payload.inflight.num_queues;
+@@ -1433,6 +1434,16 @@ vhost_user_get_inflight_fd(struct virtio_net **pdev,
+ 	}
+ 	memset(addr, 0, mmap_size);
+ 
++	if (dev->inflight_info->addr) {
++		munmap(dev->inflight_info->addr, dev->inflight_info->size);
++		dev->inflight_info->addr = NULL;
++	}
++
++	if (dev->inflight_info->fd >= 0) {
++		close(dev->inflight_info->fd);
++		dev->inflight_info->fd = -1;
++	}
++
+ 	dev->inflight_info->addr = addr;
+ 	dev->inflight_info->size = msg->payload.inflight.mmap_size = mmap_size;
+ 	dev->inflight_info->fd = msg->fds[0] = fd;
+@@ -1515,10 +1526,13 @@ vhost_user_set_inflight_fd(struct virtio_net **pdev, VhostUserMsg *msg,
+ 				"failed to alloc dev inflight area\n");
+ 			return RTE_VHOST_MSG_RESULT_ERR;
+ 		}
++		dev->inflight_info->fd = -1;
+ 	}
+ 
+-	if (dev->inflight_info->addr)
++	if (dev->inflight_info->addr) {
+ 		munmap(dev->inflight_info->addr, dev->inflight_info->size);
++		dev->inflight_info->addr = NULL;
++	}
+ 
+ 	addr = mmap(0, mmap_size, PROT_READ | PROT_WRITE, MAP_SHARED,
+ 		    fd, mmap_offset);
+@@ -1527,8 +1541,10 @@ vhost_user_set_inflight_fd(struct virtio_net **pdev, VhostUserMsg *msg,
+ 		return RTE_VHOST_MSG_RESULT_ERR;
+ 	}
+ 
+-	if (dev->inflight_info->fd)
++	if (dev->inflight_info->fd >= 0) {
+ 		close(dev->inflight_info->fd);
++		dev->inflight_info->fd = -1;
++	}
+ 
+ 	dev->inflight_info->fd = fd;
+ 	dev->inflight_info->addr = addr;
+@@ -2059,10 +2075,10 @@ vhost_user_set_log_base(struct virtio_net **pdev, struct VhostUserMsg *msg,
+ 	size = msg->payload.log.mmap_size;
+ 	off  = msg->payload.log.mmap_offset;
+ 
+-	/* Don't allow mmap_offset to point outside the mmap region */
+-	if (off > size) {
++	/* Check for mmap size and offset overflow. */
++	if (off >= -size) {
+ 		RTE_LOG(ERR, VHOST_CONFIG,
+-			"log offset %#"PRIx64" exceeds log size %#"PRIx64"\n",
++			"log offset %#"PRIx64" and log size %#"PRIx64" overflow\n",
+ 			off, size);
+ 		return RTE_VHOST_MSG_RESULT_ERR;
+ 	}
+@@ -2526,7 +2542,7 @@ static int
+ vhost_user_check_and_alloc_queue_pair(struct virtio_net *dev,
+ 			struct VhostUserMsg *msg)
+ {
+-	uint16_t vring_idx;
++	uint32_t vring_idx;
+ 
+ 	switch (msg->request.master) {
+ 	case VHOST_USER_SET_VRING_KICK:
+diff --git a/dpdk/lib/librte_vhost/virtio_net.c b/dpdk/lib/librte_vhost/virtio_net.c
+index ac2842b2d2..33f10258cf 100644
+--- a/dpdk/lib/librte_vhost/virtio_net.c
++++ b/dpdk/lib/librte_vhost/virtio_net.c
+@@ -1086,6 +1086,8 @@ virtio_dev_rx_batch_packed(struct virtio_net *dev,
+ 						  VHOST_ACCESS_RW);
+ 
+ 	vhost_for_each_try_unroll(i, 0, PACKED_BATCH_SIZE) {
++		if (unlikely(!desc_addrs[i]))
++			return -1;
+ 		if (unlikely(lens[i] != descs[avail_idx + i].len))
+ 			return -1;
+ 	}
+@@ -1841,6 +1843,8 @@ vhost_reserve_avail_batch_packed(struct virtio_net *dev,
+ 	}
+ 
+ 	vhost_for_each_try_unroll(i, 0, PACKED_BATCH_SIZE) {
++		if (unlikely(!desc_addrs[i]))
++			return -1;
+ 		if (unlikely((lens[i] != descs[avail_idx + i].len)))
+ 			return -1;
+ 	}
diff --git a/SOURCES/ppc_64-power8-linuxapp-gcc-config b/SOURCES/ppc_64-power8-linuxapp-gcc-config
new file mode 100644
index 0000000..7b21579
--- /dev/null
+++ b/SOURCES/ppc_64-power8-linuxapp-gcc-config
@@ -0,0 +1,593 @@
+# -*- cfg-sha: f7b9a8671f1828542f6b8389a63bc60574d9c9ab21d06d5e8adefbaf7c929bc3
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright (C) IBM Corporation 2014.
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2010-2016 Intel Corporation
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2010-2017 Intel Corporation
+# String that appears before the version number
+CONFIG_RTE_VER_PREFIX="DPDK"
+# Version information completed when this file is processed for a build
+CONFIG_RTE_VER_YEAR=19
+CONFIG_RTE_VER_MONTH=11
+CONFIG_RTE_VER_MINOR=1
+CONFIG_RTE_VER_SUFFIX=""
+CONFIG_RTE_VER_RELEASE=99
+ # RTE_EXEC_ENV values are the directories in mk/exec-env/
+CONFIG_RTE_EXEC_ENV="linuxapp"
+# RTE_ARCH values are architecture we compile for. directories in mk/arch/
+CONFIG_RTE_ARCH="ppc_64"
+# machine can define specific variables or action for a specific board
+# RTE_MACHINE values are architecture we compile for. directories in mk/machine/
+CONFIG_RTE_MACHINE="power8"
+# The compiler we use.
+# RTE_TOOLCHAIN values are architecture we compile for. directories in mk/toolchain/
+CONFIG_RTE_TOOLCHAIN="gcc"
+# Use intrinsics or assembly code for key routines
+CONFIG_RTE_FORCE_INTRINSICS=n
+# Machine forces strict alignment constraints.
+CONFIG_RTE_ARCH_STRICT_ALIGN=n
+# Enable link time optimization
+CONFIG_RTE_ENABLE_LTO=n
+# Compile to share library
+CONFIG_RTE_BUILD_SHARED_LIB=n
+# Use newest code breaking previous ABI
+CONFIG_RTE_NEXT_ABI=n
+# Machine's cache line size
+CONFIG_RTE_CACHE_LINE_SIZE=128
+# Memory model
+CONFIG_RTE_USE_C11_MEM_MODEL=n
+# Compile Environment Abstraction Layer
+CONFIG_RTE_LIBRTE_EAL=y
+CONFIG_RTE_MAX_LCORE=1536
+CONFIG_RTE_MAX_NUMA_NODES=32
+CONFIG_RTE_MAX_HEAPS=32
+CONFIG_RTE_MAX_MEMSEG_LISTS=64
+# each memseg list will be limited to either RTE_MAX_MEMSEG_PER_LIST pages
+# or RTE_MAX_MEM_MB_PER_LIST megabytes worth of memory, whichever is smaller
+CONFIG_RTE_MAX_MEMSEG_PER_LIST=8192
+CONFIG_RTE_MAX_MEM_MB_PER_LIST=32768
+# a "type" is a combination of page size and NUMA node. total number of memseg
+# lists per type will be limited to either RTE_MAX_MEMSEG_PER_TYPE pages (split
+# over multiple lists of RTE_MAX_MEMSEG_PER_LIST pages), or
+# RTE_MAX_MEM_MB_PER_TYPE megabytes of memory (split over multiple lists of
+# RTE_MAX_MEM_MB_PER_LIST), whichever is smaller
+CONFIG_RTE_MAX_MEMSEG_PER_TYPE=32768
+CONFIG_RTE_MAX_MEM_MB_PER_TYPE=131072
+# global maximum usable amount of VA, in megabytes
+CONFIG_RTE_MAX_MEM_MB=524288
+CONFIG_RTE_MAX_MEMZONE=2560
+CONFIG_RTE_MAX_TAILQ=32
+CONFIG_RTE_ENABLE_ASSERT=n
+CONFIG_RTE_LOG_DP_LEVEL=RTE_LOG_INFO
+CONFIG_RTE_LOG_HISTORY=256
+CONFIG_RTE_BACKTRACE=y
+CONFIG_RTE_LIBEAL_USE_HPET=n
+CONFIG_RTE_EAL_ALWAYS_PANIC_ON_ERROR=n
+CONFIG_RTE_EAL_IGB_UIO=n
+CONFIG_RTE_EAL_VFIO=y
+CONFIG_RTE_MAX_VFIO_GROUPS=64
+CONFIG_RTE_MAX_VFIO_CONTAINERS=64
+CONFIG_RTE_MALLOC_DEBUG=n
+CONFIG_RTE_EAL_NUMA_AWARE_HUGEPAGES=y
+CONFIG_RTE_USE_LIBBSD=n
+# Recognize/ignore architecture we compile for. AVX/AVX512 CPU flags for performance/power testing.
+# AVX512 is marked as experimental for now, will enable it after enough
+# field test and possible optimization.
+CONFIG_RTE_ENABLE_AVX=y
+CONFIG_RTE_ENABLE_AVX512=n
+# Use ARM LSE ATOMIC instructions
+CONFIG_RTE_ARM_FEATURE_ATOMICS=n
+# Default driver path (or "" to disable)
+CONFIG_RTE_EAL_PMD_PATH=""
+# Compile Environment Abstraction Layer to support Vmware TSC map
+CONFIG_RTE_LIBRTE_EAL_VMWARE_TSC_MAP_SUPPORT=n
+# Compile architecture we compile for. PCI library
+CONFIG_RTE_LIBRTE_PCI=y
+# Compile architecture we compile for. argument parser library
+CONFIG_RTE_LIBRTE_KVARGS=y
+# Compile generic ethernet library
+CONFIG_RTE_LIBRTE_ETHER=y
+CONFIG_RTE_LIBRTE_ETHDEV_DEBUG=n
+CONFIG_RTE_MAX_ETHPORTS=128
+CONFIG_RTE_MAX_QUEUES_PER_PORT=1024
+CONFIG_RTE_LIBRTE_IEEE1588=n
+CONFIG_RTE_ETHDEV_QUEUE_STAT_CNTRS=16
+CONFIG_RTE_ETHDEV_RXTX_CALLBACKS=y
+CONFIG_RTE_ETHDEV_PROFILE_WITH_VTUNE=n
+# Turn off Tx preparation stage
+# Warning: rte_eth_tx_prepare() can be safely disabled only if using a
+# driver which do not implement any Tx preparation.
+CONFIG_RTE_ETHDEV_TX_PREPARE_NOOP=n
+# Common libraries, before Bus/PMDs
+CONFIG_RTE_LIBRTE_COMMON_DPAAX=n
+# Compile architecture we compile for. Intel FPGA bus
+CONFIG_RTE_LIBRTE_IFPGA_BUS=n
+# Compile PCI bus driver
+CONFIG_RTE_LIBRTE_PCI_BUS=y
+# Compile architecture we compile for. vdev bus
+CONFIG_RTE_LIBRTE_VDEV_BUS=y
+# Compile ARK PMD
+CONFIG_RTE_LIBRTE_ARK_PMD=n
+CONFIG_RTE_LIBRTE_ARK_PAD_TX=y
+CONFIG_RTE_LIBRTE_ARK_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_ARK_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_ARK_DEBUG_STATS=n
+CONFIG_RTE_LIBRTE_ARK_DEBUG_TRACE=n
+# Compile Aquantia Atlantic PMD driver
+CONFIG_RTE_LIBRTE_ATLANTIC_PMD=n
+# Compile AMD PMD
+CONFIG_RTE_LIBRTE_AXGBE_PMD=n
+CONFIG_RTE_LIBRTE_AXGBE_PMD_DEBUG=n
+# Compile burst-oriented Broadcom PMD driver
+CONFIG_RTE_LIBRTE_BNX2X_PMD=n
+CONFIG_RTE_LIBRTE_BNX2X_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_BNX2X_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_BNX2X_MF_SUPPORT=n
+CONFIG_RTE_LIBRTE_BNX2X_DEBUG_PERIODIC=n
+# Compile burst-oriented Broadcom BNXT PMD driver
+CONFIG_RTE_LIBRTE_BNXT_PMD=n
+# Compile burst-oriented Chelsio Terminator (CXGBE) PMD
+CONFIG_RTE_LIBRTE_CXGBE_PMD=n
+# Compile burst-oriented NXP PFE PMD driver
+CONFIG_RTE_LIBRTE_PFE_PMD=n
+# NXP DPAA Bus
+CONFIG_RTE_LIBRTE_DPAA_BUS=n
+CONFIG_RTE_LIBRTE_DPAA_MEMPOOL=n
+CONFIG_RTE_LIBRTE_DPAA_PMD=n
+CONFIG_RTE_LIBRTE_DPAA_HWDEBUG=n
+# Compile NXP DPAA2 FSL-MC Bus
+CONFIG_RTE_LIBRTE_FSLMC_BUS=n
+# Compile Support Libraries for NXP DPAA2
+CONFIG_RTE_LIBRTE_DPAA2_MEMPOOL=n
+CONFIG_RTE_LIBRTE_DPAA2_USE_PHYS_IOVA=y
+# Compile burst-oriented NXP DPAA2 PMD driver
+CONFIG_RTE_LIBRTE_DPAA2_PMD=n
+CONFIG_RTE_LIBRTE_DPAA2_DEBUG_DRIVER=n
+# Compile NXP ENETC PMD Driver
+CONFIG_RTE_LIBRTE_ENETC_PMD=n
+# Compile burst-oriented Amazon ENA PMD driver
+CONFIG_RTE_LIBRTE_ENA_PMD=n
+CONFIG_RTE_LIBRTE_ENA_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_ENA_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_ENA_DEBUG_TX_FREE=n
+CONFIG_RTE_LIBRTE_ENA_COM_DEBUG=n
+# Compile burst-oriented Cisco ENIC PMD driver
+CONFIG_RTE_LIBRTE_ENIC_PMD=n
+# Compile burst-oriented IGB & EM PMD drivers
+CONFIG_RTE_LIBRTE_EM_PMD=n
+CONFIG_RTE_LIBRTE_IGB_PMD=n
+CONFIG_RTE_LIBRTE_E1000_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_E1000_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_E1000_DEBUG_TX_FREE=n
+CONFIG_RTE_LIBRTE_E1000_PF_DISABLE_STRIP_CRC=n
+# Compile burst-oriented HINIC PMD driver
+CONFIG_RTE_LIBRTE_HINIC_PMD=n
+# Compile burst-oriented HNS3 PMD driver
+CONFIG_RTE_LIBRTE_HNS3_PMD=n
+# Compile burst-oriented IXGBE PMD driver
+CONFIG_RTE_LIBRTE_IXGBE_PMD=n
+CONFIG_RTE_LIBRTE_IXGBE_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_IXGBE_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_IXGBE_DEBUG_TX_FREE=n
+CONFIG_RTE_LIBRTE_IXGBE_PF_DISABLE_STRIP_CRC=n
+CONFIG_RTE_IXGBE_INC_VECTOR=y
+CONFIG_RTE_LIBRTE_IXGBE_BYPASS=n
+# Compile burst-oriented I40E PMD driver
+CONFIG_RTE_LIBRTE_I40E_PMD=y
+CONFIG_RTE_LIBRTE_I40E_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_I40E_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_I40E_DEBUG_TX_FREE=n
+CONFIG_RTE_LIBRTE_I40E_RX_ALLOW_BULK_ALLOC=y
+CONFIG_RTE_LIBRTE_I40E_INC_VECTOR=y
+CONFIG_RTE_LIBRTE_I40E_16BYTE_RX_DESC=n
+CONFIG_RTE_LIBRTE_I40E_QUEUE_NUM_PER_PF=64
+CONFIG_RTE_LIBRTE_I40E_QUEUE_NUM_PER_VM=4
+# Compile burst-oriented FM10K PMD
+CONFIG_RTE_LIBRTE_FM10K_PMD=n
+CONFIG_RTE_LIBRTE_FM10K_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_FM10K_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_FM10K_DEBUG_TX_FREE=n
+CONFIG_RTE_LIBRTE_FM10K_RX_OLFLAGS_ENABLE=y
+CONFIG_RTE_LIBRTE_FM10K_INC_VECTOR=y
+# Compile burst-oriented ICE PMD driver
+CONFIG_RTE_LIBRTE_ICE_PMD=n
+CONFIG_RTE_LIBRTE_ICE_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_ICE_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_ICE_DEBUG_TX_FREE=n
+CONFIG_RTE_LIBRTE_ICE_RX_ALLOW_BULK_ALLOC=y
+CONFIG_RTE_LIBRTE_ICE_16BYTE_RX_DESC=n
+# Compile burst-oriented IAVF PMD driver
+CONFIG_RTE_LIBRTE_IAVF_PMD=n
+CONFIG_RTE_LIBRTE_IAVF_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_IAVF_DEBUG_TX_FREE=n
+CONFIG_RTE_LIBRTE_IAVF_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_IAVF_DEBUG_DUMP_DESC=n
+CONFIG_RTE_LIBRTE_IAVF_16BYTE_RX_DESC=n
+# Compile burst-oriented IPN3KE PMD driver
+CONFIG_RTE_LIBRTE_IPN3KE_PMD=n
+# Compile burst-oriented Mellanox ConnectX-3 (MLX4) PMD
+CONFIG_RTE_LIBRTE_MLX4_PMD=n
+CONFIG_RTE_LIBRTE_MLX4_DEBUG=n
+# Compile burst-oriented Mellanox ConnectX-4, ConnectX-5,
+# ConnectX-6 & BlueField (MLX5) PMD
+CONFIG_RTE_LIBRTE_MLX5_PMD=n
+CONFIG_RTE_LIBRTE_MLX5_DEBUG=n
+# Linking method for mlx4/5 dependency on ibverbs and related libraries
+# Default linking is dynamic by linker.
+# Other options are: dynamic by dlopen at run-time, or statically embedded.
+CONFIG_RTE_IBVERBS_LINK_DLOPEN=n
+CONFIG_RTE_IBVERBS_LINK_STATIC=n
+# Compile burst-oriented Netronome NFP PMD driver
+CONFIG_RTE_LIBRTE_NFP_PMD=n
+CONFIG_RTE_LIBRTE_NFP_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_NFP_DEBUG_RX=n
+# QLogic 10G/25G/40G/50G/100G PMD
+CONFIG_RTE_LIBRTE_QEDE_PMD=n
+CONFIG_RTE_LIBRTE_QEDE_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_QEDE_DEBUG_RX=n
+#Provides abs path/name of architecture we compile for. firmware file.
+#Empty string denotes driver will use default firmware
+CONFIG_RTE_LIBRTE_QEDE_FW=""
+# Compile burst-oriented Solarflare libefx-based PMD
+CONFIG_RTE_LIBRTE_SFC_EFX_PMD=n
+CONFIG_RTE_LIBRTE_SFC_EFX_DEBUG=n
+# Compile software PMD backed by SZEDATA2 device
+CONFIG_RTE_LIBRTE_PMD_SZEDATA2=n
+# Compile software PMD backed by NFB device
+CONFIG_RTE_LIBRTE_NFB_PMD=n
+# Compile burst-oriented Cavium Thunderx NICVF PMD driver
+CONFIG_RTE_LIBRTE_THUNDERX_NICVF_PMD=n
+CONFIG_RTE_LIBRTE_THUNDERX_NICVF_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_THUNDERX_NICVF_DEBUG_TX=n
+# Compile burst-oriented Cavium LiquidIO PMD driver
+CONFIG_RTE_LIBRTE_LIO_PMD=n
+CONFIG_RTE_LIBRTE_LIO_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_LIO_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_LIO_DEBUG_MBOX=n
+CONFIG_RTE_LIBRTE_LIO_DEBUG_REGS=n
+# Compile burst-oriented Cavium OCTEONTX network PMD driver
+CONFIG_RTE_LIBRTE_OCTEONTX_PMD=n
+# Compile burst-oriented Marvell OCTEON TX2 network PMD driver
+CONFIG_RTE_LIBRTE_OCTEONTX2_PMD=n
+# Compile WRS accelerated virtual port (AVP) guest PMD driver
+CONFIG_RTE_LIBRTE_AVP_PMD=n
+CONFIG_RTE_LIBRTE_AVP_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_AVP_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_AVP_DEBUG_BUFFERS=n
+# Compile burst-oriented VIRTIO PMD driver
+CONFIG_RTE_LIBRTE_VIRTIO_PMD=y
+CONFIG_RTE_LIBRTE_VIRTIO_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_VIRTIO_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_VIRTIO_DEBUG_DUMP=n
+# Compile virtio device emulation inside virtio PMD driver
+CONFIG_RTE_VIRTIO_USER=n
+# Compile burst-oriented VMXNET3 PMD driver
+CONFIG_RTE_LIBRTE_VMXNET3_PMD=n
+CONFIG_RTE_LIBRTE_VMXNET3_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_VMXNET3_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_VMXNET3_DEBUG_TX_FREE=n
+# Compile software PMD backed by AF_PACKET sockets (Linux only)
+CONFIG_RTE_LIBRTE_PMD_AF_PACKET=n
+# Compile software PMD backed by AF_XDP sockets (Linux only)
+CONFIG_RTE_LIBRTE_PMD_AF_XDP=n
+# Compile Memory Interface PMD driver (Linux only)
+CONFIG_RTE_LIBRTE_PMD_MEMIF=n
+# Compile link bonding PMD library
+CONFIG_RTE_LIBRTE_PMD_BOND=n
+CONFIG_RTE_LIBRTE_BOND_DEBUG_ALB=n
+CONFIG_RTE_LIBRTE_BOND_DEBUG_ALB_L1=n
+# Compile fail-safe PMD
+CONFIG_RTE_LIBRTE_PMD_FAILSAFE=y
+# Compile Marvell PMD driver
+CONFIG_RTE_LIBRTE_MVPP2_PMD=n
+# Compile Marvell MVNETA PMD driver
+CONFIG_RTE_LIBRTE_MVNETA_PMD=n
+# Compile support for VMBus library
+CONFIG_RTE_LIBRTE_VMBUS=n
+# Compile native PMD for Hyper-V/Azure
+CONFIG_RTE_LIBRTE_NETVSC_PMD=n
+CONFIG_RTE_LIBRTE_NETVSC_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_NETVSC_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_NETVSC_DEBUG_DUMP=n
+# Compile virtual device driver for NetVSC on Hyper-V/Azure
+CONFIG_RTE_LIBRTE_VDEV_NETVSC_PMD=n
+# Compile null PMD
+CONFIG_RTE_LIBRTE_PMD_NULL=n
+# Compile software PMD backed by PCAP files
+CONFIG_RTE_LIBRTE_PMD_PCAP=n
+# Compile example software rings based PMD
+CONFIG_RTE_LIBRTE_PMD_RING=y
+CONFIG_RTE_PMD_RING_MAX_RX_RINGS=16
+CONFIG_RTE_PMD_RING_MAX_TX_RINGS=16
+# Compile SOFTNIC PMD
+CONFIG_RTE_LIBRTE_PMD_SOFTNIC=n
+# Compile architecture we compile for. TAP PMD
+# It is enabled by default for Linux only.
+CONFIG_RTE_LIBRTE_PMD_TAP=y
+# Do prefetch of packet data within PMD driver receive function
+CONFIG_RTE_PMD_PACKET_PREFETCH=y
+# Compile generic wireless base band device library
+# EXPERIMENTAL: API may change without prior notice
+CONFIG_RTE_LIBRTE_BBDEV=n
+CONFIG_RTE_LIBRTE_BBDEV_DEBUG=n
+CONFIG_RTE_BBDEV_MAX_DEVS=128
+CONFIG_RTE_BBDEV_OFFLOAD_COST=y
+CONFIG_RTE_BBDEV_SDK_AVX2=n
+CONFIG_RTE_BBDEV_SDK_AVX512=n
+# Compile PMD for NULL bbdev device
+CONFIG_RTE_LIBRTE_PMD_BBDEV_NULL=n
+# Compile PMD for turbo software bbdev device
+CONFIG_RTE_LIBRTE_PMD_BBDEV_TURBO_SW=n
+# Compile PMD for Intel FPGA LTE FEC bbdev device
+CONFIG_RTE_LIBRTE_PMD_BBDEV_FPGA_LTE_FEC=n
+# Compile generic crypto device library
+CONFIG_RTE_LIBRTE_CRYPTODEV=n
+CONFIG_RTE_CRYPTO_MAX_DEVS=64
+# Compile PMD for ARMv8 Crypto device
+CONFIG_RTE_LIBRTE_PMD_ARMV8_CRYPTO=n
+CONFIG_RTE_LIBRTE_PMD_ARMV8_CRYPTO_DEBUG=n
+# Compile NXP CAAM JR crypto Driver
+CONFIG_RTE_LIBRTE_PMD_CAAM_JR=n
+CONFIG_RTE_LIBRTE_PMD_CAAM_JR_BE=n
+# Compile NXP DPAA2 crypto sec driver for CAAM HW
+CONFIG_RTE_LIBRTE_PMD_DPAA2_SEC=n
+# NXP DPAA caam - crypto driver
+CONFIG_RTE_LIBRTE_PMD_DPAA_SEC=n
+CONFIG_RTE_LIBRTE_DPAA_MAX_CRYPTODEV=4
+# Compile PMD for Cavium OCTEON TX crypto device
+CONFIG_RTE_LIBRTE_PMD_OCTEONTX_CRYPTO=n
+# Compile PMD for Marvell OCTEON TX2 crypto device
+CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_CRYPTO=n
+# Compile PMD for QuickAssist based devices - see docs for details
+CONFIG_RTE_LIBRTE_PMD_QAT=n
+CONFIG_RTE_LIBRTE_PMD_QAT_SYM=n
+CONFIG_RTE_LIBRTE_PMD_QAT_ASYM=n
+# Max. number of QuickAssist devices, which can be detected and attached
+CONFIG_RTE_PMD_QAT_MAX_PCI_DEVICES=48
+CONFIG_RTE_PMD_QAT_COMP_IM_BUFFER_SIZE=65536
+# Compile PMD for virtio crypto devices
+CONFIG_RTE_LIBRTE_PMD_VIRTIO_CRYPTO=n
+# Number of maximum virtio crypto devices
+CONFIG_RTE_MAX_VIRTIO_CRYPTO=32
+# Compile PMD for AESNI backed device
+CONFIG_RTE_LIBRTE_PMD_AESNI_MB=n
+# Compile PMD for Software backed device
+CONFIG_RTE_LIBRTE_PMD_OPENSSL=n
+# Compile PMD for AESNI GCM device
+CONFIG_RTE_LIBRTE_PMD_AESNI_GCM=n
+# Compile PMD for SNOW 3G device
+CONFIG_RTE_LIBRTE_PMD_SNOW3G=n
+CONFIG_RTE_LIBRTE_PMD_SNOW3G_DEBUG=n
+# Compile PMD for KASUMI device
+CONFIG_RTE_LIBRTE_PMD_KASUMI=n
+# Compile PMD for ZUC device
+CONFIG_RTE_LIBRTE_PMD_ZUC=n
+# Compile PMD for Crypto Scheduler device
+CONFIG_RTE_LIBRTE_PMD_CRYPTO_SCHEDULER=n
+# Compile PMD for NULL Crypto device
+CONFIG_RTE_LIBRTE_PMD_NULL_CRYPTO=n
+# Compile PMD for AMD CCP crypto device
+CONFIG_RTE_LIBRTE_PMD_CCP=n
+# Compile PMD for Marvell Crypto device
+CONFIG_RTE_LIBRTE_PMD_MVSAM_CRYPTO=n
+# Compile PMD for NITROX crypto device
+CONFIG_RTE_LIBRTE_PMD_NITROX=n
+# Compile generic security library
+CONFIG_RTE_LIBRTE_SECURITY=n
+# Compile generic compression device library
+CONFIG_RTE_LIBRTE_COMPRESSDEV=n
+CONFIG_RTE_COMPRESS_MAX_DEVS=64
+# Compile compressdev unit test
+CONFIG_RTE_COMPRESSDEV_TEST=n
+# Compile PMD for Octeontx ZIPVF compression device
+CONFIG_RTE_LIBRTE_PMD_OCTEONTX_ZIPVF=n
+# Compile PMD for ISA-L compression device
+CONFIG_RTE_LIBRTE_PMD_ISAL=n
+# Compile PMD for ZLIB compression device
+CONFIG_RTE_LIBRTE_PMD_ZLIB=n
+# Compile generic event device library
+CONFIG_RTE_LIBRTE_EVENTDEV=n
+CONFIG_RTE_LIBRTE_EVENTDEV_DEBUG=n
+CONFIG_RTE_EVENT_MAX_DEVS=16
+CONFIG_RTE_EVENT_MAX_QUEUES_PER_DEV=64
+CONFIG_RTE_EVENT_TIMER_ADAPTER_NUM_MAX=32
+CONFIG_RTE_EVENT_ETH_INTR_RING_SIZE=1024
+CONFIG_RTE_EVENT_CRYPTO_ADAPTER_MAX_INSTANCE=32
+CONFIG_RTE_EVENT_ETH_TX_ADAPTER_MAX_INSTANCE=32
+# Compile PMD for skeleton event device
+CONFIG_RTE_LIBRTE_PMD_SKELETON_EVENTDEV=n
+CONFIG_RTE_LIBRTE_PMD_SKELETON_EVENTDEV_DEBUG=n
+# Compile PMD for software event device
+CONFIG_RTE_LIBRTE_PMD_SW_EVENTDEV=n
+# Compile PMD for distributed software event device
+CONFIG_RTE_LIBRTE_PMD_DSW_EVENTDEV=n
+# Compile PMD for octeontx sso event device
+CONFIG_RTE_LIBRTE_PMD_OCTEONTX_SSOVF=n
+# Compile PMD for octeontx2 sso event device
+CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_EVENTDEV=n
+# Compile PMD for OPDL event device
+CONFIG_RTE_LIBRTE_PMD_OPDL_EVENTDEV=n
+# Compile PMD for NXP DPAA event device
+CONFIG_RTE_LIBRTE_PMD_DPAA_EVENTDEV=n
+# Compile PMD for NXP DPAA2 event device
+CONFIG_RTE_LIBRTE_PMD_DPAA2_EVENTDEV=n
+# Compile raw device support
+# EXPERIMENTAL: API may change without prior notice
+CONFIG_RTE_LIBRTE_RAWDEV=n
+CONFIG_RTE_RAWDEV_MAX_DEVS=64
+CONFIG_RTE_LIBRTE_PMD_SKELETON_RAWDEV=n
+# Compile PMD for NXP DPAA2 CMDIF raw device
+CONFIG_RTE_LIBRTE_PMD_DPAA2_CMDIF_RAWDEV=n
+# Compile PMD for NXP DPAA2 QDMA raw device
+CONFIG_RTE_LIBRTE_PMD_DPAA2_QDMA_RAWDEV=n
+# Compile PMD for Intel FPGA raw device
+CONFIG_RTE_LIBRTE_PMD_IFPGA_RAWDEV=n
+# Compile PMD for Intel IOAT raw device
+CONFIG_RTE_LIBRTE_PMD_IOAT_RAWDEV=n
+# Compile PMD for octeontx2 DMA raw device
+CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_DMA_RAWDEV=n
+# Compile PMD for NTB raw device
+CONFIG_RTE_LIBRTE_PMD_NTB_RAWDEV=n
+# Compile librte_ring
+CONFIG_RTE_LIBRTE_RING=y
+# Compile librte_stack
+CONFIG_RTE_LIBRTE_STACK=y
+# Compile librte_mempool
+CONFIG_RTE_LIBRTE_MEMPOOL=y
+CONFIG_RTE_MEMPOOL_CACHE_MAX_SIZE=512
+CONFIG_RTE_LIBRTE_MEMPOOL_DEBUG=n
+# Compile Mempool drivers
+CONFIG_RTE_DRIVER_MEMPOOL_BUCKET=y
+CONFIG_RTE_DRIVER_MEMPOOL_BUCKET_SIZE_KB=64
+CONFIG_RTE_DRIVER_MEMPOOL_RING=y
+CONFIG_RTE_DRIVER_MEMPOOL_STACK=y
+# Compile PMD for octeontx fpa mempool device
+CONFIG_RTE_LIBRTE_OCTEONTX_MEMPOOL=n
+# Compile PMD for octeontx2 npa mempool device
+CONFIG_RTE_LIBRTE_OCTEONTX2_MEMPOOL=n
+# Compile librte_mbuf
+CONFIG_RTE_LIBRTE_MBUF=y
+CONFIG_RTE_LIBRTE_MBUF_DEBUG=n
+CONFIG_RTE_MBUF_DEFAULT_MEMPOOL_OPS="ring_mp_mc"
+CONFIG_RTE_MBUF_REFCNT_ATOMIC=y
+CONFIG_RTE_PKTMBUF_HEADROOM=128
+# Compile librte_timer
+CONFIG_RTE_LIBRTE_TIMER=n
+CONFIG_RTE_LIBRTE_TIMER_DEBUG=n
+# Compile librte_cfgfile
+CONFIG_RTE_LIBRTE_CFGFILE=n
+# Compile librte_cmdline
+CONFIG_RTE_LIBRTE_CMDLINE=y
+CONFIG_RTE_LIBRTE_CMDLINE_DEBUG=n
+# Compile librte_hash
+CONFIG_RTE_LIBRTE_HASH=y
+CONFIG_RTE_LIBRTE_HASH_DEBUG=n
+# Compile librte_efd
+CONFIG_RTE_LIBRTE_EFD=n
+# Compile librte_member
+CONFIG_RTE_LIBRTE_MEMBER=y
+# Compile librte_jobstats
+CONFIG_RTE_LIBRTE_JOBSTATS=n
+# Compile architecture we compile for. device metrics library
+CONFIG_RTE_LIBRTE_METRICS=y
+# Compile architecture we compile for. bitrate statistics library
+CONFIG_RTE_LIBRTE_BITRATE=y
+# Compile architecture we compile for. latency statistics library
+CONFIG_RTE_LIBRTE_LATENCY_STATS=y
+# Compile librte_telemetry
+CONFIG_RTE_LIBRTE_TELEMETRY=n
+# Compile librte_rcu
+CONFIG_RTE_LIBRTE_RCU=n
+CONFIG_RTE_LIBRTE_RCU_DEBUG=n
+# Compile librte_rib
+CONFIG_RTE_LIBRTE_RIB=n
+# Compile librte_fib
+CONFIG_RTE_LIBRTE_FIB=n
+CONFIG_RTE_LIBRTE_FIB_DEBUG=n
+# Compile librte_lpm
+CONFIG_RTE_LIBRTE_LPM=n
+CONFIG_RTE_LIBRTE_LPM_DEBUG=n
+# Compile librte_acl
+CONFIG_RTE_LIBRTE_ACL=n
+CONFIG_RTE_LIBRTE_ACL_DEBUG=n
+# Compile librte_power
+CONFIG_RTE_LIBRTE_POWER=n
+CONFIG_RTE_LIBRTE_POWER_DEBUG=n
+CONFIG_RTE_MAX_LCORE_FREQS=64
+# Compile librte_net
+CONFIG_RTE_LIBRTE_NET=y
+# Compile librte_ip_frag
+CONFIG_RTE_LIBRTE_IP_FRAG=y
+CONFIG_RTE_LIBRTE_IP_FRAG_DEBUG=n
+CONFIG_RTE_LIBRTE_IP_FRAG_MAX_FRAG=4
+CONFIG_RTE_LIBRTE_IP_FRAG_TBL_STAT=n
+# Compile GRO library
+CONFIG_RTE_LIBRTE_GRO=y
+# Compile GSO library
+CONFIG_RTE_LIBRTE_GSO=y
+# Compile librte_meter
+CONFIG_RTE_LIBRTE_METER=y
+# Compile librte_classify
+CONFIG_RTE_LIBRTE_FLOW_CLASSIFY=n
+# Compile librte_sched
+CONFIG_RTE_LIBRTE_SCHED=n
+CONFIG_RTE_SCHED_DEBUG=n
+CONFIG_RTE_SCHED_RED=n
+CONFIG_RTE_SCHED_COLLECT_STATS=n
+CONFIG_RTE_SCHED_SUBPORT_TC_OV=n
+CONFIG_RTE_SCHED_PORT_N_GRINDERS=8
+CONFIG_RTE_SCHED_VECTOR=n
+# Compile architecture we compile for. distributor library
+CONFIG_RTE_LIBRTE_DISTRIBUTOR=n
+# Compile architecture we compile for. reorder library
+CONFIG_RTE_LIBRTE_REORDER=n
+# Compile librte_port
+CONFIG_RTE_LIBRTE_PORT=n
+CONFIG_RTE_PORT_STATS_COLLECT=n
+CONFIG_RTE_PORT_PCAP=n
+# Compile librte_table
+CONFIG_RTE_LIBRTE_TABLE=n
+CONFIG_RTE_TABLE_STATS_COLLECT=n
+# Compile librte_pipeline
+CONFIG_RTE_LIBRTE_PIPELINE=n
+CONFIG_RTE_PIPELINE_STATS_COLLECT=n
+# Compile librte_kni
+CONFIG_RTE_LIBRTE_KNI=n
+CONFIG_RTE_LIBRTE_PMD_KNI=n
+CONFIG_RTE_KNI_KMOD=n
+CONFIG_RTE_KNI_PREEMPT_DEFAULT=y
+# Compile architecture we compile for. pdump library
+CONFIG_RTE_LIBRTE_PDUMP=y
+# Compile vhost user library
+CONFIG_RTE_LIBRTE_VHOST=y
+CONFIG_RTE_LIBRTE_VHOST_NUMA=y
+CONFIG_RTE_LIBRTE_VHOST_DEBUG=n
+# Compile vhost PMD
+# To compile, CONFIG_RTE_LIBRTE_VHOST should be enabled.
+CONFIG_RTE_LIBRTE_PMD_VHOST=y
+# Compile IFC driver
+# To compile, CONFIG_RTE_LIBRTE_VHOST and CONFIG_RTE_EAL_VFIO
+# should be enabled.
+CONFIG_RTE_LIBRTE_IFC_PMD=n
+# Compile librte_bpf
+CONFIG_RTE_LIBRTE_BPF=n
+# allow load BPF from ELF files (requires libelf)
+CONFIG_RTE_LIBRTE_BPF_ELF=n
+# Compile librte_ipsec
+CONFIG_RTE_LIBRTE_IPSEC=n
+# Compile architecture we compile for. test application
+CONFIG_RTE_APP_TEST=y
+CONFIG_RTE_APP_TEST_RESOURCE_TAR=n
+# Compile architecture we compile for. procinfo application
+CONFIG_RTE_PROC_INFO=n
+# Compile architecture we compile for. PMD test application
+CONFIG_RTE_TEST_PMD=n
+CONFIG_RTE_TEST_PMD_RECORD_CORE_CYCLES=n
+CONFIG_RTE_TEST_PMD_RECORD_BURST_STATS=n
+# Compile architecture we compile for. bbdev test application
+CONFIG_RTE_TEST_BBDEV=n
+# Compile architecture we compile for. compression performance application
+CONFIG_RTE_APP_COMPRESS_PERF=n
+# Compile architecture we compile for. crypto performance application
+CONFIG_RTE_APP_CRYPTO_PERF=n
+# Compile architecture we compile for. eventdev application
+CONFIG_RTE_APP_EVENTDEV=n
+CONFIG_RTE_EXEC_ENV_LINUX=y
+CONFIG_RTE_EXEC_ENV_LINUXAPP=y
+CONFIG_RTE_LIBRTE_VHOST_POSTCOPY=n
+# Common libraries, before Bus/PMDs
+# NXP DPAA BUS and drivers
+# NXP FSLMC BUS and DPAA2 drivers
+# NXP ENETC PMD Driver
+# HINIC PMD driver
+# Hisilicon HNS3 PMD driver
+# Compile PMD for Intel FPGA raw device
+# To compile, CONFIG_RTE_EAL_VFIO should be enabled.
+CONFIG_RTE_ARCH_PPC_64=y
+CONFIG_RTE_ARCH_64=y
+CONFIG_RTE_TOOLCHAIN_GCC=y
+# Note: Power doesn't have this support
+# Note: Initially, all of architecture we compile for. PMD drivers compilation are turned off on Power
+# Will turn on them only after architecture we compile for. successful testing on Power
+CONFIG_RTE_LIBRTE_PMD_XENVIRT=n
diff --git a/SOURCES/set_config.sh b/SOURCES/set_config.sh
new file mode 100755
index 0000000..002386b
--- /dev/null
+++ b/SOURCES/set_config.sh
@@ -0,0 +1,48 @@
+#!/bin/bash
+# Copyright (C) 2017, Red Hat, Inc.
+#
+# set_config.sh will copy a configuration from $1 to $2, in the process
+# checking that the sha header for $1 matches the header in $2
+
+source configlib.sh
+
+if (( $# < 2 )); then
+    echo "$0: source dest [comment-marker]"
+    exit 1
+fi
+
+if [ ! -f "$1" ]; then
+    echo "Source file $1 must exist."
+    exit 1
+fi
+src_file=$1
+shift
+
+if [ ! -f "$1" ]; then
+    echo "Dest file $1 must exist."
+    exit 1
+fi
+dst_file=$1
+shift
+
+comment_sep=${1:-#}
+
+export LANG=en_US.utf8
+
+DEST_FILE_SHA=""
+SRC_FILE_SHA=""
+
+calc_sha DEST_FILE_SHA "$dst_file" "$comment_sep" || echo "Failed to calc sha"
+retr_sha SRC_FILE_SHA "$src_file" "$comment_sep" || echo "Failed to retrieve sha"
+
+if [ "$DEST_FILE_SHA" != "$SRC_FILE_SHA" ]; then
+    echo "ERROR: The requisite starting sha from $dst_file does not match the"
+    echo "       specified sha in $src_file."
+    echo "[ $DEST_FILE_SHA ] vs [ $SRC_FILE_SHA ]"
+    exit 1
+fi
+
+mv "$dst_file" "$dst_file".OLD
+cp "$src_file" "$dst_file"
+echo "copied 1 config file."
+exit 0
diff --git a/SOURCES/x86_64-native-linuxapp-gcc-config b/SOURCES/x86_64-native-linuxapp-gcc-config
new file mode 100644
index 0000000..81175d1
--- /dev/null
+++ b/SOURCES/x86_64-native-linuxapp-gcc-config
@@ -0,0 +1,591 @@
+# -*- cfg-sha: 59724fb7100d28a9ee24efa79c4206bcde839bc29bb98eea771474514e57e022
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2010-2014 Intel Corporation
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2010-2016 Intel Corporation
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2010-2017 Intel Corporation
+# String that appears before the version number
+CONFIG_RTE_VER_PREFIX="DPDK"
+# Version information completed when this file is processed for a build
+CONFIG_RTE_VER_YEAR=19
+CONFIG_RTE_VER_MONTH=11
+CONFIG_RTE_VER_MINOR=1
+CONFIG_RTE_VER_SUFFIX=""
+CONFIG_RTE_VER_RELEASE=99
+ # RTE_EXEC_ENV values are the directories in mk/exec-env/
+CONFIG_RTE_EXEC_ENV="linuxapp"
+# RTE_ARCH values are architecture we compile for. directories in mk/arch/
+CONFIG_RTE_ARCH="x86_64"
+# machine can define specific variables or action for a specific board
+# RTE_MACHINE values are architecture we compile for. directories in mk/machine/
+CONFIG_RTE_MACHINE="default"
+# The compiler we use.
+# RTE_TOOLCHAIN values are architecture we compile for. directories in mk/toolchain/
+CONFIG_RTE_TOOLCHAIN="gcc"
+# Use intrinsics or assembly code for key routines
+CONFIG_RTE_FORCE_INTRINSICS=n
+# Machine forces strict alignment constraints.
+CONFIG_RTE_ARCH_STRICT_ALIGN=n
+# Enable link time optimization
+CONFIG_RTE_ENABLE_LTO=n
+# Compile to share library
+CONFIG_RTE_BUILD_SHARED_LIB=n
+# Use newest code breaking previous ABI
+CONFIG_RTE_NEXT_ABI=n
+# Machine's cache line size
+CONFIG_RTE_CACHE_LINE_SIZE=64
+# Memory model
+CONFIG_RTE_USE_C11_MEM_MODEL=n
+# Compile Environment Abstraction Layer
+CONFIG_RTE_LIBRTE_EAL=y
+CONFIG_RTE_MAX_LCORE=128
+CONFIG_RTE_MAX_NUMA_NODES=8
+CONFIG_RTE_MAX_HEAPS=32
+CONFIG_RTE_MAX_MEMSEG_LISTS=64
+# each memseg list will be limited to either RTE_MAX_MEMSEG_PER_LIST pages
+# or RTE_MAX_MEM_MB_PER_LIST megabytes worth of memory, whichever is smaller
+CONFIG_RTE_MAX_MEMSEG_PER_LIST=8192
+CONFIG_RTE_MAX_MEM_MB_PER_LIST=32768
+# a "type" is a combination of page size and NUMA node. total number of memseg
+# lists per type will be limited to either RTE_MAX_MEMSEG_PER_TYPE pages (split
+# over multiple lists of RTE_MAX_MEMSEG_PER_LIST pages), or
+# RTE_MAX_MEM_MB_PER_TYPE megabytes of memory (split over multiple lists of
+# RTE_MAX_MEM_MB_PER_LIST), whichever is smaller
+CONFIG_RTE_MAX_MEMSEG_PER_TYPE=32768
+CONFIG_RTE_MAX_MEM_MB_PER_TYPE=131072
+# global maximum usable amount of VA, in megabytes
+CONFIG_RTE_MAX_MEM_MB=524288
+CONFIG_RTE_MAX_MEMZONE=2560
+CONFIG_RTE_MAX_TAILQ=32
+CONFIG_RTE_ENABLE_ASSERT=n
+CONFIG_RTE_LOG_DP_LEVEL=RTE_LOG_INFO
+CONFIG_RTE_LOG_HISTORY=256
+CONFIG_RTE_BACKTRACE=y
+CONFIG_RTE_LIBEAL_USE_HPET=n
+CONFIG_RTE_EAL_ALWAYS_PANIC_ON_ERROR=n
+CONFIG_RTE_EAL_IGB_UIO=n
+CONFIG_RTE_EAL_VFIO=y
+CONFIG_RTE_MAX_VFIO_GROUPS=64
+CONFIG_RTE_MAX_VFIO_CONTAINERS=64
+CONFIG_RTE_MALLOC_DEBUG=n
+CONFIG_RTE_EAL_NUMA_AWARE_HUGEPAGES=y
+CONFIG_RTE_USE_LIBBSD=n
+# Recognize/ignore architecture we compile for. AVX/AVX512 CPU flags for performance/power testing.
+# AVX512 is marked as experimental for now, will enable it after enough
+# field test and possible optimization.
+CONFIG_RTE_ENABLE_AVX=y
+CONFIG_RTE_ENABLE_AVX512=n
+# Use ARM LSE ATOMIC instructions
+CONFIG_RTE_ARM_FEATURE_ATOMICS=n
+# Default driver path (or "" to disable)
+CONFIG_RTE_EAL_PMD_PATH=""
+# Compile Environment Abstraction Layer to support Vmware TSC map
+CONFIG_RTE_LIBRTE_EAL_VMWARE_TSC_MAP_SUPPORT=y
+# Compile architecture we compile for. PCI library
+CONFIG_RTE_LIBRTE_PCI=y
+# Compile architecture we compile for. argument parser library
+CONFIG_RTE_LIBRTE_KVARGS=y
+# Compile generic ethernet library
+CONFIG_RTE_LIBRTE_ETHER=y
+CONFIG_RTE_LIBRTE_ETHDEV_DEBUG=n
+CONFIG_RTE_MAX_ETHPORTS=128
+CONFIG_RTE_MAX_QUEUES_PER_PORT=1024
+CONFIG_RTE_LIBRTE_IEEE1588=n
+CONFIG_RTE_ETHDEV_QUEUE_STAT_CNTRS=16
+CONFIG_RTE_ETHDEV_RXTX_CALLBACKS=y
+CONFIG_RTE_ETHDEV_PROFILE_WITH_VTUNE=n
+# Turn off Tx preparation stage
+# Warning: rte_eth_tx_prepare() can be safely disabled only if using a
+# driver which do not implement any Tx preparation.
+CONFIG_RTE_ETHDEV_TX_PREPARE_NOOP=n
+# Common libraries, before Bus/PMDs
+CONFIG_RTE_LIBRTE_COMMON_DPAAX=n
+# Compile architecture we compile for. Intel FPGA bus
+CONFIG_RTE_LIBRTE_IFPGA_BUS=n
+# Compile PCI bus driver
+CONFIG_RTE_LIBRTE_PCI_BUS=y
+# Compile architecture we compile for. vdev bus
+CONFIG_RTE_LIBRTE_VDEV_BUS=y
+# Compile ARK PMD
+CONFIG_RTE_LIBRTE_ARK_PMD=n
+CONFIG_RTE_LIBRTE_ARK_PAD_TX=y
+CONFIG_RTE_LIBRTE_ARK_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_ARK_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_ARK_DEBUG_STATS=n
+CONFIG_RTE_LIBRTE_ARK_DEBUG_TRACE=n
+# Compile Aquantia Atlantic PMD driver
+CONFIG_RTE_LIBRTE_ATLANTIC_PMD=n
+# Compile AMD PMD
+CONFIG_RTE_LIBRTE_AXGBE_PMD=n
+CONFIG_RTE_LIBRTE_AXGBE_PMD_DEBUG=n
+# Compile burst-oriented Broadcom PMD driver
+CONFIG_RTE_LIBRTE_BNX2X_PMD=n
+CONFIG_RTE_LIBRTE_BNX2X_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_BNX2X_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_BNX2X_MF_SUPPORT=n
+CONFIG_RTE_LIBRTE_BNX2X_DEBUG_PERIODIC=n
+# Compile burst-oriented Broadcom BNXT PMD driver
+CONFIG_RTE_LIBRTE_BNXT_PMD=y
+# Compile burst-oriented Chelsio Terminator (CXGBE) PMD
+CONFIG_RTE_LIBRTE_CXGBE_PMD=n
+# Compile burst-oriented NXP PFE PMD driver
+CONFIG_RTE_LIBRTE_PFE_PMD=n
+# NXP DPAA Bus
+CONFIG_RTE_LIBRTE_DPAA_BUS=n
+CONFIG_RTE_LIBRTE_DPAA_MEMPOOL=n
+CONFIG_RTE_LIBRTE_DPAA_PMD=n
+CONFIG_RTE_LIBRTE_DPAA_HWDEBUG=n
+# Compile NXP DPAA2 FSL-MC Bus
+CONFIG_RTE_LIBRTE_FSLMC_BUS=n
+# Compile Support Libraries for NXP DPAA2
+CONFIG_RTE_LIBRTE_DPAA2_MEMPOOL=n
+CONFIG_RTE_LIBRTE_DPAA2_USE_PHYS_IOVA=y
+# Compile burst-oriented NXP DPAA2 PMD driver
+CONFIG_RTE_LIBRTE_DPAA2_PMD=n
+CONFIG_RTE_LIBRTE_DPAA2_DEBUG_DRIVER=n
+# Compile NXP ENETC PMD Driver
+CONFIG_RTE_LIBRTE_ENETC_PMD=n
+# Compile burst-oriented Amazon ENA PMD driver
+CONFIG_RTE_LIBRTE_ENA_PMD=n
+CONFIG_RTE_LIBRTE_ENA_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_ENA_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_ENA_DEBUG_TX_FREE=n
+CONFIG_RTE_LIBRTE_ENA_COM_DEBUG=n
+# Compile burst-oriented Cisco ENIC PMD driver
+CONFIG_RTE_LIBRTE_ENIC_PMD=y
+# Compile burst-oriented IGB & EM PMD drivers
+CONFIG_RTE_LIBRTE_EM_PMD=n
+CONFIG_RTE_LIBRTE_IGB_PMD=y
+CONFIG_RTE_LIBRTE_E1000_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_E1000_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_E1000_DEBUG_TX_FREE=n
+CONFIG_RTE_LIBRTE_E1000_PF_DISABLE_STRIP_CRC=n
+# Compile burst-oriented HINIC PMD driver
+CONFIG_RTE_LIBRTE_HINIC_PMD=n
+# Compile burst-oriented HNS3 PMD driver
+CONFIG_RTE_LIBRTE_HNS3_PMD=n
+# Compile burst-oriented IXGBE PMD driver
+CONFIG_RTE_LIBRTE_IXGBE_PMD=y
+CONFIG_RTE_LIBRTE_IXGBE_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_IXGBE_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_IXGBE_DEBUG_TX_FREE=n
+CONFIG_RTE_LIBRTE_IXGBE_PF_DISABLE_STRIP_CRC=n
+CONFIG_RTE_IXGBE_INC_VECTOR=y
+CONFIG_RTE_LIBRTE_IXGBE_BYPASS=n
+# Compile burst-oriented I40E PMD driver
+CONFIG_RTE_LIBRTE_I40E_PMD=y
+CONFIG_RTE_LIBRTE_I40E_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_I40E_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_I40E_DEBUG_TX_FREE=n
+CONFIG_RTE_LIBRTE_I40E_RX_ALLOW_BULK_ALLOC=y
+CONFIG_RTE_LIBRTE_I40E_INC_VECTOR=y
+CONFIG_RTE_LIBRTE_I40E_16BYTE_RX_DESC=n
+CONFIG_RTE_LIBRTE_I40E_QUEUE_NUM_PER_PF=64
+CONFIG_RTE_LIBRTE_I40E_QUEUE_NUM_PER_VM=4
+# Compile burst-oriented FM10K PMD
+CONFIG_RTE_LIBRTE_FM10K_PMD=n
+CONFIG_RTE_LIBRTE_FM10K_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_FM10K_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_FM10K_DEBUG_TX_FREE=n
+CONFIG_RTE_LIBRTE_FM10K_RX_OLFLAGS_ENABLE=y
+CONFIG_RTE_LIBRTE_FM10K_INC_VECTOR=y
+# Compile burst-oriented ICE PMD driver
+CONFIG_RTE_LIBRTE_ICE_PMD=n
+CONFIG_RTE_LIBRTE_ICE_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_ICE_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_ICE_DEBUG_TX_FREE=n
+CONFIG_RTE_LIBRTE_ICE_RX_ALLOW_BULK_ALLOC=y
+CONFIG_RTE_LIBRTE_ICE_16BYTE_RX_DESC=n
+# Compile burst-oriented IAVF PMD driver
+CONFIG_RTE_LIBRTE_IAVF_PMD=n
+CONFIG_RTE_LIBRTE_IAVF_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_IAVF_DEBUG_TX_FREE=n
+CONFIG_RTE_LIBRTE_IAVF_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_IAVF_DEBUG_DUMP_DESC=n
+CONFIG_RTE_LIBRTE_IAVF_16BYTE_RX_DESC=n
+# Compile burst-oriented IPN3KE PMD driver
+CONFIG_RTE_LIBRTE_IPN3KE_PMD=n
+# Compile burst-oriented Mellanox ConnectX-3 (MLX4) PMD
+CONFIG_RTE_LIBRTE_MLX4_PMD=y
+CONFIG_RTE_LIBRTE_MLX4_DEBUG=n
+# Compile burst-oriented Mellanox ConnectX-4, ConnectX-5,
+# ConnectX-6 & BlueField (MLX5) PMD
+CONFIG_RTE_LIBRTE_MLX5_PMD=y
+CONFIG_RTE_LIBRTE_MLX5_DEBUG=n
+# Linking method for mlx4/5 dependency on ibverbs and related libraries
+# Default linking is dynamic by linker.
+# Other options are: dynamic by dlopen at run-time, or statically embedded.
+CONFIG_RTE_IBVERBS_LINK_DLOPEN=n
+CONFIG_RTE_IBVERBS_LINK_STATIC=n
+# Compile burst-oriented Netronome NFP PMD driver
+CONFIG_RTE_LIBRTE_NFP_PMD=y
+CONFIG_RTE_LIBRTE_NFP_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_NFP_DEBUG_RX=n
+# QLogic 10G/25G/40G/50G/100G PMD
+CONFIG_RTE_LIBRTE_QEDE_PMD=y
+CONFIG_RTE_LIBRTE_QEDE_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_QEDE_DEBUG_RX=n
+#Provides abs path/name of architecture we compile for. firmware file.
+#Empty string denotes driver will use default firmware
+CONFIG_RTE_LIBRTE_QEDE_FW=""
+# Compile burst-oriented Solarflare libefx-based PMD
+CONFIG_RTE_LIBRTE_SFC_EFX_PMD=n
+CONFIG_RTE_LIBRTE_SFC_EFX_DEBUG=n
+# Compile software PMD backed by SZEDATA2 device
+CONFIG_RTE_LIBRTE_PMD_SZEDATA2=n
+# Compile software PMD backed by NFB device
+CONFIG_RTE_LIBRTE_NFB_PMD=n
+# Compile burst-oriented Cavium Thunderx NICVF PMD driver
+CONFIG_RTE_LIBRTE_THUNDERX_NICVF_PMD=n
+CONFIG_RTE_LIBRTE_THUNDERX_NICVF_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_THUNDERX_NICVF_DEBUG_TX=n
+# Compile burst-oriented Cavium LiquidIO PMD driver
+CONFIG_RTE_LIBRTE_LIO_PMD=n
+CONFIG_RTE_LIBRTE_LIO_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_LIO_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_LIO_DEBUG_MBOX=n
+CONFIG_RTE_LIBRTE_LIO_DEBUG_REGS=n
+# Compile burst-oriented Cavium OCTEONTX network PMD driver
+CONFIG_RTE_LIBRTE_OCTEONTX_PMD=n
+# Compile burst-oriented Marvell OCTEON TX2 network PMD driver
+CONFIG_RTE_LIBRTE_OCTEONTX2_PMD=n
+# Compile WRS accelerated virtual port (AVP) guest PMD driver
+CONFIG_RTE_LIBRTE_AVP_PMD=n
+CONFIG_RTE_LIBRTE_AVP_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_AVP_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_AVP_DEBUG_BUFFERS=n
+# Compile burst-oriented VIRTIO PMD driver
+CONFIG_RTE_LIBRTE_VIRTIO_PMD=y
+CONFIG_RTE_LIBRTE_VIRTIO_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_VIRTIO_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_VIRTIO_DEBUG_DUMP=n
+# Compile virtio device emulation inside virtio PMD driver
+CONFIG_RTE_VIRTIO_USER=n
+# Compile burst-oriented VMXNET3 PMD driver
+CONFIG_RTE_LIBRTE_VMXNET3_PMD=n
+CONFIG_RTE_LIBRTE_VMXNET3_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_VMXNET3_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_VMXNET3_DEBUG_TX_FREE=n
+# Compile software PMD backed by AF_PACKET sockets (Linux only)
+CONFIG_RTE_LIBRTE_PMD_AF_PACKET=n
+# Compile software PMD backed by AF_XDP sockets (Linux only)
+CONFIG_RTE_LIBRTE_PMD_AF_XDP=n
+# Compile Memory Interface PMD driver (Linux only)
+CONFIG_RTE_LIBRTE_PMD_MEMIF=n
+# Compile link bonding PMD library
+CONFIG_RTE_LIBRTE_PMD_BOND=n
+CONFIG_RTE_LIBRTE_BOND_DEBUG_ALB=n
+CONFIG_RTE_LIBRTE_BOND_DEBUG_ALB_L1=n
+# Compile fail-safe PMD
+CONFIG_RTE_LIBRTE_PMD_FAILSAFE=y
+# Compile Marvell PMD driver
+CONFIG_RTE_LIBRTE_MVPP2_PMD=n
+# Compile Marvell MVNETA PMD driver
+CONFIG_RTE_LIBRTE_MVNETA_PMD=n
+# Compile support for VMBus library
+CONFIG_RTE_LIBRTE_VMBUS=y
+# Compile native PMD for Hyper-V/Azure
+CONFIG_RTE_LIBRTE_NETVSC_PMD=y
+CONFIG_RTE_LIBRTE_NETVSC_DEBUG_RX=n
+CONFIG_RTE_LIBRTE_NETVSC_DEBUG_TX=n
+CONFIG_RTE_LIBRTE_NETVSC_DEBUG_DUMP=n
+# Compile virtual device driver for NetVSC on Hyper-V/Azure
+CONFIG_RTE_LIBRTE_VDEV_NETVSC_PMD=y
+# Compile null PMD
+CONFIG_RTE_LIBRTE_PMD_NULL=n
+# Compile software PMD backed by PCAP files
+CONFIG_RTE_LIBRTE_PMD_PCAP=n
+# Compile example software rings based PMD
+CONFIG_RTE_LIBRTE_PMD_RING=y
+CONFIG_RTE_PMD_RING_MAX_RX_RINGS=16
+CONFIG_RTE_PMD_RING_MAX_TX_RINGS=16
+# Compile SOFTNIC PMD
+CONFIG_RTE_LIBRTE_PMD_SOFTNIC=n
+# Compile architecture we compile for. TAP PMD
+# It is enabled by default for Linux only.
+CONFIG_RTE_LIBRTE_PMD_TAP=y
+# Do prefetch of packet data within PMD driver receive function
+CONFIG_RTE_PMD_PACKET_PREFETCH=y
+# Compile generic wireless base band device library
+# EXPERIMENTAL: API may change without prior notice
+CONFIG_RTE_LIBRTE_BBDEV=n
+CONFIG_RTE_LIBRTE_BBDEV_DEBUG=n
+CONFIG_RTE_BBDEV_MAX_DEVS=128
+CONFIG_RTE_BBDEV_OFFLOAD_COST=y
+CONFIG_RTE_BBDEV_SDK_AVX2=n
+CONFIG_RTE_BBDEV_SDK_AVX512=n
+# Compile PMD for NULL bbdev device
+CONFIG_RTE_LIBRTE_PMD_BBDEV_NULL=n
+# Compile PMD for turbo software bbdev device
+CONFIG_RTE_LIBRTE_PMD_BBDEV_TURBO_SW=n
+# Compile PMD for Intel FPGA LTE FEC bbdev device
+CONFIG_RTE_LIBRTE_PMD_BBDEV_FPGA_LTE_FEC=n
+# Compile generic crypto device library
+CONFIG_RTE_LIBRTE_CRYPTODEV=n
+CONFIG_RTE_CRYPTO_MAX_DEVS=64
+# Compile PMD for ARMv8 Crypto device
+CONFIG_RTE_LIBRTE_PMD_ARMV8_CRYPTO=n
+CONFIG_RTE_LIBRTE_PMD_ARMV8_CRYPTO_DEBUG=n
+# Compile NXP CAAM JR crypto Driver
+CONFIG_RTE_LIBRTE_PMD_CAAM_JR=n
+CONFIG_RTE_LIBRTE_PMD_CAAM_JR_BE=n
+# Compile NXP DPAA2 crypto sec driver for CAAM HW
+CONFIG_RTE_LIBRTE_PMD_DPAA2_SEC=n
+# NXP DPAA caam - crypto driver
+CONFIG_RTE_LIBRTE_PMD_DPAA_SEC=n
+CONFIG_RTE_LIBRTE_DPAA_MAX_CRYPTODEV=4
+# Compile PMD for Cavium OCTEON TX crypto device
+CONFIG_RTE_LIBRTE_PMD_OCTEONTX_CRYPTO=n
+# Compile PMD for Marvell OCTEON TX2 crypto device
+CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_CRYPTO=n
+# Compile PMD for QuickAssist based devices - see docs for details
+CONFIG_RTE_LIBRTE_PMD_QAT=n
+CONFIG_RTE_LIBRTE_PMD_QAT_SYM=n
+CONFIG_RTE_LIBRTE_PMD_QAT_ASYM=n
+# Max. number of QuickAssist devices, which can be detected and attached
+CONFIG_RTE_PMD_QAT_MAX_PCI_DEVICES=48
+CONFIG_RTE_PMD_QAT_COMP_IM_BUFFER_SIZE=65536
+# Compile PMD for virtio crypto devices
+CONFIG_RTE_LIBRTE_PMD_VIRTIO_CRYPTO=n
+# Number of maximum virtio crypto devices
+CONFIG_RTE_MAX_VIRTIO_CRYPTO=32
+# Compile PMD for AESNI backed device
+CONFIG_RTE_LIBRTE_PMD_AESNI_MB=n
+# Compile PMD for Software backed device
+CONFIG_RTE_LIBRTE_PMD_OPENSSL=n
+# Compile PMD for AESNI GCM device
+CONFIG_RTE_LIBRTE_PMD_AESNI_GCM=n
+# Compile PMD for SNOW 3G device
+CONFIG_RTE_LIBRTE_PMD_SNOW3G=n
+CONFIG_RTE_LIBRTE_PMD_SNOW3G_DEBUG=n
+# Compile PMD for KASUMI device
+CONFIG_RTE_LIBRTE_PMD_KASUMI=n
+# Compile PMD for ZUC device
+CONFIG_RTE_LIBRTE_PMD_ZUC=n
+# Compile PMD for Crypto Scheduler device
+CONFIG_RTE_LIBRTE_PMD_CRYPTO_SCHEDULER=n
+# Compile PMD for NULL Crypto device
+CONFIG_RTE_LIBRTE_PMD_NULL_CRYPTO=n
+# Compile PMD for AMD CCP crypto device
+CONFIG_RTE_LIBRTE_PMD_CCP=n
+# Compile PMD for Marvell Crypto device
+CONFIG_RTE_LIBRTE_PMD_MVSAM_CRYPTO=n
+# Compile PMD for NITROX crypto device
+CONFIG_RTE_LIBRTE_PMD_NITROX=n
+# Compile generic security library
+CONFIG_RTE_LIBRTE_SECURITY=n
+# Compile generic compression device library
+CONFIG_RTE_LIBRTE_COMPRESSDEV=n
+CONFIG_RTE_COMPRESS_MAX_DEVS=64
+# Compile compressdev unit test
+CONFIG_RTE_COMPRESSDEV_TEST=n
+# Compile PMD for Octeontx ZIPVF compression device
+CONFIG_RTE_LIBRTE_PMD_OCTEONTX_ZIPVF=n
+# Compile PMD for ISA-L compression device
+CONFIG_RTE_LIBRTE_PMD_ISAL=n
+# Compile PMD for ZLIB compression device
+CONFIG_RTE_LIBRTE_PMD_ZLIB=n
+# Compile generic event device library
+CONFIG_RTE_LIBRTE_EVENTDEV=n
+CONFIG_RTE_LIBRTE_EVENTDEV_DEBUG=n
+CONFIG_RTE_EVENT_MAX_DEVS=16
+CONFIG_RTE_EVENT_MAX_QUEUES_PER_DEV=64
+CONFIG_RTE_EVENT_TIMER_ADAPTER_NUM_MAX=32
+CONFIG_RTE_EVENT_ETH_INTR_RING_SIZE=1024
+CONFIG_RTE_EVENT_CRYPTO_ADAPTER_MAX_INSTANCE=32
+CONFIG_RTE_EVENT_ETH_TX_ADAPTER_MAX_INSTANCE=32
+# Compile PMD for skeleton event device
+CONFIG_RTE_LIBRTE_PMD_SKELETON_EVENTDEV=n
+CONFIG_RTE_LIBRTE_PMD_SKELETON_EVENTDEV_DEBUG=n
+# Compile PMD for software event device
+CONFIG_RTE_LIBRTE_PMD_SW_EVENTDEV=n
+# Compile PMD for distributed software event device
+CONFIG_RTE_LIBRTE_PMD_DSW_EVENTDEV=n
+# Compile PMD for octeontx sso event device
+CONFIG_RTE_LIBRTE_PMD_OCTEONTX_SSOVF=n
+# Compile PMD for octeontx2 sso event device
+CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_EVENTDEV=n
+# Compile PMD for OPDL event device
+CONFIG_RTE_LIBRTE_PMD_OPDL_EVENTDEV=n
+# Compile PMD for NXP DPAA event device
+CONFIG_RTE_LIBRTE_PMD_DPAA_EVENTDEV=n
+# Compile PMD for NXP DPAA2 event device
+CONFIG_RTE_LIBRTE_PMD_DPAA2_EVENTDEV=n
+# Compile raw device support
+# EXPERIMENTAL: API may change without prior notice
+CONFIG_RTE_LIBRTE_RAWDEV=n
+CONFIG_RTE_RAWDEV_MAX_DEVS=64
+CONFIG_RTE_LIBRTE_PMD_SKELETON_RAWDEV=n
+# Compile PMD for NXP DPAA2 CMDIF raw device
+CONFIG_RTE_LIBRTE_PMD_DPAA2_CMDIF_RAWDEV=n
+# Compile PMD for NXP DPAA2 QDMA raw device
+CONFIG_RTE_LIBRTE_PMD_DPAA2_QDMA_RAWDEV=n
+# Compile PMD for Intel FPGA raw device
+CONFIG_RTE_LIBRTE_PMD_IFPGA_RAWDEV=n
+# Compile PMD for Intel IOAT raw device
+CONFIG_RTE_LIBRTE_PMD_IOAT_RAWDEV=n
+# Compile PMD for octeontx2 DMA raw device
+CONFIG_RTE_LIBRTE_PMD_OCTEONTX2_DMA_RAWDEV=n
+# Compile PMD for NTB raw device
+CONFIG_RTE_LIBRTE_PMD_NTB_RAWDEV=n
+# Compile librte_ring
+CONFIG_RTE_LIBRTE_RING=y
+# Compile librte_stack
+CONFIG_RTE_LIBRTE_STACK=y
+# Compile librte_mempool
+CONFIG_RTE_LIBRTE_MEMPOOL=y
+CONFIG_RTE_MEMPOOL_CACHE_MAX_SIZE=512
+CONFIG_RTE_LIBRTE_MEMPOOL_DEBUG=n
+# Compile Mempool drivers
+CONFIG_RTE_DRIVER_MEMPOOL_BUCKET=y
+CONFIG_RTE_DRIVER_MEMPOOL_BUCKET_SIZE_KB=64
+CONFIG_RTE_DRIVER_MEMPOOL_RING=y
+CONFIG_RTE_DRIVER_MEMPOOL_STACK=y
+# Compile PMD for octeontx fpa mempool device
+CONFIG_RTE_LIBRTE_OCTEONTX_MEMPOOL=n
+# Compile PMD for octeontx2 npa mempool device
+CONFIG_RTE_LIBRTE_OCTEONTX2_MEMPOOL=n
+# Compile librte_mbuf
+CONFIG_RTE_LIBRTE_MBUF=y
+CONFIG_RTE_LIBRTE_MBUF_DEBUG=n
+CONFIG_RTE_MBUF_DEFAULT_MEMPOOL_OPS="ring_mp_mc"
+CONFIG_RTE_MBUF_REFCNT_ATOMIC=y
+CONFIG_RTE_PKTMBUF_HEADROOM=128
+# Compile librte_timer
+CONFIG_RTE_LIBRTE_TIMER=n
+CONFIG_RTE_LIBRTE_TIMER_DEBUG=n
+# Compile librte_cfgfile
+CONFIG_RTE_LIBRTE_CFGFILE=n
+# Compile librte_cmdline
+CONFIG_RTE_LIBRTE_CMDLINE=y
+CONFIG_RTE_LIBRTE_CMDLINE_DEBUG=n
+# Compile librte_hash
+CONFIG_RTE_LIBRTE_HASH=y
+CONFIG_RTE_LIBRTE_HASH_DEBUG=n
+# Compile librte_efd
+CONFIG_RTE_LIBRTE_EFD=n
+# Compile librte_member
+CONFIG_RTE_LIBRTE_MEMBER=y
+# Compile librte_jobstats
+CONFIG_RTE_LIBRTE_JOBSTATS=n
+# Compile architecture we compile for. device metrics library
+CONFIG_RTE_LIBRTE_METRICS=y
+# Compile architecture we compile for. bitrate statistics library
+CONFIG_RTE_LIBRTE_BITRATE=y
+# Compile architecture we compile for. latency statistics library
+CONFIG_RTE_LIBRTE_LATENCY_STATS=y
+# Compile librte_telemetry
+CONFIG_RTE_LIBRTE_TELEMETRY=n
+# Compile librte_rcu
+CONFIG_RTE_LIBRTE_RCU=n
+CONFIG_RTE_LIBRTE_RCU_DEBUG=n
+# Compile librte_rib
+CONFIG_RTE_LIBRTE_RIB=n
+# Compile librte_fib
+CONFIG_RTE_LIBRTE_FIB=n
+CONFIG_RTE_LIBRTE_FIB_DEBUG=n
+# Compile librte_lpm
+CONFIG_RTE_LIBRTE_LPM=n
+CONFIG_RTE_LIBRTE_LPM_DEBUG=n
+# Compile librte_acl
+CONFIG_RTE_LIBRTE_ACL=n
+CONFIG_RTE_LIBRTE_ACL_DEBUG=n
+# Compile librte_power
+CONFIG_RTE_LIBRTE_POWER=n
+CONFIG_RTE_LIBRTE_POWER_DEBUG=n
+CONFIG_RTE_MAX_LCORE_FREQS=64
+# Compile librte_net
+CONFIG_RTE_LIBRTE_NET=y
+# Compile librte_ip_frag
+CONFIG_RTE_LIBRTE_IP_FRAG=y
+CONFIG_RTE_LIBRTE_IP_FRAG_DEBUG=n
+CONFIG_RTE_LIBRTE_IP_FRAG_MAX_FRAG=4
+CONFIG_RTE_LIBRTE_IP_FRAG_TBL_STAT=n
+# Compile GRO library
+CONFIG_RTE_LIBRTE_GRO=y
+# Compile GSO library
+CONFIG_RTE_LIBRTE_GSO=y
+# Compile librte_meter
+CONFIG_RTE_LIBRTE_METER=y
+# Compile librte_classify
+CONFIG_RTE_LIBRTE_FLOW_CLASSIFY=n
+# Compile librte_sched
+CONFIG_RTE_LIBRTE_SCHED=n
+CONFIG_RTE_SCHED_DEBUG=n
+CONFIG_RTE_SCHED_RED=n
+CONFIG_RTE_SCHED_COLLECT_STATS=n
+CONFIG_RTE_SCHED_SUBPORT_TC_OV=n
+CONFIG_RTE_SCHED_PORT_N_GRINDERS=8
+CONFIG_RTE_SCHED_VECTOR=n
+# Compile architecture we compile for. distributor library
+CONFIG_RTE_LIBRTE_DISTRIBUTOR=n
+# Compile architecture we compile for. reorder library
+CONFIG_RTE_LIBRTE_REORDER=n
+# Compile librte_port
+CONFIG_RTE_LIBRTE_PORT=n
+CONFIG_RTE_PORT_STATS_COLLECT=n
+CONFIG_RTE_PORT_PCAP=n
+# Compile librte_table
+CONFIG_RTE_LIBRTE_TABLE=n
+CONFIG_RTE_TABLE_STATS_COLLECT=n
+# Compile librte_pipeline
+CONFIG_RTE_LIBRTE_PIPELINE=n
+CONFIG_RTE_PIPELINE_STATS_COLLECT=n
+# Compile librte_kni
+CONFIG_RTE_LIBRTE_KNI=n
+CONFIG_RTE_LIBRTE_PMD_KNI=n
+CONFIG_RTE_KNI_KMOD=n
+CONFIG_RTE_KNI_PREEMPT_DEFAULT=y
+# Compile architecture we compile for. pdump library
+CONFIG_RTE_LIBRTE_PDUMP=y
+# Compile vhost user library
+CONFIG_RTE_LIBRTE_VHOST=y
+CONFIG_RTE_LIBRTE_VHOST_NUMA=y
+CONFIG_RTE_LIBRTE_VHOST_DEBUG=n
+# Compile vhost PMD
+# To compile, CONFIG_RTE_LIBRTE_VHOST should be enabled.
+CONFIG_RTE_LIBRTE_PMD_VHOST=y
+# Compile IFC driver
+# To compile, CONFIG_RTE_LIBRTE_VHOST and CONFIG_RTE_EAL_VFIO
+# should be enabled.
+CONFIG_RTE_LIBRTE_IFC_PMD=n
+# Compile librte_bpf
+CONFIG_RTE_LIBRTE_BPF=n
+# allow load BPF from ELF files (requires libelf)
+CONFIG_RTE_LIBRTE_BPF_ELF=n
+# Compile librte_ipsec
+CONFIG_RTE_LIBRTE_IPSEC=n
+# Compile architecture we compile for. test application
+CONFIG_RTE_APP_TEST=y
+CONFIG_RTE_APP_TEST_RESOURCE_TAR=n
+# Compile architecture we compile for. procinfo application
+CONFIG_RTE_PROC_INFO=n
+# Compile architecture we compile for. PMD test application
+CONFIG_RTE_TEST_PMD=n
+CONFIG_RTE_TEST_PMD_RECORD_CORE_CYCLES=n
+CONFIG_RTE_TEST_PMD_RECORD_BURST_STATS=n
+# Compile architecture we compile for. bbdev test application
+CONFIG_RTE_TEST_BBDEV=n
+# Compile architecture we compile for. compression performance application
+CONFIG_RTE_APP_COMPRESS_PERF=n
+# Compile architecture we compile for. crypto performance application
+CONFIG_RTE_APP_CRYPTO_PERF=n
+# Compile architecture we compile for. eventdev application
+CONFIG_RTE_APP_EVENTDEV=n
+CONFIG_RTE_EXEC_ENV_LINUX=y
+CONFIG_RTE_EXEC_ENV_LINUXAPP=y
+CONFIG_RTE_LIBRTE_VHOST_POSTCOPY=n
+# Common libraries, before Bus/PMDs
+# NXP DPAA BUS and drivers
+# NXP FSLMC BUS and DPAA2 drivers
+# NXP ENETC PMD Driver
+# HINIC PMD driver
+# Hisilicon HNS3 PMD driver
+# Compile PMD for Intel FPGA raw device
+# To compile, CONFIG_RTE_EAL_VFIO should be enabled.
+CONFIG_RTE_ARCH_X86_64=y
+CONFIG_RTE_ARCH_X86=y
+CONFIG_RTE_ARCH_64=y
+CONFIG_RTE_TOOLCHAIN_GCC=y
+CONFIG_RTE_LIBRTE_PMD_XENVIRT=n
diff --git a/SPECS/openvswitch2.13.spec b/SPECS/openvswitch2.13.spec
new file mode 100644
index 0000000..8258d7e
--- /dev/null
+++ b/SPECS/openvswitch2.13.spec
@@ -0,0 +1,1563 @@
+# Copyright (C) 2009, 2010, 2013, 2014 Nicira Networks, Inc.
+#
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved.  This file is offered as-is,
+# without warranty of any kind.
+#
+# If tests have to be skipped while building, specify the '--without check'
+# option. For example:
+# rpmbuild -bb --without check rhel/openvswitch-fedora.spec
+
+# This defines the base package name's version.
+
+%define pkgname openvswitch2.13
+
+#%%global commit0 2a4f006c79c06628634490627ac72d8c76477e56
+#%%global date 20200121
+#%%global shortcommit0 %(c=%{commit0}; echo ${c:0:7})
+# DPDK commit
+#%%global commit1 ef8b7c505f10897621c0801d8ef3e961385246f8
+#%%global shortcommit1 %(c=%{commit1}; echo ${c:0:7})
+
+# Enable PIE, bz#955181
+%global _hardened_build 1
+
+# RHEL-7 doesn't define _rundir macro yet
+# Fedora 15 onwards uses /run as _rundir
+%if 0%{!?_rundir:1}
+%define _rundir /run
+%endif
+
+# FIXME Test "STP - flush the fdb and mdb when topology changed" fails on s390x
+# FIXME 2 tests fails on ppc64le. They will be hopefully fixed before official 2.11
+# Disable Tests due to https://bugs.centos.org/view.php?id=16969, tests failing
+# as build is running on CentOS7 builder, once builders are CentOS8 based tests can
+# be re enabled.
+%ifarch %{ix86} x86_64 aarch64
+%bcond_with check
+%else
+%bcond_with check
+%endif
+# option to run kernel datapath tests, requires building as root!
+%bcond_with check_datapath_kernel
+# option to build with libcap-ng, needed for running OVS as regular user
+%bcond_without libcapng
+# option to build with ipsec support
+%bcond_with ipsec
+
+# Build python2 (that provides python) and python3 subpackages on Fedora
+# Build only python3 (that provides python) subpackage on RHEL8
+# Build only python subpackage on RHEL7
+%if 0%{?rhel} > 7 || 0%{?fedora}
+# On RHEL8 Sphinx is included in buildroot
+%global external_sphinx 1
+%else
+# Don't use external sphinx (RHV doesn't have optional repositories enabled)
+%global external_sphinx 0
+%endif
+
+Name: %{pkgname}
+Summary: Open vSwitch
+Group: System Environment/Daemons daemon/database/utilities
+URL: http://www.openvswitch.org/
+Version: 2.13.0
+Release: 39%{?commit0:.%{date}git%{shortcommit0}}%{?commit1:dpdk%{shortcommit1}}%{?dist}
+
+# Nearly all of openvswitch is ASL 2.0.  The bugtool is LGPLv2+, and the
+# lib/sflow*.[ch] files are SISSL
+# datapath/ is GPLv2 (although not built into any of the binary packages)
+License: ASL 2.0 and LGPLv2+ and SISSL
+
+%define dpdkver %{?commit1}%{!?commit1:19.11.1}
+%define dpdkdir dpdk
+%define dpdksver %(echo %{dpdkver} | cut -d. -f-2)
+# NOTE: DPDK does not currently build for s390x
+# DPDK on aarch64 is not stable enough to be enabled in FDP
+%define dpdkarches x86_64 ppc64le
+
+%if 0%{?commit0:1}
+Source: https://github.com/openvswitch/ovs/archive/%{commit0}.tar.gz#/openvswitch-%{shortcommit0}.tar.gz
+%else
+Source: https://github.com/openvswitch/ovs/archive/v%{version}.tar.gz#/openvswitch-%{version}.tar.gz
+%endif
+%if 0%{?commit1:1}
+Source10: https://git.dpdk.org/dpdk/snapshot/dpdk-%{dpdkver}.tar.xz
+%else
+Source10: https://fast.dpdk.org/rel/dpdk-%{dpdkver}.tar.xz
+%endif
+
+%define docutilsver 0.12
+%define pygmentsver 1.4
+%define sphinxver   1.1.3
+Source100: https://pypi.io/packages/source/d/docutils/docutils-%{docutilsver}.tar.gz
+Source101: https://pypi.io/packages/source/P/Pygments/Pygments-%{pygmentsver}.tar.gz
+Source102: https://pypi.io/packages/source/S/Sphinx/Sphinx-%{sphinxver}.tar.gz
+
+Source500: configlib.sh
+Source502: set_config.sh
+
+# Important: source503 is used as the actual copy file
+# @TODO: this causes a warning - fix it?
+Source504: arm64-armv8a-linuxapp-gcc-config
+Source505: ppc_64-power8-linuxapp-gcc-config
+Source506: x86_64-native-linuxapp-gcc-config
+
+Patch:     openvswitch-%{version}.patch
+
+# The DPDK is designed to optimize througput of network traffic using, among
+# other techniques, carefully crafted assembly instructions.  As such it
+# needs extensive work to port it to other architectures.
+ExclusiveArch: x86_64 aarch64 ppc64le s390x
+
+# Do not enable this otherwise YUM will break on any upgrade.
+# Provides: openvswitch
+Conflicts: openvswitch < 2.13
+Conflicts: openvswitch-dpdk < 2.13
+
+# dpdk_mach_arch maps between rpm and dpdk arch name, often same as _target_cpu
+# dpdk_mach_tmpl is the config template dpdk_mach name, often "native"
+# dpdk_mach is the actual dpdk_mach name used in the dpdk make system
+%ifarch x86_64
+%define dpdk_mach_arch x86_64
+%define dpdk_mach_tmpl native
+%define dpdk_mach default
+%endif
+%ifarch aarch64
+%define dpdk_mach_arch arm64
+%define dpdk_mach_tmpl armv8a
+%define dpdk_mach armv8a
+%endif
+%ifarch ppc64le
+%define dpdk_mach_arch ppc_64
+%define dpdk_mach_tmpl power8
+%define dpdk_mach power8
+%endif
+
+%define dpdktarget %{dpdk_mach_arch}-%{dpdk_mach_tmpl}-linuxapp-gcc
+
+# FIXME Sphinx is used to generate some manpages, unfortunately, on RHEL, it's
+# in the -optional repository and so we can't require it directly since RHV
+# doesn't have the -optional repository enabled and so TPS fails
+%if %{external_sphinx}
+BuildRequires: python3-sphinx
+%else
+# Sphinx dependencies
+BuildRequires: python-devel
+BuildRequires: python-setuptools
+#BuildRequires: python2-docutils
+BuildRequires: python-jinja2
+BuildRequires: python-nose
+#BuildRequires: python2-pygments
+# docutils dependencies
+BuildRequires: python-imaging
+# pygments dependencies
+BuildRequires: python-nose
+%endif
+
+BuildRequires: gcc gcc-c++ make
+BuildRequires: autoconf automake libtool
+BuildRequires: systemd-units openssl openssl-devel
+BuildRequires: python3-devel python3-setuptools
+BuildRequires: desktop-file-utils
+BuildRequires: groff-base graphviz
+BuildRequires: unbound-devel
+# make check dependencies
+BuildRequires: procps-ng
+%if 0%{?rhel} > 7 || 0%{?fedora}
+BuildRequires: python3-pyOpenSSL
+%endif
+%if %{with check_datapath_kernel}
+BuildRequires: nmap-ncat
+# would be useful but not available in RHEL or EPEL
+#BuildRequires: pyftpdlib
+%endif
+
+%if %{with libcapng}
+BuildRequires: libcap-ng libcap-ng-devel
+%endif
+
+%ifarch %{dpdkarches}
+# DPDK driver dependencies
+BuildRequires: zlib-devel numactl-devel
+%ifarch x86_64
+BuildRequires: rdma-core-devel >= 15 libmnl-devel
+%endif
+
+# Required by packaging policy for the bundled DPDK
+Provides: bundled(dpdk) = %{dpdkver}
+%endif
+
+Requires: openssl iproute module-init-tools
+#Upstream kernel commit 4f647e0a3c37b8d5086214128614a136064110c3
+#Requires: kernel >= 3.15.0-0
+Requires: openvswitch-selinux-extra-policy
+
+Requires(pre): shadow-utils
+Requires(post): /bin/sed
+Requires(post): /usr/sbin/usermod
+Requires(post): /usr/sbin/groupadd
+Requires(post): systemd-units
+Requires(preun): systemd-units
+Requires(postun): systemd-units
+Obsoletes: openvswitch-controller <= 0:2.1.0-1
+
+%description
+Open vSwitch provides standard network bridging functions and
+support for the OpenFlow protocol for remote per-flow control of
+traffic.
+
+%package -n python3-%{pkgname}
+Summary: Open vSwitch python3 bindings
+License: ASL 2.0
+Requires: %{pkgname} = %{?epoch:%{epoch}:}%{version}-%{release}
+Provides: python-%{pkgname} = %{?epoch:%{epoch}:}%{version}-%{release}
+
+%description -n python3-%{pkgname}
+Python bindings for the Open vSwitch database
+
+%package test
+Summary: Open vSwitch testing utilities
+License: ASL 2.0
+BuildArch: noarch
+Requires: python3-%{pkgname} = %{?epoch:%{epoch}:}%{version}-%{release}
+Requires: tcpdump
+
+%description test
+Utilities that are useful to diagnose performance and connectivity
+issues in Open vSwitch setup.
+
+%package devel
+Summary: Open vSwitch OpenFlow development package (library, headers)
+License: ASL 2.0
+Requires: %{pkgname} = %{?epoch:%{epoch}:}%{version}-%{release}
+
+%description devel
+This provides shared library, libopenswitch.so and the openvswitch header
+files needed to build an external application.
+
+%if 0%{?rhel} > 7 || 0%{?fedora} > 28
+%package -n network-scripts-%{name}
+Summary: Open vSwitch legacy network service support
+License: ASL 2.0
+Requires: network-scripts
+Supplements: (%{name} and network-scripts)
+
+%description -n network-scripts-%{name}
+This provides the ifup and ifdown scripts for use with the legacy network
+service.
+%endif
+
+%if %{with ipsec}
+%package ipsec
+Summary: Open vSwitch IPsec tunneling support
+License: ASL 2.0
+Requires: python3-%{pkgname} = %{?epoch:%{epoch}:}%{version}-%{release}
+Requires: libreswan
+
+%description ipsec
+This package provides IPsec tunneling support for OVS tunnels.
+%endif
+
+%prep
+%if 0%{?commit0:1}
+%setup -q -n ovs-%{commit0} -a 10
+%else
+%setup -q -n ovs-%{version} -a 10
+%endif
+%if ! %{external_sphinx}
+%if 0%{?commit0:1}
+%setup -n ovs-%{commit0} -q -D -T -a 100 -a 101 -a 102
+%else
+%setup -n ovs-%{version} -q -D -T -a 100 -a 101 -a 102
+%endif
+%endif
+
+mv dpdk-*/ %{dpdkdir}/
+
+%patch -p1
+
+%build
+# Build Sphinx on RHEL
+%if ! %{external_sphinx}
+export PYTHONPATH="${PYTHONPATH:+$PYTHONPATH:}%{_builddir}/pytmp/lib/python"
+for x in docutils-%{docutilsver} Pygments-%{pygmentsver} Sphinx-%{sphinxver}; do
+    pushd "$x"
+    python2 setup.py install --home %{_builddir}/pytmp
+    popd
+done
+
+export PATH="$PATH:%{_builddir}/pytmp/bin"
+%endif
+
+%if 0%{?commit0:1}
+# fix the snapshot unreleased version to be the released one.
+sed -i.old -e "s/^AC_INIT(openvswitch,.*,/AC_INIT(openvswitch, %{version},/" configure.ac
+%endif
+./boot.sh
+
+%ifarch %{dpdkarches}    # build dpdk
+# Lets build DPDK first
+cd %{dpdkdir}
+
+# In case dpdk-devel is installed
+unset RTE_SDK RTE_INCLUDE RTE_TARGET
+
+# Avoid appending second -Wall to everything, it breaks upstream warning
+# disablers in makefiles. Strip explicit -march= from optflags since they
+# will only guarantee build failures, DPDK is picky with that.
+# Note: _hardening_ldflags has to go on the extra cflags line because dpdk is
+# astoundingly convoluted in how it processes its linker flags.  Fixing it in
+# dpdk is the preferred solution, but adjusting to allow a gcc option in the
+# ldflags, even when gcc is used as the linker, requires large tree-wide changes
+touch obj.o
+gcc -### obj.o 2>&1 | awk '/.*collect2.*/ { print $0}' | sed -e 's/\S*\.res\S*//g' -e 's/-z \S*//g' -e 's/[^ ]*\.o//g' -e 's/ /\n/g' | sort -u > ./noopts.txt
+gcc -### $RPM_LD_FLAGS obj.o 2>&1 | awk '/.*collect2.*/ {print $0}' | sed -e 's/\S*\.res\S*//g' -e 's/-z \S*//g' -e 's/[^ ]*\.o//g' -e 's/ /\n/g' | sort -u > ./opts.txt
+EXTRA_RPM_LDFLAGS=$(comm -13 ./noopts.txt ./opts.txt)
+rm -f obj.o
+
+export EXTRA_CFLAGS="$(echo %{optflags} | sed -e 's:-Wall::g' -e 's:-march=[[:alnum:]]* ::g') -Wformat -fPIC -fcommon %{_hardening_ldflags}"
+export EXTRA_LDFLAGS=$(echo %{__global_ldflags} | sed -e's/-Wl,//g' -e's/-spec.*//')
+export HOST_EXTRA_CFLAGS="$EXTRA_CFLAGS $EXTRA_RPM_LDFLAGS"
+export EXTRA_HOST_LDFLAGS="$EXTRA_RPM_LDFLAGS $(echo %{__global_ldflags} | sed -e's/-spec.*//')"
+
+# DPDK defaults to using builder-specific compiler flags.  However,
+# the config has been changed by specifying CONFIG_RTE_MACHINE=default
+# in order to build for a more generic host.  NOTE: It is possible that
+# the compiler flags used still won't work for all Fedora-supported
+# dpdk_machs, but runtime checks in DPDK will catch those situations.
+
+make V=1 O=%{dpdktarget} T=%{dpdktarget} %{?_smp_mflags} config
+
+cp -f %{SOURCE500} %{SOURCE502} "%{_sourcedir}/%{dpdktarget}-config" .
+%{SOURCE502} %{dpdktarget}-config "%{dpdktarget}/.config"
+
+make V=1 O=%{dpdktarget} %{?_smp_mflags}
+
+# Generate a list of supported drivers, its hard to tell otherwise.
+cat << EOF > README.DPDK-PMDS
+DPDK drivers included in this package:
+
+EOF
+
+for f in $(ls %{dpdk_mach_arch}-%{dpdk_mach_tmpl}-linuxapp-gcc/lib/lib*_pmd_*); do
+    basename ${f} | cut -c12- | cut -d. -f1 | tr [:lower:] [:upper:]
+done >> README.DPDK-PMDS
+
+cat << EOF >> README.DPDK-PMDS
+
+For further information about the drivers, see
+http://dpdk.org/doc/guides-%{dpdksver}/nics/index.html
+EOF
+
+cd -
+%endif    # build dpdk
+
+# And now for OVS...
+mkdir build-shared build-static
+pushd build-shared
+ln -s ../configure
+%configure \
+%if %{with libcapng}
+        --enable-libcapng \
+%else
+        --disable-libcapng \
+%endif
+        --disable-static \
+        --enable-shared \
+        --enable-ssl \
+        --with-pkidir=%{_sharedstatedir}/openvswitch/pki
+make %{?_smp_mflags}
+popd
+pushd build-static
+ln -s ../configure
+%configure \
+%if %{with libcapng}
+        --enable-libcapng \
+%else
+        --disable-libcapng \
+%endif
+        --enable-ssl \
+%ifarch %{dpdkarches}
+        --with-dpdk=$(pwd)/../%{dpdkdir}/%{dpdktarget} \
+%endif
+        --with-pkidir=%{_sharedstatedir}/openvswitch/pki \
+        ac_cv_search_mlx5dv_create_wq=-lmlx5
+        # mlx5dv_create_wq was added in rdma-core 16 since it's the first
+        # officially released release that adds support for mlx offloading,
+        # but currently on RHEL 7.7 we still have rdma-core 15 (with the
+        # offloading commits backported) and so configure is not able to detect
+        # it.
+make %{?_smp_mflags}
+popd
+
+/usr/bin/python3 build-aux/dpdkstrip.py \
+        --dpdk \
+        < rhel/usr_lib_systemd_system_ovs-vswitchd.service.in \
+        > rhel/usr_lib_systemd_system_ovs-vswitchd.service
+
+%install
+rm -rf $RPM_BUILD_ROOT
+make -C build-shared install-libLTLIBRARIES DESTDIR=$RPM_BUILD_ROOT
+make -C build-static install DESTDIR=$RPM_BUILD_ROOT
+
+install -d -m 0755 $RPM_BUILD_ROOT%{_rundir}/openvswitch
+install -d -m 0750 $RPM_BUILD_ROOT%{_localstatedir}/log/openvswitch
+install -d -m 0755 $RPM_BUILD_ROOT%{_sysconfdir}/openvswitch
+
+install -p -D -m 0644 rhel/usr_lib_udev_rules.d_91-vfio.rules \
+        $RPM_BUILD_ROOT%{_udevrulesdir}/91-vfio.rules
+
+install -p -D -m 0644 \
+        rhel/usr_share_openvswitch_scripts_systemd_sysconfig.template \
+        $RPM_BUILD_ROOT/%{_sysconfdir}/sysconfig/openvswitch
+
+for service in openvswitch ovsdb-server ovs-vswitchd \
+               ovs-delete-transient-ports; do
+        install -p -D -m 0644 \
+                        rhel/usr_lib_systemd_system_${service}.service \
+                        $RPM_BUILD_ROOT%{_unitdir}/${service}.service
+done
+
+%if %{with ipsec}
+install -p -D -m 0644 rhel/usr_lib_systemd_system_openvswitch-ipsec.service \
+                      $RPM_BUILD_ROOT%{_unitdir}/openvswitch-ipsec.service
+%endif
+
+install -m 0755 rhel/etc_init.d_openvswitch \
+        $RPM_BUILD_ROOT%{_datadir}/openvswitch/scripts/openvswitch.init
+
+install -p -D -m 0644 rhel/etc_openvswitch_default.conf \
+        $RPM_BUILD_ROOT/%{_sysconfdir}/openvswitch/default.conf
+
+install -p -D -m 0644 rhel/etc_logrotate.d_openvswitch \
+        $RPM_BUILD_ROOT/%{_sysconfdir}/logrotate.d/openvswitch
+
+install -m 0644 vswitchd/vswitch.ovsschema \
+        $RPM_BUILD_ROOT/%{_datadir}/openvswitch/vswitch.ovsschema
+
+install -d -m 0755 $RPM_BUILD_ROOT/%{_sysconfdir}/sysconfig/network-scripts/
+install -p -m 0755 rhel/etc_sysconfig_network-scripts_ifdown-ovs \
+        $RPM_BUILD_ROOT/%{_sysconfdir}/sysconfig/network-scripts/ifdown-ovs
+install -p -m 0755 rhel/etc_sysconfig_network-scripts_ifup-ovs \
+        $RPM_BUILD_ROOT/%{_sysconfdir}/sysconfig/network-scripts/ifup-ovs
+
+install -d -m 0755 $RPM_BUILD_ROOT%{python3_sitelib}
+cp -a $RPM_BUILD_ROOT/%{_datadir}/openvswitch/python/ovstest \
+        $RPM_BUILD_ROOT%{python3_sitelib}
+
+# Build the JSON C extension for the Python lib (#1417738)
+pushd python
+(
+export CPPFLAGS="-I ../include -I ../build-shared/include"
+export LDFLAGS="%{__global_ldflags} -L $RPM_BUILD_ROOT%{_libdir}"
+%py3_build
+%py3_install
+[ -f "$RPM_BUILD_ROOT/%{python3_sitearch}/ovs/_json.cpython-%{python3_version_nodots}$(python3-config --abiflags)-%{_arch}-%{_target_os}%{?_gnu}.so" ]
+)
+popd
+
+rm -rf $RPM_BUILD_ROOT/%{_datadir}/openvswitch/python/
+
+install -d -m 0755 $RPM_BUILD_ROOT/%{_sharedstatedir}/openvswitch
+
+install -d -m 0755 $RPM_BUILD_ROOT%{_prefix}/lib/firewalld/services/
+
+install -p -D -m 0755 \
+        rhel/usr_share_openvswitch_scripts_ovs-systemd-reload \
+        $RPM_BUILD_ROOT%{_datadir}/openvswitch/scripts/ovs-systemd-reload
+
+touch $RPM_BUILD_ROOT%{_sysconfdir}/openvswitch/conf.db
+touch $RPM_BUILD_ROOT%{_sysconfdir}/openvswitch/system-id.conf
+
+# remove unpackaged files
+rm -f $RPM_BUILD_ROOT/%{_bindir}/ovs-benchmark \
+        $RPM_BUILD_ROOT/%{_bindir}/ovs-docker \
+        $RPM_BUILD_ROOT/%{_bindir}/ovs-parse-backtrace \
+        $RPM_BUILD_ROOT/%{_bindir}/ovs-testcontroller \
+        $RPM_BUILD_ROOT/%{_sbindir}/ovs-vlan-bug-workaround \
+        $RPM_BUILD_ROOT/%{_mandir}/man1/ovs-benchmark.1* \
+        $RPM_BUILD_ROOT/%{_mandir}/man8/ovs-testcontroller.* \
+        $RPM_BUILD_ROOT/%{_mandir}/man8/ovs-vlan-bug-workaround.8*
+
+%if ! %{with ipsec}
+rm -f $RPM_BUILD_ROOT/%{_datadir}/openvswitch/scripts/ovs-monitor-ipsec
+%endif
+
+# remove ovn unpackages files
+rm -f $RPM_BUILD_ROOT%{_bindir}/ovn*
+rm -f $RPM_BUILD_ROOT%{_mandir}/man1/ovn*
+rm -f $RPM_BUILD_ROOT%{_mandir}/man5/ovn*
+rm -f $RPM_BUILD_ROOT%{_mandir}/man7/ovn*
+rm -f $RPM_BUILD_ROOT%{_mandir}/man8/ovn*
+rm -f $RPM_BUILD_ROOT%{_datadir}/openvswitch/ovn*
+rm -f $RPM_BUILD_ROOT%{_datadir}/openvswitch/scripts/ovn*
+rm -f $RPM_BUILD_ROOT%{_includedir}/ovn/*
+
+%check
+%if %{with check}
+    pushd build-static
+    touch resolv.conf
+    export OVS_RESOLV_CONF=$(pwd)/resolv.conf
+    if make check TESTSUITEFLAGS='%{_smp_mflags}' ||
+       make check TESTSUITEFLAGS='--recheck'; then :;
+    else
+        cat tests/testsuite.log
+        exit 1
+    fi
+    popd
+%endif
+%if %{with check_datapath_kernel}
+    pushd build-static
+    if make check-kernel RECHECK=yes; then :;
+    else
+        cat tests/system-kmod-testsuite.log
+        exit 1
+    fi
+    popd
+%endif
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%preun
+%if 0%{?systemd_preun:1}
+    %systemd_preun openvswitch.service
+%else
+    if [ $1 -eq 0 ] ; then
+    # Package removal, not upgrade
+        /bin/systemctl --no-reload disable openvswitch.service >/dev/null 2>&1 || :
+        /bin/systemctl stop openvswitch.service >/dev/null 2>&1 || :
+    fi
+%endif
+
+%pre
+getent group openvswitch >/dev/null || groupadd -r openvswitch
+getent passwd openvswitch >/dev/null || \
+    useradd -r -g openvswitch -d / -s /sbin/nologin \
+    -c "Open vSwitch Daemons" openvswitch
+
+%ifarch %{dpdkarches}
+    getent group hugetlbfs >/dev/null || groupadd hugetlbfs
+    usermod -a -G hugetlbfs openvswitch
+%endif
+exit 0
+
+%post
+if [ $1 -eq 1 ]; then
+    sed -i 's:^#OVS_USER_ID=:OVS_USER_ID=:' /etc/sysconfig/openvswitch
+
+%ifarch %{dpdkarches}
+    sed -i \
+        's@OVS_USER_ID="openvswitch:openvswitch"@OVS_USER_ID="openvswitch:hugetlbfs"@'\
+        /etc/sysconfig/openvswitch
+%endif
+fi
+chown -R openvswitch:openvswitch /etc/openvswitch
+
+%if 0%{?systemd_post:1}
+    %systemd_post openvswitch.service
+%else
+    # Package install, not upgrade
+    if [ $1 -eq 1 ]; then
+        /bin/systemctl daemon-reload >dev/null || :
+    fi
+%endif
+
+%postun
+%if 0%{?systemd_postun:1}
+    %systemd_postun openvswitch.service
+%else
+    /bin/systemctl daemon-reload >/dev/null 2>&1 || :
+%endif
+
+%triggerun -- openvswitch < 2.5.0-22.git20160727%{?dist}
+# old rpm versions restart the service in postun, but
+# due to systemd some preparation is needed.
+if systemctl is-active openvswitch >/dev/null 2>&1 ; then
+    /usr/share/openvswitch/scripts/ovs-ctl stop >/dev/null 2>&1 || :
+    systemctl daemon-reload >/dev/null 2>&1 || :
+    systemctl stop openvswitch ovsdb-server ovs-vswitchd >/dev/null 2>&1 || :
+    systemctl start openvswitch >/dev/null 2>&1 || :
+fi
+exit 0
+
+%files -n python3-%{pkgname}
+%{python3_sitearch}/ovs
+%{python3_sitearch}/ovs-*.egg-info
+%doc LICENSE
+
+%files test
+%{_bindir}/ovs-pcap
+%{_bindir}/ovs-tcpdump
+%{_bindir}/ovs-tcpundump
+%{_mandir}/man1/ovs-pcap.1*
+%{_mandir}/man8/ovs-tcpdump.8*
+%{_mandir}/man1/ovs-tcpundump.1*
+%{_bindir}/ovs-test
+%{_bindir}/ovs-vlan-test
+%{_bindir}/ovs-l3ping
+%{_mandir}/man8/ovs-test.8*
+%{_mandir}/man8/ovs-vlan-test.8*
+%{_mandir}/man8/ovs-l3ping.8*
+%{python3_sitelib}/ovstest
+
+%files devel
+%{_libdir}/*.so
+%{_libdir}/pkgconfig/*.pc
+%{_includedir}/openvswitch/*
+%{_includedir}/openflow/*
+%exclude %{_libdir}/*.a
+%exclude %{_libdir}/*.la
+
+%if 0%{?rhel} > 7 || 0%{?fedora} > 28
+%files -n network-scripts-%{name}
+%{_sysconfdir}/sysconfig/network-scripts/ifup-ovs
+%{_sysconfdir}/sysconfig/network-scripts/ifdown-ovs
+%endif
+
+%files
+%defattr(-,openvswitch,openvswitch)
+%dir %{_sysconfdir}/openvswitch
+%{_sysconfdir}/openvswitch/default.conf
+%config %ghost %verify(not owner group md5 size mtime) %{_sysconfdir}/openvswitch/conf.db
+%ghost %attr(0600,-,-) %verify(not owner group md5 size mtime) %{_sysconfdir}/openvswitch/.conf.db.~lock~
+%config %ghost %{_sysconfdir}/openvswitch/system-id.conf
+%defattr(-,root,root)
+%config(noreplace) %verify(not md5 size mtime) %{_sysconfdir}/sysconfig/openvswitch
+%{_sysconfdir}/bash_completion.d/ovs-appctl-bashcomp.bash
+%{_sysconfdir}/bash_completion.d/ovs-vsctl-bashcomp.bash
+%config(noreplace) %{_sysconfdir}/logrotate.d/openvswitch
+%{_unitdir}/openvswitch.service
+%{_unitdir}/ovsdb-server.service
+%{_unitdir}/ovs-vswitchd.service
+%{_unitdir}/ovs-delete-transient-ports.service
+%{_datadir}/openvswitch/scripts/openvswitch.init
+%{_datadir}/openvswitch/scripts/ovs-check-dead-ifs
+%{_datadir}/openvswitch/scripts/ovs-lib
+%{_datadir}/openvswitch/scripts/ovs-save
+%{_datadir}/openvswitch/scripts/ovs-vtep
+%{_datadir}/openvswitch/scripts/ovs-ctl
+%{_datadir}/openvswitch/scripts/ovs-kmod-ctl
+%{_datadir}/openvswitch/scripts/ovs-systemd-reload
+%config %{_datadir}/openvswitch/vswitch.ovsschema
+%config %{_datadir}/openvswitch/vtep.ovsschema
+%{_bindir}/ovs-appctl
+%{_bindir}/ovs-dpctl
+%{_bindir}/ovs-ofctl
+%{_bindir}/ovs-vsctl
+%{_bindir}/ovsdb-client
+%{_bindir}/ovsdb-tool
+%{_bindir}/ovs-pki
+%{_bindir}/vtep-ctl
+%{_libdir}/*.so.*
+%{_sbindir}/ovs-vswitchd
+%{_sbindir}/ovsdb-server
+%{_mandir}/man1/ovsdb-client.1*
+%{_mandir}/man1/ovsdb-server.1*
+%{_mandir}/man1/ovsdb-tool.1*
+%{_mandir}/man5/ovsdb.5*
+%{_mandir}/man5/ovsdb-server.5.*
+%{_mandir}/man5/ovs-vswitchd.conf.db.5*
+%{_mandir}/man5/vtep.5*
+%{_mandir}/man7/ovsdb-server.7*
+%{_mandir}/man7/ovsdb.7*
+%{_mandir}/man7/ovs-actions.7*
+%{_mandir}/man7/ovs-fields.7*
+%{_mandir}/man8/vtep-ctl.8*
+%{_mandir}/man8/ovs-appctl.8*
+%{_mandir}/man8/ovs-ctl.8*
+%{_mandir}/man8/ovs-dpctl.8*
+%{_mandir}/man8/ovs-kmod-ctl.8.*
+%{_mandir}/man8/ovs-ofctl.8*
+%{_mandir}/man8/ovs-pki.8*
+%{_mandir}/man8/ovs-vsctl.8*
+%{_mandir}/man8/ovs-vswitchd.8*
+%{_mandir}/man8/ovs-parse-backtrace.8*
+%{_udevrulesdir}/91-vfio.rules
+%doc LICENSE NOTICE README.rst NEWS rhel/README.RHEL.rst
+%ifarch %{dpdkarches}
+%doc %{dpdkdir}/README.DPDK-PMDS
+%endif
+/var/lib/openvswitch
+%attr(750,openvswitch,openvswitch) %verify(not owner group) /var/log/openvswitch
+%ghost %attr(755,root,root) %verify(not owner group) %{_rundir}/openvswitch
+%{_datadir}/openvswitch/bugtool-plugins/
+%{_datadir}/openvswitch/scripts/ovs-bugtool-*
+%{_bindir}/ovs-dpctl-top
+%{_sbindir}/ovs-bugtool
+%{_mandir}/man8/ovs-dpctl-top.8*
+%{_mandir}/man8/ovs-bugtool.8*
+%if (0%{?rhel} && 0%{?rhel} <= 7) || (0%{?fedora} && 0%{?fedora} < 29)
+%{_sysconfdir}/sysconfig/network-scripts/ifup-ovs
+%{_sysconfdir}/sysconfig/network-scripts/ifdown-ovs
+%endif
+
+%if %{with ipsec}
+%files ipsec
+%{_datadir}/openvswitch/scripts/ovs-monitor-ipsec
+%{_unitdir}/openvswitch-ipsec.service
+%endif
+
+%changelog
+* Thu Jun 25 2020 Timothy Redaelli <tredaelli@redhat.com> - 2.13.0-39
+- bus/pci: fix VF memory access (#1851169)
+  [2b22bcd9ad02d0180ad5c46a2cccf34a3afba600]
+
+* Fri Jun 05 2020 Ilya Maximets <i.maximets@redhat.com> - 2.13.0-38
+- raft: Avoid sending equal snapshots. (#1834838)
+  [3168eba559cbce28937be4e785c3337030694455]
+
+* Fri Jun 05 2020 Ilya Maximets <i.maximets@redhat.com> - 2.13.0-37
+- ovsdb-server: Fix schema leak while reading db. (#1834838)
+  [92a1e56c8a37927441fb1742e6054a9118654ef0]
+
+* Fri Jun 05 2020 Ilya Maximets <i.maximets@redhat.com> - 2.13.0-36
+- ovsdb: Add raft memory usage to memory report. (#1834838)
+  [fb32a78921e50b1ffa0c52f873167f68622e8723]
+
+* Tue Jun 02 2020 Aaron Conole <aconole@redhat.com> - 2.13.0-35
+- netdev-offload-tc: Re-fetch block ID after probing.
+  [d14e39f81bec29064a58df0177ce457765305f8b]
+
+* Tue Jun 02 2020 Aaron Conole <aconole@redhat.com> - 2.13.0-34
+- netdev-linux: Update LAG in all cases.
+  [8b155475749cdb7a1817810d447e4cf6598cb6fa]
+
+* Wed May 20 2020 Timothy Redaelli <tredaelli@redhat.com> - 2.13.0-33
+- vhost: fix potential fd leak
+  [a9e6e358142634f1cd4d6555c5835f0062aa2a34]
+
+* Wed May 20 2020 Timothy Redaelli <tredaelli@redhat.com> - 2.13.0-32
+- vhost: fix potential memory space leak
+  [b39bac1377f5ece651b3ddb1485f6327036e7c38]
+
+* Wed May 20 2020 Timothy Redaelli <tredaelli@redhat.com> - 2.13.0-31
+- vhost: fix translated address not checked
+  [7da906164278fc5142607d5c94d20bb2b6e3ca8f]
+
+* Wed May 20 2020 Timothy Redaelli <tredaelli@redhat.com> - 2.13.0-30
+- vhost: fix vring index check
+  [7c4cfd12e3b2693b68ee995f65421577248c34d9]
+
+* Wed May 20 2020 Timothy Redaelli <tredaelli@redhat.com> - 2.13.0-29
+- vhost: check log mmap offset and size overflow
+  [517d8488dcf0ca7bb7f7db2fe8167389141aff9d]
+
+* Fri May 15 2020 Dumitru Ceara <dceara@redhat.com> - 2.13.0-28
+- raft: Disable RAFT jsonrpc inactivity probe. (#1836308)
+  [3d9b529afb098531190d57d6f35d1622bb4093cd]
+
+* Fri May 15 2020 Dumitru Ceara <dceara@redhat.com> - 2.13.0-27
+- raft: Fix leak of the incomplete command. (#1836307)
+  [5c38ccd52fb3925e82eda20f1897ec02abb390d9]
+
+* Fri May 15 2020 Dumitru Ceara <dceara@redhat.com> - 2.13.0-26
+- raft: Fix the problem of stuck in candidate role forever. (#1836305)
+  [9c76350e271546eedfeb18720975e35b4e36e1f1]
+
+* Fri May 15 2020 Dumitru Ceara <dceara@redhat.com> - 2.13.0-25
+- raft: Fix next_index in install_snapshot reply handling. (#1836305)
+  [cc3d02699203e2fe9d9fd384d09e268ba614828d]
+
+* Fri May 15 2020 Dumitru Ceara <dceara@redhat.com> - 2.13.0-24
+- raft: Avoid busy loop during leader election. (#1836305)
+  [053b78c8d60ffb4d212fd7894f91be52027f291f]
+
+* Fri May 15 2020 Dumitru Ceara <dceara@redhat.com> - 2.13.0-23
+- raft: Fix raft_is_connected() when there is no leader yet. (#1836305)
+  [e732012d7be335650398ff03c2431c64b2c4aaba]
+
+* Fri May 15 2020 Dumitru Ceara <dceara@redhat.com> - 2.13.0-22
+- ovsdb-server: Don't disconnect clients after raft install_snapshot. (#1836305)
+  [8ff30dfee6cb075e36ed38b77695ff03321ce12b]
+
+* Fri May 15 2020 Dumitru Ceara <dceara@redhat.com> - 2.13.0-21
+- raft-rpc: Fix message format. (#1836305)
+  [914d885061c9f7e7e6e5f921065301e08837e122]
+
+* Wed Apr 22 2020 Timothy Redaelli <tredaelli@redhat.com> - 2.13.0-20
+- redhat: pkgtool: Use the oldest sha1
+  [4c657a79de8221c769d4622ff4110b6aaccf938a]
+
+* Mon Apr 20 2020 Timothy Redaelli <tredaelli@redhat.com> - 2.13.0-19
+- Fix building locally on Fedora 32+
+  [d1c89e4d998507fcd18a1e94bc6459f016e6310e]
+
+* Thu Apr 16 2020 Timothy Redaelli <tredaelli@redhat.com> - 2.13.0-18
+- Set -fcommon in DPDK CFLAGS
+  [f8a379e95e8617d9371cd87bfa559fa14e88fc33]
+
+* Thu Apr 16 2020 Timothy Redaelli <tredaelli@redhat.com> - 2.13.0-17
+- Update DPDK config files for 19.11.1
+  [d771330907cee39a6c08409f866c3abcb9d90351]
+
+* Thu Apr 16 2020 Timothy Redaelli <tredaelli@redhat.com> - 2.13.0-16
+- Merge tag 'v19.11.1' into fast-datapath-rhel-8
+  [0b3abfb0e63fc2838c15eb119a1876f9691fd70e]
+
+* Tue Apr 14 2020 Timothy Redaelli <tredaelli@redhat.com> - 2.13.0-15
+- bugtool: Fix for Python3. (#1809241)
+  [71f25b7920093daa59827a0a4be4095309aec6ff]
+
+* Tue Apr 07 2020 Flavio Leitner <fbl@redhat.com> - 2.13.0-14
+- redhat: Skip NVR check only if building rhel-8 on rhel-7.
+  [2b9f32bef20febced3dbcd85b6cb986b8475d121]
+
+* Mon Apr 06 2020 Flavio Leitner <fbl@redhat.com> - 2.13.0-13
+- redhat: rh-dgit-brew: Skip NVR check in RHEL-7.
+  [6280d8d29ff80c38b076bae005b3a19ec2375bc7]
+
+* Mon Apr 06 2020 Flavio Leitner <fbl@redhat.com> - 2.13.0-12
+- redhat: pkgtool: Use BZ id from reported-at tag.
+  [3ee7ec51b693eaf1715c0bbf8da2500405c7d8fe]
+
+* Fri Mar 27 2020 Flavio Leitner <fbl@redhat.com> - 2.13.0-11
+- redhat: ovsci: Schedule the CI job while brew is building.
+  [1551e1e70e9ce98e61b9597f90c6c23b5dee6f1c]
+
+* Tue Mar 24 2020 Flavio Leitner <fbl@redhat.com> - 2.13.0-10
+- redhat: ovsci: Use the correct job name and params.
+  [220f32afb2a3ce5437b6a502937cda7f887e9304]
+
+* Mon Mar 23 2020 Timothy Redaelli <tredaelli@redhat.com> - 2.13.0-9
+- Add compatibility with RHEL7 git
+  [34929957833d71263e072c24842eaba3d61ad235]
+
+* Mon Mar 23 2020 Timothy Redaelli <tredaelli@redhat.com> - 2.13.0-8
+- Use the date in UTC
+  [b53bdb16b8575fd3fbb28af2b704abd1eccb27d8]
+
+* Mon Mar 23 2020 Numan Siddique <nusiddiq@redhat.com> - 2.13.0-7
+- ofproto-dpif-xlate: Fix recirculation when in_port is OFPP_CONTROLLER. (#1775160)
+  [4ee0f6af9e601cbb5f69a486526d1011314bbfed]
+
+* Wed Mar 11 2020 Timothy Redaelli <tredaelli@redhat.com> - 2.13.0-6
+- vhost: fix packed virtqueue ready condition (#1812620)
+  [0b4e7827b873c8a420171d840bde5d3c77a67e60]
+
+* Thu Feb 27 2020 Timothy Redaelli <tredaelli@redhat.com> - 2.13.0-5
+- redhat: permit make to fail when pkgtool --gen{spec,patches} exist badly
+  [61807f941ec5ddcbfb0cf1f4ba6a52d934c72f06]
+
+* Tue Feb 25 2020 Timothy Redaelli <tredaelli@redhat.com> - 2.13.0-4
+- vhost: protect log address translation in IOTLB update (#1806599)
+  [0d4370404fa971cb07ca2bf9cb0cdf98ecc54d4b]
+
+* Tue Feb 25 2020 Timothy Redaelli <tredaelli@redhat.com> - 2.13.0-3
+- Remove Docutils, Pygments and Sphinx directories
+  [0857b41c11694061bc94122c3c026ff552745703]
+
+* Tue Feb 25 2020 Timothy Redaelli <tredaelli@redhat.com> - 2.13.0-2
+- Update Red Hat build files to use upstream tarballs and one patch
+  [b14f867126d5d9cfbe24d54c89aa917384c8c133]
+
+* Thu Feb 20 2020 Flavio Leitner <fbl@redhat.com> - 2.13.0-1
+- Open vSwitch version 2.13.0
+  [44ed4ed8d98d8c21e715a7014d89a2f14f56b96b]
+
+* Wed Jan 22 2020 Open vSwitch Bot <null@redhat.com> - 2.13.0-0.20200121git2a4f006
+- Snapshot of branch-2.13 2a4f006c79c0
+
+* Fri Jan 17 2020 Open vSwitch Bot <null@redhat.com> - 2.13.0-0.20200117git8ae6a5f
+- Snapshot of master 8ae6a5f98c3a
+
+* Tue Jan 14 2020 Open vSwitch Bot <null@redhat.com> - 2.13.0-0.20200114gitb9b7b98
+- Snapshot of master b9b7b989d105
+
+* Tue Jan 14 2020 Open vSwitch Bot <null@redhat.com> - 2.13.0-0.20200114gitb9b7b98
+- Snapshot of master b9b7b989d105
+
+* Tue Jan 14 2020 Open vSwitch Bot <null@redhat.com> - 2.13.0-0.20200114gitb9b7b98
+- Snapshot of master b9b7b989d105
+- Remove MLX{4,5} glue libraries, since Python3 is included in RHEL 7.6 that
+  ships the correct libibverbs library.
+
+* Tue Jan 14 2020 Open vSwitch Bot <null@redhat.com> - 2.13.0-0.20200113git67eb811
+- Snapshot of master 67eb8110171f
+
+* Mon Jan 13 2020 Timothy Redaelli <tredaelli@redhat.com> - 2.13.0-0.20200109git2109841.1
+- Add a not-upstream-yet patch to remove dependency for python3-netifaces,
+  since it's not available on RHEL7
+
+* Mon Jan 13 2020 Open vSwitch Bot <null@redhat.com> - 2.13.0-0.20200109git2109841
+- Snapshot of master 2109841b7984
+
+* Thu Jan 09 2020 Open vSwitch Bot <null@redhat.com> - 2.13.0-0.20200109gitb926f57
+- Snapshot of master b926f577aaf1
+
+* Tue Jan 07 2020 David Marchand <david.marchand@redhat.com> - 2.11.0-16
+- Backport DPDK interrupt fixes for qede (#1788515)
+
+* Mon Dec 23 2019 Eelco Chaudron <echaudro@redhat.com> - 2.12.0-15
+
+- Backport "vhost: add device op when notification to guest is sent" (#1726579)
+- Backport "netdev-dpdk: Add coverage counter to count vhost IRQs" (#1726579)
+
+* Mon Dec 23 2019 Eelco Chaudron <echaudro@redhat.com> - 2.12.0-14
+- Backport "net/i40e: downgrade error log" (#1719644)
+- Backport "net/i40e: re-program promiscuous mode on VF interface" (#1733402)
+- Backport "bridge: Allow manual notifications about interfaces' updates" (#1719644)
+- Backport "netdev-dpdk: add support for the RTE_ETH_EVENT_INTR_RESET" (#1719644)
+
+* Thu Dec 19 2019 Timothy Redaelli <tredaelli@redhat.com> - 2.12.0-13
+- Add --with ipsec flag to build OVS with IPSEC support
+
+* Tue Dec 10 2019 Timothy Redaelli <tredaelli@redhat.com> - 2.12.0-12
+- Fix librte_pmd_mlx{4,5}_glue.so error in Execshield part of RPMDiff
+  by backporting the DPDK flags from dpdk spec file.
+
+* Fri Dec 06 2019 Timothy Redaelli <tredaelli@redhat.com> - 2.12.0-11
+- Backport "ovs-tcpundump: allow multiple packet lengths" (#1780553)
+- Backport "ovs-tcpundump: exit when getting version" (#1780555)
+- Backport "ovs-check-dead-ifs: python3 print format" (#1780563)
+- Backport "ovs-check-dead-ifs: unshadow pid variable" (#1780563)
+- Backport "flake8: also check the ovs-check-dead-ifs script" (#1780563)
+
+* Wed Dec 04 2019 Timothy Redaelli <tredaelli@redhat.com> - 2.12.0-10
+- Rebase internal DPDK to 18.11.5 (#1773780) (CVE-2019-14818)
+
+* Tue Nov 26 2019 Lorenzo Bianconi <lorenzo.bianconi@redhat.com> - 2.12.0-9
+- Backport "jsonrpc: increase input buffer size from 512 to 4096" (#1720653)
+
+* Fri Nov 22 2019 Flavio Leitner <fbl@redhat.com> - 2.12.0-8
+- updated spec to conflict with previous versions.
+
+* Fri Nov 22 2019 Flavio Leitner <fbl@redhat.com> - 2.12.0-7
+- Backport "ofproto-dpif: Allow IPv6 ND Extensions only if supported" (#1773598)
+  [df5db2a7a0fe9a4b6f5eafaada20a9b834aebbac]
+
+* Wed Nov 13 2019 Numan Siddique <nusiddiq@redhat.com> - 2.12.0-6
+- Backport "ovsdb-server: Allow replication from older schema version servers" (#1771854)
+
+* Tue Nov 12 2019 David Marchand <david.marchand@redhat.com> - 2.12.0-5
+- Backport "netdev-dpdk: Track vhost tx contention." (#1771390)
+
+* Tue Nov 05 2019 David Marchand <david.marchand@redhat.com> - 2.12.0-4
+- Renumbered dpdk patches
+- Backport IOVA fixes (#1769027)
+
+* Mon Oct 14 2019 Numan Siddique <nusiddiq@redhat.com> - 2.12.0-3
+- Backport "ovsdb-server: Don't drop all connections on read/write status change" (#1761573)
+
+* Tue Oct 08 2019 Flavio Leitner <fbl@redhat.com> - 2.12.0-2
+- updated to 2.12.0 plus patches till 093fd99a4c12d (#1758820)
+
+* Mon Oct 07 2019 Aaron Conole <aconole@redhat.com> - 2.12.0-1.20190723gitcbff264
+- Backport "vswitch: ratelimit the device add log" (#1737146)
+
+* Wed Jul 24 2019 Open vSwitch Bot <null@redhat.com> - 2.12.0-0.20190723gitcbff264
+- Snapshot of branch-2.12 cbff264a084a
+
+* Tue Jul 16 2019 Timothy Redaelli <tredaelli@redhat.com> - 2.11.0-18
+- Increase CONFIG_RTE_MAX_ETHPORTS to 128 (#1730421)
+
+* Tue Jul 16 2019 Timothy Redaelli <tredaelli@redhat.com> - 2.11.0-17
+- Backport "tunnel: Add layer 2 IPv6 GRE encapsulation support." and
+  "netdev-vport: Make ip6gre netdev type to use TC rules" (#1725623)
+
+* Fri Jul 12 2019 Timothy Redaelli <tredaelli@redhat.com> - 2.11.0-16
+- Rebase internal DPDK to 18.11.2 (#1713698)
+
+* Tue Jul 09 2019 David Marchand <david.marchand@redhat.com> - 2.11.0-15
+- Backport "net/i40e: fix dropped packets statistics name" (#1728610)
+
+* Tue Jul 02 2019 Timothy Redaelli <tredaelli@redhat.com> - 2.11.0-14
+- Backport "netdev-tc-offloads: Use correct hook qdisc at init tc flow" (#1721219)
+
+* Fri Jun 21 2019 Timothy Redaelli <tredaelli@redhat.com> - 2.11.0-13
+- Backport "netdev-tc-offloads: Support match on priority tags" (#1722249)
+
+* Thu Jun 13 2019 Maxime Coquelin <maxime.coquelin@redhat.com> - 2.11.0-12
+- Backport Vhost performance regression fixes (#1672538)
+
+* Thu Jun 13 2019 Flavio Leitner <fbl@redhat.com> - 2.11.0-11
+- Backport "rhel: limit stack size to 2M." (#1720315)
+
+* Thu May 16 2019 Pablo Cascón <pablo.cascon@redhat.com> - 2.11.0-10
+- Backport "ovs-tc: support OvS internal port offload" and deps (#1702334)
+
+* Wed Apr 24 2019 Numan Siddique <nusiddiq@redhat.com> - 2.11.0-9
+- Backport "[OVN] Fragmentation support - check_pkt_larger action" (#1702564)
+
+* Thu Apr 11 2019 Kevin Traynor <ktraynor@redhat.com> - 2.11.0-8
+- Backport "net/qede: support IOVA VA mode" (#1684605)
+
+* Wed Apr 10 2019 David Marchand <david.marchand@redhat.com> - 2.11.0-7
+- Backport cpu affinity fixes (#1687320)
+
+* Tue Apr 09 2019 Timothy Redaelli <tredaelli@redhat.com> - 2.11.0-6
+- Add missing dependencies for ovs-tcpdump (#1697978)
+
+* Tue Mar 26 2019 Flavio Leitner <fbl@redhat.com> - 2.11.0-5
+- fixed netlink msg corruption when updating netdev. (#1692812)
+
+* Tue Mar 12 2019 Davide Caratti <dcaratti@redhat.com> - 2.11.0-4
+- Backport "net/bnxt: support IOVA VA mode" (#1645523)
+
+* Tue Mar 12 2019 Timothy Redaelli <tredaelli@redhat.com> - 2.11.0-3
+- Backport "ovs-ctl: Permit to specify additional options" (#1687775)
+- Remove useless -fPIC from DPDK
+
+* Fri Mar 01 2019 Timothy Redaelli <tredaelli@redhat.com> - 2.11.0-2
+- Backport "rhel: Use PIDFile on forking systemd service files" (#1684477)
+
+* Thu Feb 28 2019 Timothy Redaelli <tredaelli@redhat.com> - 2.11.0-1
+- Update to official 2.11 release
+
+* Thu Jan 31 2019 Open vSwitch Bot <null@redhat.com> - 2.11.0-0.20190129gitd3a10db
+- Snapshot of branch-2.11 d3a10db4fd38
+
+* Sun Jan 27 2019 Open vSwitch Bot <null@redhat.com> - 2.11.0-0.20190126gitd4ff5b2
+- Snapshot of branch-2.11 d4ff5b2be7fc
+
+* Mon Jan 14 2019 Timothy Redaelli <tredaelli@redhat.com> - 2.11.0-0.20190114gitadb3f0b
+- Update to a snapshot of OVS 2.11 from master
+
+* Mon Jan 7 2019 Lorenzo Bianconi <lorenzo.bianconi@redhat.com> - 2.10.0-42
+- Backport "OVN: add static IP support to IPAM" (#1664028)
+
+* Thu Jan 03 2019 Timothy Redaelli <tredaelli@redhat.com> - 2.10.0-41
+- Backport some patches to improve offload indications (#1655990)
+
+* Wed Jan 02 2019 Timothy Redaelli <tredaelli@redhat.com> - 2.10.0-40
+- Add "Requires: openvswitch = %%{version}-%%{release}" to python-openvswitch2.10 (#1662944)
+
+* Wed Jan 2 2019 Lorenzo Bianconi <lorenzo.bianconi@redhat.com> - 2.10.0-39
+- Backport "OVN: add mac address only support to IPAM/MACAM" (#1662905)
+
+* Thu Dec 20 2018 Numan Siddique <nusiddiq@redhat.com> - 2.10.0-38
+- Backport "ovn-controller: Inject GARPs to logical switch pipeline to update neighbors" (#1643902)
+
+* Tue Dec 18 2018 David Marchand <david.marchand@redhat.com> - 2.10.0-37
+- Backport 'ovs-ctl: fix system-id.conf owner' (#1659391)
+- Do not check /var/log/openvswitch owner/group (#1659391)
+
+* Tue Dec 18 2018 Numan Siddique <nusiddiq@redhat.com> - 2.10.0-36
+- Backport "ovn: Fix the invalid eth.dst and ip6.dst set by nd_ns action for certain cases." (#1656018)
+
+* Mon Dec 10 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.10.0-35
+- Backport "dpif-netdev: Add vlan to mask for flow_put operation" (#1649516)
+
+* Tue Nov 27 2018 Numan Siddique <nusiddiq@redhat.com> - 2.10.0-34
+- Backport "ovn: Avoid tunneling for VLAN packets redirected to a gateway chassis" (#1561880)
+
+* Fri Nov 23 2018 Eelco Chaudron <echaudro@redhat.com> - 2.10.0-33
+- Backport "mem: fix memory initialization time" (#1647498)
+
+* Thu Nov 22 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.10.0-32
+- Backport "tests: Use the default key length when generating RSA keys"
+
+* Wed Nov 14 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.10.0-31
+- Backport "net/qede: fix crash when configure fails" (#1648183)
+
+* Tue Nov 13 2018 Lorenzo Bianconi <lorenzo.bianconi@redhat.com> - 2.10.0-30
+- Backport 'pinctrl: Fix dp_packet structure leak' and 'pinctrl: Fix crash on
+  buffered packets hmap double remove'. Moreover align 'ovn -- 3 HVs, 3 LS, 3
+  lports/LS, 1 LR' test to upstream one (#1649008)
+
+* Tue Nov 13 2018 Eelco Chaudron <echaudro@redhat.com> - 2.10.0-29
+- Backup "netdev-dpdk: Bring link down when NETDEV_UP is not set" (#1645288)
+
+* Fri Nov 09 2018 Lorenzo Bianconi <lorenzo.bianconi@redhat.com> - 2.10.0-28
+- OVN: configure L2 address according to the used IP address (#1648272)
+
+* Thu Nov 08 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.10.0-27
+- Backport "bond: Honor updelay and downdelay when LACP is in use" (#1646923)
+
+* Thu Nov 08 2018 Lorenzo Bianconi <lorenzo.bianconi@redhat.com> - 2.10.0-26
+- OVN: introduce mac_prefix support to IPAM (#1647750)
+
+* Tue Nov 06 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.10.0-25
+- Backport "ofproto-dpif-xlate: Avoid deadlock on multicast snooping recursion" (#1643065)
+
+* Tue Nov 06 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.10.0-24
+- Re-enable "make check"
+
+* Fri Nov 02 2018 Kevin Traynor <ktraynor@redhat.com> - 2.10.0-23
+- Update to DPDK 17.11.4 (#1566069)
+
+* Thu Oct 25 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.10.0-22
+- Ship statically linked OVS binaries (#1643478)
+
+* Tue Oct 23 2018 Numan Siddique <nusiddiq@redhat.com> - 2.10.0-21
+- Backport connmgr: Fix vswitchd abort when a port is added and the controller is down (#1637926)
+
+* Mon Oct 22 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.10.0-20
+- Backport "ovn: Add DHCP support for option 252" (#1641740)
+
+* Wed Oct 17 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.10.0-19
+- Backport "net/i40e: fix VLAN offload setting issue" (#1637893)
+
+* Wed Oct 17 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.10.0-18
+- Backport "Python: Make Row's __getattr__ less error prone" (#1639963)
+
+* Fri Oct 12 2018 Numan Siddique <nusiddiq@redhat.com> - 2.10.0-17
+- OVN: ovn-ctl: Fix the wrong pidfile argument passed to ovsdb-servers (#1636714)
+
+* Fri Oct 12 2018 Numan Siddique <nusiddiq@redhat.com> - 2.10.0-16
+- OVN: Support processing DHCPv6 information request message type (#1636874)
+
+* Fri Oct 12 2018 Numan Siddique <nusiddiq@redhat.com> - 2.10.0-15
+- OVN: Fix IPv6 DAD failure for container ports (#1616129)
+
+* Thu Oct 11 2018 Numan Siddique <nusiddiq@redhat.com> - 2.10.0-14
+- OVN: Fix the issue in IPv6 Neigh Solicitation responder for router IPs (#1567735)
+
+* Tue Oct 09 2018 Lorenzo Bianconi <lorenzo.bianconi@redhat.com> - 2.10.0-13
+- OVN: add buffering support for ip packets (#1637466)
+
+* Mon Oct 08 2018 Matteo Croce <mcroce@redhat.com> - 2.10.0-12
+- Fix null pointer (#1634015)
+* Tue Oct 02 2018 Lorenzo Bianconi <lorenzo.bianconi@redhat.com> - 2.10.0-11
+- OVN: add CT_LB action to ovn-trace (#1635344)
+
+* Mon Oct 01 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.10.0-10
+- Backport NFP PMD's non-root related commits for > 1TB of RAM (#1634820):
+  - net/nfp: support IOVA VA mode
+  - bus/pci: forbid IOVA mode if IOMMU address width too small
+  - net/nfp: check hugepages IOVAs based on DMA mask
+  - mem: use address hint for mapping hugepages
+  - bus/pci: use IOVAs check when setting IOVA mode
+  - mem: add function for checking memsegs IOVAs addresses
+  - mem: fix max DMA maskbit size
+
+* Thu Sep 27 2018 Matteo Croce <mcroce@redhat.com> - 2.10.0-9
+- Backport "Remove support for multiple queues per port" (#1634015)
+
+* Wed Sep 26 2018 Matteo Croce <mcroce@redhat.com> - 2.10.0-8
+- Backport EMC reorder fix (#1565205)
+
+* Wed Sep 26 2018 Matteo Croce <mcroce@redhat.com> - 2.10.0-7
+- Backport per-port socket netlink creation with EPOLLEXCLUSIVE (#1634015)
+
+* Fri Sep 21 2018 Kevin Traynor <ktraynor@redhat.com> - 2.10.0-6
+- Backport roundrobin rxq to pmd assignment (#1631797)
+
+* Fri Sep 14 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.10.0-5
+- Backport "ovs-save: Don't always include the default flow during restore" (#1628905)
+
+* Thu Sep 13 2018 Flavio Leitner <fbl@redhat.com> - 2.10.0-4
+- applied Fix translation of groups with no buckets (#1626488)
+
+* Thu Sep 13 2018 Flavio Leitner <fbl@redhat.com> - 2.10.0-3
+- Removed provides and obsoletes for openvswitch-dpdk (#1628603)
+
+* Tue Sep 11 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.10.0-2
+- Backported "net/mlx{4,5}: avoid stripping the glue library" (#1627700)
+
+* Tue Aug 21 2018 Flavio Leitner <fbl@redhat.com> - 2.10-1
+- Updated with 2.10.0 official tarball (#1618551)
+
+* Fri Aug 17 2018 Flavio Leitner <fbl@redhat.com> - 2.10-0
+- Sync'ed with fd-next (4452afaa58)
+- vhost: flush IOTLB cache on new mem table handling (#1609643)
+- OVN: introduce ovs-appctl command to monitor HVs sb (#1593804)
+
+* Thu Aug 16 2018 Open vSwitch Bot <null@redhat.com> - 2.10-0
+- Snapshot of branch-2.10 6bced903bb50
+
+* Fri Aug 10 2018 Open vSwitch Bot <null@redhat.com> - 2.10-0
+- Snapshot of branch-2.10 58a7ce60b9f7
+
+* Wed Aug 08 2018 Open vSwitch Bot <null@redhat.com> - 2.10-0
+- Snapshot of branch-2.10 faf64fb8861f
+
+* Tue Aug 07 2018 Flavio Leitner <fbl@redhat.com> - 2.10-0
+- Snapshot of branch master 7a78d1c1ad73
+
+* Tue Jul 31 2018 Flavio Leitner <fbl@redhat.com> - 2.10-0
+- Sync'ed spec file with fd-next-57 (shared linking).
+  (DPDK patches not included)
+- Fixed package dependencies (#1610603)
+
+* Fri Jul 27 2018 Open vSwitch Bot <null@redhat.com> - 2.10-0
+- Snapshot of branch master b1ca64f020f7
+
+* Fri Jul 27 2018 Flavio Leitner <fbl@redhat.com> - 2.10-0
+- Replace macro %%{name} with 'openvswitch'.
+
+* Tue Jul 24 2018 Open vSwitch Bot <null@redhat.com> - 2.10-0
+- Snapshot of branch master 1ac690899592
+
+* Tue Jul 24 2018 Flavio Leitner <fbl@redhat.com> - 2.10-0
+- Versioned conflict to be less than 2.10.
+
+* Thu Jul 19 2018 Open vSwitch Bot <null@redhat.com> - 2.10-0
+- Snapshot of branch master 3c921cc2b6b7
+
+* Wed Jul 18 2018 Flavio Leitner <fbl@redhat.com> - 2.10-0
+- Fixed unbound requires and buildrequires.
+
+* Tue Jul 10 2018 Open vSwitch Bot <null@redhat.com> - 2.10-0
+- Snapshot of branch master 93c0ef12039c
+
+* Tue Jul 03 2018 Open vSwitch Bot <null@redhat.com> - 2.10-0
+- Snapshot of branch master 79d0dfa4e99a
+
+* Wed Jun 27 2018 Open vSwitch Bot <null@redhat.com> - 2.10-0
+- Snapshot of branch master e46148133067
+
+* Wed Jun 27 2018 Open vSwitch Bot <null@redhat.com> - 2.10-0
+- Snapshot of branch master 61677bf976e9
+
+* Tue Jun 26 2018 Flavio Leitner <fbl@redhat.com> - 2.10-0
+- snapshot of branch master
+
+* Mon Jun 11 2018 Aaron Conole <aconole@redhat.com> - 2.9.0-47
+- Backport "net/mlx5: fix memory region cache lookup" (#1581230)
+- Backport "net/mlx5: fix memory region boundary checks" (#1581230)
+
+* Mon Jun 11 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-46
+- Backport "net/qede: fix memory alloc for multiple port reconfig" (#1589866)
+
+* Thu Jun 07 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-45
+- Backport "net/qede: fix unicast filter routine return code" (#1578590)
+
+* Thu Jun 07 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-44
+- Backport "net/qede: fix L2-handles used for RSS hash update" (#1578981)
+
+* Tue May 29 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-43
+- Backport "net/nfp: fix lock file usage" (#1583670)
+
+* Mon May 28 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-42
+- Backport "net/nfp: configure default RSS reta table" (#1583161)
+
+* Mon May 28 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-41
+- Backport "netdev-dpdk: don't enable scatter for jumbo RX support for nfp" (#1578324)
+
+* Mon May 28 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-40
+- Backport "ovn pacemaker: Fix promotion issue when the master node is reset" (#1579025)
+
+* Thu May 24 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-39
+- Backport spec file modfications from "rhel: Use openvswitch user/group for
+  the log directory"
+
+* Wed May 23 2018 Maxime Coquelin <maxime.coquelin@redhat.com> - 2.9.0-38
+- Backport "vhost: improve dirty pages logging performance" (#1552465)
+
+* Wed May 16 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-37
+- Backport "ovn: Set proper Neighbour Adv flag when replying for NS request for
+  router IP" (#1567735)
+
+* Mon May 14 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-36
+- Enable QEDE PMDs (only on x86_64) (#1578003)
+
+* Thu May 10 2018 Lorenzo Bianconi <lorenzo.bianconi@redhat.com> - 2.9.0-35
+- ovn-nbctl: Show gw chassis in decreasing prio order (#1576725)
+
+* Wed May 09 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-34
+- Fix hugetlbfs group when DPDK is enabled
+
+* Wed May 09 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-33
+- Backport "eal: abstract away the auxiliary vector" (#1560728)
+- Re-enable DPDK on ppc64le
+
+* Wed May 09 2018 Aaron Conole <aconole@redhat.com> - 2.9.0-32
+- Require the selinux policy module (#1555440)
+
+* Tue May 08 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-31
+- Backport fix QEDE PMD (#1494616)
+
+* Tue May 08 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-30
+- Backport "net/nfp: fix mbufs releasing when stop or close" (#1575067)
+
+* Sun May 06 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-29
+- Backport net/mlx4: fix broadcast Rx (#1568908)
+
+* Fri May 04 2018 Kevin Traynor <ktraynor@redhat.com> - 2.9.0-28
+- Backport mempool use after free fix and debug (#1575016)
+
+* Fri May 04 2018 Aaron Conole <aconole@redhat.com> - 2.9.0-27
+- Fix the email address in the changelog.
+
+* Wed May 02 2018 Aaron Conole <aconole@redhat.com> - 2.9.0-26
+- Backport fix for missing user during install/upgrade (#1559374)
+
+* Mon Apr 30 2018 Jakub Sitnicki <jkbs@redhat.com> - 2.9.0-25
+- Backport fix for Unicode encoding in Python IDL (#1547065)
+
+* Thu Apr 26 2018 Aaron Conole <aconole@redhat.com> - 2.9.0-24
+- Backport the cisco enic patches
+
+* Thu Apr 26 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-23
+- Backport a fix for "Offload of Fragment Matching in OvS Userspace" (#1559111)
+
+* Thu Apr 26 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-22
+- Backport "ovn-controller: Handle Port_Binding's "requested-chassis" option" (#1559222)
+
+* Thu Apr 26 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-21
+- Backport "python: avoid useless JSON conversion to enhance performance" (#1551016)
+
+* Thu Apr 26 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-20
+- Backport "ovn: Set router lifetime value for IPv6 periodic RA" (#1567735)
+- Remove useless libpcap-devel dependency
+
+* Mon Apr 23 2018 Kevin Traynor <ktraynor@redhat.com> - 2.9.0-19
+- Backport DPDK CVE-2018-1059 (#1544298)
+
+* Fri Apr 20 2018 Davide Caratti <dcaratti@redhat.com> - 2.9.0-18
+- Backport fix for PMD segfault when BNXT receives tunneled traffic (#1567634)
+
+* Mon Apr 16 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-17
+- Backport patches to make NFP detect the correct firmware (#1566712)
+- Backport "rhel: Fix literal dollar sign usage in systemd service files"
+
+* Fri Mar 30 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-16
+- Backport "rhel: don't drop capabilities when running as root"
+- Change owner of /etc/openvswitch during upgrade
+
+* Tue Mar 27 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-14
+- Disable DPDK on ppc64le
+
+* Sun Mar 25 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-13
+- Disable DPDK on aarch64
+
+* Thu Mar 22 2018 Flavio Leitner <fbl@redhat.com> - 2.9.0-12
+- fixes i40e link status timeout trough direct register access (#1559612)
+
+* Thu Mar 22 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-11
+- Enable BNXT, MLX4, MLX5 and NFP (aligned from FDB)
+
+* Thu Mar 22 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-10
+- Backport "Offload of Fragment Matching in OvS Userspace" (#1559111)
+
+* Thu Mar 15 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-9
+- Avoid to unpack openvswitch 2 times and to overwrite all the patched files
+  Fixes 2.9.0-4
+
+* Thu Mar 08 2018 Eric Garver <egarver@redhat.com> - 2.9.0-8
+- Backport "ofproto-dpif-xlate: translate action_set in clone action" (#1544892)
+
+* Thu Mar 08 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-7
+- Backport "ovn: Calculate UDP checksum for DNS over IPv6" (#1553023)
+
+* Tue Mar 06 2018 Aaron Conole <aconole@redhat.com> - 2.9.0-6
+- Require the latest rhel selinux policy (#1549673)
+
+* Fri Mar 02 2018 Matteo Croce <mcroce@redhat.com> - 2.9.0-5
+- Backport vhost patches (#1541881)
+
+* Fri Mar 02 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-4
+- Don't require python-sphinx directly, but built it since python-sphinx is in
+  the optional repository that is not available on RHEV and TPS test fails.
+
+* Tue Feb 20 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-3
+- Don't verify the user and group of /etc/openvswitch and /etc/sysconfig/openvswitch
+  This is needed since we cannot change the user and group if you upgrade from
+  an old version that still uses root:root.
+
+* Tue Feb 20 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.9.0-1
+- Update to OVS 2.9.0 + DPDK 17.11 (#1475436)
+- Backport of ofproto-dpif: Delete system tunnel interface when remove ovs bridge (#1505776)
+- Backport DPDK patches from FDB (vhost user async fix and enic fixes)
+- Backport 94cd8383e297 and 951d79e638ec to fix permissions (#1489465)
+- Use a static configuration file for DPDK
+
+* Fri Jan 12 2018 Timothy Redaelli <tredaelli@redhat.com> - 2.7.3-3.git20180112
+- Rebase to latest OVS branch-2.7 fixes + DPDK 16.11.4 (#1533872)
+
+* Wed Oct 18 2017 Timothy Redaelli <tredaelli@redhat.com> - 2.7.3-2.git20171010
+- Remove ovs-test and ovs-vlan-test from openvswitch-test package
+- Add an option to enable openvswitch-ovn-docker package (disabled by default)
+
+* Tue Oct 10 2017 Timothy Redaelli <tredaelli@redhat.com> - 2.7.3-1.git20171010
+- Update to OVS 2.7.3 + branch-2.7 bugfixes (#1502742)
+
+* Mon Sep 18 2017 Kevin Traynor <ktraynor@redhat.com> - 2.7.2-10.git20170914
+- Backport of fix for i40e flow control get (#1491791)
+
+* Thu Sep 14 2017 Timothy Redaelli <tredaelli@redhat.com> - 2.7.2-9.git20170914
+- Rebase to latest OVS branch fixes + DPDK 16.11.3
+
+* Wed Sep 06 2017 Timothy Redaelli <tredaelli@redhat.com> - 2.7.2-8.git20170719
+- Backport of enic driver crash fix to dpdk-16.11 (#1489010)
+
+* Tue Aug 22 2017 Aaron Conole <aconole@redhat.com> - 2.7.2-7.git20170719
+- Re-enable Cisco enic PMD (#1482675)
+
+* Tue Aug 22 2017 Aaron Conole <aconole@redhat.com> - 2.7.2-6.git20170719
+- Update based on multi-arch
+
+* Tue Aug 22 2017 Aaron Conole <aconole@redhat.com> - 2.7.2-5.git20170719
+- Disable unsupported PMDs (#1482675)
+- software and hardware PMDs audited by the team
+
+* Thu Aug 03 2017 John W. Linville <linville@redhat.com> - 2.7.2-4.git20170719
+- Backport mmap fix for memory initialization on ppc64le to dpdk-16.11
+
+* Thu Aug 03 2017 John W. Linville <linville@redhat.com> - 2.7.2-3.git20170719
+- Backport support for vfio-pci based PMD in ppc64le to dpdk-16.11
+
+* Thu Aug 03 2017 John W. Linville <linville@redhat.com> - 2.7.2-2.git20170719
+- Backport support for Intel XL710 (i40e) pmd in ppc64le to dpdk-16.11
+
+* Wed Jul 19 2017 Timothy Redaelli <tredaelli@redhat.com> - 2.7.2-1.git20170719
+- Update to OVS 2.7.2 + branch-2.7 bugfixes (#1472854)
+- Add a symlink of the OCF script in the OCF resources folder (#1472729)
+
+* Mon Jul 10 2017 Timothy Redaelli <tredaelli@redhat.com> - 2.7.1-1.git20170710
+- Align to FDB openvswitch-2.7.1-1.git20170710.el7fdb (#1459286)
+
+* Wed Jun 07 2017 Timothy Redaelli <tredaelli@redhat.com> - 2.6.1-20.git20161206
+- backport "mcast-snooping: Avoid segfault for vswitchd" (#1456356)
+- backport "mcast-snooping: Flush ports mdb when VLAN cfg changed." (#1456358)
+
+* Sun May 21 2017 Lance Richardson <lrichard@redhat.com> - 2.6.1-19.git20161206
+- backport patch to not automatically restard ovn svcs after upgrade (#1438901)
+
+* Tue May 09 2017 Timothy Redaelli <tredaelli@redhat.com> - 2.6.1-18.git20161206
+- rconn: Avoid abort for ill-behaved remote (#1449109)
+
+* Fri May 05 2017 Timothy Redaelli <tredaelli@redhat.com> - 2.6.1-17.git20161206
+- Fix race in "PMD - change numa node" test (#1447714)
+- Report only un-deleted groups in group stats replies. (#1447724)
+- Workaround some races in "ofproto - asynchronous message control" tests (#1448536)
+
+* Mon Apr 10 2017 Eric Garver <egarver@redhat.com> - 2.6.1-16.git20161206
+- Fix an issue using set_field action on nw_ecn (#1410715)
+
+* Fri Mar 31 2017 Kevin Traynor <ktraynor@redhat.com> - 2.6.1-15.git20161206
+- backport patch to fix uni-dir vhost perf drop (#1414919)
+
+* Wed Mar 29 2017 Lance Richardson <lrichard@redhat.com> - 2.6.1-14.git20161206
+- backport patch to correct port number in firewalld service file (#1390938)
+
+* Fri Mar 10 2017 Timothy Redaelli <tredaelli@redhat.com> - 2.6.1-13.git20161206
+- backport patch to enable/disable libcap-ng support (--with libcapng)
+
+* Thu Mar 09 2017 Aaron Conole <aconole@redhat.com> - 2.6.1-12.git20161206
+- Fix an MTU issue with ovs mirror ports (#1426342)
+
+* Wed Mar 08 2017 Lance Richardson <lrichard@redhat.com> - 2.6.1-11.git20161206
+- update spec file to install firewalld service files (#1390938)
+
+* Thu Feb 16 2017 Aaron Conole <aconole@redhat.com> - 2.6.1-10.git20161206
+- vhostuser client mode support for ifup/ifdown (#1418957)
+
+* Thu Feb 16 2017 Lance Richardson <lrichard@redhat.com> - 2.6.1-9.git20161206
+-  OVN-DHCP is not sending DHCP responses after a MAC change in north db (#1418261)
+
+* Thu Feb 16 2017 Timothy Redaelli <tredaelli@redhat.com> - 2.6.1-8.git20161206
+- systemd service starts too fast (#1422227)
+
+* Fri Feb 10 2017 Lance Richardson <lrichard@redhat.com> - 2.6.1-7.git20161206
+- iptables should be easily configurable for OVN hosts and OVN central server (#1390938)
+
+* Thu Feb 09 2017 Aaron Conole <aconole@redhat.com> - 2.6.1-6.git20161206
+- ovn: IPAM has no reply to DHCP request for renewal (#1415449)
+
+* Tue Feb 07 2017 Timothy Redaelli <tredaelli@redhat.com> - 2.6.1-5.git20161206
+- ovn-controller: Provide the option to set Encap.options:csum (#1418742)
+
+* Mon Feb 06 2017 Flavio Leitner <fbl@redhat.com> 2.5.0-23.git20160727
+- fixed broken service after a package upgrade (#1403958)
+
+* Wed Dec 21 2016 Lance Richardson <lrichard@redhat.com> 2.6.1-3.git20161206
+- ovsdb-idlc: Initialize nonnull string columns for inserted rows. (#1405094)
+
+* Fri Dec 09 2016 Lance Richardson <lrichard@redhat.com> 2.6.1-2.git20161206
+- OVN: Support IPAM with externally specified MAC (#1368043)
+
+* Tue Dec 06 2016 Kevin Traynor <ktraynor@redhat.com> 2.6.1-1.git20161206
+- Update to OVS 2.6.1 + branch-2.6 bugfixes (#1335865)
+- Update to use DPDK 16.11 (#1335865)
+- Enable OVN
+
+* Tue Nov 22 2016 Flavio Leitner <fbl@redhat.com> 2.5.0-22.git20160727
+- ifnotifier: do not wake up when there is no db connection (#1397504)
+
+* Tue Nov 22 2016 Flavio Leitner <fbl@redhat.com> 2.5.0-21.git20160727
+- Use instant sending instead of queue (#1397481)
+
+* Mon Nov 21 2016 Flavio Leitner <fbl@redhat.com> 2.5.0-20.git20160727
+- dpdk vhost: workaround stale vring base (#1376217)
+
+* Thu Oct 20 2016 Aaron Conole <aconole@redhat.com> - 2.5.0-19.git20160727
+- Applied tnl fix (#1346232)
+
+* Tue Oct 18 2016 Aaron Conole <aconole@redhat.com> - 2.5.0-18.git20160727
+- Applied the systemd backports
+
+* Tue Oct 18 2016 Flavio Leitner <fbl@redhat.com> - 2.5.0-17.git20160727
+- Fixed OVS to not require SSSE3 if DPDK is not used (#1378501)
+
+* Tue Oct 18 2016 Flavio Leitner <fbl@redhat.com> - 2.5.0-16.git20160727
+- Fixed a typo (#1385096)
+
+* Tue Oct 18 2016 Flavio Leitner <fbl@redhat.com> - 2.5.0-15.git20160727
+- Do not restart the service after a package upgrade (#1385096)
+
+* Mon Sep 26 2016 Panu Matilainen <pmatilai@redhat.com> - 2.5.0-14.git20160727
+- Permit running just the kernel datapath tests (#1375660)
+
+* Wed Sep 14 2016 Panu Matilainen <pmatilai@redhat.com> - 2.5.0-13.git20160727
+- Obsolete openvswitch-dpdk < 2.6.0 to provide migration path
+- Add spec option to run kernel datapath tests (#1375660)
+
+* Fri Sep 09 2016 Panu Matilainen <pmatilai@redhat.com> - 2.5.0-12.git20160727
+- Backport ovs-tcpdump support (#1335560)
+- Add ovs-pcap, ovs-tcpdump and ovs-tcpundump to -test package
+
+* Thu Sep 08 2016 Panu Matilainen <pmatilai@redhat.com> - 2.5.0-11.git20160727
+- Add openvswitch-dpdk provide for testing and depending on dpdk-enablement
+- Disable bnx2x driver, it's not stable
+- Build dpdk with -Wno-error to permit for newer compilers
+- Drop subpkgs conditional from spec, its not useful anymore
+
+* Fri Aug 26 2016 Panu Matilainen <pmatilai@redhat.com> - 2.5.0-10.git20160727
+- Fix adding ukeys for same flow by different pmds (#1364898)
+
+* Thu Jul 28 2016 Flavio Leitner <fbl@redhat.com> - 2.5.0-9.git20160727
+- Fixed ifup-ovs to support DPDK Bond (#1360426)
+
+* Thu Jul 28 2016 Flavio Leitner <fbl@redhat.com> - 2.5.0-8.git20160727
+- Fixed ifup-ovs to delete the ports first (#1359890)
+
+* Wed Jul 27 2016 Flavio Leitner <fbl@redhat.com> - 2.5.0-7.git20160727
+- pull bugfixes from upstream 2.5 branch (#1360431)
+
+* Tue Jul 26 2016 Flavio Leitner <fbl@redhat.com> - 2.5.0-6.git20160628
+- Removed redundant provides for openvswitch
+- Added epoch to the provides for -static package
+
+* Thu Jul 21 2016 Flavio Leitner <fbl@redhat.com> - 2.5.0-5.git20160628
+- Renamed to openvswitch (dpdk enabled)
+- Enabled sub-packages
+- Removed conflicts to openvswitch
+- Increased epoch to give this package preference over stable
+
+* Tue Jun 28 2016 Panu Matilainen <pmatilai@redhat.com> - 2.5.0-4.git20160628
+- pull bugfixes from upstream 2.5 branch (#1346313)
+
+* Wed Apr 27 2016 Panu Matilainen <pmatilai@redhat.com> - 2.5.0-4
+- Enable DPDK bnx2x driver (#1330589)
+- Add README.DPDK-PMDS document listing drivers included in this package
+
+* Thu Mar 17 2016 Flavio Leitner <fbl@redhat.com> - 2.5.0-3
+- Run testsuite by default on x86 arches (#1318786)
+  (this sync the spec with non-dpdk version though the testsuite
+   was already enabled here)
+
+* Thu Mar 17 2016 Panu Matilainen <pmatilai@redhat.com> - 2.5.0-2
+- eliminate debuginfo-artifacts (#1281913)
+
+* Thu Mar 17 2016 Panu Matilainen <pmatilai@redhat.com> - 2.5.0-1
+- Update to OVS to 2.5.0 and bundled DPDK to 2.2.0 (#1317889)
+
+* Mon Nov 23 2015 Panu Matilainen <pmatilai@redhat.com>
+- Provide openvswitch ver-rel (#1281894)
+
+* Thu Aug 13 2015 Flavio Leitner <fbl@redhat.com>
+- ExclusiveArch to x86_64 (dpdk)
+- Provides bundled(dpdk)
+- Re-enable testsuite
+
+* Fri Aug 07 2015 Panu Matilainen <pmatilai@redhat.com>
+- Enable building from pre-release snapshots, update to pre 2.4 version
+- Bundle a minimal, private build of DPDK 2.0 and link statically
+- Rename package to openvswitch-dpdk, conflict with regular openvswitch
+- Disable all sub-packages
+
+* Wed Jan 12 2011 Ralf Spenneberg <ralf@os-s.net>
+- First build on F14