aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--networking/udhcp/dhcpd.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/networking/udhcp/dhcpd.c b/networking/udhcp/dhcpd.c
index 9ad95954d..3c2a9cb4e 100644
--- a/networking/udhcp/dhcpd.c
+++ b/networking/udhcp/dhcpd.c
@@ -27,6 +27,7 @@
27//usage: "DHCP server\n" 27//usage: "DHCP server\n"
28//usage: "\n -f Run in foreground" 28//usage: "\n -f Run in foreground"
29//usage: "\n -S Log to syslog too" 29//usage: "\n -S Log to syslog too"
30//usage: "\n -I ADDR Local address"
30//usage: IF_FEATURE_UDHCP_PORT( 31//usage: IF_FEATURE_UDHCP_PORT(
31//usage: "\n -P N Use port N (default 67)" 32//usage: "\n -P N Use port N (default 67)"
32//usage: ) 33//usage: )
@@ -302,6 +303,7 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
302 unsigned num_ips; 303 unsigned num_ips;
303 unsigned opt; 304 unsigned opt;
304 struct option_set *option; 305 struct option_set *option;
306 char *str_I = str_I;
305 IF_FEATURE_UDHCP_PORT(char *str_P;) 307 IF_FEATURE_UDHCP_PORT(char *str_P;)
306 308
307#if ENABLE_FEATURE_UDHCP_PORT 309#if ENABLE_FEATURE_UDHCP_PORT
@@ -312,8 +314,10 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
312#if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 1 314#if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 1
313 opt_complementary = "vv"; 315 opt_complementary = "vv";
314#endif 316#endif
315 opt = getopt32(argv, "fSv" 317 opt = getopt32(argv, "fSI:v"
316 IF_FEATURE_UDHCP_PORT("P:", &str_P) 318 IF_FEATURE_UDHCP_PORT("P:")
319 , &str_I
320 IF_FEATURE_UDHCP_PORT(, &str_P)
317 IF_UDHCP_VERBOSE(, &dhcp_verbose) 321 IF_UDHCP_VERBOSE(, &dhcp_verbose)
318 ); 322 );
319 if (!(opt & 1)) { /* no -f */ 323 if (!(opt & 1)) { /* no -f */
@@ -326,8 +330,13 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
326 openlog(applet_name, LOG_PID, LOG_DAEMON); 330 openlog(applet_name, LOG_PID, LOG_DAEMON);
327 logmode |= LOGMODE_SYSLOG; 331 logmode |= LOGMODE_SYSLOG;
328 } 332 }
333 if (opt & 4) { /* -I */
334 len_and_sockaddr *lsa = xhost_and_af2sockaddr(str_I, 0, AF_INET);
335 server_config.server_nip = lsa->u.sin.sin_addr.s_addr;
336 free(lsa);
337 }
329#if ENABLE_FEATURE_UDHCP_PORT 338#if ENABLE_FEATURE_UDHCP_PORT
330 if (opt & 8) { /* -P */ 339 if (opt & 16) { /* -P */
331 SERVER_PORT = xatou16(str_P); 340 SERVER_PORT = xatou16(str_P);
332 CLIENT_PORT = SERVER_PORT + 1; 341 CLIENT_PORT = SERVER_PORT + 1;
333 } 342 }
@@ -367,7 +376,7 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
367 376
368 if (udhcp_read_interface(server_config.interface, 377 if (udhcp_read_interface(server_config.interface,
369 &server_config.ifindex, 378 &server_config.ifindex,
370 &server_config.server_nip, 379 (server_config.server_nip == 0 ? &server_config.server_nip : NULL),
371 server_config.server_mac) 380 server_config.server_mac)
372 ) { 381 ) {
373 retval = 1; 382 retval = 1;