[libvirt] [PATCH 1/2] util: Add virSocketAddrSetIPv[46]AddrNetOrder and use it

Peter Krempa pkrempa at redhat.com
Mon Mar 21 08:59:15 UTC 2016


On Fri, Mar 18, 2016 at 17:42:28 +0100, Martin Kletzander wrote:
> This allows setting the address if you already have the address in
> network byte order.  Some places were having the address in network
> order and calling ntohl() just so the original function can call htonl()
> again.  Let's call the new one to make clear what's happening.
> 
> Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
> ---
>  src/libvirt_private.syms          |  2 ++
>  src/nwfilter/nwfilter_dhcpsnoop.c |  4 ++--
>  src/util/virsocketaddr.c          | 45 +++++++++++++++++++++++++++++++++------
>  src/util/virsocketaddr.h          |  2 ++
>  tests/nsstest.c                   |  7 +++---
>  5 files changed, 48 insertions(+), 12 deletions(-)
> 

[...]

> diff --git a/src/util/virsocketaddr.c b/src/util/virsocketaddr.c
> index b44d12e65216..53a8af898ead 100644
> --- a/src/util/virsocketaddr.c
> +++ b/src/util/virsocketaddr.c
> @@ -173,6 +173,22 @@ virSocketAddrParseIPv6(virSocketAddrPtr addr, const char *val)
>  }
> 
>  /*
> + * virSocketAddrSetIPv4AddrNetOrder:
> + * @addr: the location to store the result
> + * @val: the 128bit integer in network byte order representing the IPv4 address

32 bit, for IPv4

> + *
> + * Set the IPv4 address given an integer in network order. This function does not
> + * touch any previously set port.

[...]

> @@ -198,9 +227,13 @@ virSocketAddrSetIPv4Addr(virSocketAddrPtr addr, uint32_t val)
>   */
>  void virSocketAddrSetIPv6Addr(virSocketAddrPtr addr, uint32_t val[4])
>  {
> -    addr->data.stor.ss_family = AF_INET6;
> -    memcpy(addr->data.inet6.sin6_addr.s6_addr, val, 4 * sizeof(*val));
> -    addr->len = sizeof(struct sockaddr_in6);
> +    size_t i = 0;
> +    uint32_t host_val[4];
> +
> +    for (i = 0; i < 4; i++)
> +        host_val[i] = htonl(val[i]);

So the docs for this function were incorrect. It was indeed setting it
in the network order. You should mention this change in the commit
message.

[...]

> diff --git a/tests/nsstest.c b/tests/nsstest.c
> index 340f313616c5..68f1c600f6ec 100644
> --- a/tests/nsstest.c
> +++ b/tests/nsstest.c
> @@ -126,15 +126,14 @@ testGetHostByName(const void *opaque)
>      while (*addrList) {
>          virSocketAddr sa;
>          char *ipAddr;
> +        void *address = *addrList;
> 
>          memset(&sa, 0, sizeof(sa));
> 
>          if (resolved.h_addrtype == AF_INET) {
> -            /* For some reason, virSocketAddrSetIPv4Addr does htonl() conversion.
> -             * But the data we already have is in network order. */
> -            virSocketAddrSetIPv4Addr(&sa, ntohl(*((uint32_t *) *addrList)));
> +            virSocketAddrSetIPv4AddrNetOrder(&sa, *((uint32_t *) address));
>          } else {
> -            virSocketAddrSetIPv6Addr(&sa, (uint32_t *) *addrList);
> +            virSocketAddrSetIPv6AddrNetOrder(&sa, address);

Okay, this was the only place that is using the function fortunately.

ACK with the two requested touch-ups.

Peter
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20160321/5fa68d85/attachment-0001.sig>


More information about the libvir-list mailing list