[ovs-dev] [PATCH v3 4/6] datapath-windows: Extract flow metadata in execute cmd handler.

Sairam Venugopal vsairam at vmware.com
Fri Feb 26 19:59:32 UTC 2016


Acked-by: Sairam Venugopal <vsairam at vmware.com>


On 2/22/16, 6:07 AM, "Sorin Vinturis" <svinturis at cloudbasesolutions.com>
wrote:

>Signed-off-by: Sorin Vinturis <svinturis at cloudbasesolutions.com>
>---
>v3: No changes from the previous version.
>---
> datapath-windows/ovsext/DpInternal.h |  1 +
> datapath-windows/ovsext/Flow.c       | 17 +++++++++++++++++
> datapath-windows/ovsext/Flow.h       |  2 ++
> datapath-windows/ovsext/User.c       |  7 +++++++
> 4 files changed, 27 insertions(+)
>
>diff --git a/datapath-windows/ovsext/DpInternal.h
>b/datapath-windows/ovsext/DpInternal.h
>index 612ff7b..4d4fec3 100644
>--- a/datapath-windows/ovsext/DpInternal.h
>+++ b/datapath-windows/ovsext/DpInternal.h
>@@ -270,6 +270,7 @@ typedef struct OvsPacketExecute {
>    uint32_t actionsLen;
>    PCHAR packetBuf;
>    PNL_ATTR actions;
>+   PNL_ATTR *keyAttrs;
> } OvsPacketExecute;
> 
> 
>diff --git a/datapath-windows/ovsext/Flow.c
>b/datapath-windows/ovsext/Flow.c
>index 8fc068e..e256ec6 100644
>--- a/datapath-windows/ovsext/Flow.c
>+++ b/datapath-windows/ovsext/Flow.c
>@@ -1735,6 +1735,23 @@ DeleteAllFlows(OVS_DATAPATH *datapath)
>     }
> }
> 
>+NDIS_STATUS
>+OvsGetFlowMetadata(OvsFlowKey *key,
>+                   PNL_ATTR *keyAttrs)
>+{
>+    NDIS_STATUS status = NDIS_STATUS_SUCCESS;
>+
>+    if (keyAttrs[OVS_KEY_ATTR_RECIRC_ID]) {
>+        key->recircId = NlAttrGetU32(keyAttrs[OVS_KEY_ATTR_RECIRC_ID]);
>+    }
>+
>+    if (keyAttrs[OVS_KEY_ATTR_DP_HASH]) {
>+        key->dpHash = NlAttrGetU32(keyAttrs[OVS_KEY_ATTR_DP_HASH]);
>+    }
>+
>+    return status;
>+}
>+
> /*
>  
>*-------------------------------------------------------------------------
>---
>  * Initializes 'flow' members from 'packet', 'skb_priority', 'tun_id',
>and
>diff --git a/datapath-windows/ovsext/Flow.h
>b/datapath-windows/ovsext/Flow.h
>index 78bf7cc..310c472 100644
>--- a/datapath-windows/ovsext/Flow.h
>+++ b/datapath-windows/ovsext/Flow.h
>@@ -51,6 +51,8 @@ NDIS_STATUS OvsDeleteFlowTable(OVS_DATAPATH *datapath);
> NDIS_STATUS OvsAllocateFlowTable(OVS_DATAPATH *datapath,
>                                  POVS_SWITCH_CONTEXT switchContext);
> 
>+NDIS_STATUS OvsGetFlowMetadata(OvsFlowKey *key,
>+                               PNL_ATTR *keyAttrs);
> NDIS_STATUS OvsExtractFlow(const NET_BUFFER_LIST *pkt, UINT32 inPort,
>                            OvsFlowKey *flow, POVS_PACKET_HDR_INFO layers,
>                            OvsIPv4TunnelKey *tunKey);
>diff --git a/datapath-windows/ovsext/User.c
>b/datapath-windows/ovsext/User.c
>index cadffda..6b2d94a 100644
>--- a/datapath-windows/ovsext/User.c
>+++ b/datapath-windows/ovsext/User.c
>@@ -383,6 +383,7 @@ _MapNlAttrToOvsPktExec(PNL_ATTR *nlAttrs, PNL_ATTR
>*keyAttrs,
>     execute->actionsLen =
>NlAttrGetSize(nlAttrs[OVS_PACKET_ATTR_ACTIONS]);
> 
>     execute->inPort = NlAttrGetU32(keyAttrs[OVS_KEY_ATTR_IN_PORT]);
>+    execute->keyAttrs = keyAttrs;
> }
> 
> NTSTATUS
>@@ -429,6 +430,11 @@ OvsExecuteDpIoctl(OvsPacketExecute *execute)
>     }
>     // XXX: Figure out if any of the other members of fwdDetail need to
>be set.
> 
>+    status = OvsGetFlowMetadata(&key, execute->keyAttrs);
>+    if (status != STATUS_SUCCESS) {
>+        goto dropit;
>+    }
>+
>     ndisStatus = OvsExtractFlow(pNbl, fwdDetail->SourcePortId, &key,
>&layers,
>                                 NULL);
>     if (ndisStatus == NDIS_STATUS_SUCCESS) {
>@@ -450,6 +456,7 @@ OvsExecuteDpIoctl(OvsPacketExecute *execute)
>         }
>     }
> 
>+dropit:
>     if (pNbl) {
>         OvsCompleteNBL(gOvsSwitchContext, pNbl, TRUE);
>     }
>-- 
>1.9.0.msysgit.0
>_______________________________________________
>dev mailing list
>dev at openvswitch.org
>https://urldefense.proofpoint.com/v2/url?u=http-3A__openvswitch.org_mailma
>n_listinfo_dev&d=BQIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=Dc
>ruz40PROJ40ROzSpxyQSLw6fcrOWpJgEcEmNR3JEQ&m=9er7COYpSoXAx1XMEyKSC_fbC4feGn
>1Ciz0jZt9U-8U&s=YTObrirbUuURTqML4LPMbt_LpHG39c34J_W51QeZnWw&e= 




More information about the dev mailing list