svn commit: trunk/busybox/networking

vapier at busybox.net vapier at busybox.net
Thu Sep 15 01:32:51 UTC 2005


Author: vapier
Date: 2005-09-14 18:32:48 -0700 (Wed, 14 Sep 2005)
New Revision: 11466

Log:
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.


Modified:
   trunk/busybox/networking/ping.c


Changeset:
Modified: trunk/busybox/networking/ping.c
===================================================================
--- trunk/busybox/networking/ping.c	2005-09-14 22:45:58 UTC (rev 11465)
+++ trunk/busybox/networking/ping.c	2005-09-15 01:32:48 UTC (rev 11466)
@@ -226,9 +226,9 @@
 	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 @@
 	    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 @@
 		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 @@
 
 		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)




More information about the busybox-cvs mailing list