[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