diff options
Diffstat (limited to 'internal/failover/ping_windows.go')
| -rw-r--r-- | internal/failover/ping_windows.go | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/internal/failover/ping_windows.go b/internal/failover/ping_windows.go index 3f181f5..eb801d8 100644 --- a/internal/failover/ping_windows.go +++ b/internal/failover/ping_windows.go @@ -8,13 +8,29 @@ import ( ) func NewPinger(gateway string, size int) (*Pinger, error) { - l, err := icmp.ListenPacket("ip4:icmp", "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("ip4:icmp", "0.0.0.0") + } else { + l, err = icmp.ListenPacket("ip6:icmp", "::") + } 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.IPAddr{IP: net.ParseIP(gateway)}, + gateway: &net.IPAddr{IP: gip}, + v4: isV4, }, nil } |
