Skip to content

Commit

Permalink
datapath-windows: Add port friendly name to OVS_VPORT_ENTRY
Browse files Browse the repository at this point in the history
The port friendly name will be set by WMI / powershell script.
It will be used from within the netlink command vport new to
identify the hyper-v switch port it represents.

This patch also adds a function to lookup a vport by the
port friendly name.

Signed-off-by: Samuel Ghinet <sghinet@cloudbasesolutions.com>
Co-authored-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Acked-by: Ankur Sharma <ankursharma@vmware.com>
Acked-by: Eitan Eliahu <eliahue@vmware.com>
Acked-by: Nithin Raju <nithin@vmware.com>
Tested-by: Nithin Raju <nithin@vmware.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
  • Loading branch information
Alin Serdean authored and blp committed Oct 9, 2014
1 parent 429d455 commit 1b859c5
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 3 deletions.
58 changes: 56 additions & 2 deletions datapath-windows/ovsext/Vport.c
Expand Up @@ -491,6 +491,51 @@ OvsFindVportByOvsName(POVS_SWITCH_CONTEXT switchContext,
return NULL;
}

/* OvsFindVportByHvName: "name" is assumed to be null-terminated */
POVS_VPORT_ENTRY
OvsFindVportByHvName(POVS_SWITCH_CONTEXT switchContext,
PSTR name)
{
POVS_VPORT_ENTRY vport = NULL;
PLIST_ENTRY head, link;
/* 'portFriendlyName' is not NUL-terminated. */
SIZE_T length = strlen(name);
SIZE_T wstrSize = length * sizeof(WCHAR);

PWSTR wsName = OvsAllocateMemory(wstrSize);
if (!wsName) {
return NULL;
}
for (UINT i = 0; i < length; i) {
wsName[i] = name[i];
}

for (UINT32 i = 0; i < OVS_MAX_VPORT_ARRAY_SIZE; i) {
head = &(switchContext->portIdHashArray[i]);
LIST_FORALL(head, link) {
vport = CONTAINING_RECORD(link, OVS_VPORT_ENTRY, portIdLink);

/*
* NOTE about portFriendlyName:
* If the string is NULL-terminated, the Length member does not
* include the terminating NULL character.
*/
if (vport->portFriendlyName.Length == wstrSize &&
RtlEqualMemory(wsName, vport->portFriendlyName.String,
vport->portFriendlyName.Length)) {
goto Cleanup;
}

vport = NULL;
}
}

Cleanup:
OvsFreeMemory(wsName);

return vport;
}

POVS_VPORT_ENTRY
OvsFindVportByPortIdAndNicIndex(POVS_SWITCH_CONTEXT switchContext,
NDIS_SWITCH_PORT_ID portId,
Expand Down Expand Up @@ -558,8 +603,12 @@ OvsInitVportWithPortParam(POVS_VPORT_ENTRY vport,
vport->ovsType = OVS_VPORT_TYPE_NETDEV;
break;
}
RtlCopyMemory(&vport->portName, &portParam->PortName,
RtlCopyMemory(&vport->hvPortName, &portParam->PortName,
sizeof (NDIS_SWITCH_PORT_NAME));

RtlCopyMemory(&vport->portFriendlyName, &portParam->PortFriendlyName,
sizeof(NDIS_SWITCH_PORT_FRIENDLYNAME));

switch (vport->portState) {
case NdisSwitchPortStateCreated:
vport->ovsState = OVS_STATE_PORT_CREATED;
Expand Down Expand Up @@ -634,8 +683,13 @@ OvsInitPhysNicVport(POVS_VPORT_ENTRY vport,
vport->ovsType = OVS_VPORT_TYPE_NETDEV;
vport->isExternal = TRUE;
vport->nicIndex = (NDIS_SWITCH_NIC_INDEX)nicIndex;
RtlCopyMemory(&vport->portName, &virtVport->portName,

RtlCopyMemory(&vport->hvPortName, &virtVport->hvPortName,
sizeof (NDIS_SWITCH_PORT_NAME));

RtlCopyMemory(&vport->portFriendlyName, &virtVport->portFriendlyName,
sizeof(NDIS_SWITCH_PORT_FRIENDLYNAME));

vport->ovsState = OVS_STATE_PORT_CREATED;
}
static NDIS_STATUS
Expand Down
5 changes: 4 additions & 1 deletion datapath-windows/ovsext/Vport.h
Expand Up @@ -101,7 +101,8 @@ typedef struct _OVS_VPORT_ENTRY {
UINT8 currMacAddress[MAC_ADDRESS_LEN];
UINT8 vmMacAddress[MAC_ADDRESS_LEN];

NDIS_SWITCH_PORT_NAME portName;
NDIS_SWITCH_PORT_NAME hvPortName;
IF_COUNTED_STRING portFriendlyName;
NDIS_SWITCH_NIC_NAME nicName;
NDIS_VM_NAME vmName;
GUID netCfgInstanceId;
Expand All @@ -118,6 +119,8 @@ POVS_VPORT_ENTRY
OvsFindVportByOvsName(struct _OVS_SWITCH_CONTEXT *switchContext,
CHAR *name, UINT32 length);
POVS_VPORT_ENTRY
OvsFindVportByHvName(POVS_SWITCH_CONTEXT switchContext, PSTR name);
POVS_VPORT_ENTRY
OvsFindVportByPortIdAndNicIndex(struct _OVS_SWITCH_CONTEXT *switchContext,
NDIS_SWITCH_PORT_ID portId,
NDIS_SWITCH_NIC_INDEX index);
Expand Down

0 comments on commit 1b859c5

Please sign in to comment.