X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=networking%2Fudhcp%2Fsocket.c;h=4fd79f4238440a67e80c2fabe512d7514daffabb;hb=89193f985bf50af702e0f98a3c86573277c03287;hp=39f1cec5452e5caa5641a7e8d718b223e02730ea;hpb=e8f565c1eeba336fa13ce8216464c9daedd36f76;p=oweals%2Fbusybox.git diff --git a/networking/udhcp/socket.c b/networking/udhcp/socket.c index 39f1cec54..4fd79f423 100644 --- a/networking/udhcp/socket.c +++ b/networking/udhcp/socket.c @@ -22,17 +22,8 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include -#if (defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1) || defined _NEWLIB_VERSION -# include -# include -#else -# include -# include -# include -#endif - #include "common.h" +#include int FAST_FUNC udhcp_read_interface(const char *interface, int *ifindex, uint32_t *nip, uint8_t *mac) { @@ -65,7 +56,7 @@ int FAST_FUNC udhcp_read_interface(const char *interface, int *ifindex, uint32_t close(fd); return -1; } - log1("Adapter index %d", ifr->ifr_ifindex); + log1("adapter index %d", ifr->ifr_ifindex); *ifindex = ifr->ifr_ifindex; } @@ -89,18 +80,26 @@ int FAST_FUNC udhcp_listen_socket(/*uint32_t ip,*/ int port, const char *inf) { int fd; struct sockaddr_in addr; + char *colon; - log1("Opening listen socket on *:%d %s", port, inf); + log1("opening listen socket on *:%d %s", port, inf); fd = xsocket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); setsockopt_reuseaddr(fd); if (setsockopt_broadcast(fd) == -1) bb_perror_msg_and_die("SO_BROADCAST"); - /* NB: bug 1032 says this doesn't work on ethernet aliases (ethN:M) */ + /* SO_BINDTODEVICE doesn't work on ethernet aliases (ethN:M) */ + colon = strrchr(inf, ':'); + if (colon) + *colon = '\0'; + if (setsockopt_bindtodevice(fd, inf)) xfunc_die(); /* warning is already printed */ + if (colon) + *colon = ':'; + memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(port);