From 7d5e58a383c1228e7e3534e2d31dd1d6c8a45ee6 Mon Sep 17 00:00:00 2001 From: Jeroen Wijenbergh Date: Mon, 23 Feb 2026 12:08:51 +0100 Subject: Failover: Support v6 gateway Useful for v6 only VPNs --- internal/failover/ping_default.go | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'internal/failover/ping_default.go') diff --git a/internal/failover/ping_default.go b/internal/failover/ping_default.go index 11401bb..181f3fc 100644 --- a/internal/failover/ping_default.go +++ b/internal/failover/ping_default.go @@ -11,13 +11,29 @@ import ( // NewPinger creates a new pinger with gateway `gateway` and size `size` func NewPinger(gateway string, size int) (*Pinger, error) { - l, err := icmp.ListenPacket("udp4", "0.0.0.0") + gip := net.ParseIP(gateway) + isV4 := gip.To4() != nil + mtuOverhead := mtuV6Overhead + if isV4 { + mtuOverhead = mtuV4Overhead + } + if size < mtuOverhead { + return nil, fmt.Errorf("invalid MTU size given, MTU has to be at least: %v bytes", mtuOverhead) + } + var l *icmp.PacketConn + var err error + if isV4 { + l, err = icmp.ListenPacket("udp4", "0.0.0.0") + } else { + l, err = icmp.ListenPacket("udp6", "::") + } if err != nil { return nil, fmt.Errorf("failed creating ping with error: %w", err) } return &Pinger{ listener: l, buffer: make([]byte, size-mtuOverhead), - gateway: &net.UDPAddr{IP: net.ParseIP(gateway)}, + gateway: &net.UDPAddr{IP: gip}, + v4: isV4, }, nil } -- cgit v1.2.3