From e4ad3d8dd86665a3a816987c06b37c5086ae4eca Mon Sep 17 00:00:00 2001 From: David Malone Date: Tue, 13 Jun 2006 14:59:07 +0000 Subject: [PATCH] Make traceroute decode all the ICMP unreachable messages defined in http://www.iana.org/assignments/icmp-parameters. Thankfully IANA's list aggrees with . 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 --- contrib/traceroute/traceroute.8 | 14 +++++++++++++ contrib/traceroute/traceroute.c | 35 +++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/contrib/traceroute/traceroute.8 b/contrib/traceroute/traceroute.8 index 3920d2a3d882..710ecde72c48 100644 --- a/contrib/traceroute/traceroute.8 +++ b/contrib/traceroute/traceroute.8 @@ -372,6 +372,20 @@ or (source route failed), .B !F\- (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 diff --git a/contrib/traceroute/traceroute.c b/contrib/traceroute/traceroute.c index e6182f4770e8..fd4165a31e8e 100644 --- a/contrib/traceroute/traceroute.c +++ b/contrib/traceroute/traceroute.c @@ -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");