in46_addr: Add new function in46a_prefix_equal()
This function is used to compare an IPv6 address against another, using the smaller of the two prefix lengths. Change-Id: Ic993d8abdc90897cb55276f01ae3b8a5eadf5a0d
This commit is contained in:
parent
d1bf1e11ba
commit
365f8fa462
|
@ -74,6 +74,23 @@ int in46a_equal(const struct in46_addr *a, const struct in46_addr *b)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*! Determine if two in46_addr prefix are equal or not
|
||||
* The prefix length is determined by the shortest of the prefixes of a and b
|
||||
* \returns 1 in case the common prefix are equal; 0 otherwise */
|
||||
int in46a_prefix_equal(const struct in46_addr *a, const struct in46_addr *b)
|
||||
{
|
||||
unsigned int len;
|
||||
if (a->len > b->len)
|
||||
len = b->len;
|
||||
else
|
||||
len = a->len;
|
||||
|
||||
if (!memcmp(&a->v6, &b->v6, len))
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*! Match if IPv6 addr1 + addr2 are within same \a mask */
|
||||
static int ipv6_within_mask(const struct in6_addr *addr1, const struct in6_addr *addr2,
|
||||
const struct in6_addr *mask)
|
||||
|
|
|
@ -18,6 +18,7 @@ extern int in46a_to_af(const struct in46_addr *in);
|
|||
extern int in46a_to_sas(struct sockaddr_storage *out, const struct in46_addr *in);
|
||||
extern const char *in46a_ntop(const struct in46_addr *in, char *dst, socklen_t dst_size);
|
||||
extern int in46a_equal(const struct in46_addr *a, const struct in46_addr *b);
|
||||
extern int in46a_prefix_equal(const struct in46_addr *a, const struct in46_addr *b);
|
||||
extern int in46a_within_mask(const struct in46_addr *addr, const struct in46_addr *net, size_t prefixlen);
|
||||
|
||||
int in46a_to_eua(const struct in46_addr *src, struct ul66_t *eua);
|
||||
|
|
Reference in New Issue