aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTrumeet <yuuta@yuuta.moe>2021-03-30 21:51:51 -0700
committerTrumeet <yuuta@yuuta.moe>2021-03-30 21:51:51 -0700
commit2745a3e1d15a35492ce98f8d20ee8d1d242020d0 (patch)
tree0821e5ecd906235fb68321d20359b7a1c4f101d4
parent53706a97fd987036f2dd655ba3257273bb8d307e (diff)
downloaddn42peering-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.java24
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.