Re: traceroute TOS
On 2011/04/06 13:35, Claudio Jeker wrote: > On Tue, Apr 05, 2011 at 04:57:30PM +0100, Stuart Henderson wrote: > > On 2011/04/05 16:51, Stuart Henderson wrote: > > > if -t is used, display a notice when the TOS changes en-route. > > > ok? > > > > oh, it's better with a (contrived) example: > > > > $ traceroute -nt 7 naiad > > traceroute to naiad.spacehopper.org (195.95.187.35), 64 hops max, 40 byte > > packets > > 1 85.158.44.145 0.441 ms (TOS=33!) 0.328 ms 0.396 ms > > 2 193.178.223.245 14.637 ms 15.213 ms 15.466 ms > > 3 194.39.143.145 16.600 ms 15.468 ms 16.206 ms > > 4 194.39.143.205 16.483 ms 16.210 ms 15.843 ms > > 5 193.203.5.182 17.475 ms 16.708 ms 16.986 ms > > 6 195.95.187.248 17.211 ms (TOS=4!) 16.460 ms 16.468 ms > > 7 195.95.187.35 27.99 ms 16.207 ms 17.467 ms > > > > Diff looks good. What I don't like to specify and display the TOS as > decimal since I have no idea what decimal numbers are which TOS/DiffServ > Code points. No that is porbably a different diff, so OK claudio@ for this > one. I agree, I think we would also want to be able to use these in -t (-t lowdelay, -t af11, etc.)
Re: traceroute TOS
On Tue, Apr 05, 2011 at 04:57:30PM +0100, Stuart Henderson wrote: > On 2011/04/05 16:51, Stuart Henderson wrote: > > if -t is used, display a notice when the TOS changes en-route. > > ok? > > oh, it's better with a (contrived) example: > > $ traceroute -nt 7 naiad > traceroute to naiad.spacehopper.org (195.95.187.35), 64 hops max, 40 byte > packets > 1 85.158.44.145 0.441 ms (TOS=33!) 0.328 ms 0.396 ms > 2 193.178.223.245 14.637 ms 15.213 ms 15.466 ms > 3 194.39.143.145 16.600 ms 15.468 ms 16.206 ms > 4 194.39.143.205 16.483 ms 16.210 ms 15.843 ms > 5 193.203.5.182 17.475 ms 16.708 ms 16.986 ms > 6 195.95.187.248 17.211 ms (TOS=4!) 16.460 ms 16.468 ms > 7 195.95.187.35 27.99 ms 16.207 ms 17.467 ms > Diff looks good. What I don't like to specify and display the TOS as decimal since I have no idea what decimal numbers are which TOS/DiffServ Code points. No that is porbably a different diff, so OK claudio@ for this one. > > > > Index: traceroute.8 > > === > > RCS file: /cvs/src/usr.sbin/traceroute/traceroute.8,v > > retrieving revision 1.44 > > diff -u -p -r1.44 traceroute.8 > > --- traceroute.88 Jul 2010 20:23:03 - 1.44 > > +++ traceroute.85 Apr 2011 15:50:38 - > > @@ -177,6 +177,8 @@ in probe packets to the following value > > The value must be a decimal integer in the range 0 to 255. > > This option can be used to > > see if different types-of-service result in different paths. > > +If this option is used, changes to the type-of-service in the > > +returned packets are displayed. > > (If you are not running a > > .Bx 4.3 tahoe > > or later system, this may be academic since the normal network > > @@ -384,6 +386,8 @@ ever occur and the associated gateway is > > (destination network or host unreachable for TOS), > > .Sy ! > > (other ICMP unreachable code). > > +.Sy TOS=xxx > > +(TOS bit in returned packet differs from last hop). > > If almost all the probes result in some kind of unreachable, > > .Nm > > will give up and exit. > > Index: traceroute.c > > === > > RCS file: /cvs/src/usr.sbin/traceroute/traceroute.c,v > > retrieving revision 1.74 > > diff -u -p -r1.74 traceroute.c > > --- traceroute.c22 Mar 2011 10:16:23 - 1.74 > > +++ traceroute.c5 Apr 2011 15:50:38 - > > @@ -293,11 +293,13 @@ main(int argc, char *argv[]) > > int mib[4] = { CTL_NET, PF_INET, IPPROTO_IP, IPCTL_DEFTTL }; > > int ttl_flag = 0, incflag = 1, protoset = 0, sump = 0; > > int ch, i, lsrr = 0, on = 1, probe, seq = 0, tos = 0; > > + int last_tos, tos_returned; > > size_t size = sizeof(max_ttl); > > struct sockaddr_in from, to; > > struct hostent *hp; > > u_int32_t tmprnd; > > - struct ip *ip; > > + struct ip *ip, *inner_ip; > > + struct icmp *icp; > > u_int8_t ttl; > > char *ep; > > const char *errstr; > > @@ -427,7 +429,7 @@ main(int argc, char *argv[]) > > l = strtol(optarg, &ep, 10); > > if (errno || !*optarg || *ep || l < 0 || l > 255) > > errx(1, "tos must be 0 to 255."); > > - tos = (int)l; > > + last_tos = tos = (int)l; > > break; > > case 'v': > > verbose++; > > @@ -636,9 +638,21 @@ main(int argc, char *argv[]) > > ++got_there; > > break; > > } > > + > > + icp = (struct icmp *) (((u_char > > *)ip)+(ip->ip_hl<<2)); > > + inner_ip = (struct ip *) (((u_char *)icp)+8); > > + > > + tos_returned = inner_ip->ip_tos; > > + > > + if (tos_returned != last_tos) > > + printf (" (TOS=%d!)", tos_returned); > > + > > + last_tos = tos_returned; > > + > > /* time exceeded in transit */ > > if (i == -1) > > break; > > + > > code = i - 1; > > switch (code) { > > case ICMP_UNREACH_PORT: > -- :wq Claudio
Re: traceroute TOS
Thanks, useful(at least for me). On Apr 5, 2011, at 5:57 PM, Stuart Henderson wrote: > On 2011/04/05 16:51, Stuart Henderson wrote: >> if -t is used, display a notice when the TOS changes en-route. >> ok? > > oh, it's better with a (contrived) example: > > $ traceroute -nt 7 naiad > traceroute to naiad.spacehopper.org (195.95.187.35), 64 hops max, 40 byte packets > 1 85.158.44.145 0.441 ms (TOS=33!) 0.328 ms 0.396 ms > 2 193.178.223.245 14.637 ms 15.213 ms 15.466 ms > 3 194.39.143.145 16.600 ms 15.468 ms 16.206 ms > 4 194.39.143.205 16.483 ms 16.210 ms 15.843 ms > 5 193.203.5.182 17.475 ms 16.708 ms 16.986 ms > 6 195.95.187.248 17.211 ms (TOS=4!) 16.460 ms 16.468 ms > 7 195.95.187.35 27.99 ms 16.207 ms 17.467 ms > > > >> Index: traceroute.8 >> === >> RCS file: /cvs/src/usr.sbin/traceroute/traceroute.8,v >> retrieving revision 1.44 >> diff -u -p -r1.44 traceroute.8 >> --- traceroute.8 8 Jul 2010 20:23:03 - 1.44 >> +++ traceroute.8 5 Apr 2011 15:50:38 - >> @@ -177,6 +177,8 @@ in probe packets to the following value >> The value must be a decimal integer in the range 0 to 255. >> This option can be used to >> see if different types-of-service result in different paths. >> +If this option is used, changes to the type-of-service in the >> +returned packets are displayed. >> (If you are not running a >> .Bx 4.3 tahoe >> or later system, this may be academic since the normal network >> @@ -384,6 +386,8 @@ ever occur and the associated gateway is >> (destination network or host unreachable for TOS), >> .Sy ! >> (other ICMP unreachable code). >> +.Sy TOS=xxx >> +(TOS bit in returned packet differs from last hop). >> If almost all the probes result in some kind of unreachable, >> .Nm >> will give up and exit. >> Index: traceroute.c >> === >> RCS file: /cvs/src/usr.sbin/traceroute/traceroute.c,v >> retrieving revision 1.74 >> diff -u -p -r1.74 traceroute.c >> --- traceroute.c 22 Mar 2011 10:16:23 - 1.74 >> +++ traceroute.c 5 Apr 2011 15:50:38 - >> @@ -293,11 +293,13 @@ main(int argc, char *argv[]) >> int mib[4] = { CTL_NET, PF_INET, IPPROTO_IP, IPCTL_DEFTTL }; >> int ttl_flag = 0, incflag = 1, protoset = 0, sump = 0; >> int ch, i, lsrr = 0, on = 1, probe, seq = 0, tos = 0; >> +int last_tos, tos_returned; >> size_t size = sizeof(max_ttl); >> struct sockaddr_in from, to; >> struct hostent *hp; >> u_int32_t tmprnd; >> -struct ip *ip; >> +struct ip *ip, *inner_ip; >> +struct icmp *icp; >> u_int8_t ttl; >> char *ep; >> const char *errstr; >> @@ -427,7 +429,7 @@ main(int argc, char *argv[]) >> l = strtol(optarg, &ep, 10); >> if (errno || !*optarg || *ep || l < 0 || l > 255) >> errx(1, "tos must be 0 to 255."); >> -tos = (int)l; >> +last_tos = tos = (int)l; >> break; >> case 'v': >> verbose++; >> @@ -636,9 +638,21 @@ main(int argc, char *argv[]) >> ++got_there; >> break; >> } >> + >> +icp = (struct icmp *) (((u_char >> *)ip)+(ip->ip_hl<<2)); >> +inner_ip = (struct ip *) (((u_char *)icp)+8); >> + >> +tos_returned = inner_ip->ip_tos; >> + >> +if (tos_returned != last_tos) >> +printf (" (TOS=%d!)", tos_returned); >> + >> +last_tos = tos_returned; >> + >> /* time exceeded in transit */ >> if (i == -1) >> break; >> + >> code = i - 1; >> switch (code) { >> case ICMP_UNREACH_PORT:
Re: traceroute TOS
On 2011/04/05 16:51, Stuart Henderson wrote: > if -t is used, display a notice when the TOS changes en-route. > ok? oh, it's better with a (contrived) example: $ traceroute -nt 7 naiad traceroute to naiad.spacehopper.org (195.95.187.35), 64 hops max, 40 byte packets 1 85.158.44.145 0.441 ms (TOS=33!) 0.328 ms 0.396 ms 2 193.178.223.245 14.637 ms 15.213 ms 15.466 ms 3 194.39.143.145 16.600 ms 15.468 ms 16.206 ms 4 194.39.143.205 16.483 ms 16.210 ms 15.843 ms 5 193.203.5.182 17.475 ms 16.708 ms 16.986 ms 6 195.95.187.248 17.211 ms (TOS=4!) 16.460 ms 16.468 ms 7 195.95.187.35 27.99 ms 16.207 ms 17.467 ms > Index: traceroute.8 > === > RCS file: /cvs/src/usr.sbin/traceroute/traceroute.8,v > retrieving revision 1.44 > diff -u -p -r1.44 traceroute.8 > --- traceroute.8 8 Jul 2010 20:23:03 - 1.44 > +++ traceroute.8 5 Apr 2011 15:50:38 - > @@ -177,6 +177,8 @@ in probe packets to the following value > The value must be a decimal integer in the range 0 to 255. > This option can be used to > see if different types-of-service result in different paths. > +If this option is used, changes to the type-of-service in the > +returned packets are displayed. > (If you are not running a > .Bx 4.3 tahoe > or later system, this may be academic since the normal network > @@ -384,6 +386,8 @@ ever occur and the associated gateway is > (destination network or host unreachable for TOS), > .Sy ! > (other ICMP unreachable code). > +.Sy TOS=xxx > +(TOS bit in returned packet differs from last hop). > If almost all the probes result in some kind of unreachable, > .Nm > will give up and exit. > Index: traceroute.c > === > RCS file: /cvs/src/usr.sbin/traceroute/traceroute.c,v > retrieving revision 1.74 > diff -u -p -r1.74 traceroute.c > --- traceroute.c 22 Mar 2011 10:16:23 - 1.74 > +++ traceroute.c 5 Apr 2011 15:50:38 - > @@ -293,11 +293,13 @@ main(int argc, char *argv[]) > int mib[4] = { CTL_NET, PF_INET, IPPROTO_IP, IPCTL_DEFTTL }; > int ttl_flag = 0, incflag = 1, protoset = 0, sump = 0; > int ch, i, lsrr = 0, on = 1, probe, seq = 0, tos = 0; > + int last_tos, tos_returned; > size_t size = sizeof(max_ttl); > struct sockaddr_in from, to; > struct hostent *hp; > u_int32_t tmprnd; > - struct ip *ip; > + struct ip *ip, *inner_ip; > + struct icmp *icp; > u_int8_t ttl; > char *ep; > const char *errstr; > @@ -427,7 +429,7 @@ main(int argc, char *argv[]) > l = strtol(optarg, &ep, 10); > if (errno || !*optarg || *ep || l < 0 || l > 255) > errx(1, "tos must be 0 to 255."); > - tos = (int)l; > + last_tos = tos = (int)l; > break; > case 'v': > verbose++; > @@ -636,9 +638,21 @@ main(int argc, char *argv[]) > ++got_there; > break; > } > + > + icp = (struct icmp *) (((u_char > *)ip)+(ip->ip_hl<<2)); > + inner_ip = (struct ip *) (((u_char *)icp)+8); > + > + tos_returned = inner_ip->ip_tos; > + > + if (tos_returned != last_tos) > + printf (" (TOS=%d!)", tos_returned); > + > + last_tos = tos_returned; > + > /* time exceeded in transit */ > if (i == -1) > break; > + > code = i - 1; > switch (code) { > case ICMP_UNREACH_PORT: