Adds RTT handling for ICMP destination unreachable packets --- a/waitpacket.c +++ b/waitpacket.c @@ -229,6 +229,7 @@ { 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 @@ 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)