[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