summaryrefslogtreecommitdiffstats
path: root/network/hping3/patches/rtt_icmp_unreachable.diff
blob: 81fa6c194ecbcf070de245ea22cbfa630c499689 (plain)

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(&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)