My main comment here would be to see if we can add the MRU to the NBL Buffer Context instead of OvsForwardingContext - https://github.com/openvswitch/ovs/blob/75e2077e0c43224bcca92746b28b01a4936fc101/datapath-windows/ovsext/BufferMgmt.h#L51
This will drastically reduce the amount of changes required to support the MRU field. Thanks, Sairam On 1/30/17, 1:39 PM, "[email protected] on behalf of Anand Kumar" <[email protected] on behalf of [email protected]> wrote: >This patch retains the MRU value for the reassembled IP datagram in the >OvsForwardingContext when the packet is forwarded to userspace and/or >retrived from userspace. > >Also retain the MRU value when there are any deferred actions for the >current NBL. > >Signed-off-by: Anand Kumar <[email protected]> >--- >v4->v3: No Change >v2->v3: No change >v1->v2: No change >--- > datapath-windows/ovsext/Actions.c | 49 +++++++++++++++++++++++------------- > datapath-windows/ovsext/Actions.h | 3 +++ > datapath-windows/ovsext/DpInternal.h | 2 +- > datapath-windows/ovsext/PacketIO.c | 9 ++++--- > datapath-windows/ovsext/Recirc.c | 6 ++++- > datapath-windows/ovsext/Recirc.h | 2 ++ > datapath-windows/ovsext/Tunnel.c | 4 +-- > datapath-windows/ovsext/User.c | 26 +++++++++++++------ > datapath-windows/ovsext/User.h | 6 +++-- > 9 files changed, 72 insertions(+), 35 deletions(-) > >diff --git a/datapath-windows/ovsext/Actions.c >b/datapath-windows/ovsext/Actions.c >index e4e56e8..5b541b1 100644 >--- a/datapath-windows/ovsext/Actions.c >+++ b/datapath-windows/ovsext/Actions.c >@@ -150,6 +150,7 @@ OvsInitForwardingCtx(OvsForwardingContext *ovsFwdCtx, > UINT32 srcVportNo, > ULONG sendFlags, > PNDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO > fwdDetail, >+ UINT16 mru, > OvsCompletionList *completionList, > OVS_PACKET_HDR_INFO *layers, > BOOLEAN resetTunnelInfo) >@@ -167,7 +168,7 @@ OvsInitForwardingCtx(OvsForwardingContext *ovsFwdCtx, > ovsFwdCtx->switchContext = switchContext; > ovsFwdCtx->completionList = completionList; > ovsFwdCtx->fwdDetail = fwdDetail; >- >+ ovsFwdCtx->mru = mru; > if (fwdDetail->NumAvailableDestinations > 0) { > /* > * XXX: even though MSDN says GetNetBufferListDestinations() returns >@@ -615,6 +616,7 @@ OvsDoFlowLookupOutput(OvsForwardingContext *ovsFwdCtx) > ovsFwdCtx->srcVportNo, > ovsFwdCtx->sendFlags, > &key, &hash, &ovsFwdCtx->layers, >+ ovsFwdCtx->mru, > flow->actions, flow->actionsLen); > ovsFwdCtx->curNbl = NULL; > } else { >@@ -623,9 +625,11 @@ OvsDoFlowLookupOutput(OvsForwardingContext *ovsFwdCtx) > ovsFwdCtx->switchContext->datapath.misses++; > InitializeListHead(&missedPackets); > status = OvsCreateAndAddPackets(NULL, 0, OVS_PACKET_CMD_MISS, vport, >- &key,ovsFwdCtx->curNbl, >- FALSE, &ovsFwdCtx->layers, >- ovsFwdCtx->switchContext, &missedPackets, &num); >+ &key,ovsFwdCtx->curNbl, >+ FALSE, &ovsFwdCtx->layers, >+ ovsFwdCtx->switchContext, >+ ovsFwdCtx->mru, >+ &missedPackets, &num); > if (num) { > OvsQueuePackets(&missedPackets, num); > } >@@ -722,6 +726,7 @@ OvsTunnelPortTx(OvsForwardingContext *ovsFwdCtx) > status = OvsInitForwardingCtx(ovsFwdCtx, ovsFwdCtx->switchContext, > newNbl, srcVportNo, 0, > > NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL(newNbl), >+ ovsFwdCtx->mru, > ovsFwdCtx->completionList, > &ovsFwdCtx->layers, FALSE); > ovsFwdCtx->curNbl = newNbl; >@@ -822,6 +827,7 @@ OvsTunnelPortRx(OvsForwardingContext *ovsFwdCtx) > OvsInitForwardingCtx(ovsFwdCtx, ovsFwdCtx->switchContext, > newNbl, tunnelRxVport->portNo, 0, > NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL(newNbl), >+ ovsFwdCtx->mru, > ovsFwdCtx->completionList, > &ovsFwdCtx->layers, FALSE); > >@@ -921,6 +927,7 @@ OvsOutputForwardingCtx(OvsForwardingContext *ovsFwdCtx) > status = OvsInitForwardingCtx(ovsFwdCtx, ovsFwdCtx->switchContext, > newNbl, ovsFwdCtx->srcVportNo, 0, > > NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL(newNbl), >+ ovsFwdCtx->mru, > ovsFwdCtx->completionList, > &ovsFwdCtx->layers, FALSE); > if (status != NDIS_STATUS_SUCCESS) { >@@ -986,7 +993,7 @@ OvsLookupFlowOutput(POVS_SWITCH_CONTEXT switchContext, > status = OvsInitForwardingCtx(&ovsFwdCtx, switchContext, curNbl, > internalVport->portNo, 0, > > NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL(curNbl), >- completionList, NULL, TRUE); >+ 0, completionList, NULL, TRUE); > if (status != NDIS_STATUS_SUCCESS) { > OvsCompleteNBLForwardingCtx(&ovsFwdCtx, > L"OVS-Dropped due to resources"); >@@ -1060,6 +1067,7 @@ OvsOutputBeforeSetAction(OvsForwardingContext *ovsFwdCtx) > status = OvsInitForwardingCtx(ovsFwdCtx, ovsFwdCtx->switchContext, > newNbl, tempVportNo, 0, > > NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL(newNbl), >+ ovsFwdCtx->mru, > ovsFwdCtx->completionList, > &ovsFwdCtx->layers, FALSE); > } >@@ -1104,7 +1112,7 @@ OvsPopFieldInPacketBuf(OvsForwardingContext *ovsFwdCtx, > status = OvsInitForwardingCtx(ovsFwdCtx, ovsFwdCtx->switchContext, newNbl, > ovsFwdCtx->srcVportNo, 0, > > NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL(newNbl), >- NULL, &ovsFwdCtx->layers, FALSE); >+ ovsFwdCtx->mru, NULL, &ovsFwdCtx->layers, >FALSE); > if (status != NDIS_STATUS_SUCCESS) { > OvsCompleteNBLForwardingCtx(ovsFwdCtx, > L"Dropped due to resouces"); >@@ -1228,7 +1236,7 @@ OvsActionMplsPush(OvsForwardingContext *ovsFwdCtx, > status = OvsInitForwardingCtx(ovsFwdCtx, ovsFwdCtx->switchContext, > newNbl, ovsFwdCtx->srcVportNo, 0, > > NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL(newNbl), >- NULL, &ovsFwdCtx->layers, FALSE); >+ ovsFwdCtx->mru, NULL, &ovsFwdCtx->layers, >FALSE); > if (status != NDIS_STATUS_SUCCESS) { > OvsCompleteNBLForwardingCtx(ovsFwdCtx, > L"OVS-Dropped due to resources"); >@@ -1360,8 +1368,7 @@ PUINT8 OvsGetHeaderBySize(OvsForwardingContext >*ovsFwdCtx, > status = OvsInitForwardingCtx(ovsFwdCtx, ovsFwdCtx->switchContext, > newNbl, ovsFwdCtx->srcVportNo, 0, > > NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL(newNbl), >- NULL, &ovsFwdCtx->layers, FALSE); >- >+ ovsFwdCtx->mru, NULL, >&ovsFwdCtx->layers, FALSE); > if (status != NDIS_STATUS_SUCCESS) { > OvsCompleteNBLForwardingCtx(ovsFwdCtx, > L"OVS-Dropped due to resources"); >@@ -1667,9 +1674,10 @@ OvsExecuteRecirc(OvsForwardingContext *ovsFwdCtx, > } > > if (newNbl) { >- deferredAction = OvsAddDeferredActions(newNbl, key, NULL); >+ deferredAction = OvsAddDeferredActions(newNbl, key, ovsFwdCtx->mru, >NULL); > } else { >- deferredAction = OvsAddDeferredActions(ovsFwdCtx->curNbl, key, NULL); >+ deferredAction = OvsAddDeferredActions(ovsFwdCtx->curNbl, key, >+ ovsFwdCtx->mru, NULL); > } > > if (deferredAction) { >@@ -1742,8 +1750,8 @@ OvsOutputUserspaceAction(OvsForwardingContext *ovsFwdCtx, > OVS_PACKET_CMD_ACTION, > vport, key, ovsFwdCtx->curNbl, > NET_BUFFER_LIST_FIRST_NB(ovsFwdCtx->curNbl), >- isRecv, >- layers); >+ isRecv, layers, >+ ovsFwdCtx->mru); > if (elem) { > LIST_ENTRY missedPackets; > InitializeListHead(&missedPackets); >@@ -1821,7 +1829,7 @@ OvsExecuteSampleAction(OvsForwardingContext *ovsFwdCtx, > return STATUS_SUCCESS; > } > >- if (!OvsAddDeferredActions(newNbl, key, a)) { >+ if (!OvsAddDeferredActions(newNbl, key, ovsFwdCtx->mru, a)) { > OVS_LOG_INFO( > "Deferred actions limit reached, dropping sample action."); > OvsCompleteNBL(ovsFwdCtx->switchContext, newNbl, TRUE); >@@ -1857,6 +1865,7 @@ OvsDoExecuteActions(POVS_SWITCH_CONTEXT switchContext, > OvsFlowKey *key, > UINT64 *hash, > OVS_PACKET_HDR_INFO *layers, >+ UINT16 mru, > const PNL_ATTR actions, > INT actionsLen) > { >@@ -1871,8 +1880,8 @@ OvsDoExecuteActions(POVS_SWITCH_CONTEXT switchContext, > > /* XXX: ASSERT that the flow table lock is held. */ > status = OvsInitForwardingCtx(&ovsFwdCtx, switchContext, curNbl, portNo, >- sendFlags, fwdDetail, completionList, >- layers, TRUE); >+ sendFlags, fwdDetail, mru, >+ completionList, layers, TRUE); > if (status != NDIS_STATUS_SUCCESS) { > dropReason = L"OVS-initing destination port list failed"; > goto dropit; >@@ -2173,6 +2182,7 @@ OvsActionsExecute(POVS_SWITCH_CONTEXT switchContext, > OvsFlowKey *key, > UINT64 *hash, > OVS_PACKET_HDR_INFO *layers, >+ UINT16 mru, > const PNL_ATTR actions, > INT actionsLen) > { >@@ -2180,7 +2190,7 @@ OvsActionsExecute(POVS_SWITCH_CONTEXT switchContext, > > status = OvsDoExecuteActions(switchContext, completionList, curNbl, > portNo, sendFlags, key, hash, layers, >- actions, actionsLen); >+ mru, actions, actionsLen); > > if (status == STATUS_SUCCESS) { > status = OvsProcessDeferredActions(switchContext, completionList, >@@ -2203,6 +2213,7 @@ OvsDoRecirc(POVS_SWITCH_CONTEXT switchContext, > PNET_BUFFER_LIST curNbl, > OvsFlowKey *key, > UINT32 srcPortNo, >+ UINT16 mru, > OVS_PACKET_HDR_INFO *layers) > { > NDIS_STATUS status; >@@ -2214,7 +2225,7 @@ OvsDoRecirc(POVS_SWITCH_CONTEXT switchContext, > OvsInitForwardingCtx(&ovsFwdCtx, switchContext, curNbl, > srcPortNo, 0, > NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL(curNbl), >- completionList, layers, TRUE); >+ mru, completionList, layers, TRUE); > > flow = OvsLookupFlow(&ovsFwdCtx.switchContext->datapath, key, &hash, > FALSE); > if (flow) { >@@ -2240,6 +2251,7 @@ OvsDoRecirc(POVS_SWITCH_CONTEXT switchContext, > ovsFwdCtx.srcVportNo, > ovsFwdCtx.sendFlags, > key, &hash, &ovsFwdCtx.layers, >+ ovsFwdCtx.mru, > flow->actions, flow->actionsLen); > ovsFwdCtx.curNbl = NULL; > >@@ -2264,6 +2276,7 @@ OvsDoRecirc(POVS_SWITCH_CONTEXT switchContext, > vport->portId), > &ovsFwdCtx.layers, > ovsFwdCtx.switchContext, >+ ovsFwdCtx.mru, > &missedPackets, &num); > if (num) { > OvsQueuePackets(&missedPackets, num); >diff --git a/datapath-windows/ovsext/Actions.h >b/datapath-windows/ovsext/Actions.h >index c56c260..8636b87 100644 >--- a/datapath-windows/ovsext/Actions.h >+++ b/datapath-windows/ovsext/Actions.h >@@ -29,6 +29,7 @@ OvsActionsExecute(POVS_SWITCH_CONTEXT switchContext, > OvsFlowKey *key, > UINT64 *hash, > OVS_PACKET_HDR_INFO *layers, >+ UINT16 mru, > const PNL_ATTR actions, > int actionsLen); > >@@ -41,6 +42,7 @@ OvsDoExecuteActions(POVS_SWITCH_CONTEXT switchContext, > OvsFlowKey *key, > UINT64 *hash, > OVS_PACKET_HDR_INFO *layers, >+ UINT16 mru, > const PNL_ATTR actions, > int actionsLen); > >@@ -50,6 +52,7 @@ OvsDoRecirc(POVS_SWITCH_CONTEXT switchContext, > PNET_BUFFER_LIST curNbl, > OvsFlowKey *key, > UINT32 srcPortNo, >+ UINT16 mru, > OVS_PACKET_HDR_INFO *layers); > > #endif /* __ACTIONS_H_ */ >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/PacketIO.c >b/datapath-windows/ovsext/PacketIO.c >index a90b556..e6d3aa2 100644 >--- a/datapath-windows/ovsext/PacketIO.c >+++ b/datapath-windows/ovsext/PacketIO.c >@@ -335,7 +335,7 @@ OvsStartNBLIngress(POVS_SWITCH_CONTEXT switchContext, > * check the return value. */ > OvsActionsExecute(switchContext, &completionList, curNbl, > portNo, SendFlags, &key, &hash, &layers, >- flow->actions, flow->actionsLen); >+ 0, flow->actions, flow->actionsLen); > OvsReleaseDatapath(datapath, &dpLockState); > NdisReleaseRWLock(switchContext->dispatchLock, &lockState); > continue; >@@ -344,9 +344,10 @@ OvsStartNBLIngress(POVS_SWITCH_CONTEXT switchContext, > > datapath->misses++; > status = OvsCreateAndAddPackets(NULL, 0, OVS_PACKET_CMD_MISS, >- vport, &key, curNbl, >- OvsIsExternalVportByPortId(switchContext, >sourcePort), >- &layers, switchContext, &missedPackets, &num); >+ vport, &key, curNbl, >+ >OvsIsExternalVportByPortId(switchContext, sourcePort), >+ &layers, switchContext, 0, >+ &missedPackets, &num); > if (status == NDIS_STATUS_SUCCESS) { > /* Complete the packet since it was copied to user > * buffer. */ >diff --git a/datapath-windows/ovsext/Recirc.c >b/datapath-windows/ovsext/Recirc.c >index 2febf06..61d0494 100644 >--- a/datapath-windows/ovsext/Recirc.c >+++ b/datapath-windows/ovsext/Recirc.c >@@ -277,6 +277,7 @@ OvsDeferredActionsQueuePush(POVS_DEFERRED_ACTION_QUEUE >queue) > POVS_DEFERRED_ACTION > OvsAddDeferredActions(PNET_BUFFER_LIST nbl, > OvsFlowKey *key, >+ UINT16 mru, > const PNL_ATTR actions) > { > POVS_DEFERRED_ACTION_QUEUE queue = OvsDeferredActionsQueueGet(); >@@ -287,6 +288,7 @@ OvsAddDeferredActions(PNET_BUFFER_LIST nbl, > deferredAction->nbl = nbl; > deferredAction->actions = actions; > deferredAction->key = *key; >+ deferredAction->mru = mru; > } > > return deferredAction; >@@ -319,7 +321,8 @@ OvsProcessDeferredActions(POVS_SWITCH_CONTEXT >switchContext, > portNo, > sendFlags, > &deferredAction->key, NULL, >- layers, deferredAction->actions, >+ layers, deferredAction->mru, >+ deferredAction->actions, > > NlAttrGetSize(deferredAction->actions)); > } else { > status = OvsDoRecirc(switchContext, >@@ -327,6 +330,7 @@ OvsProcessDeferredActions(POVS_SWITCH_CONTEXT >switchContext, > deferredAction->nbl, > &deferredAction->key, > portNo, >+ deferredAction->mru, > layers); > } > } >diff --git a/datapath-windows/ovsext/Recirc.h >b/datapath-windows/ovsext/Recirc.h >index 2b314ce..957ca54 100644 >--- a/datapath-windows/ovsext/Recirc.h >+++ b/datapath-windows/ovsext/Recirc.h >@@ -26,6 +26,7 @@ typedef struct _OVS_DEFERRED_ACTION { > PNET_BUFFER_LIST nbl; > PNL_ATTR actions; > OvsFlowKey key; >+ UINT16 mru; > } OVS_DEFERRED_ACTION, *POVS_DEFERRED_ACTION; > > /* >@@ -52,6 +53,7 @@ OvsProcessDeferredActions(POVS_SWITCH_CONTEXT switchContext, > POVS_DEFERRED_ACTION > OvsAddDeferredActions(PNET_BUFFER_LIST packet, > OvsFlowKey *key, >+ UINT16 mru, > const PNL_ATTR actions); > > /* >diff --git a/datapath-windows/ovsext/Tunnel.c >b/datapath-windows/ovsext/Tunnel.c >index 4b4da00..fcb9335 100644 >--- a/datapath-windows/ovsext/Tunnel.c >+++ b/datapath-windows/ovsext/Tunnel.c >@@ -310,7 +310,7 @@ OvsInjectPacketThroughActions(PNET_BUFFER_LIST pNbl, > > OvsActionsExecute(gOvsSwitchContext, &completionList, pNbl, > portNo, SendFlags, &key, &hash, &layers, >- flow->actions, flow->actionsLen); >+ 0 /*default*/, flow->actions, flow->actionsLen); > > OvsReleaseDatapath(datapath, &dpLockState); > } else { >@@ -319,7 +319,7 @@ OvsInjectPacketThroughActions(PNET_BUFFER_LIST pNbl, > datapath->misses++; > elem = OvsCreateQueueNlPacket(NULL, 0, OVS_PACKET_CMD_MISS, > vport, &key, pNbl, curNb, >- TRUE, &layers); >+ TRUE, &layers, 0 /*default*/); > if (elem) { > /* Complete the packet since it was copied to user buffer. */ > InsertTailList(&missedPackets, &elem->link); >diff --git a/datapath-windows/ovsext/User.c b/datapath-windows/ovsext/User.c >index c7ac284..290a87d 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 >@@ -465,8 +470,8 @@ OvsExecuteDpIoctl(OvsPacketExecute *execute) > vport ? vport->portNo : > OVS_DPPORT_NUMBER_INVALID, > > NDIS_SEND_FLAGS_SWITCH_DESTINATION_GROUP, >- &key, NULL, &layers, actions, >- execute->actionsLen); >+ &key, NULL, &layers, execute->mru, >+ actions, execute->actionsLen); > pNbl = NULL; > NdisReleaseRWLock(gOvsSwitchContext->dispatchLock, &lockState); > } >@@ -757,6 +762,7 @@ OvsCreateAndAddPackets(PVOID userData, > BOOLEAN isRecv, > POVS_PACKET_HDR_INFO hdrInfo, > POVS_SWITCH_CONTEXT switchContext, >+ UINT16 mru, > LIST_ENTRY *list, > UINT32 *num) > { >@@ -789,8 +795,8 @@ OvsCreateAndAddPackets(PVOID userData, > nb = NET_BUFFER_LIST_FIRST_NB(nbl); > while (nb) { > elem = OvsCreateQueueNlPacket(userData, userDataLen, >- cmd, vport, key, nbl, nb, >- isRecv, hdrInfo); >+ cmd, vport, key, nbl, nb, >+ isRecv, hdrInfo, mru); > if (elem) { > InsertTailList(list, &elem->link); > (*num)++; >@@ -975,7 +981,8 @@ OvsCreateQueueNlPacket(PVOID userData, > PNET_BUFFER_LIST nbl, > PNET_BUFFER nb, > BOOLEAN isRecv, >- POVS_PACKET_HDR_INFO hdrInfo) >+ POVS_PACKET_HDR_INFO hdrInfo, >+ UINT16 mru) > { > #define VLAN_TAG_SIZE 4 > UINT32 allocLen, dataLen, extraLen; >@@ -1070,7 +1077,12 @@ OvsCreateQueueNlPacket(PVOID userData, > OVS_KEY_ATTR_TUNNEL) != STATUS_SUCCESS) { > goto fail; > } >- >+ /* Set MRU attribute */ >+ if (mru != 0) { >+ if (!NlMsgPutTailU16(&nlBuf, OVS_PACKET_ATTR_MRU, 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, >diff --git a/datapath-windows/ovsext/User.h b/datapath-windows/ovsext/User.h >index 3a42888..92991ac 100644 >--- a/datapath-windows/ovsext/User.h >+++ b/datapath-windows/ovsext/User.h >@@ -72,13 +72,14 @@ VOID OvsCleanupPacketQueue(struct _OVS_OPEN_INSTANCE >*instance); > > POVS_PACKET_QUEUE_ELEM OvsCreateQueueNlPacket(PVOID userData, > UINT32 userDataLen, >- UINT32 cmd, >+ UINT32 cmd, > POVS_VPORT_ENTRY vport, > OvsFlowKey *key, > PNET_BUFFER_LIST nbl, > PNET_BUFFER nb, > BOOLEAN isRecv, >- POVS_PACKET_HDR_INFO hdrInfo); >+ POVS_PACKET_HDR_INFO hdrInfo, >+ UINT16 mru); > > VOID OvsQueuePackets(PLIST_ENTRY packetList, UINT32 numElems); > NTSTATUS OvsCreateAndAddPackets(PVOID userData, >@@ -90,6 +91,7 @@ NTSTATUS OvsCreateAndAddPackets(PVOID userData, > BOOLEAN isRecv, > POVS_PACKET_HDR_INFO hdrInfo, > POVS_SWITCH_CONTEXT switchContext, >+ UINT16 mru, > LIST_ENTRY *list, > UINT32 *num); > >-- >2.9.3.windows.1 > >_______________________________________________ >dev mailing list >[email protected] >https://urldefense.proofpoint.com/v2/url?u=https-3A__mail.openvswitch.org_mailman_listinfo_ovs-2Ddev&d=DwICAg&c=uilaK90D4TOVoH58JNXRgQ&r=Z6vowHUOjP5ysP_g372c49Nqc1vEKqHKNBkR5Q5Z7uo&m=GhdQPrZGNM53M3M0wFH3eYKNePa-8MxHEhsXXzoDdEI&s=8RIw8qIO89YDtEOLkzzmgxisIhodekhZJfv5nZRmwc0&e= > _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
