From ad9d8dbcae2566405cb9183bac2483f9c95cf330 Mon Sep 17 00:00:00 2001 From: Dmitry Guryanov Date: Tue, 11 Dec 2012 14:59:49 +0400 Subject: [PATCH] parallels: handle network adapters of type 'routed' Network adapters of type 'routed' is a special case. Other adapters have 'network' parameter in prlctl's output instead. Routed network adapters should be connected to 'routed' network from libvirt's view. Signed-off-by: Dmitry Guryanov --- src/parallels/parallels_driver.c | 42 ++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/src/parallels/parallels_driver.c b/src/parallels/parallels_driver.c index b288c95232..60507e79c8 100644 --- a/src/parallels/parallels_driver.c +++ b/src/parallels/parallels_driver.c @@ -482,13 +482,34 @@ parallelsGetNetInfo(virDomainNetDefPtr net, goto error; } - if (!(tmp = virJSONValueObjectGetString(value, "network"))) { - parallelsParseError(); - goto error; - } - if (!(net->data.network.name = strdup(tmp))) { - virReportOOMError(); + if (virJSONValueObjectHasKey(value, "network")) { + if (!(tmp = virJSONValueObjectGetString(value, "network"))) { + parallelsParseError(); + goto error; + } + + if (!(net->data.network.name = strdup(tmp))) { + virReportOOMError(); + goto error; + } + } else if (virJSONValueObjectHasKey(value, "type")) { + if (!(tmp = virJSONValueObjectGetString(value, "type"))) { + parallelsParseError(); + goto error; + } + + if (!STREQ(tmp, "routed")) { + parallelsParseError(); + goto error; + } + + if (!(net->data.network.name = strdup(PARALLELS_ROUTED_NETWORK_NAME))) { + virReportOOMError(); + goto error; + } + } else { + parallelsParseError(); goto error; } @@ -1866,7 +1887,14 @@ static int parallelsApplyIfaceParams(parallelsDomObjPtr pdom, } if (!STREQ_NULLABLE(oldnet->data.network.name, newnet->data.network.name)) { - virCommandAddArgFormat(cmd, "--network=%s", newnet->data.network.name); + if (STREQ_NULLABLE(newnet->data.network.name, + PARALLELS_ROUTED_NETWORK_NAME)) { + virCommandAddArgFormat(cmd, "--type=routed"); + } else { + virCommandAddArgFormat(cmd, "--network=%s", + newnet->data.network.name); + } + is_changed = true; }