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;
|
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;
|
static Mutex g_dns_mutex;
|
||||||
|
|
||||||
// This starts a background thread for running DNS resolving.
|
// 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 ParseSockaddrInWithPort(const char *s, IpAddr *sin, DnsResolver *resolver, int flags = 0);
|
||||||
bool ParseSockaddrInWithoutPort(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_
|
#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) {
|
void WgPeer::CopyEndpointToPeer_Locked(WgKeypair *keypair, const IpAddr *addr) {
|
||||||
// Remember how to send packets to this peer
|
// Remember how to send packets to this peer
|
||||||
if (keypair->peer->allow_endpoint_change_ &&
|
if (keypair->peer->allow_endpoint_change_ &&
|
||||||
|
|
Loading…
Reference in a new issue