diff --git a/SOURCES/openvswitch-3.1.0.patch b/SOURCES/openvswitch-3.1.0.patch index 7a558aa..084fbeb 100644 --- a/SOURCES/openvswitch-3.1.0.patch +++ b/SOURCES/openvswitch-3.1.0.patch @@ -873,10 +873,20 @@ index a1a20366d..bdd12f6a7 100644 diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c -index ab5b8223e..ac182436b 100644 +index ab5b8223e..ab4a4e9d8 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c -@@ -840,7 +840,7 @@ dpdk_mp_create(struct netdev_dpdk *dev, int mtu) +@@ -489,6 +489,9 @@ struct netdev_dpdk { + + /* Array of vhost rxq states, see vring_state_changed. */ + bool *vhost_rxq_enabled; ++ ++ /* Ensures that Rx metadata delivery is configured only once. */ ++ bool rx_metadata_delivery_configured; + ); + + PADDED_MEMBERS(CACHE_LINE_SIZE, +@@ -840,7 +843,7 @@ dpdk_mp_create(struct netdev_dpdk *dev, int mtu) static struct dpdk_mp * dpdk_mp_get(struct netdev_dpdk *dev, int mtu) { @@ -885,6 +895,80 @@ index ab5b8223e..ac182436b 100644 bool reuse = false; ovs_mutex_lock(&dpdk_mp_mutex); +@@ -1140,6 +1143,45 @@ dpdk_eth_flow_ctrl_setup(struct netdev_dpdk *dev) OVS_REQUIRES(dev->mutex) + } + } + ++static void ++dpdk_eth_dev_init_rx_metadata(struct netdev_dpdk *dev) ++{ ++ uint64_t rx_metadata = 0; ++ int ret; ++ ++ if (dev->rx_metadata_delivery_configured) { ++ return; ++ } ++ ++ /* For the fallback offload (non-"transfer" rules). */ ++ rx_metadata |= RTE_ETH_RX_METADATA_USER_MARK; ++ ++#ifdef ALLOW_EXPERIMENTAL_API ++ /* For the tunnel offload. */ ++ rx_metadata |= RTE_ETH_RX_METADATA_TUNNEL_ID; ++#endif /* ALLOW_EXPERIMENTAL_API */ ++ ++ ret = rte_eth_rx_metadata_negotiate(dev->port_id, &rx_metadata); ++ if (ret == 0) { ++ if (!(rx_metadata & RTE_ETH_RX_METADATA_USER_MARK)) { ++ VLOG_DBG("%s: The NIC will not provide per-packet USER_MARK", ++ netdev_get_name(&dev->up)); ++ } ++#ifdef ALLOW_EXPERIMENTAL_API ++ if (!(rx_metadata & RTE_ETH_RX_METADATA_TUNNEL_ID)) { ++ VLOG_DBG("%s: The NIC will not provide per-packet TUNNEL_ID", ++ netdev_get_name(&dev->up)); ++ } ++#endif /* ALLOW_EXPERIMENTAL_API */ ++ } else { ++ VLOG(ret == -ENOTSUP ? VLL_DBG : VLL_WARN, ++ "%s: Cannot negotiate Rx metadata: %s", ++ netdev_get_name(&dev->up), rte_strerror(-ret)); ++ } ++ ++ dev->rx_metadata_delivery_configured = true; ++} ++ + static int + dpdk_eth_dev_init(struct netdev_dpdk *dev) + OVS_REQUIRES(dev->mutex) +@@ -1154,6 +1196,18 @@ dpdk_eth_dev_init(struct netdev_dpdk *dev) + RTE_ETH_RX_OFFLOAD_TCP_CKSUM | + RTE_ETH_RX_OFFLOAD_IPV4_CKSUM; + ++ if (netdev_is_flow_api_enabled()) { ++ /* ++ * Full tunnel offload requires that tunnel ID metadata be ++ * delivered with "miss" packets from the hardware to the ++ * PMD. The same goes for megaflow mark metadata which is ++ * used in MARK + RSS offload scenario. ++ * ++ * Request delivery of such metadata. ++ */ ++ dpdk_eth_dev_init_rx_metadata(dev); ++ } ++ + rte_eth_dev_info_get(dev->port_id, &info); + + if (strstr(info.driver_name, "vf") != NULL) { +@@ -1320,6 +1374,8 @@ common_construct(struct netdev *netdev, dpdk_port_t port_no, + /* Initilize the hardware offload flags to 0 */ + dev->hw_ol_features = 0; + ++ dev->rx_metadata_delivery_configured = false; ++ + dev->flags = NETDEV_UP | NETDEV_PROMISC; + + ovs_list_push_back(&dpdk_list, &dev->list_node); diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c index 65bdd51db..94b99a7be 100644 --- a/lib/netdev-linux.c diff --git a/SPECS/openvswitch3.1.spec b/SPECS/openvswitch3.1.spec index a247f48..1b53203 100644 --- a/SPECS/openvswitch3.1.spec +++ b/SPECS/openvswitch3.1.spec @@ -63,7 +63,7 @@ Summary: Open vSwitch Group: System Environment/Daemons daemon/database/utilities URL: http://www.openvswitch.org/ Version: 3.1.0 -Release: 43%{?dist} +Release: 44%{?dist} # Nearly all of openvswitch is ASL 2.0. The bugtool is LGPLv2+, and the # lib/sflow*.[ch] files are SISSL @@ -757,6 +757,12 @@ exit 0 %endif %changelog +* Tue Jul 25 2023 Open vSwitch CI - 3.1.0-44 +- Merging upstream branch-3.1 [RH git: 31fab0fb20] + Commit list: + 11c542104e netdev-dpdk: Negotiate delivery of per-packet Rx metadata. + + * Fri Jul 21 2023 Open vSwitch CI - 3.1.0-43 - Merging upstream branch-3.1 [RH git: da1afee4f8] Commit list: