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();
|
pingsock = create_icmp_socket();
|
||||||
pingaddr.sin = lsa->sin;
|
pingaddr.sin = lsa->sin;
|
||||||
if (source_lsa)
|
if (source_lsa) {
|
||||||
xbind(pingsock, &lsa->sa, lsa->len);
|
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 */
|
/* enable broadcast pings */
|
||||||
setsockopt_broadcast(pingsock);
|
setsockopt_broadcast(pingsock);
|
||||||
@ -578,7 +582,7 @@ static void ping6(len_and_sockaddr *lsa)
|
|||||||
pingaddr.sin6 = lsa->sin6;
|
pingaddr.sin6 = lsa->sin6;
|
||||||
/* untested whether "-I addr" really works for IPv6: */
|
/* untested whether "-I addr" really works for IPv6: */
|
||||||
if (source_lsa)
|
if (source_lsa)
|
||||||
xbind(pingsock, &lsa->sa, lsa->len);
|
xbind(pingsock, &source_lsa->sa, source_lsa->len);
|
||||||
|
|
||||||
#ifdef ICMP6_FILTER
|
#ifdef ICMP6_FILTER
|
||||||
{
|
{
|
||||||
@ -659,7 +663,7 @@ static void ping(len_and_sockaddr *lsa)
|
|||||||
printf("PING %s (%s)", hostname, dotted);
|
printf("PING %s (%s)", hostname, dotted);
|
||||||
if (source_lsa) {
|
if (source_lsa) {
|
||||||
printf(" from %s",
|
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);
|
printf(": %d data bytes\n", datalen);
|
||||||
|
|
||||||
@ -691,7 +695,6 @@ int ping_main(int argc, char **argv)
|
|||||||
if_index = if_nametoindex(opt_I);
|
if_index = if_nametoindex(opt_I);
|
||||||
if (!if_index) {
|
if (!if_index) {
|
||||||
/* TODO: I'm not sure it takes IPv6 unless in [XX:XX..] format */
|
/* 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);
|
source_lsa = xdotted2sockaddr(opt_I, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user