diff --git a/SOURCES/openvswitch-2.15.0.patch b/SOURCES/openvswitch-2.15.0.patch index f557c1f..238d7f5 100644 --- a/SOURCES/openvswitch-2.15.0.patch +++ b/SOURCES/openvswitch-2.15.0.patch @@ -235,7 +235,7 @@ index fd82d7d270..bcee218005 100644 AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_AUX_DIR([build-aux]) diff --git a/datapath-windows/ovsext/Actions.c b/datapath-windows/ovsext/Actions.c -index 4f43369844..90ecb59f06 100644 +index 4f43369844..592cb7467c 100644 --- a/datapath-windows/ovsext/Actions.c +++ b/datapath-windows/ovsext/Actions.c @@ -1112,9 +1112,9 @@ OvsPopFieldInPacketBuf(OvsForwardingContext *ovsFwdCtx, @@ -299,7 +299,30 @@ index 4f43369844..90ecb59f06 100644 } } -@@ -2088,6 +2111,7 @@ OvsDoExecuteActions(POVS_SWITCH_CONTEXT switchContext, +@@ -1780,9 +1803,11 @@ OvsExecuteRecirc(OvsForwardingContext *ovsFwdCtx, + } + + if (newNbl) { +- deferredAction = OvsAddDeferredActions(newNbl, key, NULL); ++ deferredAction = OvsAddDeferredActions(newNbl, key, &(ovsFwdCtx->layers), ++ NULL); + } else { +- deferredAction = OvsAddDeferredActions(ovsFwdCtx->curNbl, key, NULL); ++ deferredAction = OvsAddDeferredActions(ovsFwdCtx->curNbl, key, ++ &(ovsFwdCtx->layers), NULL); + } + + if (deferredAction) { +@@ -1952,7 +1977,7 @@ OvsExecuteSampleAction(OvsForwardingContext *ovsFwdCtx, + return STATUS_SUCCESS; + } + +- if (!OvsAddDeferredActions(newNbl, key, a)) { ++ if (!OvsAddDeferredActions(newNbl, key, &(ovsFwdCtx->layers), a)) { + OVS_LOG_INFO( + "Deferred actions limit reached, dropping sample action."); + OvsCompleteNBL(ovsFwdCtx->switchContext, newNbl, TRUE); +@@ -2088,6 +2113,7 @@ OvsDoExecuteActions(POVS_SWITCH_CONTEXT switchContext, */ status = OvsPopVlanInPktBuf(&ovsFwdCtx); if (status != NDIS_STATUS_SUCCESS) { @@ -307,6 +330,106 @@ index 4f43369844..90ecb59f06 100644 dropReason = L"OVS-pop vlan action failed"; goto dropit; } +@@ -2337,7 +2363,7 @@ OvsActionsExecute(POVS_SWITCH_CONTEXT switchContext, + + if (status == STATUS_SUCCESS) { + status = OvsProcessDeferredActions(switchContext, completionList, +- portNo, sendFlags, layers); ++ portNo, sendFlags, NULL); + } + + return status; +diff --git a/datapath-windows/ovsext/Recirc.c b/datapath-windows/ovsext/Recirc.c +index 2febf060dd..a32b75352b 100644 +--- a/datapath-windows/ovsext/Recirc.c ++++ b/datapath-windows/ovsext/Recirc.c +@@ -277,16 +277,23 @@ OvsDeferredActionsQueuePush(POVS_DEFERRED_ACTION_QUEUE queue) + POVS_DEFERRED_ACTION + OvsAddDeferredActions(PNET_BUFFER_LIST nbl, + OvsFlowKey *key, ++ POVS_PACKET_HDR_INFO layers, + const PNL_ATTR actions) + { + POVS_DEFERRED_ACTION_QUEUE queue = OvsDeferredActionsQueueGet(); + POVS_DEFERRED_ACTION deferredAction = NULL; ++ OVS_PACKET_HDR_INFO layersInit = { 0 }; + + deferredAction = OvsDeferredActionsQueuePush(queue); + if (deferredAction) { + deferredAction->nbl = nbl; + deferredAction->actions = actions; + deferredAction->key = *key; ++ if (layers) { ++ deferredAction->layers = *layers; ++ } else { ++ deferredAction->layers = layersInit; ++ } + } + + return deferredAction; +@@ -309,9 +316,16 @@ OvsProcessDeferredActions(POVS_SWITCH_CONTEXT switchContext, + NDIS_STATUS status = NDIS_STATUS_SUCCESS; + POVS_DEFERRED_ACTION_QUEUE queue = OvsDeferredActionsQueueGet(); + POVS_DEFERRED_ACTION deferredAction = NULL; ++ POVS_PACKET_HDR_INFO layersDeferred = NULL; + + /* Process all deferred actions. */ + while ((deferredAction = OvsDeferredActionsQueuePop(queue)) != NULL) { ++ if (layers) { ++ layersDeferred = layers; ++ } else { ++ layersDeferred = &(deferredAction->layers); ++ } ++ + if (deferredAction->actions) { + status = OvsDoExecuteActions(switchContext, + completionList, +@@ -319,7 +333,7 @@ OvsProcessDeferredActions(POVS_SWITCH_CONTEXT switchContext, + portNo, + sendFlags, + &deferredAction->key, NULL, +- layers, deferredAction->actions, ++ layersDeferred, deferredAction->actions, + NlAttrGetSize(deferredAction->actions)); + } else { + status = OvsDoRecirc(switchContext, +@@ -327,7 +341,7 @@ OvsProcessDeferredActions(POVS_SWITCH_CONTEXT switchContext, + deferredAction->nbl, + &deferredAction->key, + portNo, +- layers); ++ layersDeferred); + } + } + +diff --git a/datapath-windows/ovsext/Recirc.h b/datapath-windows/ovsext/Recirc.h +index 2b314ce274..74130a4600 100644 +--- a/datapath-windows/ovsext/Recirc.h ++++ b/datapath-windows/ovsext/Recirc.h +@@ -18,6 +18,7 @@ + #define __RECIRC_H_ 1 + + #include "Actions.h" ++#include "NetProto.h" + + #define DEFERRED_ACTION_QUEUE_SIZE 10 + #define DEFERRED_ACTION_EXEC_LEVEL 4 +@@ -26,6 +27,7 @@ typedef struct _OVS_DEFERRED_ACTION { + PNET_BUFFER_LIST nbl; + PNL_ATTR actions; + OvsFlowKey key; ++ OVS_PACKET_HDR_INFO layers; + } OVS_DEFERRED_ACTION, *POVS_DEFERRED_ACTION; + + /* +@@ -52,6 +54,7 @@ OvsProcessDeferredActions(POVS_SWITCH_CONTEXT switchContext, + POVS_DEFERRED_ACTION + OvsAddDeferredActions(PNET_BUFFER_LIST packet, + OvsFlowKey *key, ++ POVS_PACKET_HDR_INFO layers, + const PNL_ATTR actions); + + /* diff --git a/datapath-windows/ovsext/ovsext.vcxproj b/datapath-windows/ovsext/ovsext.vcxproj index d50a126b43..18f884f41b 100644 --- a/datapath-windows/ovsext/ovsext.vcxproj diff --git a/SPECS/openvswitch2.15.spec b/SPECS/openvswitch2.15.spec index 2d55ec4..2973eb9 100644 --- a/SPECS/openvswitch2.15.spec +++ b/SPECS/openvswitch2.15.spec @@ -57,7 +57,7 @@ Summary: Open vSwitch Group: System Environment/Daemons daemon/database/utilities URL: http://www.openvswitch.org/ Version: 2.15.0 -Release: 46%{?dist} +Release: 47%{?dist} # Nearly all of openvswitch is ASL 2.0. The bugtool is LGPLv2+, and the # lib/sflow*.[ch] files are SISSL @@ -699,6 +699,12 @@ exit 0 %endif %changelog +* Tue Oct 19 2021 Open vSwitch CI - 2.15.0-47 +- Merging upstream branch-2.15 [RH git: 01110b9088] + Commit list: + b7d9c491ec datapath-windows: add layers when adding the deferred actions + + * Thu Oct 14 2021 Open vSwitch CI - 2.15.0-46 - Merging upstream branch-2.15 [RH git: f8619036c9] Commit list: