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 <nit...@vmware.com> --- 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 1b504a2..aaf8caf 100644 --- a/datapath-windows/ovsext/Datapath.c +++ b/datapath-windows/ovsext/Datapath.c @@ -1812,7 +1812,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 ff105b7..6d02a0d 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. @@ -503,24 +505,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) { @@ -548,6 +539,27 @@ Cleanup: } 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, NDIS_SWITCH_NIC_INDEX index) @@ -1202,7 +1214,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 b4e4fca..73face6 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( + struct _OVS_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); -- 1.7.4.1 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev