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(a)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