summaryrefslogtreecommitdiff
path: root/network/hping3/patches/rtt_icmp_unreachable.diff
blob: 81fa6c194ecbcf070de245ea22cbfa630c499689 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

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)