From 6088216e0a5ee818a23414be60395e0a0a2a4a21 Mon Sep 17 00:00:00 2001 From: Open vSwitch CI Date: Oct 28 2021 08:09:34 +0000 Subject: Import openvswitch2.13-2.13.0-137 from Fast DataPath --- diff --git a/SOURCES/openvswitch-2.13.0.patch b/SOURCES/openvswitch-2.13.0.patch index 894ff5e..13d593b 100644 --- a/SOURCES/openvswitch-2.13.0.patch +++ b/SOURCES/openvswitch-2.13.0.patch @@ -1241,7 +1241,7 @@ index 92b52f6712..7fe5e83e84 100644 OVS_CHECK_PRAGMA_MESSAGE AC_SUBST([OVS_CFLAGS]) diff --git a/datapath-windows/ovsext/Actions.c b/datapath-windows/ovsext/Actions.c -index 5c9b5c3a0c..b49243006f 100644 +index 5c9b5c3a0c..b3da3b19bc 100644 --- a/datapath-windows/ovsext/Actions.c +++ b/datapath-windows/ovsext/Actions.c @@ -1112,9 +1112,9 @@ OvsPopFieldInPacketBuf(OvsForwardingContext *ovsFwdCtx, @@ -1356,7 +1356,32 @@ index 5c9b5c3a0c..b49243006f 100644 } return NDIS_STATUS_SUCCESS; -@@ -1539,9 +1561,21 @@ OvsUpdateAddressAndPort(OvsForwardingContext *ovsFwdCtx, +@@ -1505,6 +1527,7 @@ OvsUpdateAddressAndPort(OvsForwardingContext *ovsFwdCtx, + + csumInfo.Value = NET_BUFFER_LIST_INFO(ovsFwdCtx->curNbl, + TcpIpChecksumNetBufferListInfo); ++ + /* + * Adjust the IP header inline as dictated by the action, and also update + * the IP and the TCP checksum for the data modified. +@@ -1513,6 +1536,7 @@ OvsUpdateAddressAndPort(OvsForwardingContext *ovsFwdCtx, + * ChecksumUpdate32(). Ignoring this for now, since for the most common + * case, we only update the TTL. + */ ++ /*Only tx direction the checksum value will be reset to be PseudoChecksum*/ + + if (isSource) { + addrField = &ipHdr->saddr; +@@ -1529,7 +1553,7 @@ OvsUpdateAddressAndPort(OvsForwardingContext *ovsFwdCtx, + ((BOOLEAN)csumInfo.Receive.UdpChecksumSucceeded || + (BOOLEAN)csumInfo.Receive.UdpChecksumFailed); + } +- if (l4Offload) { ++ if (isTx && l4Offload) { + *checkField = IPPseudoChecksum(&newAddr, &ipHdr->daddr, + tcpHdr ? IPPROTO_TCP : IPPROTO_UDP, + ntohs(ipHdr->tot_len) - ipHdr->ihl * 4); +@@ -1539,15 +1563,27 @@ OvsUpdateAddressAndPort(OvsForwardingContext *ovsFwdCtx, if (tcpHdr) { portField = &tcpHdr->dest; checkField = &tcpHdr->check; @@ -1371,14 +1396,35 @@ index 5c9b5c3a0c..b49243006f 100644 + (BOOLEAN)csumInfo.Receive.UdpChecksumFailed); + } + -+ if (l4Offload) { ++ if (isTx && l4Offload) { + *checkField = IPPseudoChecksum(&ipHdr->saddr, &newAddr, + tcpHdr ? IPPROTO_TCP : IPPROTO_UDP, + ntohs(ipHdr->tot_len) - ipHdr->ihl * 4); } } -@@ -1579,6 +1613,7 @@ OvsUpdateAddressAndPort(OvsForwardingContext *ovsFwdCtx, + if (*addrField != newAddr) { + UINT32 oldAddr = *addrField; +- if (checkField && *checkField != 0 && !l4Offload) { ++ if ((checkField && *checkField != 0) && (!l4Offload || !isTx)) { + /* Recompute total checksum. */ + *checkField = ChecksumUpdate32(*checkField, oldAddr, + newAddr); +@@ -1556,11 +1592,12 @@ OvsUpdateAddressAndPort(OvsForwardingContext *ovsFwdCtx, + ipHdr->check = ChecksumUpdate32(ipHdr->check, oldAddr, + newAddr); + } ++ + *addrField = newAddr; + } + + if (portField && *portField != newPort) { +- if (checkField && !l4Offload) { ++ if ((checkField) && (!l4Offload || !isTx)) { + /* Recompute total checksum. */ + *checkField = ChecksumUpdate16(*checkField, *portField, + newPort); +@@ -1579,6 +1616,7 @@ OvsUpdateAddressAndPort(OvsForwardingContext *ovsFwdCtx, */ NDIS_STATUS OvsUpdateIPv4Header(OvsForwardingContext *ovsFwdCtx, @@ -1386,7 +1432,7 @@ index 5c9b5c3a0c..b49243006f 100644 const struct ovs_key_ipv4 *ipAttr) { PUINT8 bufferStart; -@@ -1632,6 +1667,7 @@ OvsUpdateIPv4Header(OvsForwardingContext *ovsFwdCtx, +@@ -1632,6 +1670,7 @@ OvsUpdateIPv4Header(OvsForwardingContext *ovsFwdCtx, ipAttr->ipv4_src); } ipHdr->saddr = ipAttr->ipv4_src; @@ -1394,7 +1440,7 @@ index 5c9b5c3a0c..b49243006f 100644 } if (ipHdr->daddr != ipAttr->ipv4_dst) { if (tcpHdr) { -@@ -1647,6 +1683,7 @@ OvsUpdateIPv4Header(OvsForwardingContext *ovsFwdCtx, +@@ -1647,6 +1686,7 @@ OvsUpdateIPv4Header(OvsForwardingContext *ovsFwdCtx, ipAttr->ipv4_dst); } ipHdr->daddr = ipAttr->ipv4_dst; @@ -1402,7 +1448,7 @@ index 5c9b5c3a0c..b49243006f 100644 } if (ipHdr->protocol != ipAttr->ipv4_proto) { UINT16 oldProto = (ipHdr->protocol << 16) & 0xff00; -@@ -1661,6 +1698,7 @@ OvsUpdateIPv4Header(OvsForwardingContext *ovsFwdCtx, +@@ -1661,6 +1701,7 @@ OvsUpdateIPv4Header(OvsForwardingContext *ovsFwdCtx, ipHdr->check = ChecksumUpdate16(ipHdr->check, oldProto, newProto); } ipHdr->protocol = ipAttr->ipv4_proto; @@ -1410,7 +1456,7 @@ index 5c9b5c3a0c..b49243006f 100644 } if (ipHdr->ttl != ipAttr->ipv4_ttl) { UINT16 oldTtl = (ipHdr->ttl) & 0xff; -@@ -1669,6 +1707,7 @@ OvsUpdateIPv4Header(OvsForwardingContext *ovsFwdCtx, +@@ -1669,6 +1710,7 @@ OvsUpdateIPv4Header(OvsForwardingContext *ovsFwdCtx, ipHdr->check = ChecksumUpdate16(ipHdr->check, oldTtl, newTtl); } ipHdr->ttl = ipAttr->ipv4_ttl; @@ -1418,7 +1464,7 @@ index 5c9b5c3a0c..b49243006f 100644 } return NDIS_STATUS_SUCCESS; -@@ -1691,12 +1730,12 @@ OvsExecuteSetAction(OvsForwardingContext *ovsFwdCtx, +@@ -1691,12 +1733,12 @@ OvsExecuteSetAction(OvsForwardingContext *ovsFwdCtx, switch (type) { case OVS_KEY_ATTR_ETHERNET: @@ -1433,7 +1479,7 @@ index 5c9b5c3a0c..b49243006f 100644 NlAttrGetUnspec(a, sizeof(struct ovs_key_ipv4))); break; -@@ -1709,16 +1748,17 @@ OvsExecuteSetAction(OvsForwardingContext *ovsFwdCtx, +@@ -1709,16 +1751,17 @@ OvsExecuteSetAction(OvsForwardingContext *ovsFwdCtx, status = SUCCEEDED(convertStatus) ? NDIS_STATUS_SUCCESS : NDIS_STATUS_FAILURE; ASSERT(status == NDIS_STATUS_SUCCESS); RtlCopyMemory(&ovsFwdCtx->tunKey, &tunKey, sizeof ovsFwdCtx->tunKey); @@ -1453,7 +1499,7 @@ index 5c9b5c3a0c..b49243006f 100644 NlAttrGetUnspec(a, sizeof(struct ovs_key_tcp))); break; -@@ -1763,9 +1803,11 @@ OvsExecuteRecirc(OvsForwardingContext *ovsFwdCtx, +@@ -1763,9 +1806,11 @@ OvsExecuteRecirc(OvsForwardingContext *ovsFwdCtx, } if (newNbl) { @@ -1467,7 +1513,7 @@ index 5c9b5c3a0c..b49243006f 100644 } if (deferredAction) { -@@ -1917,7 +1959,7 @@ OvsExecuteSampleAction(OvsForwardingContext *ovsFwdCtx, +@@ -1917,7 +1962,7 @@ OvsExecuteSampleAction(OvsForwardingContext *ovsFwdCtx, return STATUS_SUCCESS; } @@ -1476,7 +1522,7 @@ index 5c9b5c3a0c..b49243006f 100644 OVS_LOG_INFO( "Deferred actions limit reached, dropping sample action."); OvsCompleteNBL(ovsFwdCtx->switchContext, newNbl, TRUE); -@@ -2053,6 +2095,7 @@ OvsDoExecuteActions(POVS_SWITCH_CONTEXT switchContext, +@@ -2053,6 +2098,7 @@ OvsDoExecuteActions(POVS_SWITCH_CONTEXT switchContext, */ status = OvsPopVlanInPktBuf(&ovsFwdCtx); if (status != NDIS_STATUS_SUCCESS) { @@ -1484,7 +1530,7 @@ index 5c9b5c3a0c..b49243006f 100644 dropReason = L"OVS-pop vlan action failed"; goto dropit; } -@@ -2302,7 +2345,7 @@ OvsActionsExecute(POVS_SWITCH_CONTEXT switchContext, +@@ -2302,7 +2348,7 @@ OvsActionsExecute(POVS_SWITCH_CONTEXT switchContext, if (status == STATUS_SUCCESS) { status = OvsProcessDeferredActions(switchContext, completionList, diff --git a/SPECS/openvswitch2.13.spec b/SPECS/openvswitch2.13.spec index 61935a2..c4fcfce 100644 --- a/SPECS/openvswitch2.13.spec +++ b/SPECS/openvswitch2.13.spec @@ -59,7 +59,7 @@ Summary: Open vSwitch Group: System Environment/Daemons daemon/database/utilities URL: http://www.openvswitch.org/ Version: 2.13.0 -Release: 136%{?commit0:.%{date}git%{shortcommit0}}%{?commit1:dpdk%{shortcommit1}}%{?dist} +Release: 137%{?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 @@ -712,6 +712,12 @@ exit 0 %endif %changelog +* Thu Oct 28 2021 Open vSwitch CI - 2.13.0-137 +- Merging upstream branch-2.13 [RH git: f86ccc67c2] + Commit list: + da5b115580 datapath-windows:Reset PseudoChecksum value only for TX direction offload case + + * Wed Oct 27 2021 Open vSwitch CI - 2.13.0-136 - Merging upstream branch-2.13 [RH git: 25cc09c60a] Commit list: