svn commit: trunk/busybox/networking

vda at busybox.net vda at busybox.net
Tue Jun 19 22:54:23 UTC 2007


Author: vda
Date: 2007-06-19 15:54:21 -0700 (Tue, 19 Jun 2007)
New Revision: 18860

Log:
ping: fix incorrect handling of -I (Iouri Kharon <bc-info at styx.cabel.net>)



Modified:
   trunk/busybox/networking/ping.c


Changeset:
Modified: trunk/busybox/networking/ping.c
===================================================================
--- trunk/busybox/networking/ping.c	2007-06-19 22:22:57 UTC (rev 18859)
+++ trunk/busybox/networking/ping.c	2007-06-19 22:54:21 UTC (rev 18860)
@@ -530,8 +530,12 @@
 
 	pingsock = create_icmp_socket();
 	pingaddr.sin = lsa->sin;
-	if (source_lsa)
-		xbind(pingsock, &lsa->sa, lsa->len);
+	if (source_lsa) {
+		if (setsockopt(pingsock, IPPROTO_IP, IP_MULTICAST_IF,
+				&source_lsa->sa, source_lsa->len))
+			bb_error_msg_and_die("can't set multicast source interface");
+		xbind(pingsock, &source_lsa->sa, source_lsa->len);
+	}
 
 	/* enable broadcast pings */
 	setsockopt_broadcast(pingsock);
@@ -578,7 +582,7 @@
 	pingaddr.sin6 = lsa->sin6;
 	/* untested whether "-I addr" really works for IPv6: */
 	if (source_lsa)
-		xbind(pingsock, &lsa->sa, lsa->len);
+		xbind(pingsock, &source_lsa->sa, source_lsa->len);
 
 #ifdef ICMP6_FILTER
 	{
@@ -659,7 +663,7 @@
 	printf("PING %s (%s)", hostname, dotted);
 	if (source_lsa) {
 		printf(" from %s",
-			xmalloc_sockaddr2dotted_noport(&lsa->sa, lsa->len));
+			xmalloc_sockaddr2dotted_noport(&source_lsa->sa, source_lsa->len));
 	}
 	printf(": %d data bytes\n", datalen);
 
@@ -691,7 +695,6 @@
 		if_index = if_nametoindex(opt_I);
 		if (!if_index) {
 			/* TODO: I'm not sure it takes IPv6 unless in [XX:XX..] format */
-			/* (ping doesn't support source IPv6 addresses yet anyway) */
 			source_lsa = xdotted2sockaddr(opt_I, 0);
 		}
 	}




More information about the busybox-cvs mailing list