diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2009-01-01 17:52:09 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2009-01-01 17:52:09 +0000 |
commit | 0416e3dde17ea9295635c52183b30fe3d7172333 (patch) | |
tree | 4eea1c401c74d6ec42f18c67090f73001103e0db /networking/udhcp/dhcpd.c | |
parent | b2ec03813c34bc3de2ddf9a0974be4e5b31ec757 (diff) | |
download | busybox-w32-0416e3dde17ea9295635c52183b30fe3d7172333.tar.gz busybox-w32-0416e3dde17ea9295635c52183b30fe3d7172333.tar.bz2 busybox-w32-0416e3dde17ea9295635c52183b30fe3d7172333.zip |
udhcpd: disable opton to have absolute lease times in lease file
(that does not work with dumpleases)
dumpleases: fix -a option.
networking/udhcp/*: code shrink, more compact static leases struture,
better comments, etc
function old new delta
find_free_or_expired_address - 147 +147
nobody_responds_to_arp - 84 +84
read_opt 781 830 +49
dumpleases_main 435 447 +12
send_ACK 229 232 +3
read_staticlease 90 93 +3
addStaticLease 60 61 +1
getIpByMac 46 43 -3
reservedIp 31 20 -11
keywords 304 288 -16
send_offer 428 403 -25
write_leases 225 193 -32
read_leases 184 143 -41
read_yn 64 - -64
find_address 191 - -191
------------------------------------------------------------------------------
(add/remove: 2/2 grow/shrink: 5/6 up/down: 299/-383) Total: -84 bytes
Diffstat (limited to 'networking/udhcp/dhcpd.c')
-rw-r--r-- | networking/udhcp/dhcpd.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/networking/udhcp/dhcpd.c b/networking/udhcp/dhcpd.c index 7b4596895..d0a1eba81 100644 --- a/networking/udhcp/dhcpd.c +++ b/networking/udhcp/dhcpd.c | |||
@@ -26,8 +26,7 @@ int udhcpd_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | |||
26 | int udhcpd_main(int argc UNUSED_PARAM, char **argv) | 26 | int udhcpd_main(int argc UNUSED_PARAM, char **argv) |
27 | { | 27 | { |
28 | fd_set rfds; | 28 | fd_set rfds; |
29 | struct timeval tv; | 29 | int server_socket = -1, retval, max_sock; |
30 | int server_socket = -1, bytes, retval, max_sock; | ||
31 | struct dhcpMessage packet; | 30 | struct dhcpMessage packet; |
32 | uint8_t *state, *server_id, *requested; | 31 | uint8_t *state, *server_id, *requested; |
33 | uint32_t server_id_aligned = server_id_aligned; /* for compiler */ | 32 | uint32_t server_id_aligned = server_id_aligned; /* for compiler */ |
@@ -107,6 +106,8 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv) | |||
107 | 106 | ||
108 | timeout_end = monotonic_sec() + server_config.auto_time; | 107 | timeout_end = monotonic_sec() + server_config.auto_time; |
109 | while (1) { /* loop until universe collapses */ | 108 | while (1) { /* loop until universe collapses */ |
109 | int bytes; | ||
110 | struct timeval tv; | ||
110 | 111 | ||
111 | if (server_socket < 0) { | 112 | if (server_socket < 0) { |
112 | server_socket = udhcp_listen_socket(/*INADDR_ANY,*/ SERVER_PORT, | 113 | server_socket = udhcp_listen_socket(/*INADDR_ANY,*/ SERVER_PORT, |
@@ -143,12 +144,15 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv) | |||
143 | case SIGTERM: | 144 | case SIGTERM: |
144 | bb_info_msg("Received a SIGTERM"); | 145 | bb_info_msg("Received a SIGTERM"); |
145 | goto ret0; | 146 | goto ret0; |
146 | case 0: break; /* no signal */ | 147 | case 0: /* no signal: read a packet */ |
147 | default: continue; /* signal or error (probably EINTR) */ | 148 | break; |
149 | default: /* signal or error (probably EINTR): back to select */ | ||
150 | continue; | ||
148 | } | 151 | } |
149 | 152 | ||
150 | bytes = udhcp_recv_kernel_packet(&packet, server_socket); /* this waits for a packet - idle */ | 153 | bytes = udhcp_recv_kernel_packet(&packet, server_socket); |
151 | if (bytes < 0) { | 154 | if (bytes < 0) { |
155 | /* bytes can also be -2 ("bad packet data") */ | ||
152 | if (bytes == -1 && errno != EINTR) { | 156 | if (bytes == -1 && errno != EINTR) { |
153 | DEBUG("error on read, %s, reopening socket", strerror(errno)); | 157 | DEBUG("error on read, %s, reopening socket", strerror(errno)); |
154 | close(server_socket); | 158 | close(server_socket); |
@@ -165,7 +169,6 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv) | |||
165 | 169 | ||
166 | /* Look for a static lease */ | 170 | /* Look for a static lease */ |
167 | static_lease_ip = getIpByMac(server_config.static_leases, &packet.chaddr); | 171 | static_lease_ip = getIpByMac(server_config.static_leases, &packet.chaddr); |
168 | |||
169 | if (static_lease_ip) { | 172 | if (static_lease_ip) { |
170 | bb_info_msg("Found static lease: %x", static_lease_ip); | 173 | bb_info_msg("Found static lease: %x", static_lease_ip); |
171 | 174 | ||