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