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

Eitan Eliahu eliahue at vmware.com
Thu Oct 2 22:21:24 UTC 2014


+    PWSTR wsName = OvsAllocateMemory(wstrSize);
Check if not NULL

+    for (UINT i = 0; i < length; ++i) {
+        wsName[i] = name[i];
Should we use mbstowcs instead?


Looks like we don't handle OID_SWITCH_PORT_UPDATED  (should be added to OvsCreatePort())

Thanks,
Eitan

-----Original Message-----
From: Samuel Ghinet [mailto:sghinet at cloudbasesolutions.com] 
Sent: Tuesday, September 30, 2014 7:56 AM
To: dev at openvswitch.org
Cc: Alin Serdean; Nithin Raju; Eitan Eliahu; Ankur Sharma
Subject: [PATCH 10/14] datapath-windows: Add port friendly name to OVS_VPORT_ENTRY

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)
+{
+    POVS_VPORT_ENTRY vport = NULL;
+    PLIST_ENTRY head, link;
+    SIZE_T length = sizeof(name);
+    SIZE_T wstrSize = length * sizeof(WORD);
+
+    PWSTR wsName = OvsAllocateMemory(wstrSize);
+    for (UINT i = 0; i < length; ++i) {
+        wsName[i] = name[i];
+    }
+
+    for (UINT32 i = 0; i < OVS_MAX_VPORT_ARRAY_SIZE; i++) {
+        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)) {
+                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




More information about the dev mailing list