hi Alin, Looks good but for the comments. Acked-by: Nithin Raju <nit...@vmware.com>
On Sep 30, 2014, at 7:55 AM, Samuel Ghinet <sghi...@cloudbasesolutions.com> wrote: > 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 <sghi...@cloudbasesolutions.com> > --- > datapath-windows/ovsext/Vport.c | 53 +++++++++++++++++++++++++++++++++++++++-- > datapath-windows/ovsext/Vport.h | 7 +++++- > 2 files changed, 57 insertions(+), 3 deletions(-) > > diff --git a/datapath-windows/ovsext/Vport.c b/datapath-windows/ovsext/Vport.c > index 443e71e..5de17fc 100644 > --- a/datapath-windows/ovsext/Vport.c > +++ b/datapath-windows/ovsext/Vport.c > @@ -483,6 +483,47 @@ 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) Declaration says PCHAR for 'name' parameter. But here it is PSTR. > +{ > + POVS_VPORT_ENTRY vport = NULL; > + PLIST_ENTRY head, link; > + SIZE_T length = sizeof(name); > + SIZE_T wstrSize = length * sizeof(WORD); > + > + PWSTR wsName = OvsAllocateMemory(wstrSize); Missing check for alloc failure. > + for (UINT i = 0; i < length; ++i) { > + wsName[i] = name[i]; > + } > + > + for (UINT32 i = 0; i < OVS_MAX_VPORT_ARRAY_SIZE; i++) { We don't need to loop here till OVS_MAX_VPORT_ARRAY_SIZE. This is a hash lookup. > + 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)) { You can possibly use OvsCompareString(). > + goto Cleanup; > + } > + > + vport = NULL; > + } > + } > + > +Cleanup: > + OvsFreeMemory(wsName); > + > + return vport; > +} > + > POVS_VPORT_ENTRY > OvsFindVportByPortIdAndNicIndex(POVS_SWITCH_CONTEXT switchContext, > NDIS_SWITCH_PORT_ID portId, > @@ -550,8 +591,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; > @@ -626,8 +671,12 @@ 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 > diff --git a/datapath-windows/ovsext/Vport.h b/datapath-windows/ovsext/Vport.h > index 678c7c5..79b1c72 100644 > --- a/datapath-windows/ovsext/Vport.h > +++ b/datapath-windows/ovsext/Vport.h > @@ -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; > @@ -117,6 +118,10 @@ OvsFindVportByPortNo(struct _OVS_SWITCH_CONTEXT > *switchContext, > POVS_VPORT_ENTRY > OvsFindVportByOvsName(struct _OVS_SWITCH_CONTEXT *switchContext, > CHAR *name, UINT32 length); > + > +POVS_VPORT_ENTRY > +OvsFindVportByHvName(POVS_SWITCH_CONTEXT switchContext, PCHAR name); > + > POVS_VPORT_ENTRY > OvsFindVportByPortIdAndNicIndex(struct _OVS_SWITCH_CONTEXT *switchContext, > NDIS_SWITCH_PORT_ID portId, > -- > 1.8.3.msysgit.0 > Thanks, -- Nithin _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev