On 12/06/2017 09:27 PM, Marek Marczykowski-Górecki wrote: > --- > new patch in v2 > --- > src/xenconfig/xen_common.c | 32 +++++++++++++++++--------------- > 1 file changed, 17 insertions(+), 15 deletions(-) > > diff --git a/src/xenconfig/xen_common.c b/src/xenconfig/xen_common.c > index 7f838b6..40b1483 100644 > --- a/src/xenconfig/xen_common.c > +++ b/src/xenconfig/xen_common.c > @@ -847,7 +847,7 @@ xenParseVif(virConfPtr conf, virDomainDefPtr def, const char *vif_typename) > while (list) { > char model[10]; > char type[10]; > - char ip[16]; > + char ip[128]; > char mac[18]; > char bridge[50]; > char vifname[50]; > @@ -964,8 +964,18 @@ xenParseVif(virConfPtr conf, virDomainDefPtr def, const char *vif_typename) > if (bridge[0] && VIR_STRDUP(net->data.bridge.brname, bridge) < 0) > goto cleanup; > } > - if (ip[0] && virDomainNetAppendIPAddress(net, ip, AF_INET, 0) < 0) > - goto cleanup; > + if (ip[0]) { > + char **ip_list = virStringSplit(ip, " ", 0); > + size_t i; > + > + for (i = 0; ip_list[i]; i++) { Coverity notes that virStringSplit could return ip_list == NULL, thus causing a problem for the above loop. An "if (!ip_list) goto cleanup;" should take care of that. John > + if (virDomainNetAppendIPAddress(net, ip_list[i], 0, 0) < 0) { > + virStringListFree(ip_list); > + goto cleanup; > + } > + } > + virStringListFree(ip_list); > + } > > if (script && script[0] && > VIR_STRDUP(net->script, script) < 0) > @@ -1207,14 +1217,10 @@ xenFormatNet(virConnectPtr conn, > switch (net->type) { > case VIR_DOMAIN_NET_TYPE_BRIDGE: > virBufferAsprintf(&buf, ",bridge=%s", net->data.bridge.brname); > - if (net->guestIP.nips == 1) { > - char *ipStr = virSocketAddrFormat(&net->guestIP.ips[0]->address); > + if (net->guestIP.nips > 0) { > + char *ipStr = xenMakeIPList(&net->guestIP); > virBufferAsprintf(&buf, ",ip=%s", ipStr); > VIR_FREE(ipStr); > - } else if (net->guestIP.nips > 1) { > - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", > - _("Driver does not support setting multiple IP addresses")); > - goto cleanup; > } > virBufferAsprintf(&buf, ",script=%s", DEFAULT_VIF_SCRIPT); > break; > @@ -1222,14 +1228,10 @@ xenFormatNet(virConnectPtr conn, > case VIR_DOMAIN_NET_TYPE_ETHERNET: > if (net->script) > virBufferAsprintf(&buf, ",script=%s", net->script); > - if (net->guestIP.nips == 1) { > - char *ipStr = virSocketAddrFormat(&net->guestIP.ips[0]->address); > + if (net->guestIP.nips > 0) { > + char *ipStr = xenMakeIPList(&net->guestIP); > virBufferAsprintf(&buf, ",ip=%s", ipStr); > VIR_FREE(ipStr); > - } else if (net->guestIP.nips > 1) { > - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", > - _("Driver does not support setting multiple IP addresses")); > - goto cleanup; > } > break; > > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list