Skip to content

Commit e11a35f

Browse files
committed
fix: resolve golangci-lint nestif error and TestTunnelPackets failure
- Invert `if exists` in `service/tunnel.go` to reduce nestif complexity. - Update `TestTunnelPackets` to use the new derived IPv6 addresses from config, fixing packet routing mismatch.
1 parent e450d6d commit e11a35f

2 files changed

Lines changed: 41 additions & 59 deletions

File tree

application_test.go

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -940,38 +940,20 @@ func TestTunnelPackets(t *testing.T) {
940940

941941
// --- IPv6 Routing Test ---
942942
peer2ConfigInPeer1, _ := peer1.app.Conf.GetPeer(peer2.PeerID())
943-
peer2IPv4 := net.ParseIP(peer2ConfigInPeer1.IPAddr).To4()
944-
945943
peer1ConfigInPeer2, _ := peer2.app.Conf.GetPeer(peer1.PeerID())
946-
peer1IPv4 := net.ParseIP(peer1ConfigInPeer2.IPAddr).To4()
947-
948-
awlSubnet4, _ := netip.ParsePrefix(peer1.app.Conf.VPNConfig.IPNet)
949-
awlSubnet6, _ := netip.ParsePrefix(peer1.app.Conf.VPNConfig.IPNetV6)
950-
v4Mask := net.CIDRMask(awlSubnet4.Bits(), 32)
951-
awlNet6 := &net.IPNet{IP: awlSubnet6.Addr().AsSlice(), Mask: net.CIDRMask(awlSubnet6.Bits(), 128)}
952-
baseV6 := awlNet6.IP.Mask(awlNet6.Mask).To16()
953-
954-
peer1IPv6 := make(net.IP, net.IPv6len)
955-
copy(peer1IPv6, baseV6)
956-
for i := 0; i < net.IPv4len; i++ {
957-
peer1IPv6[12+i] |= peer1IPv4[i] &^ v4Mask[i]
958-
}
959944

960-
peer2IPv6 := make(net.IP, net.IPv6len)
961-
copy(peer2IPv6, baseV6)
962-
for i := 0; i < net.IPv4len; i++ {
963-
peer2IPv6[12+i] |= peer2IPv4[i] &^ v4Mask[i]
964-
}
945+
peer1IPv6Str := peer1ConfigInPeer2.IPAddrV6
946+
peer2IPv6Str := peer2ConfigInPeer1.IPAddrV6
965947

966948
ts.t.Logf("DEBUG: peer1 IPNetV6: %v", peer1.app.Conf.VPNConfig.IPNetV6)
967-
ts.t.Logf("DEBUG: peer1IPv6 calculated: %s, peer2IPv6 calculated: %s", peer1IPv6.String(), peer2IPv6.String())
949+
ts.t.Logf("DEBUG: peer1IPv6 calculated: %s, peer2IPv6 calculated: %s", peer1IPv6Str, peer2IPv6Str)
968950

969951
peer1.tun.ClearInboundCount()
970952
peer2.tun.ClearInboundCount()
971953

972954
// Send IPv6 packets from peer1 to peer2
973955
const ipv6PacketsCount = 10
974-
ipv6Packet := testPacketWithSrcDestV6(packetSize, peer1IPv6.String(), peer2IPv6.String())
956+
ipv6Packet := testPacketWithSrcDestV6(packetSize, peer1IPv6Str, peer2IPv6Str)
975957

976958
for i := 0; i < ipv6PacketsCount; i++ {
977959
peer1.tun.Outbound <- [][]byte{ipv6Packet}

service/tunnel.go

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -162,51 +162,51 @@ func (t *Tunnel) RefreshPeersList() {
162162
newLocalIPv6 := net.ParseIP(knownPeer.IPAddrV6)
163163

164164
prevPeer, exists := t.peerIDToPeer[peerID]
165-
if exists {
166-
oldLocalIP := *prevPeer.localIP.Load()
167-
var oldLocalIPv6 net.IP
168-
if p := prevPeer.localIPv6.Load(); p != nil {
169-
oldLocalIPv6 = *p
165+
if !exists {
166+
// add new peer
167+
vpnPeer := NewVpnPeer(peerID, newLocalIP, newLocalIPv6)
168+
t.peerIDToPeer[peerID] = vpnPeer
169+
t.netIPToPeer[newLocalIP.String()] = vpnPeer
170+
if newLocalIPv6 != nil {
171+
t.netIPToPeer[newLocalIPv6.String()] = vpnPeer
172+
t.logger.Debugf("mapping peer %s (%s) to IPv6 %s", peerID, newLocalIP, newLocalIPv6)
170173
}
174+
vpnPeer.Start(t)
175+
continue
176+
}
171177

172-
ipChanged := !oldLocalIP.Equal(newLocalIP)
173-
ipv6Changed := !oldLocalIPv6.Equal(newLocalIPv6)
174-
175-
if !ipChanged && !ipv6Changed {
176-
// no changes
177-
continue
178-
}
178+
oldLocalIP := *prevPeer.localIP.Load()
179+
var oldLocalIPv6 net.IP
180+
if p := prevPeer.localIPv6.Load(); p != nil {
181+
oldLocalIPv6 = *p
182+
}
179183

180-
// IP changed: update both IPv4 and IPv6 mappings
181-
if ipChanged {
182-
delete(t.netIPToPeer, oldLocalIP.String())
183-
prevPeer.localIP.Store(&newLocalIP)
184-
t.netIPToPeer[newLocalIP.String()] = prevPeer
185-
}
184+
ipChanged := !oldLocalIP.Equal(newLocalIP)
185+
ipv6Changed := !oldLocalIPv6.Equal(newLocalIPv6)
186186

187-
if ipv6Changed {
188-
if oldLocalIPv6 != nil {
189-
delete(t.netIPToPeer, oldLocalIPv6.String())
190-
}
191-
if newLocalIPv6 != nil {
192-
prevPeer.localIPv6.Store(&newLocalIPv6)
193-
t.netIPToPeer[newLocalIPv6.String()] = prevPeer
194-
} else {
195-
prevPeer.localIPv6.Store(nil)
196-
}
197-
}
187+
if !ipChanged && !ipv6Changed {
188+
// no changes
198189
continue
199190
}
200191

201-
// add new peer
202-
vpnPeer := NewVpnPeer(peerID, newLocalIP, newLocalIPv6)
203-
t.peerIDToPeer[peerID] = vpnPeer
204-
t.netIPToPeer[newLocalIP.String()] = vpnPeer
205-
if newLocalIPv6 != nil {
206-
t.netIPToPeer[newLocalIPv6.String()] = vpnPeer
207-
t.logger.Debugf("mapping peer %s (%s) to IPv6 %s", peerID, newLocalIP, newLocalIPv6)
192+
// IP changed: update both IPv4 and IPv6 mappings
193+
if ipChanged {
194+
delete(t.netIPToPeer, oldLocalIP.String())
195+
prevPeer.localIP.Store(&newLocalIP)
196+
t.netIPToPeer[newLocalIP.String()] = prevPeer
197+
}
198+
199+
if ipv6Changed {
200+
if oldLocalIPv6 != nil {
201+
delete(t.netIPToPeer, oldLocalIPv6.String())
202+
}
203+
if newLocalIPv6 != nil {
204+
prevPeer.localIPv6.Store(&newLocalIPv6)
205+
t.netIPToPeer[newLocalIPv6.String()] = prevPeer
206+
} else {
207+
prevPeer.localIPv6.Store(nil)
208+
}
208209
}
209-
vpnPeer.Start(t)
210210
}
211211

212212
// delete unknown peers

0 commit comments

Comments
 (0)