diff options
author | Mike Frysinger <vapier@gentoo.org> | 2005-09-15 01:32:48 +0000 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2005-09-15 01:32:48 +0000 |
commit | 887a1ad57fe978cd320be358effbe66df8a068bf (patch) | |
tree | 1f5cf363b8942804390e44e43051b2dcb2258628 /networking | |
parent | 23f62fc6f3b8d01a953266ddd404c392b128c952 (diff) | |
download | busybox-887a1ad57fe978cd320be358effbe66df8a068bf.tar.gz |
BsAtHome writes in Bug 433:
Ping packets sent by busybox have wrong endian on f.x. mips32 (openwrt). Attatched is a patch that
uses htons() and ntohs() to be platform independent.
Diffstat (limited to 'networking')
-rw-r--r-- | networking/ping.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/networking/ping.c b/networking/ping.c index bba37a025..b36ab1881 100644 --- a/networking/ping.c +++ b/networking/ping.c @@ -226,9 +226,9 @@ static void sendping(int junk) pkt->icmp_type = ICMP_ECHO; pkt->icmp_code = 0; pkt->icmp_cksum = 0; - pkt->icmp_seq = ntransmitted++; + pkt->icmp_seq = htons(ntransmitted++); pkt->icmp_id = myid; - CLR(pkt->icmp_seq % MAX_DUP_CHK); + CLR(ntohs(pkt->icmp_seq) % MAX_DUP_CHK); gettimeofday((struct timeval *) &packet[8], NULL); pkt->icmp_cksum = in_cksum((unsigned short *) pkt, sizeof(packet)); @@ -296,6 +296,7 @@ static void unpack(char *buf, int sz, struct sockaddr_in *from) return; /* not our ping */ if (icmppkt->icmp_type == ICMP_ECHOREPLY) { + u_int16_t recv_seq = ntohs(icmppkt->icmp_seq); ++nreceived; tp = (struct timeval *) icmppkt->icmp_data; @@ -312,12 +313,12 @@ static void unpack(char *buf, int sz, struct sockaddr_in *from) if (triptime > tmax) tmax = triptime; - if (TST(icmppkt->icmp_seq % MAX_DUP_CHK)) { + if (TST(recv_seq % MAX_DUP_CHK)) { ++nrepeats; --nreceived; dupflag = 1; } else { - SET(icmppkt->icmp_seq % MAX_DUP_CHK); + SET(recv_seq % MAX_DUP_CHK); dupflag = 0; } @@ -326,7 +327,7 @@ static void unpack(char *buf, int sz, struct sockaddr_in *from) printf("%d bytes from %s: icmp_seq=%u", sz, inet_ntoa(*(struct in_addr *) &from->sin_addr.s_addr), - icmppkt->icmp_seq); + recv_seq); printf(" ttl=%d", iphdr->ttl); printf(" time=%lu.%lu ms", triptime / 10, triptime % 10); if (dupflag) |