Skip to content

Commit

Permalink
datapath-windows: Changes to InitOvsVportCommon()
Browse files Browse the repository at this point in the history
If a Hyper-V port (for which there exists an OVS port), gets deleted and
re-added, we'll call into InitOvsVportCommon() for the port to insert
the port into the 'portIdHashArray' as well as do a few other
initialization in the switch ocntext.

We should not be incrementing 'numHvPorts' at this point since this
vport has been counted before when it was first allocated. To account
for this, we add a new parameter to InitOvsVportCommon(). The arguments
passed by some of the callers are not 100% correct, and will be fixed in
future commit in the series.

Signed-off-by: Nithin Raju <nithin@vmware.com>
Acked-by: Ankur Sharma <ankursharma@vmware.com>
Signed-off-by: Gurucharan Shetty <gshetty@nicira.com>
  • Loading branch information
nithinrajub authored and shettyg committed Nov 20, 2014
1 parent c22f284 commit 827e07b
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 12 deletions.
28 changes: 18 additions & 10 deletions datapath-windows/ovsext/Vport.c
Expand Up @@ -67,6 +67,9 @@ static NTSTATUS CreateNetlinkMesgForNetdev(POVS_VPORT_EXT_INFO info,
int dpIfIndex);
static POVS_VPORT_ENTRY OvsFindVportByHvNameW(POVS_SWITCH_CONTEXT switchContext,
PWSTR wsName, SIZE_T wstrSize);
static NDIS_STATUS InitHvVportCommon(POVS_SWITCH_CONTEXT switchContext,
POVS_VPORT_ENTRY vport,
BOOLEAN newPort);

/*
* Functions implemented in relaton to NDIS port manipulation.
Expand Down Expand Up @@ -96,7 +99,8 @@ HvCreatePort(POVS_SWITCH_CONTEXT switchContext,
}

OvsInitVportWithPortParam(vport, portParam);
InitHvVportCommon(switchContext, vport);
/* XXX: Dummy argument to InitHvVportCommon(). */
InitHvVportCommon(switchContext, vport, TRUE);

create_port_done:
NdisReleaseRWLock(switchContext->dispatchLock, &lockState);
Expand Down Expand Up @@ -263,7 +267,7 @@ HvCreateNic(POVS_SWITCH_CONTEXT switchContext,
goto add_nic_done;
}
OvsInitPhysNicVport(vport, virtExtVport, nicParam->NicIndex);
status = InitHvVportCommon(switchContext, vport);
status = InitHvVportCommon(switchContext, vport, TRUE);
if (status != NDIS_STATUS_SUCCESS) {
OvsFreeMemory(vport);
goto add_nic_done;
Expand Down Expand Up @@ -610,6 +614,7 @@ OvsFindVportByHvNameA(POVS_SWITCH_CONTEXT switchContext,
OvsFreeMemory(wsName);
return vport;
}

POVS_VPORT_ENTRY
OvsFindVportByPortIdAndNicIndex(POVS_SWITCH_CONTEXT switchContext,
NDIS_SWITCH_PORT_ID portId,
Expand Down Expand Up @@ -875,12 +880,12 @@ AssignNicNameSpecial(POVS_VPORT_ENTRY vport)
* For external NIC, assigns the name for the NIC.
* --------------------------------------------------------------------------
*/
NDIS_STATUS
static NDIS_STATUS
InitHvVportCommon(POVS_SWITCH_CONTEXT switchContext,
POVS_VPORT_ENTRY vport)
POVS_VPORT_ENTRY vport,
BOOLEAN newPort)
{
UINT32 hash;
ASSERT(vport->portNo == OVS_DPPORT_NUMBER_INVALID);

switch (vport->portType) {
case NdisSwitchPortTypeExternal:
Expand Down Expand Up @@ -929,7 +934,9 @@ InitHvVportCommon(POVS_SWITCH_CONTEXT switchContext,
hash = OvsJhashWords(&vport->portId, 1, OVS_HASH_BASIS);
InsertHeadList(&switchContext->portIdHashArray[hash & OVS_VPORT_MASK],
&vport->portIdLink);
switchContext->numHvVports++;
if (newPort) {
switchContext->numHvVports++;
}
return NDIS_STATUS_SUCCESS;
}

Expand Down Expand Up @@ -973,8 +980,9 @@ InitOvsVportCommon(POVS_SWITCH_CONTEXT switchContext,

hash = OvsJhashBytes(vport->ovsName, strlen(vport->ovsName) + 1,
OVS_HASH_BASIS);
InsertHeadList(&gOvsSwitchContext->ovsPortNameHashArray[hash & OVS_VPORT_MASK],
&vport->ovsNameLink);
InsertHeadList(
&gOvsSwitchContext->ovsPortNameHashArray[hash & OVS_VPORT_MASK],
&vport->ovsNameLink);

return STATUS_SUCCESS;
}
Expand Down Expand Up @@ -1124,7 +1132,7 @@ OvsAddConfiguredSwitchPorts(POVS_SWITCH_CONTEXT switchContext)
goto cleanup;
}
OvsInitVportWithPortParam(vport, portParam);
status = InitHvVportCommon(switchContext, vport);
status = InitHvVportCommon(switchContext, vport, TRUE);
if (status != NDIS_STATUS_SUCCESS) {
OvsFreeMemory(vport);
goto cleanup;
Expand Down Expand Up @@ -1183,7 +1191,7 @@ OvsInitConfiguredSwitchNics(POVS_SWITCH_CONTEXT switchContext)
if (vport) {
OvsInitPhysNicVport(vport, virtExtVport,
nicParam->NicIndex);
status = InitHvVportCommon(switchContext, vport);
status = InitHvVportCommon(switchContext, vport, TRUE);
if (status != NDIS_STATUS_SUCCESS) {
OvsFreeMemory(vport);
vport = NULL;
Expand Down
2 changes: 0 additions & 2 deletions datapath-windows/ovsext/Vport.h
Expand Up @@ -211,8 +211,6 @@ VOID OvsRemoveAndDeleteVport(POVS_SWITCH_CONTEXT switchContext,
BOOLEAN hvDelete, BOOLEAN ovsDelete,
BOOLEAN *vportDeallocated);

NDIS_STATUS InitHvVportCommon(POVS_SWITCH_CONTEXT switchContext,
POVS_VPORT_ENTRY vport);
NDIS_STATUS InitOvsVportCommon(POVS_SWITCH_CONTEXT switchContext,
POVS_VPORT_ENTRY vport);
NTSTATUS OvsInitTunnelVport(POVS_VPORT_ENTRY vport, OVS_VPORT_TYPE ovsType,
Expand Down

0 comments on commit 827e07b

Please sign in to comment.