NetworkManager IPv6 connections don't update Hop Limit from Router Advertisements
Summary
Interfaces managed through NM don't update their value used for the Hop Limit field in outgoing IPv6 packets when their CurHopLimit value is updated by a Router Advertisement. This goes against Hop Limit processing behavior described in RFC 4861, section 6.3.4.
Version affected
NetworkManager version: 1.44.0-3.el9
Kernel version: 5.14.0-362.13.1
OS: Red Hat 9.3
Steps to reproduce
- Activate a new NetworkManager connection (ipv6.method set to auto)
- Interface is on-link with a router sending IPv6 Router Advertisements
- Configure the router to advertise a CurHopLimit for some arbitrary value other than 64 or 0 (I used 100)
- After the NM managed interface receives the RA with an updated CurHopLimit value, ping it from another router or host on-link
- Check the HopLimit value in the IPv6 header for the NM managed interface's outgoing echo reply.
Actual result
NM connections don't use updated HopLimit values in the IPv6 header of its outgoing packets when an RA includes a non-default (usually 64) or unspecified (0) value for CurHopLimit.
Expected result
NM managed interface should process the CurHopLimit in received RAs and update the HopLimit value in its own IPv6 headers in subsequent traffic.
Relevant logs
journalctl -u NetworkManager output collected while following above steps:
Packet capture showing HopLimit and CurHopLimit values from NM node and from the on-link router: