Make traceroute decode all the ICMP unreachable messages defined

in http://www.iana.org/assignments/icmp-parameters. Thankfully
IANA's list aggrees with <netinet/ip_icmp.h>.

I've tried to do this in a way which is mostly consistent with
tcptraceroute and Debian's version of traceroute. However, sometimes
a letter is used twice by these versions, so I've gone with:

                                LBL     tcptr   Debian          (chosen)
ICMP_UNREACH_NET                !N      !N      !N              !N
ICMP_UNREACH_HOST               !H      !H      !H              !H
ICMP_UNREACH_PROTOCOL           !P      !P      !P              !P
ICMP_UNREACH_PORT               !       !p      !               !
ICMP_UNREACH_NEEDFRAG           !F-%d   !F      !F-<%d>         !F-<%d>
ICMP_UNREACH_SRCFAIL            !S      !S      !S              !S
ICMP_UNREACH_NET_UNKNOWN        !<%d>   !U      !<%d>           !U
ICMP_UNREACH_HOST_UNKNOWN       !<%d>   !U      !<%d>           !W
ICMP_UNREACH_ISOLATED           !<%d>   !I      !I              !I
ICMP_UNREACH_NET_PROHIB         !<%d>   !A      !A              !A
ICMP_UNREACH_HOST_PROHIB        !<%d>   !C      !C              !Z
ICMP_UNREACH_TOSNET             !<%d>   !T      !T              !Q
ICMP_UNREACH_TOSHOST            !<%d>   !T      !T              !T
ICMP_UNREACH_FILTER_PROHIB      !X      !A      !A              !X
ICMP_UNREACH_HOST_PRECEDENCE    !V      !<%d>   !V              !V
ICMP_UNREACH_PRECEDENCE_CUTOFF  !C      !<%d>   !C              !C

Graham Wilson is planning to use the same codes in Debian's version.

MFC after:	3 weeks
This commit is contained in:
David Malone 2006-06-13 14:59:07 +00:00
parent 70df31f4de
commit e4ad3d8dd8
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=159576
2 changed files with 49 additions and 0 deletions

View File

@ -372,6 +372,20 @@ or
(source route failed),
.B !F\-<pmtu>
(fragmentation needed \- the RFC1191 Path MTU Discovery value is displayed),
.B !U
or
.B !W
(destination network/host unknown),
.B !I
(source host is isolated),
.B !A
(communication with destination network administratively prohibited),
.B !Z
(communication with destination host administratively prohibited),
.B !Q
(for this ToS the destination network is unreachable),
.B !T
(for this ToS the destination host is unreachable),
.B !X
(communication administratively prohibited),
.B !V

View File

@ -1017,6 +1017,41 @@ main(int argc, char **argv)
Printf(" !S");
break;
case ICMP_UNREACH_NET_UNKNOWN:
++unreachable;
Printf(" !U");
break;
case ICMP_UNREACH_HOST_UNKNOWN:
++unreachable;
Printf(" !W");
break;
case ICMP_UNREACH_ISOLATED:
++unreachable;
Printf(" !I");
break;
case ICMP_UNREACH_NET_PROHIB:
++unreachable;
Printf(" !A");
break;
case ICMP_UNREACH_HOST_PROHIB:
++unreachable;
Printf(" !Z");
break;
case ICMP_UNREACH_TOSNET:
++unreachable;
Printf(" !Q");
break;
case ICMP_UNREACH_TOSHOST:
++unreachable;
Printf(" !T");
break;
case ICMP_UNREACH_FILTER_PROHIB:
++unreachable;
Printf(" !X");