Move CompareIpAddr
This commit is contained in:
parent
251b565bdb
commit
5c29201cd8
|
@ -98,6 +98,22 @@ bool IsWgCidrAddrSubsetOfAny(const WgCidrAddr &inner, const std::vector<WgCidrAd
|
|||
return false;
|
||||
}
|
||||
|
||||
// Returns nonzero if two endpoints are different.
|
||||
uint32 CompareIpAddr(const IpAddr *a, const IpAddr *b) {
|
||||
uint32 rv = b->sin.sin_family ^ a->sin.sin_family;
|
||||
if (b->sin.sin_family != AF_INET6) {
|
||||
rv |= b->sin.sin_addr.s_addr ^ a->sin.sin_addr.s_addr;
|
||||
rv |= b->sin.sin_port ^ a->sin.sin_port;
|
||||
} else {
|
||||
uint64 rx = ((uint64*)&b->sin6.sin6_addr)[0] ^ ((uint64*)&a->sin6.sin6_addr)[0];
|
||||
rx |= ((uint64*)&b->sin6.sin6_addr)[1] ^ ((uint64*)&a->sin6.sin6_addr)[1];
|
||||
rv |= rx | (rx >> 32);
|
||||
rv |= b->sin6.sin6_port ^ a->sin6.sin6_port;
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
static Mutex g_dns_mutex;
|
||||
|
||||
// This starts a background thread for running DNS resolving.
|
||||
|
|
|
@ -37,5 +37,7 @@ enum {
|
|||
bool ParseSockaddrInWithPort(const char *s, IpAddr *sin, DnsResolver *resolver, int flags = 0);
|
||||
bool ParseSockaddrInWithoutPort(char *s, IpAddr *sin, DnsResolver *resolver, int flags = 0);
|
||||
|
||||
// Returns nonzero if two endpoints are different.
|
||||
uint32 CompareIpAddr(const IpAddr *a, const IpAddr *b);
|
||||
|
||||
#endif // TUNSAFE_IPADDR_H_
|
||||
|
|
|
@ -685,21 +685,6 @@ invalid_size:
|
|||
}
|
||||
}
|
||||
|
||||
// Returns nonzero if two endpoints are different.
|
||||
static uint32 CompareIpAddr(const IpAddr *a, const IpAddr *b) {
|
||||
uint32 rv = b->sin.sin_family ^ a->sin.sin_family;
|
||||
if (b->sin.sin_family != AF_INET6) {
|
||||
rv |= b->sin.sin_addr.s_addr ^ a->sin.sin_addr.s_addr;
|
||||
rv |= b->sin.sin_port ^ a->sin.sin_port;
|
||||
} else {
|
||||
uint64 rx = ((uint64*)&b->sin6.sin6_addr)[0] ^ ((uint64*)&a->sin6.sin6_addr)[0];
|
||||
rx |= ((uint64*)&b->sin6.sin6_addr)[1] ^ ((uint64*)&a->sin6.sin6_addr)[1];
|
||||
rv |= rx | (rx >> 32);
|
||||
rv |= b->sin6.sin6_port ^ a->sin6.sin6_port;
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
void WgPeer::CopyEndpointToPeer_Locked(WgKeypair *keypair, const IpAddr *addr) {
|
||||
// Remember how to send packets to this peer
|
||||
if (keypair->peer->allow_endpoint_change_ &&
|
||||
|
|
Loading…
Reference in a new issue