]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
parallels: add routed pseudo network
authorDmitry Guryanov <dguryanov@parallels.com>
Tue, 11 Dec 2012 10:59:48 +0000 (14:59 +0400)
committerDaniel Veillard <veillard@redhat.com>
Tue, 11 Dec 2012 14:50:38 +0000 (22:50 +0800)
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@parallels.com>
src/parallels/parallels_network.c
src/parallels/parallels_utils.h

index 78cea0a51f47c00143e05457ddaf9e1ee1bf911b..40706aafa054714bcf9214bd709aeee936d3de04 100644 (file)
@@ -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->forward.type = 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:
index aca3ee245c39998fd696f7d7814d9fb08a44236a..0010f85643f9d108cc0141d218826c227994c3ff 100644 (file)
@@ -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;