Hey Sorin, Can you update the Install.Windows.md to reflect these changes?
Thanks, Sairam On 9/22/15, 8:31 AM, "Sorin Vinturis" <[email protected]> wrote: >The internal/external vports will have the actual OS-based names, which >represent the NIC interface alias that is displayed by running >'Get-NetAdapter' Hyper-V PS command. > >Signed-off-by: Sorin Vinturis <[email protected]> >Acked-by: Nithin Raju <[email protected]> >--- > datapath-windows/ovsext/Vport.c | 107 >++++++++++++++++++++++------------------ > datapath-windows/ovsext/Vport.h | 5 -- > 2 files changed, 58 insertions(+), 54 deletions(-) > >diff --git a/datapath-windows/ovsext/Vport.c >b/datapath-windows/ovsext/Vport.c >index ea10692..baab056 100644 >--- a/datapath-windows/ovsext/Vport.c >+++ b/datapath-windows/ovsext/Vport.c >@@ -95,7 +95,7 @@ static VOID OvsTunnelVportPendingInit(PVOID context, > static VOID OvsTunnelVportPendingRemove(PVOID context, > NTSTATUS status, > UINT32 *replyLen); >- >+static VOID AssignNicNameSpecial(POVS_VPORT_ENTRY vport); > > /* > * Functions implemented in relaton to NDIS port manipulation. >@@ -191,10 +191,8 @@ HvUpdatePort(POVS_SWITCH_CONTEXT switchContext, > portParam->PortId, 0); > /* > * Update properties only for NETDEV ports for supprting PS script >- * We don't allow changing the names of the internal or external >ports > */ >- if (vport == NULL || (( vport->portType != >NdisSwitchPortTypeSynthetic) && >- ( vport->portType != NdisSwitchPortTypeEmulated))) { >+ if (vport == NULL) { > goto update_port_done; > } > >@@ -439,6 +437,7 @@ HvUpdateNic(POVS_SWITCH_CONTEXT switchContext, > case NdisSwitchNicTypeInternal: > RtlCopyMemory(&vport->netCfgInstanceId, >&nicParam->NetCfgInstanceId, > sizeof (GUID)); >+ AssignNicNameSpecial(vport); > break; > case NdisSwitchNicTypeSynthetic: > case NdisSwitchNicTypeEmulated: >@@ -968,36 +967,47 @@ OvsInitBridgeInternalVport(POVS_VPORT_ENTRY vport) > > /* > * >-------------------------------------------------------------------------- >- * For external vports 'portFriendlyName' provided by Hyper-V is >over-written >- * by synthetic names. >+ * For external and internal vports 'portFriendlyName' parameter, >provided by >+ * Hyper-V, is overwritten with the interface alias name. > * >-------------------------------------------------------------------------- > */ > static VOID > AssignNicNameSpecial(POVS_VPORT_ENTRY vport) > { >- size_t len; >+ NTSTATUS status = STATUS_SUCCESS; >+ WCHAR interfaceName[IF_MAX_STRING_SIZE] = { 0 }; >+ NET_LUID interfaceLuid = { 0 }; >+ size_t len = 0; > >- if (vport->portType == NdisSwitchPortTypeExternal) { >- if (vport->nicIndex == 0) { >- ASSERT(vport->nicIndex == 0); >- RtlStringCbPrintfW(vport->portFriendlyName.String, >- IF_MAX_STRING_SIZE, >- L"%s.virtualAdapter", >OVS_DPPORT_EXTERNAL_NAME_W); >+ ASSERT(vport->portType == NdisSwitchPortTypeExternal || >+ vport->portType == NdisSwitchPortTypeInternal); >+ >+ status = ConvertInterfaceGuidToLuid(&vport->netCfgInstanceId, >+ &interfaceLuid); >+ if (status == STATUS_SUCCESS) { >+ status = ConvertInterfaceLuidToAlias(&interfaceLuid, >interfaceName, >+ IF_MAX_STRING_SIZE + 1); >+ if (status == STATUS_SUCCESS) { >+ if (vport->portType == NdisSwitchPortTypeExternal && >+ vport->nicIndex == 0) { >+ RtlStringCbPrintfW(vport->portFriendlyName.String, >IF_MAX_STRING_SIZE, >+ L"%s.virtualAdapter", interfaceName); >+ } else { >+ RtlStringCbPrintfW(vport->portFriendlyName.String, >+ IF_MAX_STRING_SIZE, L"%s", >interfaceName); >+ } >+ >+ RtlStringCbLengthW(vport->portFriendlyName.String, >IF_MAX_STRING_SIZE, >+ &len); >+ vport->portFriendlyName.Length = (USHORT)len; > } else { >- RtlStringCbPrintfW(vport->portFriendlyName.String, >- IF_MAX_STRING_SIZE, >- L"%s.%lu", OVS_DPPORT_EXTERNAL_NAME_W, >- (UINT32)vport->nicIndex); >+ OVS_LOG_INFO("Fail to convert interface LUID to alias, >status: %x", >+ status); > } > } else { >- RtlStringCbPrintfW(vport->portFriendlyName.String, >- IF_MAX_STRING_SIZE, >- L"%s", OVS_DPPORT_INTERNAL_NAME_W); >+ OVS_LOG_INFO("Fail to convert interface GUID to LUID, status: >%x", >+ status); > } >- >- RtlStringCbLengthW(vport->portFriendlyName.String, >IF_MAX_STRING_SIZE, >- &len); >- vport->portFriendlyName.Length = (USHORT)len; > } > > >@@ -1382,23 +1392,40 @@ OvsInitConfiguredSwitchNics(POVS_SWITCH_CONTEXT >switchContext) > if (vport) { > OvsInitPhysNicVport(vport, virtExtVport, > nicParam->NicIndex); >+ OvsInitVportWithNicParam(switchContext, vport, nicParam); > status = InitHvVportCommon(switchContext, vport, TRUE); > if (status != NDIS_STATUS_SUCCESS) { > OvsFreeMemoryWithTag(vport, OVS_VPORT_POOL_TAG); > vport = NULL; > } >+ } else { >+ OVS_LOG_ERROR("Fail to allocate vport."); >+ continue; > } > } else { > vport = OvsFindVportByPortIdAndNicIndex(switchContext, > nicParam->PortId, > nicParam->NicIndex); >+ if (vport == NULL) { >+ OVS_LOG_ERROR( >+ "Could not found vport with portId: %d and nicIndex: >%d.", >+ nicParam->PortId, nicParam->NicIndex); >+ continue; >+ } >+ OvsInitVportWithNicParam(switchContext, vport, nicParam); > } >- if (vport == NULL) { >- OVS_LOG_ERROR("Fail to allocate vport"); >- continue; >- } >- OvsInitVportWithNicParam(switchContext, vport, nicParam); >+ > if (nicParam->NicType == NdisSwitchNicTypeInternal) { >+ /* >+ * Overwrite the 'portFriendlyName' of the internal vport. >+ * Note: >+ * The call to AssignNicNameSpecial() is needed here, >because the >+ * necessary 'netCfgInstanceId' of the vport is available. >+ * On port creation the latter information is missing and the >+ * 'portFriendlyName' of the vport fails to be overwritten >with the >+ * correct information. >+ */ >+ AssignNicNameSpecial(vport); > OvsInternalAdapterUp(vport->portNo, >&nicParam->NetCfgInstanceId); > } > } >@@ -2093,9 +2120,7 @@ OvsNewVportCmdHandler(POVS_USER_PARAMS_CONTEXT >usrParamsCtx, > PCHAR portName; > ULONG portNameLen; > UINT32 portType; >- BOOLEAN isBridgeInternal = FALSE; > BOOLEAN vportAllocated = FALSE, vportInitialized = FALSE; >- BOOLEAN addInternalPortAsNetdev = FALSE; > > static const NL_POLICY ovsVportPolicy[] = { > [OVS_VPORT_ATTR_PORT_NO] = { .type = NL_A_U32, .optional = TRUE >}, >@@ -2138,24 +2163,12 @@ OvsNewVportCmdHandler(POVS_USER_PARAMS_CONTEXT >usrParamsCtx, > goto Cleanup; > } > >- if (portName && portType == OVS_VPORT_TYPE_NETDEV && >- !strcmp(OVS_DPPORT_INTERNAL_NAME_A, portName)) { >- addInternalPortAsNetdev = TRUE; >- } >- >- if (portName && portType == OVS_VPORT_TYPE_INTERNAL && >- strcmp(OVS_DPPORT_INTERNAL_NAME_A, portName)) { >- isBridgeInternal = TRUE; >- } >- >- if (portType == OVS_VPORT_TYPE_INTERNAL && !isBridgeInternal) { >- vport = gOvsSwitchContext->internalVport; >- } else if (portType == OVS_VPORT_TYPE_NETDEV) { >+ if (portType == OVS_VPORT_TYPE_NETDEV) { > /* External ports can also be looked up like VIF ports. */ > vport = OvsFindVportByHvNameA(gOvsSwitchContext, portName); > } else { > ASSERT(OvsIsTunnelVportType(portType) || >- (portType == OVS_VPORT_TYPE_INTERNAL && >isBridgeInternal)); >+ portType == OVS_VPORT_TYPE_INTERNAL); > > vport = (POVS_VPORT_ENTRY)OvsAllocateVport(); > if (vport == NULL) { >@@ -2221,10 +2234,6 @@ OvsNewVportCmdHandler(POVS_USER_PARAMS_CONTEXT >usrParamsCtx, > goto Cleanup; > } > >- /* Initialize the vport with OVS specific properties. */ >- if (addInternalPortAsNetdev != TRUE) { >- vport->ovsType = portType; >- } > if (vportAttrs[OVS_VPORT_ATTR_PORT_NO] != NULL) { > /* > * XXX: when we implement the limit for ovs port number to be >diff --git a/datapath-windows/ovsext/Vport.h >b/datapath-windows/ovsext/Vport.h >index ba21c62..ead55a9 100644 >--- a/datapath-windows/ovsext/Vport.h >+++ b/datapath-windows/ovsext/Vport.h >@@ -34,11 +34,6 @@ > */ > #define OVS_DPPORT_NUMBER_LOCAL 0 > >-#define OVS_DPPORT_INTERNAL_NAME_A "internal" >-#define OVS_DPPORT_INTERNAL_NAME_W L"internal" >-#define OVS_DPPORT_EXTERNAL_NAME_A "external" >-#define OVS_DPPORT_EXTERNAL_NAME_W L"external" >- > /* > * A Vport, or Virtual Port, is a port on the OVS. It can be one of the > * following types. Some of the Vports are "real" ports on the hyper-v >switch, >-- >1.9.0.msysgit.0 >_______________________________________________ >dev mailing list >[email protected] >https://urldefense.proofpoint.com/v2/url?u=http-3A__openvswitch.org_mailma >n_listinfo_dev&d=BQIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=Dc >ruz40PROJ40ROzSpxyQSLw6fcrOWpJgEcEmNR3JEQ&m=zZismIx4yUHpiRPFCXCze2eOBcRta3 >zrsK1SUBsefFA&s=NZ2XWsXvnw41Sr5oxA-u1_Rny9SLvsCCiYrWehd1gKI&e= _______________________________________________ dev mailing list [email protected] http://openvswitch.org/mailman/listinfo/dev
