diff --git a/SOURCES/openvswitch-2.13.0.patch b/SOURCES/openvswitch-2.13.0.patch
index 2776047..6435404 100644
--- a/SOURCES/openvswitch-2.13.0.patch
+++ b/SOURCES/openvswitch-2.13.0.patch
@@ -1,7 +1,16 @@
diff --git a/.cirrus.yml b/.cirrus.yml
-index 1b32f55d65..9428164eee 100644
+index 1b32f55d65..263c2cd7ed 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
+@@ -3,7 +3,7 @@ freebsd_build_task:
+ freebsd_instance:
+ matrix:
+ image_family: freebsd-12-1-snap
+- image_family: freebsd-11-3-snap
++ image_family: freebsd-11-4-snap
+ cpu: 4
+ memory: 8G
+
@@ -16,6 +16,7 @@ freebsd_build_task:
prepare_script:
@@ -11,15 +20,13 @@ index 1b32f55d65..9428164eee 100644
configure_script:
diff --git a/.travis.yml b/.travis.yml
-index abd2a9117a..a59371c496 100644
+index abd2a9117a..1dca2045ce 100644
--- a/.travis.yml
+++ b/.travis.yml
-@@ -52,6 +52,18 @@ matrix:
+@@ -51,6 +51,15 @@ matrix:
+ - os: osx
compiler: clang
env: OPTS="--disable-ssl"
-
-+matrix:
-+ include:
+ - env: DEB_PACKAGE=1
+ addons:
+ apt:
@@ -29,10 +36,9 @@ index abd2a9117a..a59371c496 100644
+ - fakeroot
+ - devscripts
+ - equivs
-+
+
script: ./.travis/${TRAVIS_OS_NAME}-build.sh $OPTS
- notifications:
diff --git a/.travis/linux-build.sh b/.travis/linux-build.sh
index bb47b3ee19..dd89eab5f8 100755
--- a/.travis/linux-build.sh
@@ -230,10 +236,10 @@ index c6c6fd8bde..4bc5aef59d 100644
$ export DPDK_BUILD=$DPDK_DIR/$DPDK_TARGET
$ cd $DPDK_DIR
diff --git a/Documentation/topics/userspace-tso.rst b/Documentation/topics/userspace-tso.rst
-index 94eddc0b2f..369d70691d 100644
+index 94eddc0b2f..f7b6b2639a 100644
--- a/Documentation/topics/userspace-tso.rst
+++ b/Documentation/topics/userspace-tso.rst
-@@ -91,21 +91,19 @@ The current OvS userspace `TSO` implementation supports flat and VLAN networks
+@@ -91,20 +91,24 @@ The current OvS userspace `TSO` implementation supports flat and VLAN networks
only (i.e. no support for `TSO` over tunneled connection [VxLAN, GRE, IPinIP,
etc.]).
@@ -258,10 +264,14 @@ index 94eddc0b2f..369d70691d 100644
-
-This fix is expected to be included in the 19.11.1 release. When OVS migrates
-to this DPDK release, this limitation can be removed.
--
++All kernel devices that use the raw socket interface (veth, for example)
++require the kernel commit 9d2f67e43b73 ("net/packet: fix packet drop as of
++virtio gso") in order to work properly. This commit was merged in upstream
++kernel 4.19-rc7, so make sure your kernel is either newer or contains the
++backport.
+
~~~~~~~~~~~~~~~~~~
Performance Tuning
- ~~~~~~~~~~~~~~~~~~
diff --git a/Makefile.am b/Makefile.am
index b279303d18..27ef9e4b48 100644
--- a/Makefile.am
@@ -276,12 +286,16 @@ index b279303d18..27ef9e4b48 100644
if WIN32
psep=";"
diff --git a/NEWS b/NEWS
-index dab94e924d..128db0f619 100644
+index dab94e924d..1a40ee19f4 100644
--- a/NEWS
+++ b/NEWS
-@@ -1,3 +1,14 @@
+@@ -1,3 +1,18 @@
+v2.13.2 - xx xxx xxxx
+---------------------
++ - IPsec:
++ * Fixed support of strongswan 5.7+ in ovs-ipsec-monitor.
++ - DPDK:
++ * Fixed support of 'net_virtio' devices.
+
+v2.13.1 - 30 Jul 2020
+---------------------
@@ -38313,7 +38327,7 @@ index 5289a70f6e..cf009f8264 100644
#define OVS_REQ_RDLOCK(...) __attribute__((shared_locks_required(__VA_ARGS__)))
#define OVS_ACQ_RDLOCK(...) __attribute__((shared_lock_function(__VA_ARGS__)))
diff --git a/ipsec/ovs-monitor-ipsec.in b/ipsec/ovs-monitor-ipsec.in
-index 37e3703245..1c185bbd85 100755
+index 37e3703245..b84608a55d 100755
--- a/ipsec/ovs-monitor-ipsec.in
+++ b/ipsec/ovs-monitor-ipsec.in
@@ -101,7 +101,7 @@ class XFRM(object):
@@ -38334,7 +38348,30 @@ index 37e3703245..1c185bbd85 100755
if line == '':
break
a = line.split(" ")
-@@ -246,7 +246,7 @@ conn prevent_unencrypted_vxlan
+@@ -145,10 +145,18 @@ class StrongSwanHelper(object):
+ """This class does StrongSwan specific configurations."""
+
+ STRONGSWAN_CONF = """%s
+-charon.plugins.kernel-netlink.set_proto_port_transport_sa = yes
+-charon.plugins.kernel-netlink.xfrm_ack_expires = 10
+-charon.load_modular = yes
+-charon.plugins.gcm.load = yes
++charon {
++ plugins {
++ kernel-netlink {
++ set_proto_port_transport_sa = yes
++ xfrm_ack_expires = 10
++ }
++ gcm {
++ load = yes
++ }
++ }
++ load_modular = yes
++}
+ """ % (FILE_HEADER)
+
+ CONF_HEADER = """%s
+@@ -246,7 +254,7 @@ conn prevent_unencrypted_vxlan
proc = subprocess.Popen([self.IPSEC, 'status'], stdout=subprocess.PIPE)
while True:
@@ -38343,7 +38380,7 @@ index 37e3703245..1c185bbd85 100755
if line == '':
break
tunnel_name = line.split(":")
-@@ -340,7 +340,7 @@ conn prevent_unencrypted_vxlan
+@@ -340,7 +348,7 @@ conn prevent_unencrypted_vxlan
# about possibility of ovs-monitor-ipsec to block for each tunnel
# while strongSwan sends IKE messages over Internet.
conns_dict = self.get_active_conns()
@@ -38352,7 +38389,7 @@ index 37e3703245..1c185bbd85 100755
tunnel = monitor.tunnels.get(ifname)
for conn in conns:
# IPsec "connection" names that we choose in strongswan
-@@ -536,7 +536,7 @@ conn prevent_unencrypted_vxlan
+@@ -536,7 +544,7 @@ conn prevent_unencrypted_vxlan
# Delete old connections
conns_dict = self.get_active_conns()
@@ -38361,7 +38398,7 @@ index 37e3703245..1c185bbd85 100755
tunnel = monitor.tunnels.get(ifname)
for conn in conns:
-@@ -608,7 +608,7 @@ conn prevent_unencrypted_vxlan
+@@ -608,7 +616,7 @@ conn prevent_unencrypted_vxlan
proc = subprocess.Popen([self.IPSEC, 'status'], stdout=subprocess.PIPE)
while True:
@@ -38370,7 +38407,7 @@ index 37e3703245..1c185bbd85 100755
if line == '':
break
-@@ -989,7 +989,7 @@ class IPsecMonitor(object):
+@@ -989,7 +997,7 @@ class IPsecMonitor(object):
skb_mark = None
is_valid = False
@@ -38379,7 +38416,7 @@ index 37e3703245..1c185bbd85 100755
pki[0] = row.other_config.get("certificate")
pki[1] = row.other_config.get("private_key")
pki[2] = row.other_config.get("ca_cert")
-@@ -1016,7 +1016,7 @@ class IPsecMonitor(object):
+@@ -1016,7 +1024,7 @@ class IPsecMonitor(object):
table."""
ifaces = set()
@@ -38388,7 +38425,7 @@ index 37e3703245..1c185bbd85 100755
if not self.is_tunneling_type_supported(row.type):
continue
if not self.is_ipsec_required(row.options):
-@@ -1047,7 +1047,7 @@ class IPsecMonitor(object):
+@@ -1047,7 +1055,7 @@ class IPsecMonitor(object):
return
s = ""
conns = self.ike_helper.get_active_conns()
@@ -38397,7 +38434,7 @@ index 37e3703245..1c185bbd85 100755
s += tunnel.show(policies, securities, conns)
unix_conn.reply(s)
-@@ -1064,7 +1064,7 @@ class IPsecMonitor(object):
+@@ -1064,7 +1072,7 @@ class IPsecMonitor(object):
if self.ike_helper.config_global(self):
needs_refresh = True
@@ -38406,7 +38443,7 @@ index 37e3703245..1c185bbd85 100755
if tunnel.last_refreshed_version != tunnel.version:
tunnel.last_refreshed_version = tunnel.version
needs_refresh = True
-@@ -1094,7 +1094,7 @@ class IPsecMonitor(object):
+@@ -1094,7 +1102,7 @@ class IPsecMonitor(object):
proc.wait()
if proc.returncode:
raise Exception(proc.stderr.read())
@@ -38416,7 +38453,7 @@ index 37e3703245..1c185bbd85 100755
raise Exception("No CN in the certificate subject.")
except Exception as e:
diff --git a/lib/classifier.c b/lib/classifier.c
-index 0fad953213..f2c3497c2d 100644
+index 0fad953213..2a1d155dad 100644
--- a/lib/classifier.c
+++ b/lib/classifier.c
@@ -393,7 +393,9 @@ classifier_set_prefix_fields(struct classifier *cls,
@@ -38455,7 +38492,15 @@ index 0fad953213..f2c3497c2d 100644
ctx->lookup_done = false;
}
-@@ -1531,8 +1531,10 @@ insert_subtable(struct classifier *cls, const struct minimask *mask)
+@@ -1370,6 +1370,7 @@ cls_cursor_start(const struct classifier *cls, const struct cls_rule *target,
+ struct cls_cursor cursor;
+ struct cls_subtable *subtable;
+
++ memset(&cursor, 0x0, sizeof cursor);
+ cursor.cls = cls;
+ cursor.target = target && !cls_rule_is_catchall(target) ? target : NULL;
+ cursor.version = version;
+@@ -1531,8 +1532,10 @@ insert_subtable(struct classifier *cls, const struct minimask *mask)
*CONST_CAST(uint8_t *, &subtable->n_indices) = index;
for (i = 0; i < cls->n_tries; i++) {
@@ -38468,7 +38513,7 @@ index 0fad953213..f2c3497c2d 100644
}
/* Ports trie. */
-@@ -1575,11 +1577,17 @@ check_tries(struct trie_ctx trie_ctx[CLS_MAX_TRIES], unsigned int n_tries,
+@@ -1575,11 +1578,17 @@ check_tries(struct trie_ctx trie_ctx[CLS_MAX_TRIES], unsigned int n_tries,
* fields using the prefix tries. The trie checks are done only as
* needed to avoid folding in additional bits to the wildcards mask. */
for (j = 0; j < n_tries; j++) {
@@ -38490,7 +38535,7 @@ index 0fad953213..f2c3497c2d 100644
/* On-demand trie lookup. */
if (!ctx->lookup_done) {
-@@ -1601,14 +1609,16 @@ check_tries(struct trie_ctx trie_ctx[CLS_MAX_TRIES], unsigned int n_tries,
+@@ -1601,14 +1610,16 @@ check_tries(struct trie_ctx trie_ctx[CLS_MAX_TRIES], unsigned int n_tries,
* than this subtable would otherwise. */
if (ctx->maskbits <= field_plen[j]) {
/* Unwildcard the bits and skip the rest. */
@@ -38509,7 +38554,7 @@ index 0fad953213..f2c3497c2d 100644
return true;
}
}
-@@ -2001,12 +2011,12 @@ static unsigned int
+@@ -2001,12 +2012,12 @@ static unsigned int
trie_lookup(const struct cls_trie *trie, const struct flow *flow,
union trie_prefix *plens)
{
@@ -38524,7 +38569,7 @@ index 0fad953213..f2c3497c2d 100644
return trie_lookup_value(&trie->root,
&((ovs_be32 *)flow)[mf->flow_be32ofs],
&plens->be32, mf->n_bits);
-@@ -2053,8 +2063,9 @@ minimask_get_prefix_len(const struct minimask *minimask,
+@@ -2053,8 +2064,9 @@ minimask_get_prefix_len(const struct minimask *minimask,
* happened to be zeros.
*/
static const ovs_be32 *
@@ -38535,7 +38580,7 @@ index 0fad953213..f2c3497c2d 100644
size_t u64_ofs = mf->flow_be32ofs / 2;
return (OVS_FORCE const ovs_be32 *)miniflow_get__(match->flow, u64_ofs)
-@@ -2068,7 +2079,7 @@ static void
+@@ -2068,7 +2080,7 @@ static void
trie_insert(struct cls_trie *trie, const struct cls_rule *rule, int mlen)
{
trie_insert_prefix(&trie->root,
@@ -38544,7 +38589,7 @@ index 0fad953213..f2c3497c2d 100644
}
static void
-@@ -2123,7 +2134,7 @@ static void
+@@ -2123,7 +2135,7 @@ static void
trie_remove(struct cls_trie *trie, const struct cls_rule *rule, int mlen)
{
trie_remove_prefix(&trie->root,
@@ -38917,7 +38962,7 @@ index 8b62e6d968..80063b933d 100644
match_set_dl_dst_masked(match, value->mac, mask->mac);
break;
diff --git a/lib/meta-flow.xml b/lib/meta-flow.xml
-index 90b405c737..2f9c5ee163 100644
+index 90b405c737..309dc59c5f 100644
--- a/lib/meta-flow.xml
+++ b/lib/meta-flow.xml
@@ -2566,8 +2566,8 @@ actions=clone(load:0->NXM_OF_IN_PORT[],output:123)
@@ -38931,11 +38976,34 @@ index 90b405c737..2f9c5ee163 100644
rel
(0x04)
+@@ -3841,18 +3841,18 @@ r r c c c.
+
+
+ -
+- When
is 1, there is another MPLS label
++ When is 0, there is another MPLS label
+ following this one, so the Ethertype passed to pop_mpls
+ should be an MPLS Ethertype. For example: table=0,
+- dl_type=0x8847, mpls_bos=1, actions=pop_mpls:0x8847,
++ dl_type=0x8847, mpls_bos=0, actions=pop_mpls:0x8847,
+ goto_table:1
+
+
+ -
+- When
is 0, this MPLS label is the last one,
++ When is 1, this MPLS label is the last one,
+ so the Ethertype passed to pop_mpls
should be a non-MPLS
+ Ethertype such as IPv4. For example: table=1, dl_type=0x8847,
+- mpls_bos=0, actions=pop_mpls:0x0800, goto_table:2
++ mpls_bos=1, actions=pop_mpls:0x0800, goto_table:2
+
+
+
diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
-index 6187129c00..7ab81864db 100644
+index 6187129c00..7051c31053 100644
--- a/lib/netdev-dpdk.c
+++ b/lib/netdev-dpdk.c
-@@ -152,6 +152,16 @@ typedef uint16_t dpdk_port_t;
+@@ -152,9 +152,18 @@ typedef uint16_t dpdk_port_t;
#define IF_NAME_SZ (PATH_MAX > IFNAMSIZ ? PATH_MAX : IFNAMSIZ)
@@ -38951,8 +39019,11 @@ index 6187129c00..7ab81864db 100644
+
static const struct rte_eth_conf port_conf = {
.rxmode = {
- .mq_mode = ETH_MQ_RX_RSS,
-@@ -415,6 +425,7 @@ enum dpdk_hw_ol_features {
+- .mq_mode = ETH_MQ_RX_RSS,
+ .split_hdr_size = 0,
+ .offloads = 0,
+ },
+@@ -415,6 +424,7 @@ enum dpdk_hw_ol_features {
NETDEV_RX_HW_CRC_STRIP = 1 << 1,
NETDEV_RX_HW_SCATTER = 1 << 2,
NETDEV_TX_TSO_OFFLOAD = 1 << 3,
@@ -38960,7 +39031,22 @@ index 6187129c00..7ab81864db 100644
};
/*
-@@ -997,9 +1008,10 @@ dpdk_eth_dev_port_config(struct netdev_dpdk *dev, int n_rxq, int n_txq)
+@@ -975,6 +985,14 @@ dpdk_eth_dev_port_config(struct netdev_dpdk *dev, int n_rxq, int n_txq)
+
+ rte_eth_dev_info_get(dev->port_id, &info);
+
++ /* As of DPDK 19.11, it is not allowed to set a mq_mode for
++ * virtio PMD driver. */
++ if (!strcmp(info.driver_name, "net_virtio")) {
++ conf.rxmode.mq_mode = ETH_MQ_RX_NONE;
++ } else {
++ conf.rxmode.mq_mode = ETH_MQ_RX_RSS;
++ }
++
+ /* As of DPDK 17.11.1 a few PMDs require to explicitly enable
+ * scatter to support jumbo RX.
+ * Setting scatter for the device is done after checking for
+@@ -997,9 +1015,10 @@ dpdk_eth_dev_port_config(struct netdev_dpdk *dev, int n_rxq, int n_txq)
}
if (dev->hw_ol_features & NETDEV_TX_TSO_OFFLOAD) {
@@ -38974,7 +39060,7 @@ index 6187129c00..7ab81864db 100644
}
/* Limit configured rss hash functions to only those supported
-@@ -1100,12 +1112,10 @@ dpdk_eth_dev_init(struct netdev_dpdk *dev)
+@@ -1100,12 +1119,10 @@ dpdk_eth_dev_init(struct netdev_dpdk *dev)
struct rte_ether_addr eth_addr;
int diag;
int n_rxq, n_txq;
@@ -38988,7 +39074,7 @@ index 6187129c00..7ab81864db 100644
rte_eth_dev_info_get(dev->port_id, &info);
-@@ -1137,6 +1147,13 @@ dpdk_eth_dev_init(struct netdev_dpdk *dev)
+@@ -1137,6 +1154,13 @@ dpdk_eth_dev_init(struct netdev_dpdk *dev)
if ((info.tx_offload_capa & tx_tso_offload_capa)
== tx_tso_offload_capa) {
dev->hw_ol_features |= NETDEV_TX_TSO_OFFLOAD;
@@ -39002,7 +39088,7 @@ index 6187129c00..7ab81864db 100644
} else {
VLOG_WARN("%s: Tx TSO offload is not supported.",
netdev_get_name(&dev->up));
-@@ -5110,7 +5127,11 @@ netdev_dpdk_reconfigure(struct netdev *netdev)
+@@ -5110,7 +5134,11 @@ netdev_dpdk_reconfigure(struct netdev *netdev)
if (dev->hw_ol_features & NETDEV_TX_TSO_OFFLOAD) {
netdev->ol_flags |= NETDEV_TX_OFFLOAD_TCP_TSO;
netdev->ol_flags |= NETDEV_TX_OFFLOAD_TCP_CKSUM;
@@ -39014,7 +39100,7 @@ index 6187129c00..7ab81864db 100644
}
dev->tx_q = netdev_dpdk_alloc_txq(netdev->n_txq);
-@@ -5186,6 +5207,7 @@ netdev_dpdk_vhost_client_reconfigure(struct netdev *netdev)
+@@ -5186,6 +5214,7 @@ netdev_dpdk_vhost_client_reconfigure(struct netdev *netdev)
struct netdev_dpdk *dev = netdev_dpdk_cast(netdev);
int err;
uint64_t vhost_flags = 0;
@@ -39022,7 +39108,7 @@ index 6187129c00..7ab81864db 100644
bool zc_enabled;
ovs_mutex_lock(&dev->mutex);
-@@ -5251,17 +5273,24 @@ netdev_dpdk_vhost_client_reconfigure(struct netdev *netdev)
+@@ -5251,17 +5280,24 @@ netdev_dpdk_vhost_client_reconfigure(struct netdev *netdev)
if (userspace_tso_enabled()) {
netdev->ol_flags |= NETDEV_TX_OFFLOAD_TCP_TSO;
netdev->ol_flags |= NETDEV_TX_OFFLOAD_TCP_CKSUM;
@@ -40163,6 +40249,19 @@ index 51d656cba9..aee676d93e 100644
}
/* Finds and returns the ofservice within 'mgr' that has the given
+diff --git a/ofproto/ipfix-gen-entities b/ofproto/ipfix-gen-entities
+index 0be719967d..d5abe9c2ed 100755
+--- a/ofproto/ipfix-gen-entities
++++ b/ofproto/ipfix-gen-entities
+@@ -1,6 +1,6 @@
+-#! /usr/bin/env python
++#!/usr/bin/env python3
+ #
+-# Copyright (C) 2012 Nicira, Inc.
++# Copyright (C) 2012, 2020 Nicira, Inc.
+ #
+ # Copying and distribution of this file, with or without modification,
+ # are permitted in any medium without royalty provided the copyright
diff --git a/ofproto/ofproto-dpif-rid.h b/ofproto/ofproto-dpif-rid.h
index 147ef9c333..97699cb905 100644
--- a/ofproto/ofproto-dpif-rid.h
@@ -40298,6 +40397,19 @@ index 08830d8371..8594afad4a 100644
connmgr_send_flow_removed(connmgr, &fr);
ovs_mutex_unlock(&ofproto_mutex);
}
+diff --git a/ovsdb/dot2pic b/ovsdb/dot2pic
+index de67261ac6..2f858e19d5 100755
+--- a/ovsdb/dot2pic
++++ b/ovsdb/dot2pic
+@@ -1,6 +1,6 @@
+-#! /usr/bin/env python
++#!/usr/bin/env python3
+
+-# Copyright (c) 2009, 2010, 2011, 2013, 2017 Nicira, Inc.
++# Copyright (c) 2009, 2010, 2011, 2013, 2017, 2020 Nicira, Inc.
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
diff --git a/ovsdb/execution.c b/ovsdb/execution.c
index e45f3d6796..3a0dad5d0a 100644
--- a/ovsdb/execution.c
@@ -40320,6 +40432,19 @@ index e45f3d6796..3a0dad5d0a 100644
if (timeout_msec < 0) {
error = ovsdb_syntax_error(timeout, NULL,
"timeout must be nonnegative");
+diff --git a/ovsdb/ovsdb-doc b/ovsdb/ovsdb-doc
+index 406c293114..10d0c0c134 100755
+--- a/ovsdb/ovsdb-doc
++++ b/ovsdb/ovsdb-doc
+@@ -1,6 +1,6 @@
+-#! /usr/bin/python
++#!/usr/bin/python3
+
+-# Copyright (c) 2010, 2011, 2012, 2013, 2014, 2015 Nicira, Inc.
++# Copyright (c) 2010, 2011, 2012, 2013, 2014, 2015, 2020 Nicira, Inc.
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
diff --git a/ovsdb/ovsdb-server.c b/ovsdb/ovsdb-server.c
index b6957d7300..fd7891a729 100644
--- a/ovsdb/ovsdb-server.c
@@ -40785,6 +40910,52 @@ index 7e62e90ae3..0372302af4 100644
ovsdb_error_destroy(error);
} else {
/* Permanent error. Transition to "completed" state to report
+diff --git a/python/build/soutil.py b/python/build/soutil.py
+index b8027af863..a658823028 100755
+--- a/python/build/soutil.py
++++ b/python/build/soutil.py
+@@ -1,6 +1,6 @@
+-#! /usr/bin/env python
++#!/usr/bin/env python3
+
+-# Copyright (c) 2008, 2017 Nicira, Inc.
++# Copyright (c) 2008, 2017, 2020 Nicira, Inc.
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+diff --git a/rhel/openvswitch-fedora.spec.in b/rhel/openvswitch-fedora.spec.in
+index 7bc8c34b80..f6ec347c15 100644
+--- a/rhel/openvswitch-fedora.spec.in
++++ b/rhel/openvswitch-fedora.spec.in
+@@ -318,18 +318,19 @@ exit 0
+ %post
+ %if %{with libcapng}
+ if [ $1 -eq 1 ]; then
+- sed -i 's:^#OVS_USER_ID=:OVS_USER_ID=:' /etc/sysconfig/openvswitch
+- sed -i 's:\(.*su\).*:\1 openvswitch openvswitch:' %{_sysconfdir}/logrotate.d/openvswitch
+-
+ %if %{with dpdk}
+- sed -i \
+- 's@OVS_USER_ID="openvswitch:openvswitch"@OVS_USER_ID="openvswitch:hugetlbfs"@'\
+- /etc/sysconfig/openvswitch
++ %define gname hugetlbfs
++%else
++ %define gname openvswitch
+ %endif
++ sed -i \
++ 's@^#OVS_USER_ID="openvswitch:openvswitch"@OVS_USER_ID="openvswitch:%{gname}"@'\
++ %{_sysconfdir}/sysconfig/openvswitch
++ sed -i 's:\(.*su\).*:\1 openvswitch %{gname}:' %{_sysconfdir}/logrotate.d/openvswitch
+
+- # In the case of upgrade, this is not needed.
+- chown -R openvswitch:openvswitch /etc/openvswitch
+- chown -R openvswitch:openvswitch /var/log/openvswitch
++ # In the case of upgrade, this is not needed
++ chown -R openvswitch:openvswitch %{_sysconfdir}/openvswitch
++ chown -R openvswitch:%{gname} %{_localstatedir}/log/openvswitch
+ fi
+ %endif
+
diff --git a/rhel/openvswitch-kmod-fedora.spec.in b/rhel/openvswitch-kmod-fedora.spec.in
index c94f2f5358..15eec6d4c0 100644
--- a/rhel/openvswitch-kmod-fedora.spec.in
@@ -40808,6 +40979,29 @@ index c94f2f5358..15eec6d4c0 100644
# For RHEL 7.2, 7.4, 7.6, 7.7, and 7.8
if [ -x "%{_datadir}/openvswitch/scripts/ovs-kmod-manage.sh" ]; then
%{_datadir}/openvswitch/scripts/ovs-kmod-manage.sh
+diff --git a/rhel/usr_lib_systemd_system_ovsdb-server.service b/rhel/usr_lib_systemd_system_ovsdb-server.service
+index 4c170c09b4..98338b9dfb 100644
+--- a/rhel/usr_lib_systemd_system_ovsdb-server.service
++++ b/rhel/usr_lib_systemd_system_ovsdb-server.service
+@@ -11,10 +11,16 @@ PIDFile=/var/run/openvswitch/ovsdb-server.pid
+ Restart=on-failure
+ EnvironmentFile=/etc/openvswitch/default.conf
+ EnvironmentFile=-/etc/sysconfig/openvswitch
++EnvironmentFile=-/run/openvswitch.useropts
++
++# Environment is reloaded for each Exec*, make sure to
++# remove openvswitch.useropts first to reload a fresh
++# OVS_USER_ID from default.conf or sysconfig.
++ExecStartPre=/usr/bin/rm -f /run/openvswitch.useropts
++
+ ExecStartPre=-/usr/bin/chown ${OVS_USER_ID} /var/run/openvswitch /var/log/openvswitch
+-ExecStartPre=/bin/sh -c 'rm -f /run/openvswitch.useropts; /usr/bin/echo "OVS_USER_ID=${OVS_USER_ID}" > /run/openvswitch.useropts'
++ExecStartPre=/bin/sh -c '/usr/bin/echo "OVS_USER_ID=${OVS_USER_ID}" > /run/openvswitch.useropts'
+ ExecStartPre=/bin/sh -c 'if [ "$${OVS_USER_ID/:*/}" != "root" ]; then /usr/bin/echo "OVS_USER_OPT=--ovs-user=${OVS_USER_ID}" >> /run/openvswitch.useropts; fi'
+-EnvironmentFile=-/run/openvswitch.useropts
+ ExecStart=/usr/share/openvswitch/scripts/ovs-ctl \
+ --no-ovs-vswitchd --no-monitor --system-id=random \
+ ${OVS_USER_OPT} \
diff --git a/rhel/usr_share_openvswitch_scripts_ovs-kmod-manage.sh b/rhel/usr_share_openvswitch_scripts_ovs-kmod-manage.sh
index a9b5cdd817..c70e135cd5 100644
--- a/rhel/usr_share_openvswitch_scripts_ovs-kmod-manage.sh
@@ -40834,6 +41028,26 @@ index a9b5cdd817..c70e135cd5 100644
# echo "rhel78"
comp_ver=10
ver_offset=4
+diff --git a/selinux/openvswitch-custom.te.in b/selinux/openvswitch-custom.te.in
+index 2adaf231fe..beb0ab0d66 100644
+--- a/selinux/openvswitch-custom.te.in
++++ b/selinux/openvswitch-custom.te.in
+@@ -19,6 +19,7 @@ require {
+ type kernel_t;
+ type hostname_exec_t;
+ type modules_conf_t;
++ type modules_dep_t;
+ type modules_object_t;
+ type passwd_file_t;
+ type plymouth_exec_t;
+@@ -121,6 +122,7 @@ allow openvswitch_load_module_t insmod_exec_t:file { execute execute_no_trans ge
+ allow openvswitch_load_module_t kernel_t:system module_request;
+ allow openvswitch_load_module_t modules_conf_t:dir { getattr open read search };
+ allow openvswitch_load_module_t modules_conf_t:file { getattr open read };
++allow openvswitch_load_module_t modules_dep_t:file { getattr map open read };
+ allow openvswitch_load_module_t modules_object_t:file { map getattr open read };
+ allow openvswitch_load_module_t modules_object_t:dir { getattr open read search };
+ allow openvswitch_load_module_t openvswitch_load_module_exec_t:file { entrypoint };
diff --git a/tests/automake.mk b/tests/automake.mk
index 9c7ebdce9b..3d90f97687 100644
--- a/tests/automake.mk
@@ -41320,10 +41534,72 @@ index 3a0bd4579e..e0758e954c 100644
AT_BANNER([OVSDB - cluster tests])
diff --git a/tests/ovsdb-idl.at b/tests/ovsdb-idl.at
-index cc38d69c10..cc53da923b 100644
+index cc38d69c10..e5397ff99d 100644
--- a/tests/ovsdb-idl.at
+++ b/tests/ovsdb-idl.at
-@@ -954,6 +954,7 @@ AT_CHECK([sort stdout | uuidfilt], [0],
+@@ -12,25 +12,6 @@ ovsdb_start_idltest () {
+ on_exit 'kill `cat ovsdb-server.pid`'
+ }
+
+-# ovsdb_cluster_start_idltest [REMOTE] [SCHEMA]
+-#
+-# Creates a database using SCHEMA (default: idltest.ovsschema) and
+-# starts a database cluster listening on punix:socket and REMOTE (if
+-# specified).
+-ovsdb_cluster_start_idltest () {
+- local n=$1
+- ovsdb-tool create-cluster s1.db $abs_srcdir/idltest.ovsschema unix:s1.raft || return $?
+- cid=`ovsdb-tool db-cid s1.db`
+- schema_name=`ovsdb-tool schema-name $abs_srcdir/idltest.ovsschema`
+- for i in `seq 2 $n`; do
+- ovsdb-tool join-cluster s$i.db $schema_name unix:s$i.raft unix:s1.raft || return $?
+- done
+- for i in `seq $n`; do
+- ovsdb-server -vraft -vconsole:warn --detach --no-chdir --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i --remote=punix:s$i.ovsdb ${2:+--remote=$2} s$i.db || return $?
+- done
+- on_exit 'kill `cat s*.pid`'
+-}
+-
+ # ovsdb_cluster_leader [REMOTES] [DATABASE]
+ #
+ # Returns the leader of the DATABASE cluster.
+@@ -48,6 +29,35 @@ ovsdb_cluster_leader () {
+ done
+ }])
+
++# OVSDB_CLUSTER_START_IDLTEST([N], [REMOTE])
++#
++# Creates a clustered database using idltest.ovsschema and starts a database
++# cluster of N servers listening on punix:socket and REMOTE (if specified).
++m4_define([OVSDB_CLUSTER_START_IDLTEST],
++ [n=$1
++ AT_CHECK([ovsdb-tool create-cluster s1.db \
++ $abs_srcdir/idltest.ovsschema unix:s1.raft])
++ 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
++ for i in $(seq $n); do
++ AT_CHECK([ovsdb-server -vraft -vconsole:warn --detach --no-chdir \
++ --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i \
++ --remote=punix:s$i.ovsdb \
++ m4_if([$2], [], [], [--remote=$2]) s$i.db])
++ done
++ on_exit 'kill $(cat s*.pid)'
++
++ for i in $(seq $n); do
++ OVS_WAIT_UNTIL([ovs-appctl -t $(pwd)/s$i cluster/status ${schema_name} \
++ | grep -q 'Status: cluster member'])
++ done
++])
++
++
+ # OVSDB_CHECK_IDL_C(TITLE, [PRE-IDL-TXN], TRANSACTIONS, OUTPUT, [KEYWORDS],
+ # [FILTER])
+ #
+@@ -954,6 +964,7 @@ AT_CHECK([sort stdout | uuidfilt], [0],
# Check that ovsdb-idl figured out that table link2 and column l2 are missing.
AT_CHECK([grep ovsdb_idl stderr | sort], [0], [dnl
@@ -41331,7 +41607,16 @@ index cc38d69c10..cc53da923b 100644
test-ovsdb|ovsdb_idl|idltest database lacks link2 table (database needs upgrade?)
test-ovsdb|ovsdb_idl|idltest database lacks singleton table (database needs upgrade?)
test-ovsdb|ovsdb_idl|link1 table in idltest database lacks l2 column (database needs upgrade?)
-@@ -1814,3 +1815,59 @@ m4_define([OVSDB_CHECK_IDL_LEADER_ONLY_PY],
+@@ -1798,7 +1809,7 @@ m4_define([OVSDB_CHECK_IDL_LEADER_ONLY_PY],
+ [AT_SETUP([$1 - Python3 (leader only)])
+ AT_KEYWORDS([ovsdb server idl Python leader_only with tcp socket])
+ m4_define([LPBK],[127.0.0.1])
+- AT_CHECK([ovsdb_cluster_start_idltest $2 "ptcp:0:"LPBK])
++ OVSDB_CLUSTER_START_IDLTEST([$2], ["ptcp:0:"LPBK])
+ PARSE_LISTENING_PORT([s2.log], [TCP_PORT_1])
+ PARSE_LISTENING_PORT([s3.log], [TCP_PORT_2])
+ PARSE_LISTENING_PORT([s1.log], [TCP_PORT_3])
+@@ -1814,3 +1825,59 @@ m4_define([OVSDB_CHECK_IDL_LEADER_ONLY_PY],
OVSDB_CHECK_IDL_LEADER_ONLY_PY([Check Python IDL connects to leader], 3, ['remote'])
OVSDB_CHECK_IDL_LEADER_ONLY_PY([Check Python IDL reconnects to leader], 3, ['remote' '+remotestop' 'remote'])
@@ -41342,7 +41627,7 @@ index cc38d69c10..cc53da923b 100644
+ [AT_SETUP([$1 - C - tcp])
+ AT_KEYWORDS([ovsdb server idl positive tcp socket $5])
+ m4_define([LPBK],[127.0.0.1])
-+ AT_CHECK([ovsdb_cluster_start_idltest $2 "ptcp:0:"LPBK])
++ OVSDB_CLUSTER_START_IDLTEST([$2], ["ptcp:0:"LPBK])
+ PARSE_LISTENING_PORT([s1.log], [TCP_PORT_1])
+ PARSE_LISTENING_PORT([s2.log], [TCP_PORT_2])
+ PARSE_LISTENING_PORT([s3.log], [TCP_PORT_3])
@@ -41391,6 +41676,42 @@ index cc38d69c10..cc53da923b 100644
+008: i=1 r=2 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<2>
+009: done
+]])
+diff --git a/tests/ovsdb-monitor-sort.py b/tests/ovsdb-monitor-sort.py
+index 7d368a7afc..8a7976bdc7 100755
+--- a/tests/ovsdb-monitor-sort.py
++++ b/tests/ovsdb-monitor-sort.py
+@@ -1,4 +1,17 @@
+-#! /usr/bin/env python
++#!/usr/bin/env python3
++# Copyright (c) 2020 VMware, Inc.
++#
++# Licensed under the Apache License, Version 2.0 (the "License");
++# you may not use this file except in compliance with the License.
++# You may obtain a copy of the License at:
++#
++# http://www.apache.org/licenses/LICENSE-2.0
++#
++# Unless required by applicable law or agreed to in writing, software
++# distributed under the License is distributed on an "AS IS" BASIS,
++# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++# See the License for the specific language governing permissions and
++# limitations under the License.
+
+ # Breaks lines read from stdin into groups using blank lines as
+ # group separators, then sorts lines within the groups for
+diff --git a/tests/sendpkt.py b/tests/sendpkt.py
+index 328ae2bc9d..49ac45275a 100755
+--- a/tests/sendpkt.py
++++ b/tests/sendpkt.py
+@@ -1,6 +1,6 @@
+-#! /usr/bin/env python
++#!/usr/bin/env python3
+
+-# Copyright (c) 2018 VMware, Inc.
++# Copyright (c) 2018, 2020 VMware, Inc.
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
diff --git a/tests/system-route.at b/tests/system-route.at
new file mode 100644
index 0000000000..1714273e35
@@ -41471,6 +41792,66 @@ index 6d53d016de..2d98fad485 100644
}
assert(n_rules <= cls->n_rules);
}
+diff --git a/tests/test-conntrack.c b/tests/test-conntrack.c
+index f77ee75e38..da1ac63b6c 100644
+--- a/tests/test-conntrack.c
++++ b/tests/test-conntrack.c
+@@ -82,6 +82,7 @@ ct_thread_main(void *aux_)
+ {
+ struct thread_aux *aux = aux_;
+ struct dp_packet_batch *pkt_batch;
++ struct dp_packet *pkt;
+ ovs_be16 dl_type;
+ size_t i;
+ long long now = time_msec();
+@@ -91,6 +92,9 @@ ct_thread_main(void *aux_)
+ for (i = 0; i < n_pkts; i += batch_size) {
+ conntrack_execute(ct, pkt_batch, dl_type, false, true, 0, NULL, NULL,
+ 0, 0, NULL, NULL, now);
++ DP_PACKET_BATCH_FOR_EACH (j, pkt, pkt_batch) {
++ pkt_metadata_init_conn(&pkt->md);
++ }
+ }
+ ovs_barrier_block(&barrier);
+ destroy_packets(pkt_batch);
+diff --git a/tests/test-l7.py b/tests/test-l7.py
+index d7854a1df3..32a77392c6 100755
+--- a/tests/test-l7.py
++++ b/tests/test-l7.py
+@@ -1,5 +1,5 @@
+-#!/usr/bin/env python
+-# Copyright (c) 2015, 2016 Nicira, Inc.
++#!/usr/bin/env python3
++# Copyright (c) 2015, 2016, 2020 Nicira, Inc.
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+diff --git a/tests/uuidfilt.py b/tests/uuidfilt.py
+index bc49aa480e..39679dd444 100755
+--- a/tests/uuidfilt.py
++++ b/tests/uuidfilt.py
+@@ -1,4 +1,20 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python3
++# Copyright (c) 2020 VMware, Inc.
++#
++# Licensed under the Apache License, Version 2.0 (the "License");
++# you may not use this file except in compliance with the License.
++# You may obtain a copy of the License at:
++#
++# http://www.apache.org/licenses/LICENSE-2.0
++#
++# Unless required by applicable law or agreed to in writing, software
++# distributed under the License is distributed on an "AS IS" BASIS,
++# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++# See the License for the specific language governing permissions and
++# limitations under the License.
++# Breaks lines read from stdin into groups using blank lines as
++# group separators, then sorts lines within the groups for
++# reproducibility.
+
+ import re
+ import sys
diff --git a/utilities/bugtool/ovs-bugtool.in b/utilities/bugtool/ovs-bugtool.in
index e55bfc2ed5..47f3c4629f 100755
--- a/utilities/bugtool/ovs-bugtool.in
@@ -41645,11 +42026,32 @@ index e55bfc2ed5..47f3c4629f 100755
self.mtime = time.time()
+diff --git a/utilities/ovs-dev.py b/utilities/ovs-dev.py
+index 248d22ab9a..c45788acd5 100755
+--- a/utilities/ovs-dev.py
++++ b/utilities/ovs-dev.py
+@@ -1,5 +1,5 @@
+-#!/usr/bin/env python
+-# Copyright (c) 2013, 2014, 2015, 2016 Nicira, Inc.
++#!/usr/bin/env python3
++# Copyright (c) 2013, 2014, 2015, 2016, 2020 Nicira, Inc.
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
diff --git a/utilities/ovs-dpctl-top.in b/utilities/ovs-dpctl-top.in
-index f2cc3f7f2a..011cc64b74 100755
+index f2cc3f7f2a..fbe6e4f560 100755
--- a/utilities/ovs-dpctl-top.in
+++ b/utilities/ovs-dpctl-top.in
-@@ -592,7 +592,7 @@ def flows_read(ihdl, flow_db):
+@@ -480,6 +480,8 @@ def elements_to_dict(elements):
+ """ Convert line to a hierarchy of dictionaries. """
+ result = {}
+ for element in elements:
++ if (element == "eth()"):
++ continue
+ match = FIELDS_CMPND.search(element)
+ if (match):
+ key = match.group(1)
+@@ -592,7 +594,7 @@ def flows_read(ihdl, flow_db):
try:
flow_db.flow_line_add(line)
@@ -41658,7 +42060,7 @@ index f2cc3f7f2a..011cc64b74 100755
logging.error(arg)
return flow_db
-@@ -958,6 +958,9 @@ class FlowDB:
+@@ -958,6 +960,9 @@ class FlowDB:
change order of fields of the same flow.
"""
@@ -41668,7 +42070,7 @@ index f2cc3f7f2a..011cc64b74 100755
line = line.rstrip("\n")
(fields, stats, _) = flow_line_split(line)
-@@ -988,7 +991,7 @@ class FlowDB:
+@@ -988,7 +993,7 @@ class FlowDB:
self.flow_event(fields_dict, stats_old_dict, stats_dict)
@@ -41677,7 +42079,7 @@ index f2cc3f7f2a..011cc64b74 100755
logging.error(arg)
self._error_count += 1
raise
-@@ -1192,7 +1195,7 @@ def flows_top(args):
+@@ -1192,7 +1197,7 @@ def flows_top(args):
flows_read(ihdl, flow_db)
finally:
ihdl.close()
@@ -41686,7 +42088,7 @@ index f2cc3f7f2a..011cc64b74 100755
logging.critical(arg)
break
-@@ -1220,7 +1223,7 @@ def flows_top(args):
+@@ -1220,7 +1225,7 @@ def flows_top(args):
# repeat output
for (count, line) in lines:
@@ -41695,7 +42097,7 @@ index f2cc3f7f2a..011cc64b74 100755
def flows_script(args):
-@@ -1249,7 +1252,7 @@ def flows_script(args):
+@@ -1249,7 +1254,7 @@ def flows_script(args):
render = Render(console_width, Render.FIELD_SELECT_SCRIPT)
for line in render.format(flow_db):
@@ -41704,6 +42106,18 @@ index f2cc3f7f2a..011cc64b74 100755
def main():
+diff --git a/utilities/ovs-pipegen.py b/utilities/ovs-pipegen.py
+index ee5797221c..a3b6a661de 100755
+--- a/utilities/ovs-pipegen.py
++++ b/utilities/ovs-pipegen.py
+@@ -1,5 +1,5 @@
+-#! /usr/bin/env python
+-# Copyright (c) 2013, 2014, 2015 Nicira, Inc.
++#! /usr/bin/env python3
++# Copyright (c) 2013, 2014, 2015, 2020 Nicira, Inc.
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
diff --git a/utilities/ovs-vsctl.c b/utilities/ovs-vsctl.c
index bd3972636e..37cc72d401 100644
--- a/utilities/ovs-vsctl.c
@@ -41742,3 +42156,42 @@ index e591c26a6c..ce348b9d16 100644
}
}
+diff --git a/xenserver/etc_xapi.d_plugins_openvswitch-cfg-update b/xenserver/etc_xapi.d_plugins_openvswitch-cfg-update
+index e7404e3b00..b8db881949 100755
+--- a/xenserver/etc_xapi.d_plugins_openvswitch-cfg-update
++++ b/xenserver/etc_xapi.d_plugins_openvswitch-cfg-update
+@@ -1,10 +1,10 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python3
+ #
+ # xapi plugin script to update the cache of configuration items in the
+ # ovs-vswitchd configuration that are managed in the xapi database when
+ # integrated with Citrix management tools.
+
+-# Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicira, Inc.
++# Copyright (C) 2009, 2010, 2011, 2012, 2013, 2020 Nicira, Inc.
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+diff --git a/xenserver/opt_xensource_libexec_interface-reconfigure b/xenserver/opt_xensource_libexec_interface-reconfigure
+index a82043fb5b..9c20725de2 100755
+--- a/xenserver/opt_xensource_libexec_interface-reconfigure
++++ b/xenserver/opt_xensource_libexec_interface-reconfigure
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python3
+ #
+ # Copyright (c) 2008,2009 Citrix Systems, Inc.
+ #
+diff --git a/xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync b/xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync
+index cf89600253..bff85464ba 100755
+--- a/xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync
++++ b/xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync
+@@ -1,5 +1,5 @@
+-#! /usr/bin/env python
+-# Copyright (c) 2009, 2010, 2011, 2012, 2013 Nicira, Inc.
++#!/usr/bin/env python3
++# Copyright (c) 2009, 2010, 2011, 2012, 2013, 2020 Nicira, Inc.
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
diff --git a/SPECS/openvswitch2.13.spec b/SPECS/openvswitch2.13.spec
index 21b0e82..6f89b7d 100644
--- a/SPECS/openvswitch2.13.spec
+++ b/SPECS/openvswitch2.13.spec
@@ -62,7 +62,7 @@ Summary: Open vSwitch
Group: System Environment/Daemons daemon/database/utilities
URL: http://www.openvswitch.org/
Version: 2.13.0
-Release: 57%{?commit0:.%{date}git%{shortcommit0}}%{?commit1:dpdk%{shortcommit1}}%{?dist}
+Release: 60%{?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
@@ -700,6 +700,18 @@ exit 0
%endif
%changelog
+* Wed Sep 16 2020 Open vSwitch CI - 2.13.0-60
+- Merging upstream branch-2.13
+ [38d21cf4eb02e273ef28b46e63bcf877d5a672ea]
+
+* Thu Sep 10 2020 Open vSwitch CI - 2.13.0-59
+- Merging upstream branch-2.13
+ [4fbcdeb187628b2eedc607f45b70fdff68f7ea26]
+
+* Thu Aug 27 2020 Open vSwitch CI - 2.13.0-58
+- Merging upstream branch-2.13
+ [d5817ddabf270b2fcfd9694746b382a0d040727c]
+
* Wed Aug 26 2020 Open vSwitch CI - 2.13.0-57
- Merging upstream branch-2.13
[2fe3a06bffcd907f8f6561ec0e56963de9766c97]