much more concise fix for bug #45. just align the packet...
This commit is contained in:
parent
3c12ff7c89
commit
28069404a4
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user