Thanks for incorporating this change.

Acked-by: Sairam Venugopal <vsai...@vmware.com>





On 3/24/17, 1:51 PM, "ovs-dev-boun...@openvswitch.org on behalf of Anand Kumar" 
<ovs-dev-boun...@openvswitch.org on behalf of kumaran...@vmware.com> wrote:

>This patch introduces a new field MRU(Maximum Recieved Unit) in the
>_OVS_BUFFER_CONTEXT and it is used only for Ip Fragments to retain MRU for
>the reassembled IP datagram when the packet is forwarded to userspace.
>
>Signed-off-by: Anand Kumar <kumaran...@vmware.com>
>---
>v5->v6: No Change
>v4->v5:
>       - Refactored the patch as MRU field is removed form 
> ovsForwardingContext.
>       - Added MRU field in _OVS_BUFFER_CONTEXT.
>       - Updated commit message.
>v3->v4: No Change
>v2->v3: No change
>v1->v2: No change
>---
> datapath-windows/ovsext/BufferMgmt.c |  1 +
> datapath-windows/ovsext/BufferMgmt.h |  1 +
> datapath-windows/ovsext/DpInternal.h |  2 +-
> datapath-windows/ovsext/IpFragment.c |  2 ++
> datapath-windows/ovsext/User.c       | 20 +++++++++++++++++++-
> 5 files changed, 24 insertions(+), 2 deletions(-)
>
>diff --git a/datapath-windows/ovsext/BufferMgmt.c 
>b/datapath-windows/ovsext/BufferMgmt.c
>index 6027c35..d99052d 100644
>--- a/datapath-windows/ovsext/BufferMgmt.c
>+++ b/datapath-windows/ovsext/BufferMgmt.c
>@@ -266,6 +266,7 @@ OvsInitNBLContext(POVS_BUFFER_CONTEXT ctx,
>     ctx->flags = flags;
>     ctx->srcPortNo = srcPortNo;
>     ctx->origDataLength = origDataLength;
>+    ctx->mru = 0;
> }
> 
> 
>diff --git a/datapath-windows/ovsext/BufferMgmt.h 
>b/datapath-windows/ovsext/BufferMgmt.h
>index 11a05b2..77b2854 100644
>--- a/datapath-windows/ovsext/BufferMgmt.h
>+++ b/datapath-windows/ovsext/BufferMgmt.h
>@@ -58,6 +58,7 @@ typedef union _OVS_BUFFER_CONTEXT {
>             UINT32 origDataLength;
>             UINT32 dataOffsetDelta;
>         };
>+        UINT16 mru;
>     };
> 
>     UINT64 value[MEM_ALIGN_SIZE(16) >> 3];
>diff --git a/datapath-windows/ovsext/DpInternal.h 
>b/datapath-windows/ovsext/DpInternal.h
>index f62fc55..9d1a783 100644
>--- a/datapath-windows/ovsext/DpInternal.h
>+++ b/datapath-windows/ovsext/DpInternal.h
>@@ -298,7 +298,7 @@ typedef struct _OVS_PACKET_INFO {
> typedef struct OvsPacketExecute {
>    uint32_t dpNo;
>    uint32_t inPort;
>-
>+   uint16 mru;
>    uint32_t packetLen;
>    uint32_t actionsLen;
>    PNL_MSG_HDR nlMsgHdr;
>diff --git a/datapath-windows/ovsext/IpFragment.c 
>b/datapath-windows/ovsext/IpFragment.c
>index 37abcd8..b0294ce 100644
>--- a/datapath-windows/ovsext/IpFragment.c
>+++ b/datapath-windows/ovsext/IpFragment.c
>@@ -208,6 +208,8 @@ OvsIpv4Reassemble(POVS_SWITCH_CONTEXT switchContext,
>         OvsCompleteNBL(switchContext, *curNbl, TRUE);
>     }
>     /* Store mru in the ovs buffer context. */
>+    ctx = (POVS_BUFFER_CONTEXT)NET_BUFFER_LIST_CONTEXT_DATA_START(*newNbl);
>+    ctx->mru = entry->mru;
>     *curNbl = *newNbl;
>     return status;
> }
>diff --git a/datapath-windows/ovsext/User.c b/datapath-windows/ovsext/User.c
>index c7ac284..3154640 100644
>--- a/datapath-windows/ovsext/User.c
>+++ b/datapath-windows/ovsext/User.c
>@@ -283,7 +283,8 @@ OvsNlExecuteCmdHandler(POVS_USER_PARAMS_CONTEXT 
>usrParamsCtx,
>         [OVS_PACKET_ATTR_ACTIONS] = {.type = NL_A_UNSPEC, .optional = FALSE},
>         [OVS_PACKET_ATTR_USERDATA] = {.type = NL_A_UNSPEC, .optional = TRUE},
>         [OVS_PACKET_ATTR_EGRESS_TUN_KEY] = {.type = NL_A_UNSPEC,
>-                                            .optional = TRUE}
>+                                            .optional = TRUE},
>+        [OVS_PACKET_ATTR_MRU] = { .type = NL_A_U16, .optional = TRUE }
>     };
> 
>     RtlZeroMemory(&execute, sizeof(OvsPacketExecute));
>@@ -381,6 +382,10 @@ _MapNlAttrToOvsPktExec(PNL_MSG_HDR nlMsgHdr, PNL_ATTR 
>*nlAttrs,
>     ASSERT(keyAttrs[OVS_KEY_ATTR_IN_PORT]);
>     execute->inPort = NlAttrGetU32(keyAttrs[OVS_KEY_ATTR_IN_PORT]);
>     execute->keyAttrs = keyAttrs;
>+
>+    if (nlAttrs[OVS_PACKET_ATTR_MRU]) {
>+        execute->mru = NlAttrGetU16(nlAttrs[OVS_PACKET_ATTR_MRU]);
>+    }
> }
> 
> NTSTATUS
>@@ -397,6 +402,7 @@ OvsExecuteDpIoctl(OvsPacketExecute *execute)
>     POVS_VPORT_ENTRY            vport = NULL;
>     PNL_ATTR tunnelAttrs[__OVS_TUNNEL_KEY_ATTR_MAX];
>     OvsFlowKey tempTunKey = {0};
>+    POVS_BUFFER_CONTEXT ctx;
> 
>     if (execute->packetLen == 0) {
>         status = STATUS_INVALID_PARAMETER;
>@@ -459,6 +465,9 @@ OvsExecuteDpIoctl(OvsPacketExecute *execute)
>     ndisStatus = OvsExtractFlow(pNbl, execute->inPort, &key, &layers,
>                      tempTunKey.tunKey.dst == 0 ? NULL : &tempTunKey.tunKey);
> 
>+    ctx = (POVS_BUFFER_CONTEXT)NET_BUFFER_LIST_CONTEXT_DATA_START(pNbl);
>+    ctx->mru = execute->mru;
>+
>     if (ndisStatus == NDIS_STATUS_SUCCESS) {
>         NdisAcquireRWLockRead(gOvsSwitchContext->dispatchLock, &lockState, 0);
>         ndisStatus = OvsActionsExecute(gOvsSwitchContext, NULL, pNbl,
>@@ -988,6 +997,7 @@ OvsCreateQueueNlPacket(PVOID userData,
>     UINT32 nlMsgSize;
>     NL_BUFFER nlBuf;
>     PNL_MSG_HDR nlMsg;
>+    POVS_BUFFER_CONTEXT ctx;
> 
>     if (vport == NULL){
>         /* No vport is not fatal. */
>@@ -1071,6 +1081,14 @@ OvsCreateQueueNlPacket(PVOID userData,
>         goto fail;
>     }
> 
>+    /* Set MRU attribute */
>+    ctx = (POVS_BUFFER_CONTEXT)NET_BUFFER_LIST_CONTEXT_DATA_START(nbl);
>+    if (ctx->mru != 0) {
>+        if (!NlMsgPutTailU16(&nlBuf, OVS_PACKET_ATTR_MRU, (UINT16)ctx->mru)) {
>+            goto fail;
>+        }
>+    }
>+
>     /* XXX must send OVS_PACKET_ATTR_EGRESS_TUN_KEY if set by vswtchd */
>     if (userData){
>         if (!NlMsgPutTailUnspec(&nlBuf, OVS_PACKET_ATTR_USERDATA,
>-- 
>2.9.3.windows.1
>
>_______________________________________________
>dev mailing list
>d...@openvswitch.org
>https://urldefense.proofpoint.com/v2/url?u=https-3A__mail.openvswitch.org_mailman_listinfo_ovs-2Ddev&d=DwICAg&c=uilaK90D4TOVoH58JNXRgQ&r=Z6vowHUOjP5ysP_g372c49Nqc1vEKqHKNBkR5Q5Z7uo&m=ygQza7U57S_gHFlFqzZe9Z6tGIlxZID_zSModfdY0OU&s=evQb7koQKlj7oZLL6sG7n-_kMgpoJldvRt27zPa4qXs&e=
> 
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to