diff options
author | Mike Frysinger | 2006-03-23 23:44:29 +0000 |
---|---|---|
committer | Mike Frysinger | 2006-03-23 23:44:29 +0000 |
commit | 787140df3992ccc3ebdc09f6d2dcb584f580f49f (patch) | |
tree | 666fdb071676c676f52bdc204f6df801b17e7196 /networking/udhcp/socket.c | |
parent | e0fe93759339a9e043cd0489f5bfabd59b5fcb78 (diff) | |
download | busybox-787140df3992ccc3ebdc09f6d2dcb584f580f49f.zip busybox-787140df3992ccc3ebdc09f6d2dcb584f580f49f.tar.gz |
remove in place of external link
Diffstat (limited to 'networking/udhcp/socket.c')
-rw-r--r-- | networking/udhcp/socket.c | 135 |
1 files changed, 0 insertions, 135 deletions
diff --git a/networking/udhcp/socket.c b/networking/udhcp/socket.c deleted file mode 100644 index 0368851..0000000 --- a/networking/udhcp/socket.c +++ /dev/null @@ -1,135 +0,0 @@ -/* - * socket.c -- DHCP server client/server socket creation - * - * udhcp client/server - * Copyright (C) 1999 Matthew Ramsay <matthewr@moreton.com.au> - * Chris Trew <ctrew@moreton.com.au> - * - * Rewrite by Russ Dill <Russ.Dill@asu.edu> July 2001 - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <sys/types.h> -#include <sys/socket.h> -#include <sys/ioctl.h> -#include <netinet/in.h> -#include <unistd.h> -#include <string.h> -#include <arpa/inet.h> -#include <net/if.h> -#include <errno.h> -#include <features.h> -#if __GLIBC__ >=2 && __GLIBC_MINOR >= 1 -#include <netpacket/packet.h> -#include <net/ethernet.h> -#else -#include <asm/types.h> -#include <linux/if_packet.h> -#include <linux/if_ether.h> -#endif - -#include "socket.h" -#include "common.h" - -int read_interface(char *interface, int *ifindex, uint32_t *addr, uint8_t *arp) -{ - int fd; - struct ifreq ifr; - struct sockaddr_in *our_ip; - - memset(&ifr, 0, sizeof(struct ifreq)); - if((fd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) >= 0) { - ifr.ifr_addr.sa_family = AF_INET; - strcpy(ifr.ifr_name, interface); - - if (addr) { - if (ioctl(fd, SIOCGIFADDR, &ifr) == 0) { - our_ip = (struct sockaddr_in *) &ifr.ifr_addr; - *addr = our_ip->sin_addr.s_addr; - DEBUG(LOG_INFO, "%s (our ip) = %s", ifr.ifr_name, inet_ntoa(our_ip->sin_addr)); - } else { - LOG(LOG_ERR, "SIOCGIFADDR failed, is the interface up and configured?: %m"); - close(fd); - return -1; - } - } - - if (ioctl(fd, SIOCGIFINDEX, &ifr) == 0) { - DEBUG(LOG_INFO, "adapter index %d", ifr.ifr_ifindex); - *ifindex = ifr.ifr_ifindex; - } else { - LOG(LOG_ERR, "SIOCGIFINDEX failed!: %m"); - close(fd); - return -1; - } - if (ioctl(fd, SIOCGIFHWADDR, &ifr) == 0) { - memcpy(arp, ifr.ifr_hwaddr.sa_data, 6); - DEBUG(LOG_INFO, "adapter hardware address %02x:%02x:%02x:%02x:%02x:%02x", - arp[0], arp[1], arp[2], arp[3], arp[4], arp[5]); - } else { - LOG(LOG_ERR, "SIOCGIFHWADDR failed!: %m"); - close(fd); - return -1; - } - } else { - LOG(LOG_ERR, "socket failed!: %m"); - return -1; - } - close(fd); - return 0; -} - - -int listen_socket(uint32_t ip, int port, char *inf) -{ - struct ifreq interface; - int fd; - struct sockaddr_in addr; - int n = 1; - - DEBUG(LOG_INFO, "Opening listen socket on 0x%08x:%d %s", ip, port, inf); - if ((fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) { - DEBUG(LOG_ERR, "socket call failed: %m"); - return -1; - } - - memset(&addr, 0, sizeof(addr)); - addr.sin_family = AF_INET; - addr.sin_port = htons(port); - addr.sin_addr.s_addr = ip; - - if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *) &n, sizeof(n)) == -1) { - close(fd); - return -1; - } - if (setsockopt(fd, SOL_SOCKET, SO_BROADCAST, (char *) &n, sizeof(n)) == -1) { - close(fd); - return -1; - } - - strncpy(interface.ifr_ifrn.ifrn_name, inf, IFNAMSIZ); - if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE,(char *)&interface, sizeof(interface)) < 0) { - close(fd); - return -1; - } - - if (bind(fd, (struct sockaddr *)&addr, sizeof(struct sockaddr)) == -1) { - close(fd); - return -1; - } - - return fd; -} |