On 11/28/2012 06:23 PM, Eric Blake wrote: > ----- Original Message ----- >> This new function returns true if the given address is in the range >> of >> any "private" or "local" networks as defined in RFC1918 (IPv4) or >> RFC3484/RFC4193 (IPv6), otherwise they return false. >> >> These ranges are: >> >> 192.168.0.0/16 >> 172.16.0.0/16 >> 10.0.0.0/24 >> FC00::/7 >> FEC0::/10 >> --- >> src/libvirt_private.syms | 1 + >> src/util/virsocketaddr.c | 34 +++++++++++++++++++++++++++++++++- >> src/util/virsocketaddr.h | 3 ++- >> 3 files changed, 36 insertions(+), 2 deletions(-) >> >> >> /* >> + * virSocketAddrIsPrivate: >> + * @s: the location of the IP address >> + * >> + * Return true if this address is in its family's defined >> + * "private/local" address space. For IPv4, private addresses are in >> + * the range of 192.168.0.0/16, 172.16.0.0/16, or 10.0.0.0/8. For >> + * IPv6, local addresses are in the range of FC00::/7. >> + * >> + * See RFC1918 and RFC4193 for details. > Did you intend to update this comment to match the commit message > regarding FEC0::/10? Yes. Thanks for noticing! > >> + */ >> +bool >> +virSocketAddrIsPrivate(const virSocketAddrPtr addr) >> +{ >> + unsigned long val; >> + >> + switch (addr->data.stor.ss_family) { >> + case AF_INET: >> + val = ntohl(addr->data.inet4.sin_addr.s_addr); >> + >> + return ((val & 0xFFFF0000) == ((192L << 24) + (168 << 16)) || >> + (val & 0xFFFF0000) == ((172L << 24) + (16 << 16)) || >> + (val & 0xFF000000) == ((10L << 24))); >> + >> + case AF_INET6: >> + return ((addr->data.inet6.sin6_addr.s6_addr[0] & 0xFC) == >> 0xFC || > Isn't this FC00::/6? You should be using '& 0xFE' for /7. Gulp. Yes. Fixed. > > ACK with those fixes. > Pushed with those fixes. -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list