aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/socket.c
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2017-11-01 21:28:39 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2017-11-01 21:28:39 +0100
commitcd246809bbf0d948b5cd25d428a301960b5638d8 (patch)
treed2703a619fad8dbdd6cae1275a6264c55fdcd92e /src/socket.c
parentKconfig: remove trailing whitespace (diff)
downloadwireguard-monolithic-historical-jd/fixed-endpoints.tar.xz
wireguard-monolithic-historical-jd/fixed-endpoints.zip
Allow disabling roamingjd/fixed-endpoints
Diffstat (limited to 'src/socket.c')
-rw-r--r--src/socket.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/socket.c b/src/socket.c
index 1ce74cd..57ab61e 100644
--- a/src/socket.c
+++ b/src/socket.c
@@ -248,12 +248,17 @@ void socket_set_peer_endpoint(struct wireguard_peer *peer, const struct endpoint
return;
write_lock_bh(&peer->endpoint_lock);
if (endpoint->addr.sa_family == AF_INET) {
- peer->endpoint.addr4 = endpoint->addr4;
- peer->endpoint.src4 = endpoint->src4;
- peer->endpoint.src_if4 = endpoint->src_if4;
+ if (!peer->endpoint.fixed)
+ peer->endpoint.addr4 = endpoint->addr4;
+ if (!peer->endpoint.fixed || peer->endpoint.addr.sa_family == AF_INET) {
+ peer->endpoint.src4 = endpoint->src4;
+ peer->endpoint.src_if4 = endpoint->src_if4;
+ }
} else if (endpoint->addr.sa_family == AF_INET6) {
- peer->endpoint.addr6 = endpoint->addr6;
- peer->endpoint.src6 = endpoint->src6;
+ if (!peer->endpoint.fixed)
+ peer->endpoint.addr6 = endpoint->addr6;
+ if (!peer->endpoint.fixed || peer->endpoint.addr.sa_family == AF_INET6)
+ peer->endpoint.src6 = endpoint->src6;
} else
goto out;
dst_cache_reset(&peer->endpoint_cache);