OvsCompletionList completionList;
KIRQL irql;
ULONG SendFlags = NDIS_SEND_FLAGS_SWITCH_DESTINATION_GROUP;
- OVS_DATAPATH *datapath = &gOvsSwitchContext->datapath;
+ OVS_DATAPATH *datapath = NULL;
ASSERT(gOvsSwitchContext);
+ datapath = &gOvsSwitchContext->datapath;
/* Fill the tunnel key */
status = OvsSlowPathDecapVxlan(pNbl, &tunnelKey);
SendFlags |= NDIS_SEND_FLAGS_DISPATCH_LEVEL;
- vport = gOvsSwitchContext->vxlanVport;
+ vport = OvsFindTunnelVportByDstPort(gOvsSwitchContext,
+ htons(tunnelKey.dst_port),
+ OVS_VPORT_TYPE_VXLAN);
if (vport == NULL){
status = STATUS_UNSUCCESSFUL;
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);
- OvsQueuePackets(OVS_DEFAULT_PACKET_QUEUE, &missedPackets, 1);
+ OvsQueuePackets(&missedPackets, 1);
} else {
status = STATUS_INSUFFICIENT_RESOURCES;
}