diff options
| author | Jeroen Wijenbergh <jeroen.wijenbergh@geant.org> | 2026-02-23 12:08:51 +0100 |
|---|---|---|
| committer | Jeroen Wijenbergh <jeroen.wijenbergh@geant.org> | 2026-02-26 13:17:46 +0100 |
| commit | 7d5e58a383c1228e7e3534e2d31dd1d6c8a45ee6 (patch) | |
| tree | c6e564826a574e8d7f8fa0572a2c210dfbe42cae /internal/failover/ping_default.go | |
| parent | 418dd15f533cd2708ea87019f7fefb1ab27885a5 (diff) | |
Failover: Support v6 gateway
Useful for v6 only VPNs
Diffstat (limited to 'internal/failover/ping_default.go')
| -rw-r--r-- | internal/failover/ping_default.go | 20 |
1 files changed, 18 insertions, 2 deletions
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 } |
