Bug 248002

Summary: ping(8): TTL DETAILS update
Product: Documentation Reporter: Jose Luis Duran <jlduran>
Component: Manual PagesAssignee: freebsd-bugs (Nobody) <bugs>
Status: Closed FIXED    
Severity: Affects Only Me CC: doc, jamie, net
Priority: ---    
Version: Latest   
Hardware: Any   
OS: Any   

Description Jose Luis Duran 2020-07-15 14:27:25 UTC
Reading ping(8), section "TTL DETAILS", I have seen a number of
inconsistencies regarding this value in FreeBSD.  This section of the man page
has not been updated to reflect the current state. For instance:

> Not change it; this is what BSD systems did before the 4.3BSD-Tahoe release.
> In this case the TTL value in the received packet will be 255 minus the
> number of routers in the round-trip path.

This paragraph implies that FreeBSD is still using 255 as its default TTL,
it should be updated to reflect the current value (64) [1], perhaps:

Not change it; this is what BSD systems did before the 4.3BSD-Tahoe release.
In this case the TTL value in the received packet will be 64 minus the number
of routers in the round-trip path.

Other paragraphs could also be updated, for example:

> The TCP/IP specification recommends setting the TTL field for IP packets to
> 64, but many systems use smaller values (4.3BSD uses 30, 4.2BSD used 15).

The TCP/IP specification recommends setting the TTL field for IP packets to
64, FreeBSD uses this value...

The DESCRIPTION mentions that the sysctl net.inet.ip.ttl is used, but
it does not say that this value is 64 by default.

Maybe also include some current OSs? I have compiled a quick list that can be
easily verified pinging the hosts inside the brackets, this should give you
the TTL (plus the number of hops):

Windows: 128 [live.com]
BSDs (NetBSD and OpenBSD): 255 [netbsd.org, openbsd.org]
Linux: 64 [linux.org]

FreeBSD, macOS: 64

> Set it to 255; this is what current BSD systems do.  In this case the TTL
> value in the received packet will be 255 minus the number of routers in the
> path from the remote system to the pinging host.

Set it to 255; this is what some BSD systems do...

Some current BSD systems do use 255 (at least NetBSD and OpenBSD); however,
FreeBSD uses the IANA-recommended value of 64 [2].

References:

[1]  https://github.com/freebsd/freebsd/blob/3f4da6d3e7a2a8cc34a94938bd1c4f80c8d1d449/sys/netinet/ip.h#L212
[2]  https://www.iana.org/assignments/ip-parameters/ip-parameters.xhtml#ip-parameters-2
Comment 1 Jose Luis Duran 2020-07-15 15:10:45 UTC
Thanks to THUS (https://www.tuhs.org), I was able to track when the change was made (4.4 BSD):

4.3 BSD TTL: 255 [3]
4.3 BSD-Tahoe TTL: 255 [4]
4.4 BSD TTL: 64 [5]

References:

[3]  https://minnie.tuhs.org/cgi-bin/utree.pl?file=4.3BSD/usr/src/sys/netinet/ip.h
[4]  https://minnie.tuhs.org/cgi-bin/utree.pl?file=4.3BSD-Tahoe/usr/src/sys/netinet/ip.h
[5]  https://minnie.tuhs.org/cgi-bin/utree.pl?file=4.4BSD/usr/src/sys/netinet/ip.h
Comment 2 Jose Luis Duran 2020-07-15 23:21:08 UTC
(In reply to Jose Luis Duran from comment #1)

Scratch that. Reading imp@'s sources for 2.11BSD:

https://github.com/bsdimp/2.11bsd/blob/master/sys/netinet/ip.h#L150
Comment 3 Jose Luis Duran 2020-07-16 00:02:26 UTC
In FreeBSD, the change from MAXTTL to ip.ttl was done in:

https://github.com/freebsd/freebsd/commit/5639e86bdd7ea151958776264bf5a67e60a54d68
Comment 4 Jose Luis Duran 2023-01-21 14:16:27 UTC
Closed by 8eb4df948711166a438f4111f7069a412d1456bd.
Thank you!