提交 725bffa7 编写于 作者: M Maxim Nestratov 提交者: Michal Privoznik

parallels: fix parallelsLoadNetworks

Don't fail initialization of parallels driver if
parallelsLoadNetwork fails for optional networks.
This can happen when some of them are added manually
and configured incompletely. PCS requires only two networks
created automatically (named Host-Only and Bridged), others
are optional and their incompleteness can be ignored.
Signed-off-by: NMaxim Nestratov <mnestratov@parallels.com>
Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
上级 20111b6f
...@@ -180,10 +180,11 @@ static int parallelsGetHostOnlyNetInfo(virNetworkDefPtr def, const char *name) ...@@ -180,10 +180,11 @@ static int parallelsGetHostOnlyNetInfo(virNetworkDefPtr def, const char *name)
return ret; return ret;
} }
static virNetworkObjPtr static int
parallelsLoadNetwork(parallelsConnPtr privconn, virJSONValuePtr jobj) parallelsLoadNetwork(parallelsConnPtr privconn, virJSONValuePtr jobj)
{ {
virNetworkObjPtr net; int ret = -1;
virNetworkObjPtr net = NULL;
virNetworkDefPtr def; virNetworkDefPtr def;
const char *tmp; const char *tmp;
/* MD5_DIGEST_SIZE = VIR_UUID_BUFLEN = 16 */ /* MD5_DIGEST_SIZE = VIR_UUID_BUFLEN = 16 */
...@@ -214,13 +215,25 @@ parallelsLoadNetwork(parallelsConnPtr privconn, virJSONValuePtr jobj) ...@@ -214,13 +215,25 @@ parallelsLoadNetwork(parallelsConnPtr privconn, virJSONValuePtr jobj)
if (STREQ(tmp, PARALLELS_BRIDGED_NETWORK_TYPE)) { if (STREQ(tmp, PARALLELS_BRIDGED_NETWORK_TYPE)) {
def->forward.type = VIR_NETWORK_FORWARD_BRIDGE; def->forward.type = VIR_NETWORK_FORWARD_BRIDGE;
if (parallelsGetBridgedNetInfo(def, jobj) < 0) if (parallelsGetBridgedNetInfo(def, jobj) < 0) {
/* Only mandatory networks are required to be configured completely */
if (STRNEQ(def->name, PARALLELS_REQUIRED_BRIDGED_NETWORK))
ret = 0;
goto cleanup; goto cleanup;
}
} else if (STREQ(tmp, PARALLELS_HOSTONLY_NETWORK_TYPE)) { } else if (STREQ(tmp, PARALLELS_HOSTONLY_NETWORK_TYPE)) {
def->forward.type = VIR_NETWORK_FORWARD_NONE; def->forward.type = VIR_NETWORK_FORWARD_NONE;
if (parallelsGetHostOnlyNetInfo(def, def->name) < 0) if (parallelsGetHostOnlyNetInfo(def, def->name) < 0) {
/* Only mandatory networks are required to be configured completely */
if (STRNEQ(def->name, PARALLELS_REQUIRED_HOSTONLY_NETWORK))
ret = 0;
goto cleanup; goto cleanup;
}
} else { } else {
parallelsParseError(); parallelsParseError();
goto cleanup; goto cleanup;
...@@ -228,16 +241,18 @@ parallelsLoadNetwork(parallelsConnPtr privconn, virJSONValuePtr jobj) ...@@ -228,16 +241,18 @@ parallelsLoadNetwork(parallelsConnPtr privconn, virJSONValuePtr jobj)
if (!(net = virNetworkAssignDef(privconn->networks, def, false))) if (!(net = virNetworkAssignDef(privconn->networks, def, false)))
goto cleanup; goto cleanup;
def = NULL;
net->active = 1; net->active = 1;
net->autostart = 1; net->autostart = 1;
return net; ret = 0;
cleanup: cleanup:
virNetworkObjEndAPI(&net);
virNetworkDefFree(def); virNetworkDefFree(def);
return NULL; return ret;
} }
static virNetworkObjPtr static int
parallelsAddRoutedNetwork(parallelsConnPtr privconn) parallelsAddRoutedNetwork(parallelsConnPtr privconn)
{ {
virNetworkObjPtr net = NULL; virNetworkObjPtr net = NULL;
...@@ -258,24 +273,23 @@ parallelsAddRoutedNetwork(parallelsConnPtr privconn) ...@@ -258,24 +273,23 @@ parallelsAddRoutedNetwork(parallelsConnPtr privconn)
} }
def->uuid_specified = 1; def->uuid_specified = 1;
if (!(net = virNetworkAssignDef(privconn->networks, def, false))) { if (!(net = virNetworkAssignDef(privconn->networks, def, false)))
virNetworkDefFree(def);
goto cleanup; goto cleanup;
}
net->active = 1; net->active = 1;
net->autostart = 1; net->autostart = 1;
virNetworkObjEndAPI(&net);
return net; return 0;
cleanup: cleanup:
virNetworkDefFree(def); virNetworkDefFree(def);
return NULL; return -1;
} }
static int parallelsLoadNetworks(parallelsConnPtr privconn) static int parallelsLoadNetworks(parallelsConnPtr privconn)
{ {
virJSONValuePtr jobj, jobj2; virJSONValuePtr jobj, jobj2;
virNetworkObjPtr net = NULL;
int ret = -1; int ret = -1;
int count; int count;
size_t i; size_t i;
...@@ -300,22 +314,17 @@ static int parallelsLoadNetworks(parallelsConnPtr privconn) ...@@ -300,22 +314,17 @@ static int parallelsLoadNetworks(parallelsConnPtr privconn)
goto cleanup; goto cleanup;
} }
net = parallelsLoadNetwork(privconn, jobj2); if (parallelsLoadNetwork(privconn, jobj2) < 0)
if (!net)
goto cleanup; goto cleanup;
else
virNetworkObjEndAPI(&net);
} }
if (!(net = parallelsAddRoutedNetwork(privconn))) if (parallelsAddRoutedNetwork(privconn) < 0)
goto cleanup; goto cleanup;
ret = 0; ret = 0;
cleanup: cleanup:
virJSONValueFree(jobj); virJSONValueFree(jobj);
virNetworkObjEndAPI(&net);
return ret; return ret;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册