[libvirt] [PATCH 7/8] parallels: add routed pseudo network

Dmitry Guryanov dguryanov at parallels.com
Tue Dec 11 10:59:48 UTC 2012


Historically if traffic from the adapter is routed to LAN without
NAT, it isn't connected to any virtual networks, but has a 'type'
instead. Sinse libvirt has special virtual network type for such case,
let's add pseudo network 'routed' to fit libvirt's API well.

Signed-off-by: Dmitry Guryanov <dguryanov at parallels.com>
---
 src/parallels/parallels_network.c |   43 +++++++++++++++++++++++++++++++++++++
 src/parallels/parallels_utils.h   |    2 +
 2 files changed, 45 insertions(+), 0 deletions(-)

diff --git a/src/parallels/parallels_network.c b/src/parallels/parallels_network.c
index 64e5351..d6452bf 100644
--- a/src/parallels/parallels_network.c
+++ b/src/parallels/parallels_network.c
@@ -30,6 +30,7 @@
 #include "parallels_utils.h"
 
 #define VIR_FROM_THIS VIR_FROM_PARALLELS
+#define PARALLELS_ROUTED_NETWORK_UUID   "eb593dd1-6846-45b0-84a0-de0729286982"
 
 #define parallelsParseError()                                                  \
     virReportErrorHelper(VIR_FROM_TEST, VIR_ERR_OPERATION_FAILED, __FILE__,    \
@@ -250,6 +251,45 @@ cleanup:
     return NULL;
 }
 
+static virNetworkObjPtr
+parallelsAddRoutedNetwork(parallelsConnPtr privconn)
+{
+    virNetworkObjPtr net;
+    virNetworkDefPtr def;
+
+    if (VIR_ALLOC(def) < 0)
+        goto no_memory;
+
+    def->forwardType = VIR_NETWORK_FORWARD_ROUTE;
+
+    if (!(def->name = strdup(PARALLELS_ROUTED_NETWORK_NAME)))
+        goto no_memory;
+
+    if (virUUIDParse(PARALLELS_ROUTED_NETWORK_UUID, def->uuid) < 0) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                       _("Can't parse UUID"));
+        goto cleanup;
+    }
+    def->uuid_specified = 1;
+
+    if (!(net = virNetworkAssignDef(&privconn->networks, def, false))) {
+        virNetworkDefFree(def);
+        goto cleanup;
+    }
+    net->active = 1;
+    net->persistent = 1;
+    net->autostart = 1;
+    virNetworkObjUnlock(net);
+
+    return net;
+
+no_memory:
+    virReportOOMError();
+cleanup:
+    virNetworkDefFree(def);
+    return NULL;
+}
+
 static int parallelsLoadNetworks(parallelsConnPtr privconn)
 {
     virJSONValuePtr jobj, jobj2;
@@ -283,6 +323,9 @@ static int parallelsLoadNetworks(parallelsConnPtr privconn)
 
     }
 
+    if (!parallelsAddRoutedNetwork(privconn))
+        goto cleanup;
+
     ret = 0;
 
 cleanup:
diff --git a/src/parallels/parallels_utils.h b/src/parallels/parallels_utils.h
index aca3ee2..0010f85 100644
--- a/src/parallels/parallels_utils.h
+++ b/src/parallels/parallels_utils.h
@@ -35,6 +35,8 @@
     virReportErrorHelper(VIR_FROM_TEST, VIR_ERR_OPERATION_FAILED, __FILE__,    \
                      __FUNCTION__, __LINE__, _("Can't parse prlctl output"))
 
+# define PARALLELS_ROUTED_NETWORK_NAME   "Routed"
+
 struct _parallelsConn {
     virMutex lock;
     virDomainObjList domains;
-- 
1.7.7.6




More information about the libvir-list mailing list