[ovs-dev] [PATCH 10/14] datapath-windows: Add port friendly name to OVS_VPORT_ENTRY

Nithin Raju nithin at vmware.com
Sat Oct 4 02:12:33 UTC 2014


hi Alin,
Looks good but for the comments.

Acked-by: Nithin Raju <nithin at vmware.com>

On Sep 30, 2014, at 7:55 AM, Samuel Ghinet <sghinet at 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 <sghinet at 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




More information about the dev mailing list