aboutsummaryrefslogtreecommitdiffstats
path: root/mtu.c
diff options
context:
space:
mode:
authorTimo Teras <timo.teras@iki.fi>2008-12-24 16:23:09 +0200
committerTimo Teras <timo.teras@iki.fi>2008-12-24 16:23:09 +0200
commit14201eaf926cea53725ee61378d586dc9c9c6810 (patch)
treef3bd9404f8e020ec9bd13c0491ac7aee3d9023ea /mtu.c
parent47c08fbfadf4812626690f00cac4a08d89660fb5 (diff)
downloadpingu-14201eaf926cea53725ee61378d586dc9c9c6810.tar.bz2
pingu-14201eaf926cea53725ee61378d586dc9c9c6810.tar.xz
mtu: minor fixups; try harder to traverse nat boxes in mtu inject
Diffstat (limited to 'mtu.c')
-rw-r--r--mtu.c10
1 files changed, 7 insertions, 3 deletions
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);
}
}