From 579482c84c32f721e7814ab81730b2ec383e4484 Mon Sep 17 00:00:00 2001 From: Nikolay Sivko Date: Thu, 13 Jun 2024 14:10:45 +0300 Subject: [PATCH 1/2] pinger: don't ping loopback and IPv6 IPs --- containers/container.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/containers/container.go b/containers/container.go index df5a063..066bcb9 100644 --- a/containers/container.go +++ b/containers/container.go @@ -847,6 +847,12 @@ func (c *Container) ping() map[netaddr.IP]float64 { } targets := make([]netaddr.IP, 0, len(ips)) for ip := range ips { + if ip.IsLoopback() { + continue + } + if !ip.Is4() { // pinger doesn't support IPv6 yet + continue + } targets = append(targets, ip) } rtt, err := pinger.Ping(netNs, selfNetNs, targets, pingTimeout) From f98e1c18c5f160c36019b1254b3b133fcebe7212 Mon Sep 17 00:00:00 2001 From: Nikolay Sivko Date: Thu, 13 Jun 2024 14:36:55 +0300 Subject: [PATCH 2/2] pinger: read RX timestamp only upon receiving a valid ICMP Echo reply --- pinger/pinger.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/pinger/pinger.go b/pinger/pinger.go index debfe22..16c9520 100644 --- a/pinger/pinger.go +++ b/pinger/pinger.go @@ -176,15 +176,16 @@ func receive(conn *net.IPConn) (*net.IPAddr, *icmp.Echo, time.Time, error) { } return nil, nil, ts, err } - - if ts, err = getTimestampFromOutOfBandData(oob, oobn); err != nil { - return nil, nil, ts, fmt.Errorf("failed to get RX timestamp: %s", err) - } - echo, err := extractEchoFromPacket(pktBuf, n) if err != nil { return nil, nil, ts, fmt.Errorf("failed to extract ICMP Echo from IPv4 packet %s: %s", ra, err) } + if echo == nil { + return nil, nil, ts, nil + } + if ts, err = getTimestampFromOutOfBandData(oob, oobn); err != nil { + return nil, nil, ts, fmt.Errorf("failed to get RX timestamp: %s", err) + } return ra, echo, ts, nil }