diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 3ae18b8f29..640c6b3138 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -2165,6 +2165,7 @@ virSocketAddrParseIPv4; virSocketAddrParseIPv6; virSocketAddrPrefixToNetmask; virSocketAddrSetIPv4Addr; +virSocketAddrSetIPv6Addr; virSocketAddrSetPort; # util/virstats.h diff --git a/src/util/virsocketaddr.c b/src/util/virsocketaddr.c index 900aa5b783..b44d12e652 100644 --- a/src/util/virsocketaddr.c +++ b/src/util/virsocketaddr.c @@ -188,6 +188,21 @@ virSocketAddrSetIPv4Addr(virSocketAddrPtr addr, uint32_t val) addr->len = sizeof(struct sockaddr_in); } +/* + * virSocketAddrSetIPv6Addr: + * @addr: the location to store the result + * @val: the 128bit integer in host byte order representing the IPv6 address + * + * Set the IPv6 address given an integer in host order. This function does not + * touch any previously set port. + */ +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); +} + /* * virSocketAddrEqual: * @s1: the location of the one IP address diff --git a/src/util/virsocketaddr.h b/src/util/virsocketaddr.h index 9e2680a4d2..9a6e1ecfa0 100644 --- a/src/util/virsocketaddr.h +++ b/src/util/virsocketaddr.h @@ -85,6 +85,7 @@ int virSocketAddrParseIPv6(virSocketAddrPtr addr, const char *val); void virSocketAddrSetIPv4Addr(virSocketAddrPtr s, uint32_t addr); +void virSocketAddrSetIPv6Addr(virSocketAddrPtr s, uint32_t addr[4]); char *virSocketAddrFormat(const virSocketAddr *addr); char *virSocketAddrFormatFull(const virSocketAddr *addr,