On 12/06/2017 09:27 PM, Marek Marczykowski-Górecki wrote: > vif-* scripts support it for a long time, and expect addresses to be > separated by spaces. Add appropriate support to libxl driver. > > --- > changed in v2: > - moved libxlMakeIPList function to xenconfig/xen_common.c and renamed > to xenMakeIPList > --- > src/libxl/libxl_conf.c | 5 +++-- > src/libxl/libxl_domain.c | 12 ------------ > src/xenconfig/xen_common.c | 24 ++++++++++++++++++++++++ > src/xenconfig/xen_common.h | 1 + > 4 files changed, 28 insertions(+), 14 deletions(-) > > diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c > index 2a9be69..970cff2 100644 > --- a/src/libxl/libxl_conf.c > +++ b/src/libxl/libxl_conf.c > @@ -49,6 +49,7 @@ > #include "virstoragefile.h" > #include "secret_util.h" > #include "cpu/cpu.h" > +#include "xen_common.h" > > > #define VIR_FROM_THIS VIR_FROM_LIBXL > @@ -1144,7 +1145,7 @@ libxlMakeNic(virDomainDefPtr def, > if (VIR_STRDUP(x_nic->script, l_nic->script) < 0) > goto cleanup; > if (l_nic->guestIP.nips > 0) { > - x_nic->ip = virSocketAddrFormat(&l_nic->guestIP.ips[0]->address); > + x_nic->ip = xenMakeIPList(&l_nic->guestIP); > if (!x_nic->ip) > goto cleanup; > } > @@ -1160,7 +1161,7 @@ libxlMakeNic(virDomainDefPtr def, > } > > if (l_nic->guestIP.nips > 0) { > - x_nic->ip = virSocketAddrFormat(&l_nic->guestIP.ips[0]->address); > + x_nic->ip = xenMakeIPList(&l_nic->guestIP); > if (!x_nic->ip) > goto cleanup; > } > diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c > index d054b07..395c8a9 100644 > --- a/src/libxl/libxl_domain.c > +++ b/src/libxl/libxl_domain.c > @@ -294,18 +294,6 @@ libxlDomainDeviceDefPostParse(virDomainDeviceDefPtr dev, > def->os.type != VIR_DOMAIN_OSTYPE_HVM) > dev->data.chr->targetType = VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_XEN; > > - if (dev->type == VIR_DOMAIN_DEVICE_NET && > - (dev->data.net->type == VIR_DOMAIN_NET_TYPE_BRIDGE || > - dev->data.net->type == VIR_DOMAIN_NET_TYPE_ETHERNET || > - dev->data.net->type == VIR_DOMAIN_NET_TYPE_NETWORK)) { > - if (dev->data.net->guestIP.nips > 1) { > - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, > - _("multiple IP addresses not supported on device type %s"), > - virDomainNetTypeToString(dev->data.net->type)); > - return -1; > - } > - } > - > if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV || > (dev->type == VIR_DOMAIN_DEVICE_NET && > dev->data.net->type == VIR_DOMAIN_NET_TYPE_HOSTDEV)) { > diff --git a/src/xenconfig/xen_common.c b/src/xenconfig/xen_common.c > index ded0aca..7f838b6 100644 > --- a/src/xenconfig/xen_common.c > +++ b/src/xenconfig/xen_common.c > @@ -1166,6 +1166,30 @@ xenFormatSerial(virConfValuePtr list, virDomainChrDefPtr serial) > return -1; > } > > +char * > +xenMakeIPList(virNetDevIPInfoPtr guestIP) > +{ > + size_t i; > + char **address_array; > + char *ret = NULL; > + > + if (VIR_ALLOC_N(address_array, guestIP->nips + 1) < 0) > + return NULL; > + > + for (i = 0; i < guestIP->nips; i++) { > + address_array[i] = virSocketAddrFormat(&guestIP->ips[i]->address); > + if (!address_array[i]) > + goto cleanup; > + } > + address_array[guestIP->nips] = NULL; > + > + ret = virStringListJoin((const char**)address_array, " "); > + > + cleanup: > + while (i > 0) > + VIR_FREE(address_array[--i]); Coverity notes that address_array is leaked. May I sugguest "virStringListFree()" on address array? John > + return ret; > +} > > static int > xenFormatNet(virConnectPtr conn, > diff --git a/src/xenconfig/xen_common.h b/src/xenconfig/xen_common.h > index 9055692..3b7a5db 100644 > --- a/src/xenconfig/xen_common.h > +++ b/src/xenconfig/xen_common.h > @@ -67,6 +67,7 @@ int xenFormatConfigCommon(virConfPtr conf, > virConnectPtr conn, > const char *nativeFormat); > > +char *xenMakeIPList(virNetDevIPInfoPtr guestIP); > > int xenDomainDefAddImplicitInputDevice(virDomainDefPtr def); > > > base-commit: 9f0ccc717ba9026c30ce38951a354dd66fa12e3b > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list