Acked-by: Sairam Venugopal <[email protected]>

On 12/8/16, 1:31 PM, "Shashank Ram" <[email protected]> wrote:

>- In OvsTunnelPortTx() function, for packets coming from the
>  VIF port, the srcVportNo, srcPortId and srcNicIndex were
>  getting modified for the original NBL prior to creation
>  of newNbl. This is not correct since modifying the original
>  packet's forwarding detail can cause completion issues.
>  Instead, we should keep the forwarding detail of the original
>  packet as is, and only update the forwarding detail for the
>  newNbl.
>
>Signed-off-by: Shashank Ram <[email protected]>
>---
> datapath-windows/ovsext/Actions.c | 25 ++++++++++++++++++++-----
> 1 file changed, 20 insertions(+), 5 deletions(-)
>
>diff --git a/datapath-windows/ovsext/Actions.c
>b/datapath-windows/ovsext/Actions.c
>index f46309a..b5d922b 100644
>--- a/datapath-windows/ovsext/Actions.c
>+++ b/datapath-windows/ovsext/Actions.c
>@@ -663,6 +663,9 @@ OvsTunnelPortTx(OvsForwardingContext *ovsFwdCtx)
> {
>     NDIS_STATUS status = NDIS_STATUS_FAILURE;
>     PNET_BUFFER_LIST newNbl = NULL;
>+    UINT32 srcVportNo;
>+    NDIS_SWITCH_NIC_INDEX srcNicIndex;
>+    NDIS_SWITCH_PORT_ID srcPortId;
>
>     /*
>      * Setup the source port to be the internal port to as to facilitate
>the
>@@ -675,11 +678,15 @@ OvsTunnelPortTx(OvsForwardingContext *ovsFwdCtx)
>             L"OVS-Dropped since either internal or external port is
>absent");
>         return NDIS_STATUS_FAILURE;
>     }
>-    ovsFwdCtx->srcVportNo =
>-        
>((POVS_VPORT_ENTRY)ovsFwdCtx->switchContext->internalVport)->portNo;
>
>-    ovsFwdCtx->fwdDetail->SourcePortId =
>ovsFwdCtx->switchContext->internalPortId;
>-    ovsFwdCtx->fwdDetail->SourceNicIndex =
>+    /*
>+     * Save the 'srcVportNo', 'srcPortId', 'srcNicIndex' so that
>+     * this can be applied to the new NBL later on.
>+     */
>+    srcVportNo =
>+        
>((POVS_VPORT_ENTRY)ovsFwdCtx->switchContext->internalVport)->portNo;
>+    srcPortId = ovsFwdCtx->switchContext->internalPortId;
>+    srcNicIndex =
>         
>((POVS_VPORT_ENTRY)ovsFwdCtx->switchContext->internalVport)->nicIndex;
>
>     /* Do the encap. Encap function does not consume the NBL. */
>@@ -715,12 +722,20 @@ OvsTunnelPortTx(OvsForwardingContext *ovsFwdCtx)
>         ASSERT(newNbl);
>         OvsCompleteNBLForwardingCtx(ovsFwdCtx,
>                                     L"Complete after cloning NBL for
>encapsulation");
>+        status = OvsInitForwardingCtx(ovsFwdCtx,
>ovsFwdCtx->switchContext,
>+                                      newNbl, srcVportNo, 0,
>+                 
>NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL(newNbl),
>+                                      ovsFwdCtx->completionList,
>+                                      &ovsFwdCtx->layers, FALSE);
>         ovsFwdCtx->curNbl = newNbl;
>+        /* Update the forwarding detail for the new NBL */
>+        ovsFwdCtx->fwdDetail->SourcePortId = srcPortId;
>+        ovsFwdCtx->fwdDetail->SourceNicIndex = srcNicIndex;
>         status = OvsDoFlowLookupOutput(ovsFwdCtx);
>         ASSERT(ovsFwdCtx->curNbl == NULL);
>     } else {
>         /*
>-        * XXX: Temporary freeing of the packet until we register a
>+         * XXX: Temporary freeing of the packet until we register a
>          * callback to IP helper.
>          */
>         OvsCompleteNBLForwardingCtx(ovsFwdCtx,
>--
>2.6.2
>
>_______________________________________________
>dev mailing list
>[email protected]
>https://urldefense.proofpoint.com/v2/url?u=https-3A__mail.openvswitch.org_
>mailman_listinfo_ovs-2Ddev&d=DgICAg&c=uilaK90D4TOVoH58JNXRgQ&r=Z6vowHUOjP5
>ysP_g372c49Nqc1vEKqHKNBkR5Q5Z7uo&m=wzeqpMw3eihlOFBYWonYkI0sNArcFcP7lPBZUyK
>kqAs&s=r6kexkZdDVn07MGbD73MlXTxChjQTq9_HD2G7vXjjFQ&e= 

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to