[libvirt] [PATCH 08/28] lxc: use correct prefix when setting veth IP address
John Ferlan
jferlan at redhat.com
Thu Jun 23 21:36:42 UTC 2016
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 "::"
>
>
More information about the libvir-list
mailing list