diff options
author | 2017-11-01 21:28:39 +0100 | |
---|---|---|
committer | 2017-11-01 21:28:39 +0100 | |
commit | cd246809bbf0d948b5cd25d428a301960b5638d8 (patch) | |
tree | d2703a619fad8dbdd6cae1275a6264c55fdcd92e /src/socket.c | |
parent | Kconfig: remove trailing whitespace (diff) | |
download | wireguard-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.c | 15 |
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); |