diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-08-18 14:16:39 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-08-18 14:16:39 +0000 |
commit | a27a11bb2c033d3e0312dc1d62430a002314686f (patch) | |
tree | 74b32a18cb1e09c4f663a49c27ffa3725d3e4ee5 /networking/udhcp | |
parent | b98c26ad684e3aed8f1480458737f1ab90477c9e (diff) |
introduce and use xdup2(int, int)
stop checking whether setsockopt_reuseaddr(int fd) was successful (it always is)
remove second parameter (sockllen) from xmalloc_sockaddr2xxxxx functions
sockaddr2str 142 156 +14
collect_blk 467 474 +7
xdup2 28 33 +5
singlemount 4456 4454 -2
print_host 214 212 -2
nslookup_main 139 137 -2
ftpgetput_main 414 412 -2
udhcpd_main 1258 1255 -3
udhcpc_main 2405 2402 -3
traceroute_main 4125 4122 -3
nc_main 1072 1069 -3
buffer_fill_and_print 76 73 -3
xmalloc_sockaddr2hostonly_noport 18 14 -4
xmalloc_sockaddr2host_noport 18 14 -4
xmalloc_sockaddr2host 15 11 -4
xmalloc_sockaddr2dotted_noport 18 14 -4
xmalloc_sockaddr2dotted 18 14 -4
wget_main 2618 2614 -4
ping_main 393 389 -4
ip_port_str 120 115 -5
dhcprelay_main 1146 1141 -5
dnsd_main 1531 1525 -6
passwd_main 1110 1102 -8
udhcp_kernel_packet 206 197 -9
udhcp_listen_socket 154 144 -10
getty_main 2576 2566 -10
setup 655 640 -15
xmove_fd 51 34 -17
dolisten 759 742 -17
tcpudpsvd_main 1866 1836 -30
startservice 339 299 -40
Diffstat (limited to 'networking/udhcp')
-rw-r--r-- | networking/udhcp/common.h | 2 | ||||
-rw-r--r-- | networking/udhcp/dhcpc.c | 2 | ||||
-rw-r--r-- | networking/udhcp/dhcpd.c | 2 | ||||
-rw-r--r-- | networking/udhcp/dhcprelay.c | 9 | ||||
-rw-r--r-- | networking/udhcp/packet.c | 7 | ||||
-rw-r--r-- | networking/udhcp/socket.c | 42 |
6 files changed, 24 insertions, 40 deletions
diff --git a/networking/udhcp/common.h b/networking/udhcp/common.h index bc21176a5..33417af09 100644 --- a/networking/udhcp/common.h +++ b/networking/udhcp/common.h @@ -83,7 +83,7 @@ int udhcp_sp_fd_set(fd_set *rfds, int extra_fd); int udhcp_sp_read(fd_set *rfds); int raw_socket(int ifindex); int read_interface(const char *interface, int *ifindex, uint32_t *addr, uint8_t *arp); -int listen_socket(uint32_t ip, int port, const char *inf); +int listen_socket(/*uint32_t ip,*/ int port, const char *inf); /* Returns 1 if no reply received */ int arpping(uint32_t test_ip, uint32_t from_ip, uint8_t *from_mac, const char *interface); diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c index 7d38742b9..f0a3351fd 100644 --- a/networking/udhcp/dhcpc.c +++ b/networking/udhcp/dhcpc.c @@ -311,7 +311,7 @@ int udhcpc_main(int argc, char **argv) if (listen_mode != LISTEN_NONE && sockfd < 0) { if (listen_mode == LISTEN_KERNEL) - sockfd = listen_socket(INADDR_ANY, CLIENT_PORT, client_config.interface); + sockfd = listen_socket(/*INADDR_ANY,*/ CLIENT_PORT, client_config.interface); else sockfd = raw_socket(client_config.ifindex); } diff --git a/networking/udhcp/dhcpd.c b/networking/udhcp/dhcpd.c index fb42e2f73..2fd16ce9b 100644 --- a/networking/udhcp/dhcpd.c +++ b/networking/udhcp/dhcpd.c @@ -95,7 +95,7 @@ int udhcpd_main(int argc, char **argv) while (1) { /* loop until universe collapses */ if (server_socket < 0) { - server_socket = listen_socket(INADDR_ANY, SERVER_PORT, + server_socket = listen_socket(/*INADDR_ANY,*/ SERVER_PORT, server_config.interface); } diff --git a/networking/udhcp/dhcprelay.c b/networking/udhcp/dhcprelay.c index 4ed65a2d6..3e1758d5c 100644 --- a/networking/udhcp/dhcprelay.c +++ b/networking/udhcp/dhcprelay.c @@ -167,16 +167,17 @@ static int init_sockets(char **client, int num_clients, int i; /* talk to real server on bootps */ - fds[0] = listen_socket(htonl(INADDR_ANY), 67, server); + fds[0] = listen_socket(/*INADDR_ANY,*/ 67, server); *max_socket = fds[0]; /* array starts at 1 since server is 0 */ num_clients++; - for (i=1; i < num_clients; i++) { + for (i = 1; i < num_clients; i++) { /* listen for clients on bootps */ - fds[i] = listen_socket(htonl(INADDR_ANY), 67, client[i-1]); - if (fds[i] > *max_socket) *max_socket = fds[i]; + fds[i] = listen_socket(/*NADDR_ANY,*/ 67, client[i-1]); + if (fds[i] > *max_socket) + *max_socket = fds[i]; } return i; diff --git a/networking/udhcp/packet.c b/networking/udhcp/packet.c index 272e79df1..41cd32135 100644 --- a/networking/udhcp/packet.c +++ b/networking/udhcp/packet.c @@ -194,17 +194,14 @@ int udhcp_kernel_packet(struct dhcpMessage *payload, if (fd < 0) return -1; - if (setsockopt_reuseaddr(fd) == -1) { - close(fd); - return -1; - } + setsockopt_reuseaddr(fd); memset(&client, 0, sizeof(client)); client.sin_family = AF_INET; client.sin_port = htons(source_port); client.sin_addr.s_addr = source_ip; - if (bind(fd, (struct sockaddr *)&client, sizeof(struct sockaddr)) == -1) { + if (bind(fd, (struct sockaddr *)&client, sizeof(client)) == -1) { close(fd); return -1; } diff --git a/networking/udhcp/socket.c b/networking/udhcp/socket.c index 1e62f8e40..79ddfb1e2 100644 --- a/networking/udhcp/socket.c +++ b/networking/udhcp/socket.c @@ -45,10 +45,6 @@ int read_interface(const char *interface, int *ifindex, uint32_t *addr, uint8_t memset(&ifr, 0, sizeof(ifr)); fd = xsocket(AF_INET, SOCK_RAW, IPPROTO_RAW); -// if (fd < 0) { -// bb_perror_msg("socket failed"); -// return -1; -// } ifr.ifr_addr.sa_family = AF_INET; strncpy(ifr.ifr_name, interface, sizeof(ifr.ifr_name)); @@ -87,40 +83,30 @@ int read_interface(const char *interface, int *ifindex, uint32_t *addr, uint8_t return 0; } - -int listen_socket(uint32_t ip, int port, const char *inf) +/* 1. None of the callers expects it to ever fail */ +/* 2. ip was always INADDR_ANY */ +int listen_socket(/*uint32_t ip,*/ int port, const char *inf) { - struct ifreq interface; int fd; + struct ifreq interface; struct sockaddr_in addr; DEBUG("Opening listen socket on 0x%08x:%d %s", ip, port, inf); fd = xsocket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); - memset(&addr, 0, sizeof(addr)); - addr.sin_family = AF_INET; - addr.sin_port = htons(port); - addr.sin_addr.s_addr = ip; - - if (setsockopt_reuseaddr(fd) == -1) { - close(fd); - return -1; - } - if (setsockopt_broadcast(fd) == -1) { - close(fd); - return -1; - } + setsockopt_reuseaddr(fd); + 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)) < 0) { - close(fd); - return -1; - } + if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, &interface, sizeof(interface)) == -1) + bb_perror_msg_and_die("SO_BINDTODEVICE"); - if (bind(fd, (struct sockaddr *)&addr, sizeof(addr)) == -1) { - close(fd); - return -1; - } + memset(&addr, 0, sizeof(addr)); + addr.sin_family = AF_INET; + addr.sin_port = htons(port); + /* addr.sin_addr.s_addr = ip; - all-zeros is INADDR_ANY */ + xbind(fd, (struct sockaddr *)&addr, sizeof(addr)); return fd; } |