[libvirt] [PATCH 08/21] Added implementation for virNetworkLookupByName (required Msvm_VirtualSwitch class)

Yves Vinter yves.vinter at bull.net
Wed Oct 8 12:33:53 UTC 2014


From: yvinter <yves.vinter at bull.net>

---
 src/hyperv/hyperv_network_driver.c    | 33 +++++++++++++++++++++++++++++++++
 src/hyperv/hyperv_wmi.c               | 27 +++++++++++++++++++++++++++
 src/hyperv/hyperv_wmi.h               |  9 +++++++++
 src/hyperv/hyperv_wmi_generator.input | 33 +++++++++++++++++++++++++++++++++
 4 files changed, 102 insertions(+)

diff --git a/src/hyperv/hyperv_network_driver.c b/src/hyperv/hyperv_network_driver.c
index 6f54f44..22e1144 100644
--- a/src/hyperv/hyperv_network_driver.c
+++ b/src/hyperv/hyperv_network_driver.c
@@ -28,6 +28,7 @@
 #include "viralloc.h"
 #include "viruuid.h"
 #include "hyperv_network_driver.h"
+#include "hyperv_wmi.h"
 
 #define VIR_FROM_THIS VIR_FROM_HYPERV
 
@@ -61,10 +62,42 @@ hypervNetworkClose(virConnectPtr conn)
 
 
 
+static virNetworkPtr
+hypervNetworkLookupByName(virConnectPtr conn, const char *name)
+{
+    virNetworkPtr network = NULL;
+    hypervPrivate *priv = conn->privateData;
+    virBuffer query = VIR_BUFFER_INITIALIZER;
+    Msvm_VirtualSwitch *virtualSwitch = NULL;
+    
+    virBufferAddLit(&query, MSVM_VIRTUALSWITCH_WQL_SELECT);
+    virBufferAsprintf(&query, "where Description = \"%s\" and ElementName = \"%s\"",
+                      "Microsoft Virtual Switch", name);
+    if (hypervGetMsvmVirtualSwitchList(priv, &query, &virtualSwitch) < 0) {
+        goto cleanup;
+    }
+    if (virtualSwitch == NULL) {
+        virReportError(VIR_ERR_NO_NETWORK,
+                       _("No network found with name %s"), name);
+        goto cleanup;
+    }
+    
+    hypervMsvmVirtualSwitchToNetwork(conn, virtualSwitch, &network);
+    
+ cleanup:
+    hypervFreeObject(priv, (hypervObject *) virtualSwitch);
+    virBufferFreeAndReset(&query);
+
+    return network;
+}
+
+
+
 static virNetworkDriver hypervNetworkDriver = {
     .name = "Hyper-V",
     .networkOpen = hypervNetworkOpen, /* 0.9.5 */
     .networkClose = hypervNetworkClose, /* 0.9.5 */
+    .networkLookupByName = hypervNetworkLookupByName, /* 1.2.10 */
 };
 
 
diff --git a/src/hyperv/hyperv_wmi.c b/src/hyperv/hyperv_wmi.c
index d93abd9..be84532 100644
--- a/src/hyperv/hyperv_wmi.c
+++ b/src/hyperv/hyperv_wmi.c
@@ -682,6 +682,33 @@ hypervMsvmComputerSystemFromDomain(virDomainPtr domain,
     return result;
 }
 
+int
+hypervMsvmVirtualSwitchToNetwork(virConnectPtr conn,
+                                 Msvm_VirtualSwitch *virtualSwitch, virNetworkPtr *network)
+{
+    unsigned char uuid[VIR_UUID_BUFLEN];
+    
+    if (network == NULL || *network != NULL) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument"));
+        return -1;
+    }
+    
+    if (virUUIDParse(virtualSwitch->data->Name, uuid) < 0) {
+        virReportError(VIR_ERR_INTERNAL_ERROR,
+                       _("Could not parse UUID from string '%s'"),
+                       virtualSwitch->data->Name);
+        return -1;
+    }
+    
+    *network = virGetNetwork(conn, virtualSwitch->data->ElementName, uuid);
+    
+    if (*network == NULL) {
+        return -1;
+    }
+    
+    return 0;
+}
+
 
 
 #include "hyperv_wmi.generated.c"
diff --git a/src/hyperv/hyperv_wmi.h b/src/hyperv/hyperv_wmi.h
index 5fbbbac..acc4097 100644
--- a/src/hyperv/hyperv_wmi.h
+++ b/src/hyperv/hyperv_wmi.h
@@ -115,6 +115,15 @@ int hypervMsvmComputerSystemFromDomain(virDomainPtr domain,
 
 
 
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Msvm_VirtualSwitch
+ */
+
+int hypervMsvmVirtualSwitchToNetwork(virConnectPtr conn,
+		Msvm_VirtualSwitch *virtualSwitch, virNetworkPtr *network);
+
+
+
 # include "hyperv_wmi.generated.h"
 
 #endif /* __HYPERV_WMI_H__ */
diff --git a/src/hyperv/hyperv_wmi_generator.input b/src/hyperv/hyperv_wmi_generator.input
index 739be87..21420d5 100644
--- a/src/hyperv/hyperv_wmi_generator.input
+++ b/src/hyperv/hyperv_wmi_generator.input
@@ -522,3 +522,36 @@ class Win32_OperatingSystem
 	string   Version
 	string   WindowsDirectory
 end
+
+
+class Msvm_VirtualSwitch
+	string Caption
+	string Description
+	string ElementName
+	datetime InstallDate
+	uint16 OperationalStatus[]
+	string StatusDescriptions[]
+	string Status
+	uint16 HealthState
+	uint16 EnabledState
+	string OtherEnabledState
+	uint16 RequestedState
+	uint16 EnabledDefault
+	datetime TimeOfLastStateChange
+	string CreationClassName
+	string Name
+	string PrimaryOwnerContact
+	string PrimaryOwnerName
+	string Roles[]
+	string NameFormat
+	string OtherIdentifyingInfo[]
+	string IdentifyingDescriptions[]
+	uint16 Dedicated[]
+	string OtherDedicatedDescriptions[]
+	uint16 ResetCapability
+	uint16 PowerManagementCapabilities[]
+	string ScopeOfResidence
+	uint32 NumLearnableAddresses
+	uint32 MaxVMQOffloads
+	uint32 MaxChimneyOffloads
+end
-- 
1.9.1




More information about the libvir-list mailing list