diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-09-28 10:29:17 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-09-28 10:29:17 +0000 |
commit | b9256054419582dc35917b1cb39c7e09f489dfad (patch) | |
tree | 2ce3a816b788b3af5fa54109b765ee22d5550c5e /networking/udhcp/dhcprelay.c | |
parent | c3122bca53255799f052fcc0e911b68237faa12d (diff) | |
download | busybox-w32-b9256054419582dc35917b1cb39c7e09f489dfad.tar.gz busybox-w32-b9256054419582dc35917b1cb39c7e09f489dfad.tar.bz2 busybox-w32-b9256054419582dc35917b1cb39c7e09f489dfad.zip |
assorted static vars removal
function old new delta
tcpudpsvd_main 1829 1839 +10
update_status 567 569 +2
sigterm 1 - -1
.........
dhcprelay_signal_handler 8 - -8
nfs_strerror 60 49 -11
singlemount 4579 4564 -15
static.p 16 - -16
svstatus 20 - -20
dhcprelay_xid_list 32 - -32
runsv_main 1785 1746 -39
static.buf 74 28 -46
svd 56 - -56
dhcprelay_main 1141 1080 -61
------------------------------------------------------------------------------
(add/remove: 0/20 grow/shrink: 2/10 up/down: 12/-386) Total: -374 bytes
Diffstat (limited to 'networking/udhcp/dhcprelay.c')
-rw-r--r-- | networking/udhcp/dhcprelay.c | 63 |
1 files changed, 20 insertions, 43 deletions
diff --git a/networking/udhcp/dhcprelay.c b/networking/udhcp/dhcprelay.c index 3e1758d5c..08dc23f23 100644 --- a/networking/udhcp/dhcprelay.c +++ b/networking/udhcp/dhcprelay.c | |||
@@ -19,16 +19,16 @@ | |||
19 | #define MAX_LIFETIME 2*60 /* lifetime of an xid entry in sec. */ | 19 | #define MAX_LIFETIME 2*60 /* lifetime of an xid entry in sec. */ |
20 | #define MAX_INTERFACES 9 | 20 | #define MAX_INTERFACES 9 |
21 | 21 | ||
22 | |||
23 | /* This list holds information about clients. The xid_* functions manipulate this list. */ | 22 | /* This list holds information about clients. The xid_* functions manipulate this list. */ |
24 | static struct xid_item { | 23 | struct xid_item { |
24 | time_t timestamp; | ||
25 | int client; | ||
25 | uint32_t xid; | 26 | uint32_t xid; |
26 | struct sockaddr_in ip; | 27 | struct sockaddr_in ip; |
27 | int client; | ||
28 | time_t timestamp; | ||
29 | struct xid_item *next; | 28 | struct xid_item *next; |
30 | } dhcprelay_xid_list = {0, {0}, 0, 0, NULL}; | 29 | }; |
31 | 30 | ||
31 | #define dhcprelay_xid_list (*(struct xid_item*)&bb_common_bufsiz1) | ||
32 | 32 | ||
33 | static struct xid_item *xid_add(uint32_t xid, struct sockaddr_in *ip, int client) | 33 | static struct xid_item *xid_add(uint32_t xid, struct sockaddr_in *ip, int client) |
34 | { | 34 | { |
@@ -114,17 +114,6 @@ static int get_dhcp_packet_type(struct dhcpMessage *p) | |||
114 | } | 114 | } |
115 | 115 | ||
116 | /** | 116 | /** |
117 | * signal_handler - handles signals ;-) | ||
118 | * sig - sent signal | ||
119 | */ | ||
120 | static smallint dhcprelay_stopflag; | ||
121 | |||
122 | static void dhcprelay_signal_handler(int sig) | ||
123 | { | ||
124 | dhcprelay_stopflag = 1; | ||
125 | } | ||
126 | |||
127 | /** | ||
128 | * get_client_devices - parses the devices list | 117 | * get_client_devices - parses the devices list |
129 | * dev_list - comma separated list of devices | 118 | * dev_list - comma separated list of devices |
130 | * returns array | 119 | * returns array |
@@ -160,27 +149,23 @@ static char **get_client_devices(char *dev_list, int *client_number) | |||
160 | } | 149 | } |
161 | 150 | ||
162 | 151 | ||
163 | /* Creates listen sockets (in fds) and returns the number allocated. */ | 152 | /* Creates listen sockets (in fds) and returns numerically max fd. */ |
164 | static int init_sockets(char **client, int num_clients, | 153 | static int init_sockets(char **client, int num_clients, |
165 | char *server, int *fds, int *max_socket) | 154 | char *server, int *fds) |
166 | { | 155 | { |
167 | int i; | 156 | int i, n; |
168 | 157 | ||
169 | /* talk to real server on bootps */ | 158 | /* talk to real server on bootps */ |
170 | fds[0] = listen_socket(/*INADDR_ANY,*/ 67, server); | 159 | fds[0] = listen_socket(/*INADDR_ANY,*/ 67, server); |
171 | *max_socket = fds[0]; | 160 | n = fds[0]; |
172 | |||
173 | /* array starts at 1 since server is 0 */ | ||
174 | num_clients++; | ||
175 | 161 | ||
176 | for (i = 1; i < num_clients; i++) { | 162 | for (i = 1; i < num_clients; i++) { |
177 | /* listen for clients on bootps */ | 163 | /* listen for clients on bootps */ |
178 | fds[i] = listen_socket(/*NADDR_ANY,*/ 67, client[i-1]); | 164 | fds[i] = listen_socket(/*NADDR_ANY,*/ 67, client[i-1]); |
179 | if (fds[i] > *max_socket) | 165 | if (fds[i] > n) |
180 | *max_socket = fds[i]; | 166 | n = fds[i]; |
181 | } | 167 | } |
182 | 168 | return n; | |
183 | return i; | ||
184 | } | 169 | } |
185 | 170 | ||
186 | 171 | ||
@@ -253,6 +238,8 @@ static void pass_back(struct dhcpMessage *p, int packet_len, int *fds) | |||
253 | } | 238 | } |
254 | 239 | ||
255 | static void dhcprelay_loop(int *fds, int num_sockets, int max_socket, char **clients, | 240 | static void dhcprelay_loop(int *fds, int num_sockets, int max_socket, char **clients, |
241 | struct sockaddr_in *server_addr, uint32_t gw_ip) ATTRIBUTE_NORETURN; | ||
242 | static void dhcprelay_loop(int *fds, int num_sockets, int max_socket, char **clients, | ||
256 | struct sockaddr_in *server_addr, uint32_t gw_ip) | 243 | struct sockaddr_in *server_addr, uint32_t gw_ip) |
257 | { | 244 | { |
258 | struct dhcpMessage dhcp_msg; | 245 | struct dhcpMessage dhcp_msg; |
@@ -263,7 +250,7 @@ static void dhcprelay_loop(int *fds, int num_sockets, int max_socket, char **cli | |||
263 | struct timeval tv; | 250 | struct timeval tv; |
264 | int i; | 251 | int i; |
265 | 252 | ||
266 | while (!dhcprelay_stopflag) { | 253 | while (1) { |
267 | FD_ZERO(&rfds); | 254 | FD_ZERO(&rfds); |
268 | for (i = 0; i < num_sockets; i++) | 255 | for (i = 0; i < num_sockets; i++) |
269 | FD_SET(fds[i], &rfds); | 256 | FD_SET(fds[i], &rfds); |
@@ -298,7 +285,7 @@ static void dhcprelay_loop(int *fds, int num_sockets, int max_socket, char **cli | |||
298 | int dhcprelay_main(int argc, char **argv); | 285 | int dhcprelay_main(int argc, char **argv); |
299 | int dhcprelay_main(int argc, char **argv) | 286 | int dhcprelay_main(int argc, char **argv) |
300 | { | 287 | { |
301 | int i, num_sockets, max_socket, fds[MAX_INTERFACES]; | 288 | int num_sockets, max_socket, fds[MAX_INTERFACES]; |
302 | uint32_t gw_ip; | 289 | uint32_t gw_ip; |
303 | char **clients; | 290 | char **clients; |
304 | struct sockaddr_in server_addr; | 291 | struct sockaddr_in server_addr; |
@@ -316,23 +303,13 @@ int dhcprelay_main(int argc, char **argv) | |||
316 | clients = get_client_devices(argv[1], &num_sockets); | 303 | clients = get_client_devices(argv[1], &num_sockets); |
317 | if (!clients) return 0; | 304 | if (!clients) return 0; |
318 | 305 | ||
319 | signal(SIGTERM, dhcprelay_signal_handler); | 306 | num_sockets++; /* for server socket at fds[0] */ |
320 | signal(SIGQUIT, dhcprelay_signal_handler); | 307 | max_socket = init_sockets(clients, num_sockets, argv[2], fds); |
321 | signal(SIGINT, dhcprelay_signal_handler); | ||
322 | |||
323 | num_sockets = init_sockets(clients, num_sockets, argv[2], fds, &max_socket); | ||
324 | 308 | ||
325 | if (read_interface(argv[2], NULL, &gw_ip, NULL)) | 309 | if (read_interface(argv[2], NULL, &gw_ip, NULL)) |
326 | return 1; | 310 | return 1; |
327 | 311 | ||
312 | /* doesn't return */ | ||
328 | dhcprelay_loop(fds, num_sockets, max_socket, clients, &server_addr, gw_ip); | 313 | dhcprelay_loop(fds, num_sockets, max_socket, clients, &server_addr, gw_ip); |
329 | 314 | /* return 0; - not reached */ | |
330 | if (ENABLE_FEATURE_CLEAN_UP) { | ||
331 | for (i = 0; i < num_sockets; i++) { | ||
332 | close(fds[i]); | ||
333 | free(clients[i]); | ||
334 | } | ||
335 | } | ||
336 | |||
337 | return 0; | ||
338 | } | 315 | } |