diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2008-12-10 11:12:16 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2008-12-10 11:12:16 +0000 |
commit | e53738558f2f1aa8cd536545479ab98b0df808c5 (patch) | |
tree | 187265ed8377d2eee805dc7cc6b9150774804805 /networking | |
parent | 0d94820adf87b752c338c194a7291dcf1b96fc76 (diff) | |
download | busybox-w32-e53738558f2f1aa8cd536545479ab98b0df808c5.tar.gz busybox-w32-e53738558f2f1aa8cd536545479ab98b0df808c5.tar.bz2 busybox-w32-e53738558f2f1aa8cd536545479ab98b0df808c5.zip |
*: fix SO_BINDTODEVICE. Kernel wants at least IFNAMSIZ bytes there.
Diffstat (limited to 'networking')
-rw-r--r-- | networking/arping.c | 3 | ||||
-rw-r--r-- | networking/ping.c | 4 | ||||
-rw-r--r-- | networking/udhcp/socket.c | 4 |
3 files changed, 5 insertions, 6 deletions
diff --git a/networking/arping.c b/networking/arping.c index e7b842f5b..915af3261 100644 --- a/networking/arping.c +++ b/networking/arping.c | |||
@@ -331,8 +331,7 @@ int arping_main(int argc UNUSED_PARAM, char **argv) | |||
331 | struct sockaddr_in saddr; | 331 | struct sockaddr_in saddr; |
332 | int probe_fd = xsocket(AF_INET, SOCK_DGRAM, 0); | 332 | int probe_fd = xsocket(AF_INET, SOCK_DGRAM, 0); |
333 | 333 | ||
334 | if (setsockopt(probe_fd, SOL_SOCKET, SO_BINDTODEVICE, device, strlen(device) + 1) == -1) | 334 | setsockopt_bindtodevice(probe_fd, device); |
335 | bb_perror_msg("cannot bind to device %s", device); | ||
336 | memset(&saddr, 0, sizeof(saddr)); | 335 | memset(&saddr, 0, sizeof(saddr)); |
337 | saddr.sin_family = AF_INET; | 336 | saddr.sin_family = AF_INET; |
338 | if (src.s_addr) { | 337 | if (src.s_addr) { |
diff --git a/networking/ping.c b/networking/ping.c index 01a9f9ac5..f2a612fde 100644 --- a/networking/ping.c +++ b/networking/ping.c | |||
@@ -572,7 +572,7 @@ static void ping4(len_and_sockaddr *lsa) | |||
572 | xbind(pingsock, &source_lsa->u.sa, source_lsa->len); | 572 | xbind(pingsock, &source_lsa->u.sa, source_lsa->len); |
573 | } | 573 | } |
574 | if (str_I) | 574 | if (str_I) |
575 | setsockopt(pingsock, SOL_SOCKET, SO_BINDTODEVICE, str_I, strlen(str_I) + 1); | 575 | setsockopt_bindtodevice(pingsock, str_I); |
576 | 576 | ||
577 | /* enable broadcast pings */ | 577 | /* enable broadcast pings */ |
578 | setsockopt_broadcast(pingsock); | 578 | setsockopt_broadcast(pingsock); |
@@ -622,7 +622,7 @@ static void ping6(len_and_sockaddr *lsa) | |||
622 | if (source_lsa) | 622 | if (source_lsa) |
623 | xbind(pingsock, &source_lsa->u.sa, source_lsa->len); | 623 | xbind(pingsock, &source_lsa->u.sa, source_lsa->len); |
624 | if (str_I) | 624 | if (str_I) |
625 | setsockopt(pingsock, SOL_SOCKET, SO_BINDTODEVICE, str_I, strlen(str_I) + 1); | 625 | setsockopt_bindtodevice(pingsock, str_I); |
626 | 626 | ||
627 | #ifdef ICMP6_FILTER | 627 | #ifdef ICMP6_FILTER |
628 | { | 628 | { |
diff --git a/networking/udhcp/socket.c b/networking/udhcp/socket.c index 857f0a4de..fdb558db4 100644 --- a/networking/udhcp/socket.c +++ b/networking/udhcp/socket.c | |||
@@ -98,8 +98,8 @@ int FAST_FUNC udhcp_listen_socket(/*uint32_t ip,*/ int port, const char *inf) | |||
98 | bb_perror_msg_and_die("SO_BROADCAST"); | 98 | bb_perror_msg_and_die("SO_BROADCAST"); |
99 | 99 | ||
100 | /* NB: bug 1032 says this doesn't work on ethernet aliases (ethN:M) */ | 100 | /* NB: bug 1032 says this doesn't work on ethernet aliases (ethN:M) */ |
101 | if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, &inf, strlen(inf) + 1) == -1) | 101 | if (setsockopt_bindtodevice(fd, inf)) |
102 | bb_perror_msg_and_die("SO_BINDTODEVICE"); | 102 | xfunc_die(); /* warning is already printed */ |
103 | 103 | ||
104 | memset(&addr, 0, sizeof(addr)); | 104 | memset(&addr, 0, sizeof(addr)); |
105 | addr.sin_family = AF_INET; | 105 | addr.sin_family = AF_INET; |