[git commit] udhcpd: add -I LOCAL_ADDR option

Denys Vlasenko vda.linux at googlemail.com
Wed Mar 13 21:27:37 UTC 2013


commit: http://git.busybox.net/busybox/commit/?id=e3f5b73ad094775b0168108bb1fc443bc4b518b1
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 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 9ad9595..3c2a9cb 100644
--- a/networking/udhcp/dhcpd.c
+++ b/networking/udhcp/dhcpd.c
@@ -27,6 +27,7 @@
 //usage:       "DHCP server\n"
 //usage:     "\n	-f	Run in foreground"
 //usage:     "\n	-S	Log to syslog too"
+//usage:     "\n	-I ADDR	Local address"
 //usage:	IF_FEATURE_UDHCP_PORT(
 //usage:     "\n	-P N	Use port N (default 67)"
 //usage:	)
@@ -302,6 +303,7 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
 	unsigned num_ips;
 	unsigned opt;
 	struct option_set *option;
+	char *str_I = str_I;
 	IF_FEATURE_UDHCP_PORT(char *str_P;)
 
 #if ENABLE_FEATURE_UDHCP_PORT
@@ -312,8 +314,10 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
 #if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 1
 	opt_complementary = "vv";
 #endif
-	opt = getopt32(argv, "fSv"
-		IF_FEATURE_UDHCP_PORT("P:", &str_P)
+	opt = getopt32(argv, "fSI:v"
+		IF_FEATURE_UDHCP_PORT("P:")
+		, &str_I
+		IF_FEATURE_UDHCP_PORT(, &str_P)
 		IF_UDHCP_VERBOSE(, &dhcp_verbose)
 		);
 	if (!(opt & 1)) { /* no -f */
@@ -326,8 +330,13 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
 		openlog(applet_name, LOG_PID, LOG_DAEMON);
 		logmode |= LOGMODE_SYSLOG;
 	}
+	if (opt & 4) { /* -I */
+		len_and_sockaddr *lsa = xhost_and_af2sockaddr(str_I, 0, AF_INET);
+		server_config.server_nip = lsa->u.sin.sin_addr.s_addr;
+		free(lsa);
+	}
 #if ENABLE_FEATURE_UDHCP_PORT
-	if (opt & 8) { /* -P */
+	if (opt & 16) { /* -P */
 		SERVER_PORT = xatou16(str_P);
 		CLIENT_PORT = SERVER_PORT + 1;
 	}
@@ -367,7 +376,7 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
 
 	if (udhcp_read_interface(server_config.interface,
 			&server_config.ifindex,
-			&server_config.server_nip,
+			(server_config.server_nip == 0 ? &server_config.server_nip : NULL),
 			server_config.server_mac)
 	) {
 		retval = 1;


More information about the busybox-cvs mailing list