[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