aboutsummaryrefslogtreecommitdiff
path: root/networking/udhcp/dhcpd.c
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2008-12-08 22:56:18 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2008-12-08 22:56:18 +0000
commitefb545b9bdd3934dcdbf9bc0890a42081b330049 (patch)
tree4dc9212e49a5dae9890bd324bcc9bf4941e2321d /networking/udhcp/dhcpd.c
parentd1a84a2880073f6cc5e2f9f4e5f236cd110f01a0 (diff)
downloadbusybox-w32-efb545b9bdd3934dcdbf9bc0890a42081b330049.tar.gz
busybox-w32-efb545b9bdd3934dcdbf9bc0890a42081b330049.tar.bz2
busybox-w32-efb545b9bdd3934dcdbf9bc0890a42081b330049.zip
optimize 16- and 32-bit moves
function old new delta udhcpd_main 1239 1257 +18 udhcp_add_simple_option 93 92 -1 buffer_read_le_u32 19 18 -1 unpack_gz_stream_with_info 526 520 -6 dnsd_main 1470 1463 -7 udhcp_run_script 1208 1186 -22 send_ACK 255 229 -26 arping_main 1661 1623 -38 send_offer 470 428 -42 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/8 up/down: 18/-143) Total: -125 bytes
Diffstat (limited to 'networking/udhcp/dhcpd.c')
-rw-r--r--networking/udhcp/dhcpd.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/networking/udhcp/dhcpd.c b/networking/udhcp/dhcpd.c
index b512c45ee..7b4596895 100644
--- a/networking/udhcp/dhcpd.c
+++ b/networking/udhcp/dhcpd.c
@@ -30,7 +30,9 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
30 int server_socket = -1, bytes, retval, max_sock; 30 int server_socket = -1, bytes, retval, max_sock;
31 struct dhcpMessage packet; 31 struct dhcpMessage packet;
32 uint8_t *state, *server_id, *requested; 32 uint8_t *state, *server_id, *requested;
33 uint32_t server_id_align, requested_align, static_lease_ip; 33 uint32_t server_id_aligned = server_id_aligned; /* for compiler */
34 uint32_t requested_aligned = requested_aligned;
35 uint32_t static_lease_ip;
34 unsigned timeout_end; 36 unsigned timeout_end;
35 unsigned num_ips; 37 unsigned num_ips;
36 unsigned opt; 38 unsigned opt;
@@ -79,7 +81,7 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
79 option = find_option(server_config.options, DHCP_LEASE_TIME); 81 option = find_option(server_config.options, DHCP_LEASE_TIME);
80 server_config.lease = LEASE_TIME; 82 server_config.lease = LEASE_TIME;
81 if (option) { 83 if (option) {
82 memcpy(&server_config.lease, option->data + 2, 4); 84 move_from_unaligned32(server_config.lease, option->data + 2);
83 server_config.lease = ntohl(server_config.lease); 85 server_config.lease = ntohl(server_config.lease);
84 } 86 }
85 87
@@ -190,21 +192,24 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
190 requested = get_option(&packet, DHCP_REQUESTED_IP); 192 requested = get_option(&packet, DHCP_REQUESTED_IP);
191 server_id = get_option(&packet, DHCP_SERVER_ID); 193 server_id = get_option(&packet, DHCP_SERVER_ID);
192 194
193 if (requested) memcpy(&requested_align, requested, 4); 195 if (requested)
194 if (server_id) memcpy(&server_id_align, server_id, 4); 196 move_from_unaligned32(requested_aligned, requested);
197 if (server_id)
198 move_from_unaligned32(server_id_aligned, server_id);
195 199
196 if (lease) { 200 if (lease) {
197 if (server_id) { 201 if (server_id) {
198 /* SELECTING State */ 202 /* SELECTING State */
199 DEBUG("server_id = %08x", ntohl(server_id_align)); 203 DEBUG("server_id = %08x", ntohl(server_id_aligned));
200 if (server_id_align == server_config.server && requested 204 if (server_id_aligned == server_config.server
201 && requested_align == lease->yiaddr 205 && requested
206 && requested_aligned == lease->yiaddr
202 ) { 207 ) {
203 send_ACK(&packet, lease->yiaddr); 208 send_ACK(&packet, lease->yiaddr);
204 } 209 }
205 } else if (requested) { 210 } else if (requested) {
206 /* INIT-REBOOT State */ 211 /* INIT-REBOOT State */
207 if (lease->yiaddr == requested_align) 212 if (lease->yiaddr == requested_aligned)
208 send_ACK(&packet, lease->yiaddr); 213 send_ACK(&packet, lease->yiaddr);
209 else 214 else
210 send_NAK(&packet); 215 send_NAK(&packet);
@@ -221,7 +226,7 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
221 226
222 } else if (requested) { 227 } else if (requested) {
223 /* INIT-REBOOT State */ 228 /* INIT-REBOOT State */
224 lease = find_lease_by_yiaddr(requested_align); 229 lease = find_lease_by_yiaddr(requested_aligned);
225 if (lease) { 230 if (lease) {
226 if (lease_expired(lease)) { 231 if (lease_expired(lease)) {
227 /* probably best if we drop this lease */ 232 /* probably best if we drop this lease */
@@ -230,7 +235,7 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
230 } else 235 } else
231 send_NAK(&packet); 236 send_NAK(&packet);
232 } else { 237 } else {
233 uint32_t r = ntohl(requested_align); 238 uint32_t r = ntohl(requested_aligned);
234 if (r < server_config.start_ip 239 if (r < server_config.start_ip
235 || r > server_config.end_ip 240 || r > server_config.end_ip
236 ) { 241 ) {