Ignore:
Timestamp:
Feb 25, 2011, 9:26:54 PM (13 years ago)
Author:
Bruno Cornec
Message:
  • Update mindi-busybox to 1.18.3 to avoid problems with the tar command which is now failing on recent versions with busybox 1.7.3
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2.2.9/mindi-busybox/networking/udhcp/socket.c

    r1765 r2725  
    11/* vi: set sw=4 ts=4: */
    22/*
    3  * socket.c -- DHCP server client/server socket creation
     3 * DHCP server client/server socket creation
    44 *
    55 * udhcp client/server
     
    2323 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    2424 */
    25 
    2625#include <net/if.h>
    27 #include <features.h>
    2826#if (defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1) || defined _NEWLIB_VERSION
    29 #include <netpacket/packet.h>
    30 #include <net/ethernet.h>
     27# include <netpacket/packet.h>
     28# include <net/ethernet.h>
    3129#else
    32 #include <asm/types.h>
    33 #include <linux/if_packet.h>
    34 #include <linux/if_ether.h>
     30# include <asm/types.h>
     31# include <linux/if_packet.h>
     32# include <linux/if_ether.h>
    3533#endif
    3634
    3735#include "common.h"
    3836
    39 
    40 int read_interface(const char *interface, int *ifindex, uint32_t *addr, uint8_t *arp)
     37int FAST_FUNC udhcp_read_interface(const char *interface, int *ifindex, uint32_t *nip, uint8_t *mac)
    4138{
    4239    int fd;
     
    4845
    4946    ifr.ifr_addr.sa_family = AF_INET;
    50     strncpy(ifr.ifr_name, interface, sizeof(ifr.ifr_name));
    51     if (addr) {
     47    strncpy_IFNAMSIZ(ifr.ifr_name, interface);
     48    if (nip) {
    5249        if (ioctl_or_perror(fd, SIOCGIFADDR, &ifr,
    5350            "is interface %s up and configured?", interface)
     
    5754        }
    5855        our_ip = (struct sockaddr_in *) &ifr.ifr_addr;
    59         *addr = our_ip->sin_addr.s_addr;
    60         DEBUG("%s (our ip) = %s", ifr.ifr_name, inet_ntoa(our_ip->sin_addr));
     56        *nip = our_ip->sin_addr.s_addr;
     57        log1("IP %s", inet_ntoa(our_ip->sin_addr));
    6158    }
    6259
     
    6663            return -1;
    6764        }
    68         DEBUG("adapter index %d", ifr.ifr_ifindex);
     65        log1("Adapter index %d", ifr.ifr_ifindex);
    6966        *ifindex = ifr.ifr_ifindex;
    7067    }
    7168
    72     if (arp) {
     69    if (mac) {
    7370        if (ioctl_or_warn(fd, SIOCGIFHWADDR, &ifr) != 0) {
    7471            close(fd);
    7572            return -1;
    7673        }
    77         memcpy(arp, ifr.ifr_hwaddr.sa_data, 6);
    78         DEBUG("adapter hardware address %02x:%02x:%02x:%02x:%02x:%02x",
    79             arp[0], arp[1], arp[2], arp[3], arp[4], arp[5]);
     74        memcpy(mac, ifr.ifr_hwaddr.sa_data, 6);
     75        log1("MAC %02x:%02x:%02x:%02x:%02x:%02x",
     76            mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
    8077    }
    8178
     
    8683/* 1. None of the callers expects it to ever fail */
    8784/* 2. ip was always INADDR_ANY */
    88 int listen_socket(/*uint32_t ip,*/ int port, const char *inf)
     85int FAST_FUNC udhcp_listen_socket(/*uint32_t ip,*/ int port, const char *inf)
    8986{
    9087    int fd;
    91     struct ifreq interface;
    9288    struct sockaddr_in addr;
    9389
    94     DEBUG("Opening listen socket on *:%d %s", port, inf);
     90    log1("Opening listen socket on *:%d %s", port, inf);
    9591    fd = xsocket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
    9692
     
    9995        bb_perror_msg_and_die("SO_BROADCAST");
    10096
    101     strncpy(interface.ifr_name, inf, IFNAMSIZ);
    102     if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, &interface, sizeof(interface)) == -1)
    103         bb_perror_msg_and_die("SO_BINDTODEVICE");
     97    /* NB: bug 1032 says this doesn't work on ethernet aliases (ethN:M) */
     98    if (setsockopt_bindtodevice(fd, inf))
     99        xfunc_die(); /* warning is already printed */
    104100
    105101    memset(&addr, 0, sizeof(addr));
Note: See TracChangeset for help on using the changeset viewer.