summaryrefslogtreecommitdiffstats
path: root/network/hping3/patches/rtt_icmp_unreachable.diff
diff options
context:
space:
mode:
Diffstat (limited to 'network/hping3/patches/rtt_icmp_unreachable.diff')
-rw-r--r--network/hping3/patches/rtt_icmp_unreachable.diff32
1 files changed, 32 insertions, 0 deletions
diff --git a/network/hping3/patches/rtt_icmp_unreachable.diff b/network/hping3/patches/rtt_icmp_unreachable.diff
new file mode 100644
index 0000000000..81fa6c194e
--- /dev/null
+++ b/network/hping3/patches/rtt_icmp_unreachable.diff
@@ -0,0 +1,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)