Subject: Add RTT handling for ICMP destination unreachable packets. Author: Baruch Even Bug-Debian: http://bugs.debian.org/248273 Last-Update: 2009-09-04 --- a/waitpacket.c +++ b/waitpacket.c @@ -229,6 +229,7 @@ int recv_icmp(void *packet, size_t size) { struct myicmphdr icmp; struct myiphdr quoted_ip; + struct myudphdr quoted_udp; /* Check if the packet can contain the ICMP header */ if (size < ICMPHDR_SIZE) { @@ -286,6 +287,18 @@ int recv_icmp(void *packet, size_t size) case 3: if (!opt_quiet) log_icmp_unreach(inet_ntoa(src), icmp.code); + if (quoted_ip.protocol == IPPROTO_UDP) + { + int sequence = 0, status; + float ms_delay = 0.0; + unsigned short port; + + /* Get RTT for UDP packet */ + memcpy("ed_udp, packet+ICMPHDR_SIZE+(quoted_ip.ihl<<2), sizeof(quoted_udp)); + port = ntohs(quoted_udp.uh_sport); + status = rtt(&sequence, port, &ms_delay); + printf("status=%d port=%d seq=%d\n", status, port, sequence); + } return 1; case 11: if (opt_traceroute)