[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