From 14201eaf926cea53725ee61378d586dc9c9c6810 Mon Sep 17 00:00:00 2001 From: Timo Teras Date: Wed, 24 Dec 2008 16:23:09 +0200 Subject: mtu: minor fixups; try harder to traverse nat boxes in mtu inject --- icmp.c | 6 +++--- mtu.c | 10 +++++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/icmp.c b/icmp.c index bb5db3f..8c27a8e 100644 --- a/icmp.c +++ b/icmp.c @@ -260,8 +260,7 @@ int icmp_send_frag_needed(int fd, struct sockaddr *to, int tolen, icp->un.frag.mtu = htons(newmtu); /* copy ip header + 64-bits of original packet */ - memcpy(&packet[sizeof(struct icmphdr)], iph, - sizeof(struct iphdr) + 8); + memcpy(icp + 1, iph, sizeof(struct iphdr) + 8); icp->checksum = in_cksum((u_short *) icp, len, 0); @@ -275,7 +274,7 @@ int icmp_send_ping(int fd, struct sockaddr *to, int tolen, int seq, int total_size) { struct sockaddr_in *to_in = (struct sockaddr_in *) to; - char packet[1500]; + __u8 packet[1500]; struct icmphdr *icp; int len; @@ -285,6 +284,7 @@ int icmp_send_ping(int fd, struct sockaddr *to, int tolen, total_size = sizeof(struct iphdr) + sizeof(struct icmphdr); len = total_size - sizeof(struct iphdr); + memset(packet, 0, sizeof(packet)); icp = (struct icmphdr *) packet; icp->type = ICMP_ECHO; diff --git a/mtu.c b/mtu.c index 1a3c42c..01af3ed 100644 --- a/mtu.c +++ b/mtu.c @@ -93,9 +93,9 @@ static void do_inject(void) struct sockaddr_in from; int len, seq = 0; + icmp_send_ping(fd, (struct sockaddr *) &to, sizeof(to), + ++seq, mtu_size); for (;;) { - icmp_send_ping(fd, (struct sockaddr *) &to, sizeof(to), - ++seq, mtu_size); if ((len = icmp_read_reply(fd, (struct sockaddr *) &from, sizeof(from), buf, sizeof(buf))) <= 0) @@ -106,9 +106,13 @@ static void do_inject(void) (struct sockaddr *) &to)) continue; + if (seq != 1) + sleep(1); + + icmp_send_ping(fd, (struct sockaddr *) &to, sizeof(to), + ++seq, mtu_size); icmp_send_frag_needed(fd, (struct sockaddr *) &to, sizeof(to), (struct iphdr *) buf, mtu_size - 2); - sleep(1); } } -- cgit v1.2.3