parallels: add routed pseudo network

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>
This commit is contained in:
Dmitry Guryanov 2012-12-11 14:59:48 +04:00 committed by Daniel Veillard
parent 56494d2b57
commit 84f0a0b8f2
2 changed files with 45 additions and 0 deletions

View File

@ -30,6 +30,7 @@
#include "parallels_utils.h" #include "parallels_utils.h"
#define VIR_FROM_THIS VIR_FROM_PARALLELS #define VIR_FROM_THIS VIR_FROM_PARALLELS
#define PARALLELS_ROUTED_NETWORK_UUID "eb593dd1-6846-45b0-84a0-de0729286982"
#define parallelsParseError() \ #define parallelsParseError() \
virReportErrorHelper(VIR_FROM_TEST, VIR_ERR_OPERATION_FAILED, __FILE__, \ virReportErrorHelper(VIR_FROM_TEST, VIR_ERR_OPERATION_FAILED, __FILE__, \
@ -250,6 +251,45 @@ cleanup:
return NULL; 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) static int parallelsLoadNetworks(parallelsConnPtr privconn)
{ {
virJSONValuePtr jobj, jobj2; virJSONValuePtr jobj, jobj2;
@ -283,6 +323,9 @@ static int parallelsLoadNetworks(parallelsConnPtr privconn)
} }
if (!parallelsAddRoutedNetwork(privconn))
goto cleanup;
ret = 0; ret = 0;
cleanup: cleanup:

View File

@ -35,6 +35,8 @@
virReportErrorHelper(VIR_FROM_TEST, VIR_ERR_OPERATION_FAILED, __FILE__, \ virReportErrorHelper(VIR_FROM_TEST, VIR_ERR_OPERATION_FAILED, __FILE__, \
__FUNCTION__, __LINE__, _("Can't parse prlctl output")) __FUNCTION__, __LINE__, _("Can't parse prlctl output"))
# define PARALLELS_ROUTED_NETWORK_NAME "Routed"
struct _parallelsConn { struct _parallelsConn {
virMutex lock; virMutex lock;
virDomainObjList domains; virDomainObjList domains;