mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-06-05 03:53:44 +02:00
added isEqualPrefix to InetAddress
This commit is contained in:
parent
6bb855873d
commit
ceeb8ee0bc
2 changed files with 34 additions and 0 deletions
|
@ -287,6 +287,30 @@ InetAddress InetAddress::network() const
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef ZT_SDK
|
||||||
|
bool InetAddress::isEqualPrefix(const InetAddress &addr) const
|
||||||
|
{
|
||||||
|
if (addr.ss_family == ss_family) {
|
||||||
|
switch(ss_family) {
|
||||||
|
case AF_INET6: {
|
||||||
|
const InetAddress mask(netmask());
|
||||||
|
InetAddress addr_mask(addr.netmask());
|
||||||
|
const uint8_t *n = reinterpret_cast<const uint8_t *>(reinterpret_cast<const struct sockaddr_in6 *>(&addr_mask)->sin6_addr.s6_addr);
|
||||||
|
const uint8_t *m = reinterpret_cast<const uint8_t *>(reinterpret_cast<const struct sockaddr_in6 *>(&mask)->sin6_addr.s6_addr);
|
||||||
|
const uint8_t *a = reinterpret_cast<const uint8_t *>(reinterpret_cast<const struct sockaddr_in6 *>(&addr)->sin6_addr.s6_addr);
|
||||||
|
const uint8_t *b = reinterpret_cast<const uint8_t *>(reinterpret_cast<const struct sockaddr_in6 *>(this)->sin6_addr.s6_addr);
|
||||||
|
for(unsigned int i=0;i<16;++i) {
|
||||||
|
if ((a[i] & m[i]) != (b[i] & n[i]))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
bool InetAddress::containsAddress(const InetAddress &addr) const
|
bool InetAddress::containsAddress(const InetAddress &addr) const
|
||||||
{
|
{
|
||||||
if (addr.ss_family == ss_family) {
|
if (addr.ss_family == ss_family) {
|
||||||
|
|
|
@ -355,6 +355,16 @@ struct InetAddress : public sockaddr_storage
|
||||||
*/
|
*/
|
||||||
InetAddress network() const;
|
InetAddress network() const;
|
||||||
|
|
||||||
|
#ifdef ZT_SDK
|
||||||
|
/**
|
||||||
|
* Test whether this IPv6 prefix matches the prefix of a given IPv6 address
|
||||||
|
*
|
||||||
|
* @param addr Address to check
|
||||||
|
* @return True if this IPv6 prefix matches the prefix of a given IPv6 address
|
||||||
|
*/
|
||||||
|
bool isEqualPrefix(const InetAddress &addr) const;
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test whether this IP/netmask contains this address
|
* Test whether this IP/netmask contains this address
|
||||||
*
|
*
|
||||||
|
|
Loading…
Add table
Reference in a new issue