From 7ff85c53f17cbd6e3696ece978910f33f74901fe Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Mon, 27 Oct 2008 12:56:58 +0000 Subject: [PATCH] udhcp: simplify SO_BINDTODEVICE call --- networking/udhcp/common.h | 2 +- networking/udhcp/socket.c | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/networking/udhcp/common.h b/networking/udhcp/common.h index 66a0b0d8b..de4a8c75a 100644 --- a/networking/udhcp/common.h +++ b/networking/udhcp/common.h @@ -91,8 +91,8 @@ void udhcp_run_script(struct dhcpMessage *packet, const char *name) FAST_FUNC; void udhcp_sp_setup(void) FAST_FUNC; int udhcp_sp_fd_set(fd_set *rfds, int extra_fd) FAST_FUNC; int udhcp_sp_read(const fd_set *rfds) FAST_FUNC; -int udhcp_raw_socket(int ifindex) FAST_FUNC; int udhcp_read_interface(const char *interface, int *ifindex, uint32_t *addr, uint8_t *arp) FAST_FUNC; +int udhcp_raw_socket(int ifindex) FAST_FUNC; int udhcp_listen_socket(/*uint32_t ip,*/ int port, const char *inf) FAST_FUNC; /* Returns 1 if no reply received */ int arpping(uint32_t test_ip, uint32_t from_ip, uint8_t *from_mac, const char *interface) FAST_FUNC; diff --git a/networking/udhcp/socket.c b/networking/udhcp/socket.c index 2d272510d..ea0a2c3a8 100644 --- a/networking/udhcp/socket.c +++ b/networking/udhcp/socket.c @@ -88,7 +88,6 @@ int FAST_FUNC udhcp_read_interface(const char *interface, int *ifindex, uint32_t int FAST_FUNC udhcp_listen_socket(/*uint32_t ip,*/ int port, const char *inf) { int fd; - struct ifreq interface; struct sockaddr_in addr; DEBUG("Opening listen socket on *:%d %s", port, inf); @@ -98,8 +97,8 @@ int FAST_FUNC udhcp_listen_socket(/*uint32_t ip,*/ int port, const char *inf) if (setsockopt_broadcast(fd) == -1) bb_perror_msg_and_die("SO_BROADCAST"); - strncpy(interface.ifr_name, inf, IFNAMSIZ); - if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, &interface, sizeof(interface)) == -1) + /* NB: bug 1032 says this doesn't work on ethernet aliases (ethN:M) */ + if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, &inf, strlen(inf) + 1) == -1) bb_perror_msg_and_die("SO_BINDTODEVICE"); memset(&addr, 0, sizeof(addr));