[libvirt] [PATCH V13 1/5] Add new functions to virSocketAddr

Daniel P. Berrange berrange at redhat.com
Wed Apr 25 13:42:54 UTC 2012


On Wed, Apr 25, 2012 at 08:59:46AM -0400, Stefan Berger wrote:
> Add 2 new functions to the virSocketAddr 'class':
> 
> - virSocketAddrEqual: tests whether two IP addresses and their ports are equal
> - virSocketaddSetIPv4Addr: set a virSocketAddr given a 32 bit int
> 
> ---
> 
> Changes since v12:
>  - fixed number of bytes compared when checking addresses for equality
> 
> ---
>  src/libvirt_private.syms |    2 ++
>  src/util/virsocketaddr.c |   45 +++++++++++++++++++++++++++++++++++++++++++++
>  src/util/virsocketaddr.h |    4 ++++
>  3 files changed, 51 insertions(+)
> 
> Index: libvirt/src/libvirt_private.syms
> ===================================================================
> --- libvirt.orig/src/libvirt_private.syms
> +++ libvirt/src/libvirt_private.syms
> @@ -1452,6 +1452,7 @@ virRandomInitialize;
>  virSocketAddrBroadcast;
>  virSocketAddrBroadcastByPrefix;
>  virSocketAddrCheckNetmask;
> +virSocketAddrEqual;
>  virSocketAddrFormat;
>  virSocketAddrFormatFull;
>  virSocketAddrGetPort;
> @@ -1463,6 +1464,7 @@ virSocketAddrParse;
>  virSocketAddrParseIPv4;
>  virSocketAddrParseIPv6;
>  virSocketAddrPrefixToNetmask;
> +virSocketAddrSetIPv4Addr;
>  virSocketAddrSetPort;
>  
>  
> Index: libvirt/src/util/virsocketaddr.c
> ===================================================================
> --- libvirt.orig/src/util/virsocketaddr.c
> +++ libvirt/src/util/virsocketaddr.c
> @@ -152,6 +152,51 @@ virSocketAddrParseIPv6(virSocketAddrPtr
>  }
>  
>  /*
> + * virSocketAddrSetIPv4Addr:
> + * @addr: the location to store the result
> + * @val: the 32bit integer in host byte order representing the IPv4 address
> + *
> + * Set the IPv4 address given an integer in host order. This function does not
> + * touch any previously set port.
> + */
> +void
> +virSocketAddrSetIPv4Addr(virSocketAddrPtr addr, uint32_t val)
> +{
> +    addr->data.stor.ss_family = AF_INET;
> +    addr->data.inet4.sin_addr.s_addr = htonl(val);
> +    addr->len = sizeof(struct sockaddr_in);
> +}
> +
> +/*
> + * virSocketAddrEqual:
> + * @s1: the location of the one IP address
> + * @s2: the location of the other IP address
> + *
> + * Compare two IP addresses for equality. Two addresses are equal
> + * if their IP addresses and ports are equal.
> + */
> +bool
> +virSocketAddrEqual(const virSocketAddrPtr s1, const virSocketAddrPtr s2)
> +{
> +    if (s1->data.stor.ss_family != s2->data.stor.ss_family)
> +        return false;
> +
> +    switch (s1->data.stor.ss_family) {
> +    case AF_INET:
> +        return (memcmp(&s1->data.inet4.sin_addr.s_addr,
> +                       &s2->data.inet4.sin_addr.s_addr,
> +                       sizeof(s1->data.inet4.sin_addr.s_addr)) == 0 &&
> +                s1->data.inet4.sin_port == s2->data.inet4.sin_port);
> +    case AF_INET6:
> +        return (memcmp(&s1->data.inet6.sin6_addr.s6_addr,
> +                       &s2->data.inet6.sin6_addr.s6_addr,
> +                       sizeof(s1->data.inet6.sin6_addr.s6_addr)) == 0 &&
> +                s1->data.inet6.sin6_port == s2->data.inet6.sin6_port);
> +    }
> +    return false;
> +}
> +
> +/*
>   * virSocketAddrFormat:
>   * @addr: an initialized virSocketAddrPtr
>   *
> Index: libvirt/src/util/virsocketaddr.h
> ===================================================================
> --- libvirt.orig/src/util/virsocketaddr.h
> +++ libvirt/src/util/virsocketaddr.h
> @@ -66,6 +66,8 @@ int virSocketAddrParseIPv4(virSocketAddr
>  int virSocketAddrParseIPv6(virSocketAddrPtr addr,
>                             const char *val);
>  
> +void virSocketAddrSetIPv4Addr(const virSocketAddrPtr s, uint32_t addr);
> +
>  char * virSocketAddrFormat(virSocketAddrPtr addr);
>  char * virSocketAddrFormatFull(virSocketAddrPtr addr,
>                                 bool withService,
> @@ -100,5 +102,7 @@ int virSocketAddrGetNumNetmaskBits(const
>  int virSocketAddrPrefixToNetmask(unsigned int prefix,
>                                   virSocketAddrPtr netmask,
>                                   int family);
> +bool virSocketAddrEqual(const virSocketAddrPtr s1,
> +                        const virSocketAddrPtr s2);

ACK, can be pushed independantly of the rest of the series


Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list