[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