[libvirt] [PATCH] Convert virNetwork to use virSocketAddr everywhere

Eric Blake eblake at redhat.com
Thu Oct 21 21:14:25 UTC 2010


On 10/21/2010 12:21 PM, Daniel P. Berrange wrote:
> Instead of storing the IP address string in virNetwork related
> structs, store the parsed virSocketAddr. This will make it
> easier to add IPv6 support in the future, by letting driver
> code directly check what address family is present
>
> * src/conf/network_conf.c, src/conf/network_conf.h,
>    src/network/bridge_driver.c: Convert to use virSocketAddr
>    in virNetwork, instead of char *.
> * src/util/bridge.c, src/util/bridge.h,
>    src/util/dnsmasq.c, src/util/dnsmasq.h,
>    src/util/iptables.c, src/util/iptables.h: Convert to
>    take a virSocketAddr instead of char * for any IP
>    address parameters
> * src/util/network.h: Add macros to determine if an address
>    is set, and what address family is set.
> ---
>   src/conf/network_conf.c     |  121 +++++++++++++----------
>   src/conf/network_conf.h     |   16 ++--
>   src/network/bridge_driver.c |  162 +++++++++++++++++-------------
>   src/util/bridge.c           |   14 +--
>   src/util/bridge.h           |    5 +-
>   src/util/dnsmasq.c          |   17 ++-
>   src/util/dnsmasq.h          |    4 +-
>   src/util/iptables.c         |  230 +++++++++++++++++++++++++++----------------
>   src/util/iptables.h         |   18 ++--
>   src/util/network.h          |    6 +
>   10 files changed, 353 insertions(+), 240 deletions(-)

Big change, but mostly good.

> @@ -1112,12 +1134,10 @@ static int networkCheckRouteCollision(virNetworkObjPtr network)
>           addr_val&= mask_val;
>
>           if ((net_dest == addr_val)&&
> -            (innetmask.data.inet4.sin_addr.s_addr == mask_val)) {
> +            (network->def->netmask.data.inet4.sin_addr.s_addr == mask_val)) {
>               networkReportError(VIR_ERR_INTERNAL_ERROR,
> -                              _("Network %s/%s is already in use by "
> -                                "interface %s"),
> -                                network->def->ipAddress,
> -                                network->def->netmask, iface);
> +                               _("Network is already in use by interface %s"),
> +                               iface);

This one loses some information in the error message; is that okay?

> +++ b/src/util/dnsmasq.c
> @@ -76,23 +76,28 @@ hostsfileFree(dnsmasqHostsfile *hostsfile)
>   static int
>   hostsfileAdd(dnsmasqHostsfile *hostsfile,
>                const char *mac,
> -             const char *ip,
> +             virSocketAddr *ip,
>                const char *name)
>   {
> +    char *ipstr;
>       if (VIR_REALLOC_N(hostsfile->hosts, hostsfile->nhosts + 1)<  0)
>           goto alloc_error;
>
...
> @@ -100,7 +105,7 @@ hostsfileAdd(dnsmasqHostsfile *hostsfile,
>
>    alloc_error:
>       virReportOOMError();
> -
> +    VIR_FREE(ipstr);

Ouch - freeing uninitialized memory.

>       return -1;
>   }
>
> @@ -279,7 +284,7 @@ dnsmasqContextFree(dnsmasqContext *ctx)
>    * dnsmasqAddDhcpHost:
>    * @ctx: pointer to the dnsmasq context for each network
>    * @mac: pointer to the string contains mac address of the host
> - * @ip: pointer to the string contains ip address of the host
> + * @ip: pointer to the socket address contains ip of the host

s/contains/containing/

>    * @name: pointer to the string contains hostname of the host or NULL

here too

ACK with those items fixed.

-- 
Eric Blake   eblake at redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org




More information about the libvir-list mailing list