diff options
author | Trumeet <yuuta@yuuta.moe> | 2021-03-30 21:51:51 -0700 |
---|---|---|
committer | Trumeet <yuuta@yuuta.moe> | 2021-03-30 21:51:51 -0700 |
commit | 2745a3e1d15a35492ce98f8d20ee8d1d242020d0 (patch) | |
tree | 0821e5ecd906235fb68321d20359b7a1c4f101d4 | |
parent | 53706a97fd987036f2dd655ba3257273bb8d307e (diff) | |
download | dn42peering-2745a3e1d15a35492ce98f8d20ee8d1d242020d0.tar dn42peering-2745a3e1d15a35492ce98f8d20ee8d1d242020d0.tar.gz dn42peering-2745a3e1d15a35492ce98f8d20ee8d1d242020d0.tar.bz2 dn42peering-2745a3e1d15a35492ce98f8d20ee8d1d242020d0.zip |
fix(central): wg-quick does not support IP switching
-rw-r--r-- | central/src/main/java/moe/yuuta/dn42peering/manage/ManagementProvision.java | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/central/src/main/java/moe/yuuta/dn42peering/manage/ManagementProvision.java b/central/src/main/java/moe/yuuta/dn42peering/manage/ManagementProvision.java index 5c9b531..11ec50f 100644 --- a/central/src/main/java/moe/yuuta/dn42peering/manage/ManagementProvision.java +++ b/central/src/main/java/moe/yuuta/dn42peering/manage/ManagementProvision.java @@ -29,20 +29,22 @@ class ManagementProvision { // This will cause unnecessary wastes. boolean canReload = inPeer.getType() == existingPeer.getType() && inPeer.getNode() == existingPeer.getNode(); - // wg-quick does not support switching local IP addresses. - // However, switch between link local addresses and real IPv6 addresses require the change of - // local v6 address. Therefore, in such cases, we have to do a full re-provision. + // wg-quick does not support switching IP addresses. + // TODO: Move reload detection to agents. if(canReload && // Only check if no other factors prevent us from reloading. inPeer.getType() == Peer.VPNType.WIREGUARD && existingPeer.getType() == Peer.VPNType.WIREGUARD) { - try { - final boolean existingLL = existingPeer.isIPv6LinkLocal(); - final boolean newLL = inPeer.isIPv6LinkLocal(); - if(existingLL != newLL) { - canReload = false; - } - } catch (IOException e) { - return Future.failedFuture(e); + if(!inPeer.getIpv4().equals(existingPeer.getIpv6())) { + canReload = false; + } + if(inPeer.getIpv6() != null && !inPeer.getIpv6().equals(existingPeer.getIpv6())) { + try { + // LL addrs does not have anything to do with ifconfig. + if(inPeer.isIPv6LinkLocal() && existingPeer.isIPv6LinkLocal()) + canReload = true; + else + canReload = false; + } catch (IOException ignored) {} } } // wg-quick will also not clear EndPoint setting if we just reload it. |