diff options
Diffstat (limited to 'babeld/util.c')
| -rw-r--r-- | babeld/util.c | 37 |
1 files changed, 9 insertions, 28 deletions
diff --git a/babeld/util.c b/babeld/util.c index e99bd861dc..e2db75996e 100644 --- a/babeld/util.c +++ b/babeld/util.c @@ -216,33 +216,13 @@ parse_nat(const char *string) return (int)l; } -int -in_prefix(const unsigned char *restrict address, - const unsigned char *restrict prefix, unsigned char plen) -{ - unsigned char m; - - if(plen > 128) - plen = 128; - - if(memcmp(address, prefix, plen / 8) != 0) - return 0; - - if(plen % 8 == 0) - return 1; - - m = 0xFF << (8 - (plen % 8)); - - return ((address[plen / 8] & m) == (prefix[plen / 8] & m)); -} - unsigned char * mask_prefix(unsigned char *restrict ret, const unsigned char *restrict prefix, unsigned char plen) { - if(plen >= 128) { - memcpy(ret, prefix, 16); - return ret; + if (plen >= IPV6_MAX_BITLEN) { + memcpy(ret, prefix, IPV6_MAX_BYTELEN); + return ret; } memset(ret, 0, 16); @@ -329,9 +309,10 @@ parse_address(const char *address, unsigned char *addr_r, int *af_r) rc = inet_pton(AF_INET6, address, &ina6); if(rc > 0) { - memcpy(addr_r, &ina6, 16); - if(af_r) *af_r = AF_INET6; - return 0; + memcpy(addr_r, &ina6, IPV6_MAX_BYTELEN); + if (af_r) + *af_r = AF_INET6; + return 0; } return -1; @@ -433,13 +414,13 @@ uchar_to_inaddr(struct in_addr *dest, const unsigned char *src) void in6addr_to_uchar(unsigned char *dest, const struct in6_addr *src) { - memcpy(dest, src, 16); + memcpy(dest, src, IPV6_MAX_BYTELEN); } void uchar_to_in6addr(struct in6_addr *dest, const unsigned char *src) { - memcpy(dest, src, 16); + memcpy(dest, src, IPV6_MAX_BYTELEN); } int |
