ping: fix incorrect handling of -I (Iouri Kharon <bc-info@styx.cabel.net>)
This commit is contained in:
parent
a19faf8bb7
commit
5ad1048c3d
@ -530,8 +530,12 @@ static void ping4(len_and_sockaddr *lsa)
|
||||
|
||||
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 @@ static void ping6(len_and_sockaddr *lsa)
|
||||
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 @@ static void ping(len_and_sockaddr *lsa)
|
||||
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 @@ int ping_main(int argc, char **argv)
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user