[ovs-dev] [PATCH] datapath-windows: Fix recirculation to use the proper FlowKey

Sairam Venugopal vsairam at vmware.com
Fri May 6 21:21:47 UTC 2016


Pass down the right sendFlags for re-init fwdCtx. Remove the redundant
call to ExtractFlow. It resets the flowKey causing failure in tunnel
context.

Signed-off-by: Sairam Venugopal <vsairam at vmware.com>
---
 datapath-windows/ovsext/Actions.c | 15 +++++++--------
 datapath-windows/ovsext/Actions.h |  1 +
 datapath-windows/ovsext/Recirc.c  |  1 +
 3 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/datapath-windows/ovsext/Actions.c b/datapath-windows/ovsext/Actions.c
index 5ad29ee..5ee9f17 100644
--- a/datapath-windows/ovsext/Actions.c
+++ b/datapath-windows/ovsext/Actions.c
@@ -1976,6 +1976,7 @@ OvsDoRecirc(POVS_SWITCH_CONTEXT switchContext,
             PNET_BUFFER_LIST curNbl,
             OvsFlowKey *key,
             UINT32 srcPortNo,
+            ULONG sendFlags,
             OVS_PACKET_HDR_INFO *layers)
 {
     NDIS_STATUS status;
@@ -1983,17 +1984,15 @@ OvsDoRecirc(POVS_SWITCH_CONTEXT switchContext,
     OvsForwardingContext ovsFwdCtx = { 0 };
     UINT64 hash = 0;
     ASSERT(layers);
+    PNDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO fwdDetail =
+        NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL(curNbl);
 
-    OvsInitForwardingCtx(&ovsFwdCtx, switchContext, curNbl,
-                         srcPortNo, 0,
-                         NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL(curNbl),
-                         completionList, layers, TRUE);
-
-    status = OvsExtractFlow(ovsFwdCtx.curNbl, ovsFwdCtx.srcVportNo, key,
-                            &ovsFwdCtx.layers, NULL);
+    status = OvsInitForwardingCtx(&ovsFwdCtx, switchContext, curNbl,
+                                  srcPortNo, sendFlags, fwdDetail,
+                                  completionList, layers, TRUE);
     if (status != NDIS_STATUS_SUCCESS) {
         OvsCompleteNBLForwardingCtx(&ovsFwdCtx,
-            L"OVS-Dropped due to extract flow failure");
+            L"OVS-initing destination port list failed at recirc");
         ovsActionStats.failedFlowMiss++;
         return NDIS_STATUS_FAILURE;
     }
diff --git a/datapath-windows/ovsext/Actions.h b/datapath-windows/ovsext/Actions.h
index c56c260..e80ac4a 100644
--- a/datapath-windows/ovsext/Actions.h
+++ b/datapath-windows/ovsext/Actions.h
@@ -50,6 +50,7 @@ OvsDoRecirc(POVS_SWITCH_CONTEXT switchContext,
             PNET_BUFFER_LIST curNbl,
             OvsFlowKey *key,
             UINT32 srcPortNo,
+            ULONG sendFlags,
             OVS_PACKET_HDR_INFO *layers);
 
 #endif /* __ACTIONS_H_ */
diff --git a/datapath-windows/ovsext/Recirc.c b/datapath-windows/ovsext/Recirc.c
index 2febf06..733e105 100644
--- a/datapath-windows/ovsext/Recirc.c
+++ b/datapath-windows/ovsext/Recirc.c
@@ -327,6 +327,7 @@ OvsProcessDeferredActions(POVS_SWITCH_CONTEXT switchContext,
                                  deferredAction->nbl,
                                  &deferredAction->key,
                                  portNo,
+                                 sendFlags,
                                  layers);
         }
     }
-- 
2.5.0.windows.1




More information about the dev mailing list