much more concise fix for bug #45. just align the packet...

This commit is contained in:
Paul Fox 2005-07-20 11:55:08 +00:00
parent 3c12ff7c89
commit 28069404a4

View File

@ -77,7 +77,6 @@
#define MAXPACKET 65535 /* max ip packet size */ #define MAXPACKET 65535 /* max ip packet size */
#define MAXPACKET_ICMP 512
#ifndef MAXHOSTNAMELEN #ifndef MAXHOSTNAMELEN
#define MAXHOSTNAMELEN 64 #define MAXHOSTNAMELEN 64
#endif #endif
@ -102,6 +101,8 @@ struct opacket {
#include "busybox.h" #include "busybox.h"
/* last inbound (icmp) packet */
static u_char packet[512] __attribute__ ((aligned));
static struct opacket *outpacket; /* last output (udp) packet */ static struct opacket *outpacket; /* last output (udp) packet */
static int s; /* receive (icmp) socket file descriptor */ static int s; /* receive (icmp) socket file descriptor */
@ -185,7 +186,7 @@ deltaT(struct timeval *t1p, struct timeval *t2p)
} }
static inline int static inline int
wait_for_reply(int sock, struct sockaddr_in *from, int reset_timer, u_char *packet, int size) wait_for_reply(int sock, struct sockaddr_in *from, int reset_timer)
{ {
fd_set fds; fd_set fds;
static struct timeval wait; static struct timeval wait;
@ -212,7 +213,7 @@ wait_for_reply(int sock, struct sockaddr_in *from, int reset_timer, u_char *pack
} }
if (select(sock+1, &fds, (fd_set *)0, (fd_set *)0, &wait) > 0) if (select(sock+1, &fds, (fd_set *)0, (fd_set *)0, &wait) > 0)
cc=recvfrom(s, (char *)packet, size, 0, cc=recvfrom(s, (char *)packet, sizeof(packet), 0,
(struct sockaddr *)from, &fromlen); (struct sockaddr *)from, &fromlen);
return(cc); return(cc);
@ -339,12 +340,10 @@ traceroute_main(int argc, char *argv[])
struct hostent *hp; struct hostent *hp;
struct sockaddr_in from, *to; struct sockaddr_in from, *to;
int ch, i, on, probe, seq, tos, ttl; int ch, i, on, probe, seq, tos, ttl;
u_char *packet;
int options = 0; /* socket options */ int options = 0; /* socket options */
char *source = 0; char *source = 0;
int nprobes = 3; int nprobes = 3;
packet = xmalloc (MAXPACKET_ICMP);
on = 1; on = 1;
seq = tos = 0; seq = tos = 0;
@ -496,7 +495,7 @@ traceroute_main(int argc, char *argv[])
(void) gettimeofday(&t1, &tz); (void) gettimeofday(&t1, &tz);
send_probe(++seq, ttl); send_probe(++seq, ttl);
reset_timer = 1; reset_timer = 1;
while ((cc = wait_for_reply(s, &from, reset_timer, packet, MAXPACKET_ICMP)) != 0) { while ((cc = wait_for_reply(s, &from, reset_timer)) != 0) {
(void) gettimeofday(&t2, &tz); (void) gettimeofday(&t2, &tz);
if ((i = packet_ok(packet, cc, &from, seq))) { if ((i = packet_ok(packet, cc, &from, seq))) {
reset_timer = 1; reset_timer = 1;