diff options
| author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2017-05-04 15:54:15 -0700 |
|---|---|---|
| committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2017-05-04 15:54:15 -0700 |
| commit | b8e46b835b2a7ff5908fa7ff1dac19d8c69785c9 (patch) | |
| tree | f019ef9640f2dc1e028da70264611d2319f1c326 /node | |
| parent | 0900fee5d9fa77f7d860d08db8863d0e96f68492 (diff) | |
| parent | 1f26cb98de307cd7838fa14c61bcf958a5a7bb1c (diff) | |
| download | infinitytier-b8e46b835b2a7ff5908fa7ff1dac19d8c69785c9.tar.gz infinitytier-b8e46b835b2a7ff5908fa7ff1dac19d8c69785c9.zip | |
Merge branch 'dev' of http://10.6.6.2/zerotier/ZeroTierOne into dev
Diffstat (limited to 'node')
| -rw-r--r-- | node/InetAddress.cpp | 24 | ||||
| -rw-r--r-- | node/InetAddress.hpp | 10 |
2 files changed, 34 insertions, 0 deletions
diff --git a/node/InetAddress.cpp b/node/InetAddress.cpp index 62bb8145..0fbb2d68 100644 --- a/node/InetAddress.cpp +++ b/node/InetAddress.cpp @@ -287,6 +287,30 @@ InetAddress InetAddress::network() const 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 { if (addr.ss_family == ss_family) { diff --git a/node/InetAddress.hpp b/node/InetAddress.hpp index 0975a9cf..4cb9a4dc 100644 --- a/node/InetAddress.hpp +++ b/node/InetAddress.hpp @@ -355,6 +355,16 @@ struct InetAddress : public sockaddr_storage */ 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 * |
