From 70e562509a4df0a46012999845cb0b96b676e602 Mon Sep 17 00:00:00 2001 From: Nithin Raju Date: Tue, 18 Nov 2014 17:42:43 -0800 Subject: [PATCH] datapath-windows: add WCHAR version of OvsFindVportByHvName() In this patch, we rename the existing OvsFindVportByHvName() to OvsFindVportByHvNameA() to indicate that the input string is an ASCII string. We also define a OvsFindVportByHvNameW() that takes as input a WCHAR string. This will be used later in HvCreatPort() to check for ports with duplicate names. Signed-off-by: Nithin Raju Acked-by: Ankur Sharma Signed-off-by: Gurucharan Shetty --- datapath-windows/ovsext/Datapath.c | 2 +- datapath-windows/ovsext/Vport.c | 40 +++++++++++++++++++----------- datapath-windows/ovsext/Vport.h | 16 ++++++------ 3 files changed, 34 insertions(+), 24 deletions(-) diff --git a/datapath-windows/ovsext/Datapath.c b/datapath-windows/ovsext/Datapath.c index 6de011cac..ca83b1e97 100644 --- a/datapath-windows/ovsext/Datapath.c +++ b/datapath-windows/ovsext/Datapath.c @@ -1787,7 +1787,7 @@ OvsNewVportCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx, vport = gOvsSwitchContext->internalVport; } else if (portType == OVS_VPORT_TYPE_NETDEV) { /* External ports can also be looked up like VIF ports. */ - vport = OvsFindVportByHvName(gOvsSwitchContext, portName); + vport = OvsFindVportByHvNameA(gOvsSwitchContext, portName); } else { ASSERT(OvsIsTunnelVportType(portType) || (portType == OVS_VPORT_TYPE_INTERNAL && isBridgeInternal)); diff --git a/datapath-windows/ovsext/Vport.c b/datapath-windows/ovsext/Vport.c index 33aa95e1e..5c9795d2c 100644 --- a/datapath-windows/ovsext/Vport.c +++ b/datapath-windows/ovsext/Vport.c @@ -65,6 +65,8 @@ static NTSTATUS CreateNetlinkMesgForNetdev(POVS_VPORT_EXT_INFO info, PVOID outBuffer, UINT32 outBufLen, int dpIfIndex); +static POVS_VPORT_ENTRY OvsFindVportByHvNameW(POVS_SWITCH_CONTEXT switchContext, + PWSTR wsName, SIZE_T wstrSize); /* * Functions implemented in relaton to NDIS port manipulation. @@ -560,24 +562,13 @@ OvsFindVportByOvsName(POVS_SWITCH_CONTEXT switchContext, /* OvsFindVportByHvName: "name" is assumed to be null-terminated */ POVS_VPORT_ENTRY -OvsFindVportByHvName(POVS_SWITCH_CONTEXT switchContext, - PSTR name) +OvsFindVportByHvNameW(POVS_SWITCH_CONTEXT switchContext, + PWSTR wsName, SIZE_T wstrSize) { 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); UINT i; - PWSTR wsName = OvsAllocateMemory(wstrSize); - if (!wsName) { - return NULL; - } - for (i = 0; i < length; i++) { - wsName[i] = name[i]; - } - for (i = 0; i < OVS_MAX_VPORT_ARRAY_SIZE; i++) { head = &(switchContext->portIdHashArray[i]); LIST_FORALL(head, link) { @@ -604,6 +595,27 @@ Cleanup: return vport; } +POVS_VPORT_ENTRY +OvsFindVportByHvNameA(POVS_SWITCH_CONTEXT switchContext, + PSTR name) +{ + POVS_VPORT_ENTRY vport = NULL; + /* 'portFriendlyName' is not NUL-terminated. */ + SIZE_T length = strlen(name); + SIZE_T wstrSize = length * sizeof(WCHAR); + UINT i; + + PWSTR wsName = OvsAllocateMemory(wstrSize); + if (!wsName) { + return NULL; + } + for (i = 0; i < length; i++) { + wsName[i] = name[i]; + } + vport = OvsFindVportByHvNameW(switchContext, wsName, wstrSize); + OvsFreeMemory(wsName); + return vport; +} POVS_VPORT_ENTRY OvsFindVportByPortIdAndNicIndex(POVS_SWITCH_CONTEXT switchContext, NDIS_SWITCH_PORT_ID portId, @@ -1259,7 +1271,7 @@ OvsGetExtInfoIoctl(POVS_VPORT_GET vportGet, NDIS_RWL_AT_DISPATCH_LEVEL); if (vportGet->portNo == 0) { StringCbLengthA(vportGet->name, OVS_MAX_PORT_NAME_LENGTH - 1, &len); - vport = OvsFindVportByHvName(gOvsSwitchContext, vportGet->name); + vport = OvsFindVportByHvNameA(gOvsSwitchContext, vportGet->name); if (vport != NULL) { /* If the port is not a Hyper-V port and it has been added earlier, * we'll find it in 'ovsPortNameHashArray'. */ diff --git a/datapath-windows/ovsext/Vport.h b/datapath-windows/ovsext/Vport.h index ec7c21c07..e266caa58 100644 --- a/datapath-windows/ovsext/Vport.h +++ b/datapath-windows/ovsext/Vport.h @@ -139,15 +139,13 @@ OvsFindVportByPortNo(struct _OVS_SWITCH_CONTEXT *switchContext, UINT32 portNo); /* "name" is null-terminated */ -POVS_VPORT_ENTRY -OvsFindVportByOvsName(POVS_SWITCH_CONTEXT switchContext, - PSTR name); -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); +POVS_VPORT_ENTRY OvsFindVportByOvsName(POVS_SWITCH_CONTEXT switchContext, + PSTR name); +POVS_VPORT_ENTRY OvsFindVportByHvNameA(POVS_SWITCH_CONTEXT switchContext, + PSTR name); +POVS_VPORT_ENTRY OvsFindVportByPortIdAndNicIndex(POVS_SWITCH_CONTEXT switchContext, + NDIS_SWITCH_PORT_ID portId, + NDIS_SWITCH_NIC_INDEX index); NDIS_STATUS OvsAddConfiguredSwitchPorts(struct _OVS_SWITCH_CONTEXT *switchContext); NDIS_STATUS OvsInitConfiguredSwitchNics(struct _OVS_SWITCH_CONTEXT *switchContext); -- 2.20.1