mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-24 04:12:20 +00:00
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:
parent
56494d2b57
commit
84f0a0b8f2
@ -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:
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user