Subject: Add RTT handling for ICMP destination unreachable packets.
Author: Baruch Even <baruch@debian.org>
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(&quoted_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)
