From 0eeee5c4963571459266e0e1707c3d5a08cb01bc Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Wed, 25 Feb 2026 04:07:27 +0000 Subject: [PATCH] chore(pmtud): clarify debug logs and fix log error message --- internal/pmtud/icmp/icmp.go | 8 ++++---- internal/pmtud/pmtud.go | 12 +++++++++--- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/internal/pmtud/icmp/icmp.go b/internal/pmtud/icmp/icmp.go index 07043060..a713f77a 100644 --- a/internal/pmtud/icmp/icmp.go +++ b/internal/pmtud/icmp/icmp.go @@ -20,17 +20,17 @@ func PathMTUDiscover(ctx context.Context, ip netip.Addr, physicalLinkMTU uint32, timeout time.Duration, logger Logger, ) (mtu uint32, err error) { if ip.Is4() { - logger.Debug("finding IPv4 next hop MTU") + logger.Debugf("finding IPv4 next hop MTU to %s", ip) mtu, err = findIPv4NextHopMTU(ctx, ip, physicalLinkMTU, timeout, logger) switch { case err == nil: return mtu, nil case errors.Is(err, errTimeout) || errors.Is(err, ErrCommunicationAdministrativelyProhibited): // blackhole default: - return 0, fmt.Errorf("finding IPv4 next hop MTU: %w", err) + return 0, fmt.Errorf("finding IPv4 next hop MTU to %s: %w", ip, err) } } else { - logger.Debug("requesting IPv6 ICMP packet-too-big reply") + logger.Debugf("requesting IPv6 ICMP packet-too-big reply from %s", ip) mtu, err = getIPv6PacketTooBig(ctx, ip, physicalLinkMTU, timeout, logger) switch { case err == nil: @@ -43,7 +43,7 @@ func PathMTUDiscover(ctx context.Context, ip netip.Addr, // Fall back method: send echo requests with different packet // sizes and check which ones succeed to find the maximum MTU. - logger.Debug("falling back to sending different sized echo packets") + logger.Debugf("falling back to sending different sized echo packets to %s", ip) minMTU := constants.MinIPv4MTU if ip.Is6() { minMTU = constants.MinIPv6MTU diff --git a/internal/pmtud/pmtud.go b/internal/pmtud/pmtud.go index 836d347e..4505c0e9 100644 --- a/internal/pmtud/pmtud.go +++ b/internal/pmtud/pmtud.go @@ -13,7 +13,10 @@ import ( "github.com/qdm12/gluetun/internal/pmtud/tcp" ) -var ErrPMTUDFailICMPAndTCP = errors.New("PMTUD succeeded with ICMP but failed with TCP") +var ( + ErrICMPOkTCPFail = errors.New("PMTUD succeeded with ICMP but failed with TCP") + ErrICMPFailTCPFail = errors.New("PMTUD failed with both ICMP and TCP") +) // PathMTUDiscover discovers the maximum MTU using both ICMP and TCP. // Multiple ICMP addresses and TCP addresses can be specified for redundancy. @@ -77,8 +80,11 @@ func PathMTUDiscover(ctx context.Context, icmpAddrs []netip.Addr, tcpAddrs []net return maxPossibleMTU, nil // only rely on ICMP PMTUD results } } - return 0, fmt.Errorf("%w - ignoring ICMP obtained MTU %d", - ErrPMTUDFailICMPAndTCP, maxPossibleMTU) + if icmpSuccess { + return 0, fmt.Errorf("%w - discarding ICMP obtained MTU %d", + ErrICMPOkTCPFail, maxPossibleMTU) + } + return 0, fmt.Errorf("%w", ErrICMPFailTCPFail) } logger.Debugf("TCP path MTU discovery found maximum valid MTU %d", mtu) return mtu, nil