Skip to content

Commit

Permalink
datapath-windows: Output to multiple VXLAN ports
Browse files Browse the repository at this point in the history
If we have a flow rule of the following form:
 actions=strip_vlan,set_tunnel:0x3e9,15,16,17 (Where port 15, 16 and 17 are
 VXLAN OF ports with different tunnelling information)

Current implementation is that if a packet will hit that specific flow,
only one packet will be sent out with the first tunnelling information.

This patch saves the initial packet source port for further use of the
currently implemented pipeline and ignores the latter if it
is the last tunnelling port.

Signed-off-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Acked-by: Nithin Raju <nithin@vmware.com>
Acked-by: Sairam Venugopal <vsairam@vmware.com>
Acked-by: Sorin Vinturis <svinturis@cloudbasesolutions.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
  • Loading branch information
Alin Serdean authored and blp committed Sep 18, 2015
1 parent eaa0e88 commit ba47249
Showing 1 changed file with 3 additions and 4 deletions.
7 changes: 3 additions & 4 deletions datapath-windows/ovsext/Actions.c
Expand Up @@ -947,7 +947,6 @@ OvsOutputBeforeSetAction(OvsForwardingContext *ovsFwdCtx)
{
PNET_BUFFER_LIST newNbl;
NDIS_STATUS status = NDIS_STATUS_SUCCESS;
PNET_BUFFER nb;

/*
* Create a copy and work on the copy after this point. The original NBL is
Expand All @@ -967,14 +966,14 @@ OvsOutputBeforeSetAction(OvsForwardingContext *ovsFwdCtx)
* XXX Head room needs to include the additional encap.
* XXX copySize check is not considering multiple NBs.
*/
nb = NET_BUFFER_LIST_FIRST_NB(ovsFwdCtx->curNbl);
newNbl = OvsPartialCopyNBL(ovsFwdCtx->switchContext, ovsFwdCtx->curNbl,
0, 0, TRUE /*copy NBL info*/);

ASSERT(ovsFwdCtx->destPortsSizeOut > 0 ||
ovsFwdCtx->tunnelTxNic != NULL || ovsFwdCtx->tunnelRxNic != NULL);

/* Send the original packet out */
/* Send the original packet out and save the original source port number */
UINT32 tempVportNo = ovsFwdCtx->srcVportNo;
status = OvsOutputForwardingCtx(ovsFwdCtx);
ASSERT(ovsFwdCtx->curNbl == NULL);
ASSERT(ovsFwdCtx->destPortsSizeOut == 0);
Expand All @@ -992,7 +991,7 @@ OvsOutputBeforeSetAction(OvsForwardingContext *ovsFwdCtx)
OvsCompleteNBL(ovsFwdCtx->switchContext, newNbl, TRUE);
} else {
status = OvsInitForwardingCtx(ovsFwdCtx, ovsFwdCtx->switchContext,
newNbl, ovsFwdCtx->srcVportNo, 0,
newNbl, tempVportNo, 0,
NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL(newNbl),
ovsFwdCtx->completionList,
&ovsFwdCtx->layers, FALSE);
Expand Down

0 comments on commit ba47249

Please sign in to comment.