From 5c29201cd87965b9ef6c158d332d1ef7e4dc6ac8 Mon Sep 17 00:00:00 2001 From: Ludvig Strigeus Date: Fri, 16 Nov 2018 14:37:51 +0100 Subject: [PATCH] Move CompareIpAddr --- tunsafe_ipaddr.cpp | 16 ++++++++++++++++ tunsafe_ipaddr.h | 2 ++ wireguard.cpp | 15 --------------- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/tunsafe_ipaddr.cpp b/tunsafe_ipaddr.cpp index b1f5f20..fad2247 100644 --- a/tunsafe_ipaddr.cpp +++ b/tunsafe_ipaddr.cpp @@ -98,6 +98,22 @@ bool IsWgCidrAddrSubsetOfAny(const WgCidrAddr &inner, const std::vectorsin.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. diff --git a/tunsafe_ipaddr.h b/tunsafe_ipaddr.h index 2e80bc6..62e7483 100644 --- a/tunsafe_ipaddr.h +++ b/tunsafe_ipaddr.h @@ -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_ diff --git a/wireguard.cpp b/wireguard.cpp index d75ccfa..c1b4d58 100644 --- a/wireguard.cpp +++ b/wireguard.cpp @@ -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_ &&