@@ -795,51 +795,6 @@ func TestUpdatePeerSettingsIPAddr(t *testing.T) {
795795 ts .NoError (err )
796796 })
797797
798- t .Run ("IPv6TunnelPackets" , func (t * testing.T ) {
799- const packetSize = 1500
800- const packetsCount = 10
801-
802- peer2Config , err := peer1 .api .KnownPeerConfig (peer2 .PeerID ())
803- ts .NoError (err )
804-
805- peer2IPv4 := net .ParseIP (peer2Config .IPAddr ).To4 ()
806- ts .NotNil (peer2IPv4 )
807-
808- awlSubnet4 , err := netip .ParsePrefix (peer1 .app .Conf .VPNConfig .IPNet )
809- ts .NoError (err )
810- awlSubnet6 , err := netip .ParsePrefix (peer1 .app .Conf .VPNConfig .IPNetV6 )
811- ts .NoError (err )
812-
813- // Map IPv4 to IPv6 using the same logic as peerIPv6FromIPv4
814- peer2IPv6 := make (net.IP , net .IPv6len )
815- copy (peer2IPv6 , awlSubnet6 .Addr ().AsSlice ())
816- v4Mask := net .CIDRMask (awlSubnet4 .Bits (), 32 )
817- for i := 0 ; i < net .IPv4len ; i ++ {
818- peer2IPv6 [12 + i ] |= peer2IPv4 [i ] &^ v4Mask [i ]
819- }
820-
821- // Configure tunnel for packet testing
822- peer1 .tun .SetInboundCapture (packetSize , nil )
823- peer2 .tun .SetInboundCapture (packetSize , nil )
824- peer1 .tun .ClearInboundCount ()
825- peer2 .tun .ClearInboundCount ()
826-
827- // Wait for IP map to be ready
828- time .Sleep (100 * time .Millisecond )
829-
830- // Send IPv6 packets from peer1 to peer2
831- packet := testPacketWithDestV6 (packetSize , peer2IPv6 .String ())
832- for i := 0 ; i < packetsCount ; i ++ {
833- peer1 .tun .Outbound <- [][]byte {packet }
834- }
835-
836- // Wait for packet processing
837- time .Sleep (500 * time .Millisecond )
838-
839- // Verify packet reception
840- received := peer2 .tun .InboundCount ()
841- ts .EqualValues (packetsCount , received )
842- })
843798}
844799
845800func TestDisableVPNInterface (t * testing.T ) {
@@ -980,6 +935,50 @@ func TestTunnelPackets(t *testing.T) {
980935 received2 := peer2 .tun .InboundCount ()
981936 ts .EqualValues (packetsCount , received1 )
982937 ts .EqualValues (packetsCount , received2 )
938+
939+ // --- IPv6 Routing Test ---
940+ peer2ConfigInPeer1 , _ := peer1 .app .Conf .GetPeer (peer2 .PeerID ())
941+ peer2IPv4 := net .ParseIP (peer2ConfigInPeer1 .IPAddr ).To4 ()
942+
943+ peer1ConfigInPeer2 , _ := peer2 .app .Conf .GetPeer (peer1 .PeerID ())
944+ peer1IPv4 := net .ParseIP (peer1ConfigInPeer2 .IPAddr ).To4 ()
945+
946+ awlSubnet4 , _ := netip .ParsePrefix (peer1 .app .Conf .VPNConfig .IPNet )
947+ awlSubnet6 , _ := netip .ParsePrefix (peer1 .app .Conf .VPNConfig .IPNetV6 )
948+ v4Mask := net .CIDRMask (awlSubnet4 .Bits (), 32 )
949+ awlNet6 := & net.IPNet {IP : awlSubnet6 .Addr ().AsSlice (), Mask : net .CIDRMask (awlSubnet6 .Bits (), 128 )}
950+ baseV6 := awlNet6 .IP .Mask (awlNet6 .Mask ).To16 ()
951+
952+ peer1IPv6 := make (net.IP , net .IPv6len )
953+ copy (peer1IPv6 , baseV6 )
954+ for i := 0 ; i < net .IPv4len ; i ++ {
955+ peer1IPv6 [12 + i ] |= peer1IPv4 [i ] &^ v4Mask [i ]
956+ }
957+
958+ peer2IPv6 := make (net.IP , net .IPv6len )
959+ copy (peer2IPv6 , baseV6 )
960+ for i := 0 ; i < net .IPv4len ; i ++ {
961+ peer2IPv6 [12 + i ] |= peer2IPv4 [i ] &^ v4Mask [i ]
962+ }
963+
964+ ts .t .Logf ("DEBUG: peer1 IPNetV6: %v" , peer1 .app .Conf .VPNConfig .IPNetV6 )
965+ ts .t .Logf ("DEBUG: peer1IPv6 calculated: %s, peer2IPv6 calculated: %s" , peer1IPv6 .String (), peer2IPv6 .String ())
966+
967+ peer1 .tun .ClearInboundCount ()
968+ peer2 .tun .ClearInboundCount ()
969+
970+ // Send IPv6 packets from peer1 to peer2
971+ const ipv6PacketsCount = 10
972+ ipv6Packet := testPacketWithSrcDestV6 (packetSize , peer1IPv6 .String (), peer2IPv6 .String ())
973+
974+ for i := 0 ; i < ipv6PacketsCount ; i ++ {
975+ peer1 .tun .Outbound <- [][]byte {ipv6Packet }
976+ time .Sleep (10 * time .Millisecond )
977+ }
978+
979+ time .Sleep (1 * time .Second )
980+ receivedIPv6 := peer2 .tun .InboundCount ()
981+ ts .EqualValues (ipv6PacketsCount , receivedIPv6 , "peer2 should receive exactly %d IPv6 packets" , ipv6PacketsCount )
983982}
984983
985984func BenchmarkTunnelPackets (b * testing.B ) {
0 commit comments