/* Assert that in the Rx direction, key is always setup. */
ASSERT(ovsFwdCtx->tunnelRxNic == NULL || ovsFwdCtx->tunKey.dst != 0);
- status = OvsExtractFlow(ovsFwdCtx->curNbl, ovsFwdCtx->srcVportNo,
- &key, &ovsFwdCtx->layers, ovsFwdCtx->tunKey.dst != 0 ?
- &ovsFwdCtx->tunKey : NULL);
+ status =
+ OvsExtractFlow(ovsFwdCtx->curNbl, ovsFwdCtx->srcVportNo,
+ &key, &ovsFwdCtx->layers,
+ ovsFwdCtx->tunKey.dst != 0 ? &ovsFwdCtx->tunKey : NULL);
if (status != NDIS_STATUS_SUCCESS) {
OvsCompleteNBLForwardingCtx(ovsFwdCtx,
L"OVS-Flow extract failed");
OvsFlowUsed(flow, ovsFwdCtx->curNbl, &ovsFwdCtx->layers);
ovsFwdCtx->switchContext->datapath.hits++;
status = OvsActionsExecute(ovsFwdCtx->switchContext,
- ovsFwdCtx->completionList, ovsFwdCtx->curNbl,
- ovsFwdCtx->srcVportNo, ovsFwdCtx->sendFlags,
- &key, &hash, &ovsFwdCtx->layers,
- flow->actions, flow->actionsLen);
+ ovsFwdCtx->completionList, ovsFwdCtx->curNbl,
+ ovsFwdCtx->srcVportNo, ovsFwdCtx->sendFlags,
+ &key, &hash, &ovsFwdCtx->layers,
+ flow->actions, flow->actionsLen);
ovsFwdCtx->curNbl = NULL;
} else {
LIST_ENTRY missedPackets;
UINT32 num = 0;
ovsFwdCtx->switchContext->datapath.misses++;
InitializeListHead(&missedPackets);
- status = OvsCreateAndAddPackets(NULL, 0, OVS_PACKET_CMD_MISS,
- ovsFwdCtx->srcVportNo,
+ status = OvsCreateAndAddPackets(NULL, 0, OVS_PACKET_CMD_MISS, vport,
&key,ovsFwdCtx->curNbl,
ovsFwdCtx->tunnelRxNic != NULL, &ovsFwdCtx->layers,
ovsFwdCtx->switchContext, &missedPackets, &num);
elem = OvsCreateQueueNlPacket((PVOID)userdataAttr,
userdataAttr->nlaLen,
OVS_PACKET_CMD_ACTION,
- portNo, key,ovsFwdCtx.curNbl,
+ vport, key, ovsFwdCtx.curNbl,
NET_BUFFER_LIST_FIRST_NB(ovsFwdCtx.curNbl),
isRecv,
layers);
* Otherwise, it adds it to the completionList. No need to
* check the return value. */
OvsActionsExecute(switchContext, &completionList, curNbl,
- portNo, SendFlags, &key, &hash, &layers,
- flow->actions, flow->actionsLen);
+ portNo, SendFlags, &key, &hash, &layers,
+ flow->actions, flow->actionsLen);
OvsReleaseDatapath(datapath, &dpLockState);
NdisReleaseRWLock(switchContext->dispatchLock, &lockState);
continue;
datapath->misses++;
status = OvsCreateAndAddPackets(NULL, 0, OVS_PACKET_CMD_MISS,
- portNo, &key, curNbl,
+ vport, &key, curNbl,
sourcePort == switchContext->virtualExternalPortId,
&layers, switchContext, &missedPackets, &num);
if (status == NDIS_STATUS_SUCCESS) {
ULONG sendFlags);
NDIS_STATUS OvsActionsExecute(POVS_SWITCH_CONTEXT switchContext,
- OvsCompletionList *completionList,
- PNET_BUFFER_LIST curNbl, UINT32 srcVportNo,
- ULONG sendFlags, OvsFlowKey *key, UINT64 *hash,
- OVS_PACKET_HDR_INFO *layers,
- const PNL_ATTR actions, int actionsLen);
+ OvsCompletionList *completionList,
+ PNET_BUFFER_LIST curNbl, UINT32 srcVportNo,
+ ULONG sendFlags, OvsFlowKey *key, UINT64 *hash,
+ OVS_PACKET_HDR_INFO *layers,
+ const PNL_ATTR actions, int actionsLen);
VOID OvsLookupFlowOutput(POVS_SWITCH_CONTEXT switchContext,
VOID *compList, PNET_BUFFER_LIST curNbl);
datapath->hits++;
OvsActionsExecute(gOvsSwitchContext, &completionList, pNbl,
- portNo, SendFlags, &key, &hash, &layers,
- flow->actions, flow->actionsLen);
+ portNo, SendFlags, &key, &hash, &layers,
+ flow->actions, flow->actionsLen);
OvsReleaseDatapath(datapath, &dpLockState);
} else {
datapath->misses++;
elem = OvsCreateQueueNlPacket(NULL, 0, OVS_PACKET_CMD_MISS,
- portNo, &key, pNbl, curNb,
- TRUE, &layers);
+ vport, &key, pNbl, curNb,
+ TRUE, &layers);
if (elem) {
/* Complete the packet since it was copied to user buffer. */
InsertTailList(&missedPackets, &elem->link);
OvsCreateAndAddPackets(PVOID userData,
UINT32 userDataLen,
UINT32 cmd,
- UINT32 inPort,
+ POVS_VPORT_ENTRY vport,
OvsFlowKey *key,
PNET_BUFFER_LIST nbl,
BOOLEAN isRecv,
nb = NET_BUFFER_LIST_FIRST_NB(nbl);
while (nb) {
elem = OvsCreateQueueNlPacket(userData, userDataLen,
- cmd, inPort, key, nbl, nb,
+ cmd, vport, key, nbl, nb,
isRecv, hdrInfo);
if (elem) {
InsertTailList(list, &elem->link);
OvsCreateQueueNlPacket(PVOID userData,
UINT32 userDataLen,
UINT32 cmd,
- UINT32 inPort,
+ POVS_VPORT_ENTRY vport,
OvsFlowKey *key,
PNET_BUFFER_LIST nbl,
PNET_BUFFER nb,
NL_BUFFER nlBuf;
PNL_MSG_HDR nlMsg;
- /* XXX pass vport in the stack rather than portNo */
- POVS_VPORT_ENTRY vport =
- OvsFindVportByPortNo(gOvsSwitchContext, inPort);
-
if (vport == NULL){
/* No vport is not fatal. */
return NULL;
elem->packet.queue = 0;
/* XXX no need as the length is already in the NL attrib */
elem->packet.userDataLen = userDataLen;
- elem->packet.inPort = inPort;
+ elem->packet.inPort = vport->portNo;
elem->packet.cmd = cmd;
if (cmd == (UINT32)OVS_PACKET_CMD_MISS) {
ovsUserStats.miss++;
POVS_PACKET_QUEUE_ELEM OvsCreateQueueNlPacket(PVOID userData,
UINT32 userDataLen,
- UINT32 cmd, UINT32 inPort,
+ UINT32 cmd,
+ POVS_VPORT_ENTRY vport,
OvsFlowKey *key,
PNET_BUFFER_LIST nbl,
PNET_BUFFER nb,
NTSTATUS OvsCreateAndAddPackets(PVOID userData,
UINT32 userDataLen,
UINT32 cmd,
- UINT32 inPort,
+ POVS_VPORT_ENTRY vport,
OvsFlowKey *key,
PNET_BUFFER_LIST nbl,
BOOLEAN isRecv,