aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--networking/udhcp/dhcpd.c150
-rw-r--r--networking/udhcp/dhcpd.h8
2 files changed, 79 insertions, 79 deletions
diff --git a/networking/udhcp/dhcpd.c b/networking/udhcp/dhcpd.c
index 058f86bca..6e426e6a2 100644
--- a/networking/udhcp/dhcpd.c
+++ b/networking/udhcp/dhcpd.c
@@ -46,7 +46,7 @@
46 46
47/* globals */ 47/* globals */
48#define g_leases ((struct dyn_lease*)ptr_to_globals) 48#define g_leases ((struct dyn_lease*)ptr_to_globals)
49/* struct server_config_t server_config is in bb_common_bufsiz1 */ 49/* struct server_data_t server_data is in bb_common_bufsiz1 */
50 50
51struct static_lease { 51struct static_lease {
52 struct static_lease *next; 52 struct static_lease *next;
@@ -100,7 +100,7 @@ static void add_static_lease(struct static_lease **st_lease_pp,
100/* Find static lease IP by mac */ 100/* Find static lease IP by mac */
101static uint32_t get_static_nip_by_mac(void *mac) 101static uint32_t get_static_nip_by_mac(void *mac)
102{ 102{
103 struct static_lease *st_lease = server_config.static_leases; 103 struct static_lease *st_lease = server_data.static_leases;
104 104
105 while (st_lease) { 105 while (st_lease) {
106 if (memcmp(st_lease->mac, mac, 6) == 0) 106 if (memcmp(st_lease->mac, mac, 6) == 0)
@@ -113,7 +113,7 @@ static uint32_t get_static_nip_by_mac(void *mac)
113 113
114static int is_nip_reserved_as_static(uint32_t nip) 114static int is_nip_reserved_as_static(uint32_t nip)
115{ 115{
116 struct static_lease *st_lease = server_config.static_leases; 116 struct static_lease *st_lease = server_data.static_leases;
117 117
118 while (st_lease) { 118 while (st_lease) {
119 if (st_lease->nip == nip) 119 if (st_lease->nip == nip)
@@ -133,7 +133,7 @@ static struct dyn_lease *oldest_expired_lease(void)
133 133
134 /* Unexpired leases have g_leases[i].expires >= current time 134 /* Unexpired leases have g_leases[i].expires >= current time
135 * and therefore can't ever match */ 135 * and therefore can't ever match */
136 for (i = 0; i < server_config.max_leases; i++) { 136 for (i = 0; i < server_data.max_leases; i++) {
137 if (g_leases[i].expires == 0 /* empty entry */ 137 if (g_leases[i].expires == 0 /* empty entry */
138 || g_leases[i].expires < oldest_time 138 || g_leases[i].expires < oldest_time
139 ) { 139 ) {
@@ -151,7 +151,7 @@ static void clear_leases(const uint8_t *chaddr, uint32_t yiaddr)
151{ 151{
152 unsigned i; 152 unsigned i;
153 153
154 for (i = 0; i < server_config.max_leases; i++) { 154 for (i = 0; i < server_data.max_leases; i++) {
155 if ((chaddr && memcmp(g_leases[i].lease_mac, chaddr, 6) == 0) 155 if ((chaddr && memcmp(g_leases[i].lease_mac, chaddr, 6) == 0)
156 || (yiaddr && g_leases[i].lease_nip == yiaddr) 156 || (yiaddr && g_leases[i].lease_nip == yiaddr)
157 ) { 157 ) {
@@ -216,7 +216,7 @@ static struct dyn_lease *find_lease_by_mac(const uint8_t *mac)
216{ 216{
217 unsigned i; 217 unsigned i;
218 218
219 for (i = 0; i < server_config.max_leases; i++) 219 for (i = 0; i < server_data.max_leases; i++)
220 if (memcmp(g_leases[i].lease_mac, mac, 6) == 0) 220 if (memcmp(g_leases[i].lease_mac, mac, 6) == 0)
221 return &g_leases[i]; 221 return &g_leases[i];
222 222
@@ -228,7 +228,7 @@ static struct dyn_lease *find_lease_by_nip(uint32_t nip)
228{ 228{
229 unsigned i; 229 unsigned i;
230 230
231 for (i = 0; i < server_config.max_leases; i++) 231 for (i = 0; i < server_data.max_leases; i++)
232 if (g_leases[i].lease_nip == nip) 232 if (g_leases[i].lease_nip == nip)
233 return &g_leases[i]; 233 return &g_leases[i];
234 234
@@ -242,17 +242,17 @@ static int nobody_responds_to_arp(uint32_t nip, const uint8_t *safe_mac, unsigne
242 int r; 242 int r;
243 243
244 r = arpping(nip, safe_mac, 244 r = arpping(nip, safe_mac,
245 server_config.server_nip, 245 server_data.server_nip,
246 server_config.server_mac, 246 server_data.server_mac,
247 server_config.interface, 247 server_data.interface,
248 arpping_ms); 248 arpping_ms);
249 if (r) 249 if (r)
250 return r; 250 return r;
251 251
252 temp.s_addr = nip; 252 temp.s_addr = nip;
253 bb_info_msg("%s belongs to someone, reserving it for %u seconds", 253 bb_info_msg("%s belongs to someone, reserving it for %u seconds",
254 inet_ntoa(temp), (unsigned)server_config.conflict_time); 254 inet_ntoa(temp), (unsigned)server_data.conflict_time);
255 add_lease(NULL, nip, server_config.conflict_time, NULL, 0); 255 add_lease(NULL, nip, server_data.conflict_time, NULL, 0);
256 return 0; 256 return 0;
257} 257}
258 258
@@ -274,12 +274,12 @@ static uint32_t find_free_or_expired_nip(const uint8_t *safe_mac, unsigned arppi
274 hash += safe_mac[i] + (hash << 6) + (hash << 16) - hash; 274 hash += safe_mac[i] + (hash << 6) + (hash << 16) - hash;
275 275
276 /* pick a seed based on hwaddr then iterate until we find a free address. */ 276 /* pick a seed based on hwaddr then iterate until we find a free address. */
277 addr = server_config.start_ip 277 addr = server_data.start_ip
278 + (hash % (1 + server_config.end_ip - server_config.start_ip)); 278 + (hash % (1 + server_data.end_ip - server_data.start_ip));
279 stop = addr; 279 stop = addr;
280#else 280#else
281 addr = server_config.start_ip; 281 addr = server_data.start_ip;
282#define stop (server_config.end_ip + 1) 282#define stop (server_data.end_ip + 1)
283#endif 283#endif
284 do { 284 do {
285 uint32_t nip; 285 uint32_t nip;
@@ -293,7 +293,7 @@ static uint32_t find_free_or_expired_nip(const uint8_t *safe_mac, unsigned arppi
293 goto next_addr; 293 goto next_addr;
294 nip = htonl(addr); 294 nip = htonl(addr);
295 /* skip our own address */ 295 /* skip our own address */
296 if (nip == server_config.server_nip) 296 if (nip == server_data.server_nip)
297 goto next_addr; 297 goto next_addr;
298 /* is this a static lease addr? */ 298 /* is this a static lease addr? */
299 if (is_nip_reserved_as_static(nip)) 299 if (is_nip_reserved_as_static(nip))
@@ -312,8 +312,8 @@ static uint32_t find_free_or_expired_nip(const uint8_t *safe_mac, unsigned arppi
312 next_addr: 312 next_addr:
313 addr++; 313 addr++;
314#if ENABLE_FEATURE_UDHCPD_BASE_IP_ON_MAC 314#if ENABLE_FEATURE_UDHCPD_BASE_IP_ON_MAC
315 if (addr > server_config.end_ip) 315 if (addr > server_data.end_ip)
316 addr = server_config.start_ip; 316 addr = server_data.start_ip;
317#endif 317#endif
318 } while (addr != stop); 318 } while (addr != stop);
319 319
@@ -386,7 +386,7 @@ struct config_keyword {
386 const char *def; 386 const char *def;
387}; 387};
388 388
389#define OFS(field) offsetof(struct server_config_t, field) 389#define OFS(field) offsetof(struct server_data_t, field)
390 390
391static const struct config_keyword keywords[] = { 391static const struct config_keyword keywords[] = {
392 /* keyword handler variable address default */ 392 /* keyword handler variable address default */
@@ -422,17 +422,17 @@ static NOINLINE void read_config(const char *file)
422 char *token[2]; 422 char *token[2];
423 423
424 for (i = 0; i < KWS_WITH_DEFAULTS; i++) 424 for (i = 0; i < KWS_WITH_DEFAULTS; i++)
425 keywords[i].handler(keywords[i].def, (char*)&server_config + keywords[i].ofs); 425 keywords[i].handler(keywords[i].def, (char*)&server_data + keywords[i].ofs);
426 426
427 parser = config_open(file); 427 parser = config_open(file);
428 while (config_read(parser, token, 2, 2, "# \t", PARSE_NORMAL)) { 428 while (config_read(parser, token, 2, 2, "# \t", PARSE_NORMAL)) {
429 for (k = keywords, i = 0; i < ARRAY_SIZE(keywords); k++, i++) { 429 for (k = keywords, i = 0; i < ARRAY_SIZE(keywords); k++, i++) {
430 if (strcasecmp(token[0], k->keyword) == 0) { 430 if (strcasecmp(token[0], k->keyword) == 0) {
431 if (!k->handler(token[1], (char*)&server_config + k->ofs)) { 431 if (!k->handler(token[1], (char*)&server_data + k->ofs)) {
432 bb_error_msg("can't parse line %u in %s", 432 bb_error_msg("can't parse line %u in %s",
433 parser->lineno, file); 433 parser->lineno, file);
434 /* reset back to the default value */ 434 /* reset back to the default value */
435 k->handler(k->def, (char*)&server_config + k->ofs); 435 k->handler(k->def, (char*)&server_data + k->ofs);
436 } 436 }
437 break; 437 break;
438 } 438 }
@@ -440,8 +440,8 @@ static NOINLINE void read_config(const char *file)
440 } 440 }
441 config_close(parser); 441 config_close(parser);
442 442
443 server_config.start_ip = ntohl(server_config.start_ip); 443 server_data.start_ip = ntohl(server_data.start_ip);
444 server_config.end_ip = ntohl(server_config.end_ip); 444 server_data.end_ip = ntohl(server_data.end_ip);
445} 445}
446 446
447static void write_leases(void) 447static void write_leases(void)
@@ -451,7 +451,7 @@ static void write_leases(void)
451 leasetime_t curr; 451 leasetime_t curr;
452 int64_t written_at; 452 int64_t written_at;
453 453
454 fd = open_or_warn(server_config.lease_file, O_WRONLY|O_CREAT|O_TRUNC); 454 fd = open_or_warn(server_data.lease_file, O_WRONLY|O_CREAT|O_TRUNC);
455 if (fd < 0) 455 if (fd < 0)
456 return; 456 return;
457 457
@@ -460,7 +460,7 @@ static void write_leases(void)
460 written_at = SWAP_BE64(written_at); 460 written_at = SWAP_BE64(written_at);
461 full_write(fd, &written_at, sizeof(written_at)); 461 full_write(fd, &written_at, sizeof(written_at));
462 462
463 for (i = 0; i < server_config.max_leases; i++) { 463 for (i = 0; i < server_data.max_leases; i++) {
464 leasetime_t tmp_time; 464 leasetime_t tmp_time;
465 465
466 if (g_leases[i].lease_nip == 0) 466 if (g_leases[i].lease_nip == 0)
@@ -483,10 +483,10 @@ static void write_leases(void)
483 } 483 }
484 close(fd); 484 close(fd);
485 485
486 if (server_config.notify_file) { 486 if (server_data.notify_file) {
487 char *argv[3]; 487 char *argv[3];
488 argv[0] = server_config.notify_file; 488 argv[0] = server_data.notify_file;
489 argv[1] = server_config.lease_file; 489 argv[1] = server_data.lease_file;
490 argv[2] = NULL; 490 argv[2] = NULL;
491 spawn_and_wait(argv); 491 spawn_and_wait(argv);
492 } 492 }
@@ -517,7 +517,7 @@ static NOINLINE void read_leases(const char *file)
517 517
518 while (full_read(fd, &lease, sizeof(lease)) == sizeof(lease)) { 518 while (full_read(fd, &lease, sizeof(lease)) == sizeof(lease)) {
519 uint32_t y = ntohl(lease.lease_nip); 519 uint32_t y = ntohl(lease.lease_nip);
520 if (y >= server_config.start_ip && y <= server_config.end_ip) { 520 if (y >= server_data.start_ip && y <= server_data.end_ip) {
521 signed_leasetime_t expires = ntohl(lease.expires) - (signed_leasetime_t)time_passed; 521 signed_leasetime_t expires = ntohl(lease.expires) - (signed_leasetime_t)time_passed;
522 uint32_t static_nip; 522 uint32_t static_nip;
523 523
@@ -590,9 +590,9 @@ static void send_packet_to_client(struct dhcp_packet *dhcp_pkt, int force_broadc
590 } 590 }
591 591
592 udhcp_send_raw_packet(dhcp_pkt, 592 udhcp_send_raw_packet(dhcp_pkt,
593 /*src*/ server_config.server_nip, SERVER_PORT, 593 /*src*/ server_data.server_nip, SERVER_PORT,
594 /*dst*/ ciaddr, CLIENT_PORT, chaddr, 594 /*dst*/ ciaddr, CLIENT_PORT, chaddr,
595 server_config.ifindex); 595 server_data.ifindex);
596} 596}
597 597
598/* Send a packet to gateway_nip using the kernel ip stack */ 598/* Send a packet to gateway_nip using the kernel ip stack */
@@ -601,7 +601,7 @@ static void send_packet_to_relay(struct dhcp_packet *dhcp_pkt)
601 log1("forwarding packet to relay"); 601 log1("forwarding packet to relay");
602 602
603 udhcp_send_kernel_packet(dhcp_pkt, 603 udhcp_send_kernel_packet(dhcp_pkt,
604 server_config.server_nip, SERVER_PORT, 604 server_data.server_nip, SERVER_PORT,
605 dhcp_pkt->gateway_nip, SERVER_PORT); 605 dhcp_pkt->gateway_nip, SERVER_PORT);
606} 606}
607 607
@@ -633,7 +633,7 @@ static void init_packet(struct dhcp_packet *packet, struct dhcp_packet *oldpacke
633 packet->flags = oldpacket->flags; 633 packet->flags = oldpacket->flags;
634 packet->gateway_nip = oldpacket->gateway_nip; 634 packet->gateway_nip = oldpacket->gateway_nip;
635 packet->ciaddr = oldpacket->ciaddr; 635 packet->ciaddr = oldpacket->ciaddr;
636 udhcp_add_simple_option(packet, DHCP_SERVER_ID, server_config.server_nip); 636 udhcp_add_simple_option(packet, DHCP_SERVER_ID, server_data.server_nip);
637} 637}
638 638
639/* Fill options field, siaddr_nip, and sname and boot_file fields. 639/* Fill options field, siaddr_nip, and sname and boot_file fields.
@@ -646,7 +646,7 @@ static void add_server_options(struct dhcp_packet *packet)
646 646
647 client_hostname_opt = NULL; 647 client_hostname_opt = NULL;
648 if (packet->yiaddr) { /* if we aren't from send_inform()... */ 648 if (packet->yiaddr) { /* if we aren't from send_inform()... */
649 struct static_lease *st_lease = server_config.static_leases; 649 struct static_lease *st_lease = server_data.static_leases;
650 while (st_lease) { 650 while (st_lease) {
651 if (st_lease->nip == packet->yiaddr) { 651 if (st_lease->nip == packet->yiaddr) {
652 if (st_lease->opt[0] != 0) 652 if (st_lease->opt[0] != 0)
@@ -657,7 +657,7 @@ static void add_server_options(struct dhcp_packet *packet)
657 } 657 }
658 } 658 }
659 659
660 config_opts = server_config.options; 660 config_opts = server_data.options;
661 while (config_opts) { 661 while (config_opts) {
662 if (config_opts->data[OPT_CODE] != DHCP_LEASE_TIME) { 662 if (config_opts->data[OPT_CODE] != DHCP_LEASE_TIME) {
663 /* ^^^^ 663 /* ^^^^
@@ -684,25 +684,25 @@ static void add_server_options(struct dhcp_packet *packet)
684 if (client_hostname_opt) 684 if (client_hostname_opt)
685 udhcp_add_binary_option(packet, client_hostname_opt); 685 udhcp_add_binary_option(packet, client_hostname_opt);
686 686
687 packet->siaddr_nip = server_config.siaddr_nip; 687 packet->siaddr_nip = server_data.siaddr_nip;
688 688
689 if (server_config.sname) 689 if (server_data.sname)
690 strncpy((char*)packet->sname, server_config.sname, sizeof(packet->sname) - 1); 690 strncpy((char*)packet->sname, server_data.sname, sizeof(packet->sname) - 1);
691 if (server_config.boot_file) 691 if (server_data.boot_file)
692 strncpy((char*)packet->file, server_config.boot_file, sizeof(packet->file) - 1); 692 strncpy((char*)packet->file, server_data.boot_file, sizeof(packet->file) - 1);
693} 693}
694 694
695static uint32_t select_lease_time(struct dhcp_packet *packet) 695static uint32_t select_lease_time(struct dhcp_packet *packet)
696{ 696{
697 uint32_t lease_time_sec = server_config.max_lease_sec; 697 uint32_t lease_time_sec = server_data.max_lease_sec;
698 uint8_t *lease_time_opt = udhcp_get_option32(packet, DHCP_LEASE_TIME); 698 uint8_t *lease_time_opt = udhcp_get_option32(packet, DHCP_LEASE_TIME);
699 if (lease_time_opt) { 699 if (lease_time_opt) {
700 move_from_unaligned32(lease_time_sec, lease_time_opt); 700 move_from_unaligned32(lease_time_sec, lease_time_opt);
701 lease_time_sec = ntohl(lease_time_sec); 701 lease_time_sec = ntohl(lease_time_sec);
702 if (lease_time_sec > server_config.max_lease_sec) 702 if (lease_time_sec > server_data.max_lease_sec)
703 lease_time_sec = server_config.max_lease_sec; 703 lease_time_sec = server_data.max_lease_sec;
704 if (lease_time_sec < server_config.min_lease_sec) 704 if (lease_time_sec < server_data.min_lease_sec)
705 lease_time_sec = server_config.min_lease_sec; 705 lease_time_sec = server_data.min_lease_sec;
706 } 706 }
707 return lease_time_sec; 707 return lease_time_sec;
708} 708}
@@ -737,8 +737,8 @@ static NOINLINE void send_offer(struct dhcp_packet *oldpacket,
737 /* Or: if client has requested an IP */ 737 /* Or: if client has requested an IP */
738 else if (requested_nip != 0 738 else if (requested_nip != 0
739 /* and the IP is in the lease range */ 739 /* and the IP is in the lease range */
740 && ntohl(requested_nip) >= server_config.start_ip 740 && ntohl(requested_nip) >= server_data.start_ip
741 && ntohl(requested_nip) <= server_config.end_ip 741 && ntohl(requested_nip) <= server_data.end_ip
742 /* and */ 742 /* and */
743 && ( !(lease = find_lease_by_nip(requested_nip)) /* is not already taken */ 743 && ( !(lease = find_lease_by_nip(requested_nip)) /* is not already taken */
744 || is_expired_lease(lease) /* or is taken, but expired */ 744 || is_expired_lease(lease) /* or is taken, but expired */
@@ -758,7 +758,7 @@ static NOINLINE void send_offer(struct dhcp_packet *oldpacket,
758 /* Reserve the IP for a short time hoping to get DHCPREQUEST soon */ 758 /* Reserve the IP for a short time hoping to get DHCPREQUEST soon */
759 p_host_name = (const char*) udhcp_get_option(oldpacket, DHCP_HOST_NAME); 759 p_host_name = (const char*) udhcp_get_option(oldpacket, DHCP_HOST_NAME);
760 lease = add_lease(packet.chaddr, packet.yiaddr, 760 lease = add_lease(packet.chaddr, packet.yiaddr,
761 server_config.offer_time, 761 server_data.offer_time,
762 p_host_name, 762 p_host_name,
763 p_host_name ? (unsigned char)p_host_name[OPT_LEN - OPT_DATA] : 0 763 p_host_name ? (unsigned char)p_host_name[OPT_LEN - OPT_DATA] : 0
764 ); 764 );
@@ -886,7 +886,7 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
886 } 886 }
887 if (opt & 4) { /* -I */ 887 if (opt & 4) { /* -I */
888 len_and_sockaddr *lsa = xhost_and_af2sockaddr(str_I, 0, AF_INET); 888 len_and_sockaddr *lsa = xhost_and_af2sockaddr(str_I, 0, AF_INET);
889 server_config.server_nip = lsa->u.sin.sin_addr.s_addr; 889 server_data.server_nip = lsa->u.sin.sin_addr.s_addr;
890 free(lsa); 890 free(lsa);
891 } 891 }
892#if ENABLE_FEATURE_UDHCP_PORT 892#if ENABLE_FEATURE_UDHCP_PORT
@@ -901,42 +901,42 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
901 * otherwise NOMMU machines will parse config twice */ 901 * otherwise NOMMU machines will parse config twice */
902 read_config(argv[0] ? argv[0] : DHCPD_CONF_FILE); 902 read_config(argv[0] ? argv[0] : DHCPD_CONF_FILE);
903 /* prevent poll timeout overflow */ 903 /* prevent poll timeout overflow */
904 if (server_config.auto_time > INT_MAX / 1000) 904 if (server_data.auto_time > INT_MAX / 1000)
905 server_config.auto_time = INT_MAX / 1000; 905 server_data.auto_time = INT_MAX / 1000;
906 906
907 /* Make sure fd 0,1,2 are open */ 907 /* Make sure fd 0,1,2 are open */
908 bb_sanitize_stdio(); 908 bb_sanitize_stdio();
909 909
910 /* Create pidfile */ 910 /* Create pidfile */
911 write_pidfile(server_config.pidfile); 911 write_pidfile(server_data.pidfile);
912 /* if (!..) bb_perror_msg("can't create pidfile %s", pidfile); */ 912 /* if (!..) bb_perror_msg("can't create pidfile %s", pidfile); */
913 913
914 bb_info_msg("started, v"BB_VER); 914 bb_info_msg("started, v"BB_VER);
915 915
916 option = udhcp_find_option(server_config.options, DHCP_LEASE_TIME); 916 option = udhcp_find_option(server_data.options, DHCP_LEASE_TIME);
917 server_config.max_lease_sec = DEFAULT_LEASE_TIME; 917 server_data.max_lease_sec = DEFAULT_LEASE_TIME;
918 if (option) { 918 if (option) {
919 move_from_unaligned32(server_config.max_lease_sec, option->data + OPT_DATA); 919 move_from_unaligned32(server_data.max_lease_sec, option->data + OPT_DATA);
920 server_config.max_lease_sec = ntohl(server_config.max_lease_sec); 920 server_data.max_lease_sec = ntohl(server_data.max_lease_sec);
921 } 921 }
922 922
923 /* Sanity check */ 923 /* Sanity check */
924 num_ips = server_config.end_ip - server_config.start_ip + 1; 924 num_ips = server_data.end_ip - server_data.start_ip + 1;
925 if (server_config.max_leases > num_ips) { 925 if (server_data.max_leases > num_ips) {
926 bb_error_msg("max_leases=%u is too big, setting to %u", 926 bb_error_msg("max_leases=%u is too big, setting to %u",
927 (unsigned)server_config.max_leases, num_ips); 927 (unsigned)server_data.max_leases, num_ips);
928 server_config.max_leases = num_ips; 928 server_data.max_leases = num_ips;
929 } 929 }
930 930
931 /* this sets g_leases */ 931 /* this sets g_leases */
932 SET_PTR_TO_GLOBALS(xzalloc(server_config.max_leases * sizeof(g_leases[0]))); 932 SET_PTR_TO_GLOBALS(xzalloc(server_data.max_leases * sizeof(g_leases[0])));
933 933
934 read_leases(server_config.lease_file); 934 read_leases(server_data.lease_file);
935 935
936 if (udhcp_read_interface(server_config.interface, 936 if (udhcp_read_interface(server_data.interface,
937 &server_config.ifindex, 937 &server_data.ifindex,
938 (server_config.server_nip == 0 ? &server_config.server_nip : NULL), 938 (server_data.server_nip == 0 ? &server_data.server_nip : NULL),
939 server_config.server_mac) 939 server_data.server_mac)
940 ) { 940 ) {
941 retval = 1; 941 retval = 1;
942 goto ret; 942 goto ret;
@@ -946,7 +946,7 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
946 udhcp_sp_setup(); 946 udhcp_sp_setup();
947 947
948 continue_with_autotime: 948 continue_with_autotime:
949 timeout_end = monotonic_sec() + server_config.auto_time; 949 timeout_end = monotonic_sec() + server_data.auto_time;
950 while (1) { /* loop until universe collapses */ 950 while (1) { /* loop until universe collapses */
951 struct pollfd pfds[2]; 951 struct pollfd pfds[2];
952 struct dhcp_packet packet; 952 struct dhcp_packet packet;
@@ -960,14 +960,14 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
960 960
961 if (server_socket < 0) { 961 if (server_socket < 0) {
962 server_socket = udhcp_listen_socket(/*INADDR_ANY,*/ SERVER_PORT, 962 server_socket = udhcp_listen_socket(/*INADDR_ANY,*/ SERVER_PORT,
963 server_config.interface); 963 server_data.interface);
964 } 964 }
965 965
966 udhcp_sp_fd_set(pfds, server_socket); 966 udhcp_sp_fd_set(pfds, server_socket);
967 967
968 new_tv: 968 new_tv:
969 tv = -1; 969 tv = -1;
970 if (server_config.auto_time) { 970 if (server_data.auto_time) {
971 tv = timeout_end - monotonic_sec(); 971 tv = timeout_end - monotonic_sec();
972 if (tv <= 0) { 972 if (tv <= 0) {
973 write_leases: 973 write_leases:
@@ -1037,7 +1037,7 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
1037 if (server_id_opt) { 1037 if (server_id_opt) {
1038 uint32_t server_id_network_order; 1038 uint32_t server_id_network_order;
1039 move_from_unaligned32(server_id_network_order, server_id_opt); 1039 move_from_unaligned32(server_id_network_order, server_id_opt);
1040 if (server_id_network_order != server_config.server_nip) { 1040 if (server_id_network_order != server_data.server_nip) {
1041 /* client talks to somebody else */ 1041 /* client talks to somebody else */
1042 log1("server ID doesn't match, ignoring"); 1042 log1("server ID doesn't match, ignoring");
1043 continue; 1043 continue;
@@ -1204,7 +1204,7 @@ o DHCPREQUEST generated during REBINDING state:
1204 && requested_nip == lease->lease_nip 1204 && requested_nip == lease->lease_nip
1205 ) { 1205 ) {
1206 memset(lease->lease_mac, 0, sizeof(lease->lease_mac)); 1206 memset(lease->lease_mac, 0, sizeof(lease->lease_mac));
1207 lease->expires = time(NULL) + server_config.decline_time; 1207 lease->expires = time(NULL) + server_data.decline_time;
1208 } 1208 }
1209 break; 1209 break;
1210 1210
@@ -1235,7 +1235,7 @@ o DHCPREQUEST generated during REBINDING state:
1235 ret0: 1235 ret0:
1236 retval = 0; 1236 retval = 0;
1237 ret: 1237 ret:
1238 /*if (server_config.pidfile) - server_config.pidfile is never NULL */ 1238 /*if (server_data.pidfile) - server_data.pidfile is never NULL */
1239 remove_pidfile(server_config.pidfile); 1239 remove_pidfile(server_data.pidfile);
1240 return retval; 1240 return retval;
1241} 1241}
diff --git a/networking/udhcp/dhcpd.h b/networking/udhcp/dhcpd.h
index ba11d77e8..b42849bbb 100644
--- a/networking/udhcp/dhcpd.h
+++ b/networking/udhcp/dhcpd.h
@@ -17,7 +17,7 @@ PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
17 17
18struct static_lease; 18struct static_lease;
19 19
20struct server_config_t { 20struct server_data_t {
21 char *interface; /* interface to use */ 21 char *interface; /* interface to use */
22//TODO: ifindex, server_nip, server_mac 22//TODO: ifindex, server_nip, server_mac
23// are obtained from interface name. 23// are obtained from interface name.
@@ -53,12 +53,12 @@ struct server_config_t {
53 struct static_lease *static_leases; /* List of ip/mac pairs to assign static leases */ 53 struct static_lease *static_leases; /* List of ip/mac pairs to assign static leases */
54} FIX_ALIASING; 54} FIX_ALIASING;
55 55
56#define server_config (*(struct server_config_t*)bb_common_bufsiz1) 56#define server_data (*(struct server_data_t*)bb_common_bufsiz1)
57/* client_data sits in 2nd half of bb_common_bufsiz1 */ 57/* client_data sits in 2nd half of bb_common_bufsiz1 */
58 58
59#if ENABLE_FEATURE_UDHCP_PORT 59#if ENABLE_FEATURE_UDHCP_PORT
60#define SERVER_PORT (server_config.port) 60#define SERVER_PORT (server_data.port)
61#define SERVER_PORT6 (server_config.port) 61#define SERVER_PORT6 (server_data.port)
62#else 62#else
63#define SERVER_PORT 67 63#define SERVER_PORT 67
64#define SERVER_PORT6 547 64#define SERVER_PORT6 547