diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2008-12-08 22:56:18 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2008-12-08 22:56:18 +0000 |
commit | efb545b9bdd3934dcdbf9bc0890a42081b330049 (patch) | |
tree | 4dc9212e49a5dae9890bd324bcc9bf4941e2321d /networking/udhcp/dhcpd.c | |
parent | d1a84a2880073f6cc5e2f9f4e5f236cd110f01a0 (diff) | |
download | busybox-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.c | 25 |
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 | ) { |