On 06/22/2016 01:37 PM, Laine Stump wrote: > Commit c9a641 (first appearred in 1.2.12) added support for setting > the guest-side IP address of veth devices in lxc domains. > Unfortunately, it hardcoded the assumption that the proper prefix for > any IP address with no explicit prefix in the config should be "24"; > that is only correct for class C IPv4 addresses, but not for any other > IPv4 address, nor for any IPv6 address. > > The good news is that there is already a function in libvirt that will > determine the proper default prefix for any IP address. This patch > replaces the use of the ill-fated VIR_SOCKET_ADDR_DEFAULT_PREFIX with > calls to virSocketAddrGetIPPrefix(). > --- > src/lxc/lxc_container.c | 17 ++++++++++++----- > src/util/virsocketaddr.h | 1 - > 2 files changed, 12 insertions(+), 6 deletions(-) > > diff --git a/src/lxc/lxc_container.c b/src/lxc/lxc_container.c > index 3d9e28b..304aa86 100644 > --- a/src/lxc/lxc_container.c > +++ b/src/lxc/lxc_container.c > @@ -1,5 +1,5 @@ > /* > - * Copyright (C) 2008-2015 Red Hat, Inc. > + * Copyright (C) 2008-2016 Red Hat, Inc. > * Copyright (C) 2008 IBM Corp. > * Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany. > * > @@ -514,12 +514,19 @@ static int lxcContainerRenameAndEnableInterfaces(virDomainDefPtr vmDef, > > for (j = 0; j < netDef->nips; j++) { > virDomainNetIPDefPtr ip = netDef->ips[j]; > - unsigned int prefix = (ip->prefix > 0) ? ip->prefix : > - VIR_SOCKET_ADDR_DEFAULT_PREFIX; > + int prefix; > char *ipStr = virSocketAddrFormat(&ip->address); > > - VIR_DEBUG("Adding IP address '%s/%u' to '%s'", > - ipStr, ip->prefix, newname); > + if ((prefix = virSocketAddrGetIPPrefix(&ip->address, > + NULL, ip->prefix)) < 0) { Oh and here we go call with NULL ... > + virReportError(VIR_ERR_INTERNAL_ERROR, > + _("Failed to determine prefix for IP address '%s'"), > + ipStr); Coverity determines that ipStr needs to be VIR_FREE()'d here. ACK w/ the VIR_FREE() John > + goto error_out; > + } > + > + VIR_DEBUG("Adding IP address '%s/%d' to '%s'", > + ipStr, prefix, newname); > if (virNetDevSetIPAddress(newname, &ip->address, NULL, prefix) < 0) { > virReportError(VIR_ERR_SYSTEM_ERROR, > _("Failed to set IP address '%s' on %s"), > diff --git a/src/util/virsocketaddr.h b/src/util/virsocketaddr.h > index 990e31c..7ee993b 100644 > --- a/src/util/virsocketaddr.h > +++ b/src/util/virsocketaddr.h > @@ -54,7 +54,6 @@ typedef struct { > # define VIR_SOCKET_ADDR_FAMILY(s) \ > ((s)->data.sa.sa_family) > > -# define VIR_SOCKET_ADDR_DEFAULT_PREFIX 24 > # define VIR_SOCKET_ADDR_IPV4_ALL "0.0.0.0" > # define VIR_SOCKET_ADDR_IPV6_ALL "::" > > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list