diff options
-rw-r--r-- | networking/udhcp/dhcpd.c | 17 |
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; |