diff options
Diffstat (limited to 'usr.bin/dig/lib/isc/netaddr.c')
| -rw-r--r-- | usr.bin/dig/lib/isc/netaddr.c | 185 |
1 files changed, 1 insertions, 184 deletions
diff --git a/usr.bin/dig/lib/isc/netaddr.c b/usr.bin/dig/lib/isc/netaddr.c index 0d54f50a3f9..d0042d67929 100644 --- a/usr.bin/dig/lib/isc/netaddr.c +++ b/usr.bin/dig/lib/isc/netaddr.c @@ -14,7 +14,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: netaddr.c,v 1.2 2020/02/11 23:26:12 jsg Exp $ */ +/* $Id: netaddr.c,v 1.3 2020/02/12 13:05:04 jsg Exp $ */ /*! \file */ @@ -31,37 +31,6 @@ #include <isc/util.h> isc_boolean_t -isc_netaddr_equal(const isc_netaddr_t *a, const isc_netaddr_t *b) { - REQUIRE(a != NULL && b != NULL); - - if (a->family != b->family) - return (ISC_FALSE); - - if (a->zone != b->zone) - return (ISC_FALSE); - - switch (a->family) { - case AF_INET: - if (a->type.in.s_addr != b->type.in.s_addr) - return (ISC_FALSE); - break; - case AF_INET6: - if (memcmp(&a->type.in6, &b->type.in6, - sizeof(a->type.in6)) != 0 || - a->zone != b->zone) - return (ISC_FALSE); - break; - case AF_UNIX: - if (strcmp(a->type.un, b->type.un) != 0) - return (ISC_FALSE); - break; - default: - return (ISC_FALSE); - } - return (ISC_TRUE); -} - -isc_boolean_t isc_netaddr_eqprefix(const isc_netaddr_t *a, const isc_netaddr_t *b, unsigned int prefixlen) { @@ -200,116 +169,6 @@ isc_netaddr_format(const isc_netaddr_t *na, char *array, unsigned int size) { } } - -isc_result_t -isc_netaddr_prefixok(const isc_netaddr_t *na, unsigned int prefixlen) { - static const unsigned char zeros[16]; - unsigned int nbits, nbytes, ipbytes = 0; - const unsigned char *p; - - switch (na->family) { - case AF_INET: - p = (const unsigned char *) &na->type.in; - ipbytes = 4; - if (prefixlen > 32) - return (ISC_R_RANGE); - break; - case AF_INET6: - p = (const unsigned char *) &na->type.in6; - ipbytes = 16; - if (prefixlen > 128) - return (ISC_R_RANGE); - break; - default: - return (ISC_R_NOTIMPLEMENTED); - } - nbytes = prefixlen / 8; - nbits = prefixlen % 8; - if (nbits != 0) { - INSIST(nbytes < ipbytes); - if ((p[nbytes] & (0xff>>nbits)) != 0U) - return (ISC_R_FAILURE); - nbytes++; - } - if (nbytes < ipbytes && memcmp(p + nbytes, zeros, ipbytes - nbytes) != 0) - return (ISC_R_FAILURE); - return (ISC_R_SUCCESS); -} - -isc_result_t -isc_netaddr_masktoprefixlen(const isc_netaddr_t *s, unsigned int *lenp) { - unsigned int nbits = 0, nbytes = 0, ipbytes = 0, i; - const unsigned char *p; - - switch (s->family) { - case AF_INET: - p = (const unsigned char *) &s->type.in; - ipbytes = 4; - break; - case AF_INET6: - p = (const unsigned char *) &s->type.in6; - ipbytes = 16; - break; - default: - return (ISC_R_NOTIMPLEMENTED); - } - for (i = 0; i < ipbytes; i++) { - if (p[i] != 0xFF) - break; - } - nbytes = i; - if (i < ipbytes) { - unsigned int c = p[nbytes]; - while ((c & 0x80) != 0 && nbits < 8) { - c <<= 1; nbits++; - } - if ((c & 0xFF) != 0) - return (ISC_R_MASKNONCONTIG); - i++; - } - for (; i < ipbytes; i++) { - if (p[i] != 0) - return (ISC_R_MASKNONCONTIG); - } - *lenp = nbytes * 8 + nbits; - return (ISC_R_SUCCESS); -} - -void -isc_netaddr_fromin(isc_netaddr_t *netaddr, const struct in_addr *ina) { - memset(netaddr, 0, sizeof(*netaddr)); - netaddr->family = AF_INET; - netaddr->type.in = *ina; -} - -void -isc_netaddr_fromin6(isc_netaddr_t *netaddr, const struct in6_addr *ina6) { - memset(netaddr, 0, sizeof(*netaddr)); - netaddr->family = AF_INET6; - netaddr->type.in6 = *ina6; -} - -isc_result_t -isc_netaddr_frompath(isc_netaddr_t *netaddr, const char *path) { - if (strlen(path) > sizeof(netaddr->type.un) - 1) - return (ISC_R_NOSPACE); - - memset(netaddr, 0, sizeof(*netaddr)); - netaddr->family = AF_UNIX; - strlcpy(netaddr->type.un, path, sizeof(netaddr->type.un)); - netaddr->zone = 0; - return (ISC_R_SUCCESS); -} - - -void -isc_netaddr_setzone(isc_netaddr_t *netaddr, uint32_t zone) { - /* we currently only support AF_INET6. */ - REQUIRE(netaddr->family == AF_INET6); - - netaddr->zone = zone; -} - uint32_t isc_netaddr_getzone(const isc_netaddr_t *netaddr) { return (netaddr->zone); @@ -337,20 +196,6 @@ isc_netaddr_fromsockaddr(isc_netaddr_t *t, const isc_sockaddr_t *s) { } } -void -isc_netaddr_any(isc_netaddr_t *netaddr) { - memset(netaddr, 0, sizeof(*netaddr)); - netaddr->family = AF_INET; - netaddr->type.in.s_addr = INADDR_ANY; -} - -void -isc_netaddr_any6(isc_netaddr_t *netaddr) { - memset(netaddr, 0, sizeof(*netaddr)); - netaddr->family = AF_INET6; - netaddr->type.in6 = in6addr_any; -} - isc_boolean_t isc_netaddr_ismulticast(isc_netaddr_t *na) { switch (na->family) { @@ -412,31 +257,3 @@ isc_netaddr_isnetzero(isc_netaddr_t *na) { return (ISC_FALSE); } } - -void -isc_netaddr_fromv4mapped(isc_netaddr_t *t, const isc_netaddr_t *s) { - isc_netaddr_t *src; - - DE_CONST(s, src); /* Must come before IN6_IS_ADDR_V4MAPPED. */ - - REQUIRE(s->family == AF_INET6); - REQUIRE(IN6_IS_ADDR_V4MAPPED(&src->type.in6)); - - memset(t, 0, sizeof(*t)); - t->family = AF_INET; - memmove(&t->type.in, (char *)&src->type.in6 + 12, 4); - return; -} - -isc_boolean_t -isc_netaddr_isloopback(const isc_netaddr_t *na) { - switch (na->family) { - case AF_INET: - return (ISC_TF((ntohl(na->type.in.s_addr) & 0xff000000U) == - 0x7f000000U)); - case AF_INET6: - return (IN6_IS_ADDR_LOOPBACK(&na->type.in6)); - default: - return (ISC_FALSE); - } -} |
