svn commit: trunk/busybox: include networking networking/udhcp

vda at busybox.net vda at busybox.net
Wed Apr 2 13:04:20 UTC 2008


Author: vda
Date: 2008-04-02 06:04:19 -0700 (Wed, 02 Apr 2008)
New Revision: 21619

Log:
udhcpc: add -o "do not request options by default" switch
(by L. Gabriel Somlo <somlo AT cmu.edu>)

function                                             old     new   delta
udhcpc_main                                         2513    2554     +41
static.udhcpc_longopts                               226     247     +21
add_param_req_option                                 119     132     +13
packed_usage                                       23952   23964     +12
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 4/0 up/down: 87/0)               Total: 87 bytes



Modified:
   trunk/busybox/include/usage.h
   trunk/busybox/networking/ifupdown.c
   trunk/busybox/networking/udhcp/clientpacket.c
   trunk/busybox/networking/udhcp/dhcpc.c
   trunk/busybox/networking/udhcp/dhcpc.h
   trunk/busybox/networking/udhcp/files.c


Changeset:
Modified: trunk/busybox/include/usage.h
===================================================================
--- trunk/busybox/include/usage.h	2008-04-02 00:18:57 UTC (rev 21618)
+++ trunk/busybox/include/usage.h	2008-04-02 13:04:19 UTC (rev 21619)
@@ -4116,7 +4116,7 @@
        "Adjust filesystem options on ext[23] filesystems"
 
 #define udhcpc_trivial_usage \
-       "[-Cfbnqtv] [-c CID] [-V VCLS] [-H HOSTNAME] [-i INTERFACE]\n" \
+       "[-Cfbnqtvo] [-c CID] [-V VCLS] [-H HOSTNAME] [-i INTERFACE]\n" \
        "	[-p pidfile] [-r IP] [-s script] [-O dhcp-option]..." USE_FEATURE_UDHCP_PORT(" [-P N]")
 #define udhcpc_full_usage \
 	USE_GETOPT_LONG( \
@@ -4127,17 +4127,18 @@
      "\n	-C,--clientid-none	Suppress default client identifier" \
      "\n	-p,--pidfile=file	Create pidfile" \
      "\n	-r,--request=IP		IP address to request" \
-     "\n	-s,--script=file	Run file at dhcp events (default /usr/share/udhcpc/default.script)" \
+     "\n	-s,--script=file	Run file at DHCP events (default "CONFIG_DHCPC_DEFAULT_SCRIPT")" \
      "\n	-t,--retries=N		Send up to N request packets" \
      "\n	-T,--timeout=N		Try to get a lease for N seconds (default 3)" \
      "\n	-A,--tryagain=N		Wait N seconds (default 20) after failure" \
+     "\n	-O,--request-option=OPT	Request DHCP option OPT (cumulative)" \
+     "\n	-o,--no-default-options	Do not request any options (unless -O is also given)" \
      "\n	-f,--foreground	Run in foreground" \
      "\n	-b,--background	Background if lease is not immediately obtained" \
      "\n	-S,--syslog	Log to syslog too" \
      "\n	-n,--now	Exit with failure if lease is not immediately obtained" \
      "\n	-q,--quit	Quit after obtaining lease" \
      "\n	-R,--release	Release IP on quit" \
-     "\n	-O,--request-option=OPT	Request DHCP option OPT from server" \
 	USE_FEATURE_UDHCP_PORT( \
      "\n	-P,--client-port N  Use port N instead of default 68" \
 	) \
@@ -4153,17 +4154,18 @@
      "\n	-C		Suppress default client identifier" \
      "\n	-p file		Create pidfile" \
      "\n	-r IP		IP address to request" \
-     "\n	-s file		Run file at dhcp events (default /usr/share/udhcpc/default.script)" \
+     "\n	-s file		Run file at DHCP events (default "CONFIG_DHCPC_DEFAULT_SCRIPT")" \
      "\n	-t N		Send up to N request packets" \
      "\n	-T N		Try to get a lease for N seconds (default 3)" \
      "\n	-A N		Wait N seconds (default 20) after failure" \
+     "\n	-O OPT		Request DHCP option OPT (cumulative)" \
+     "\n	-o		Do not request any options (unless -O is also given)" \
      "\n	-f		Run in foreground" \
      "\n	-b		Background if lease is not immediately obtained" \
      "\n	-S		Log to syslog too" \
      "\n	-n		Exit with failure if lease is not immediately obtained" \
      "\n	-q		Quit after obtaining lease" \
      "\n	-R		Release IP on quit" \
-     "\n	-O OPT		Request DHCP option OPT from server" \
 	USE_FEATURE_UDHCP_PORT( \
      "\n	-P N		Use port N instead of default 68" \
 	) \

Modified: trunk/busybox/networking/ifupdown.c
===================================================================
--- trunk/busybox/networking/ifupdown.c	2008-04-02 00:18:57 UTC (rev 21618)
+++ trunk/busybox/networking/ifupdown.c	2008-04-02 13:04:19 UTC (rev 21619)
@@ -476,7 +476,8 @@
 		"pump -i %iface% -k",
 	},
 	{ "udhcpc",
-		"udhcpc -R -n -p /var/run/udhcpc.%iface%.pid -i %iface%[[ -H %hostname%]][[ -c %clientid%]][[ -s %script%]][[ -t %retries%]]",
+		"udhcpc -R -n -p /var/run/udhcpc.%iface%.pid -i %iface%[[ -H %hostname%]][[ -c %clientid%]]"
+				"[[ -s %script%]][[ %udhcpc_opts%]]",
 		"kill `cat /var/run/udhcpc.%iface%.pid` 2>/dev/null",
 	},
 };
@@ -507,7 +508,7 @@
 		return 0;
 #endif
 	return execute("udhcpc -R -n -p /var/run/udhcpc.%iface%.pid "
-			"-i %iface%[[ -H %hostname%]][[ -c %clientid%]][[ -s %script%]][[ -t %retries%]]",
+			"-i %iface%[[ -H %hostname%]][[ -c %clientid%]][[ -s %script%]][[ %udhcpc_opts%]]",
 			ifd, exec);
 }
 #else

Modified: trunk/busybox/networking/udhcp/clientpacket.c
===================================================================
--- trunk/busybox/networking/udhcp/clientpacket.c	2008-04-02 00:18:57 UTC (rev 21618)
+++ trunk/busybox/networking/udhcp/clientpacket.c	2008-04-02 13:04:19 UTC (rev 21619)
@@ -62,17 +62,20 @@
 	int end = end_option(packet->options);
 	int i, len = 0;
 
-	packet->options[end + OPT_CODE] = DHCP_PARAM_REQ;
 	for (i = 0; (c = dhcp_options[i].code) != 0; i++) {
-		if ((dhcp_options[i].flags & OPTION_REQ)
+		if (((dhcp_options[i].flags & OPTION_REQ)
+                     && !client_config.no_default_options)
 		 || (client_config.opt_mask[c >> 3] & (1 << (c & 7)))
 		) {
 			packet->options[end + OPT_DATA + len] = c;
 			len++;
 		}
 	}
-	packet->options[end + OPT_LEN] = len;
-	packet->options[end + OPT_DATA + len] = DHCP_END;
+	if (len) {
+		packet->options[end + OPT_CODE] = DHCP_PARAM_REQ;
+		packet->options[end + OPT_LEN] = len;
+		packet->options[end + OPT_DATA + len] = DHCP_END;
+	}
 }
 
 
@@ -107,7 +110,9 @@
 	/* Explicitly saying that we want RFC-compliant packets helps
 	 * some buggy DHCP servers to NOT send bigger packets */
 	add_simple_option(packet.options, DHCP_MAX_SIZE, htons(576));
+
 	add_param_req_option(&packet);
+
 	bb_info_msg("Sending discover...");
 	return udhcp_send_raw_packet(&packet, INADDR_ANY, CLIENT_PORT, INADDR_BROADCAST,
 			SERVER_PORT, MAC_BCAST_ADDR, client_config.ifindex);
@@ -125,8 +130,8 @@
 
 	add_simple_option(packet.options, DHCP_REQUESTED_IP, requested);
 	add_simple_option(packet.options, DHCP_SERVER_ID, server);
+	add_param_req_option(&packet);
 
-	add_param_req_option(&packet);
 	addr.s_addr = requested;
 	bb_info_msg("Sending select for %s...", inet_ntoa(addr));
 	return udhcp_send_raw_packet(&packet, INADDR_ANY, CLIENT_PORT, INADDR_BROADCAST,

Modified: trunk/busybox/networking/udhcp/dhcpc.c
===================================================================
--- trunk/busybox/networking/udhcp/dhcpc.c	2008-04-02 00:18:57 UTC (rev 21618)
+++ trunk/busybox/networking/udhcp/dhcpc.c	2008-04-02 13:04:19 UTC (rev 21619)
@@ -182,6 +182,7 @@
 		OPT_W = 1 << 21,
 #endif
 		OPT_P = 1 << 22,
+		OPT_o = 1 << 23,
 	};
 #if ENABLE_GETOPT_LONG
 	static const char udhcpc_longopts[] ALIGN1 =
@@ -211,6 +212,7 @@
 #if ENABLE_FEATURE_UDHCP_PORT
 		"client-port\0"	   Required_argument "P"
 #endif
+		"no-default-options\0" No_argument   "o"
 		;
 #endif
 	/* Default options. */
@@ -230,7 +232,7 @@
 	opt = getopt32(argv, "c:CV:fbH:h:F:i:np:qRr:s:T:t:vSA:"
 		USE_FEATURE_UDHCPC_ARPING("aW:")
 		USE_FEATURE_UDHCP_PORT("P:")
-		"O:"
+		"O:o"
 		, &str_c, &str_V, &str_h, &str_h, &str_F
 		, &client_config.interface, &client_config.pidfile, &str_r
 		, &client_config.script
@@ -291,6 +293,8 @@
 		SERVER_PORT = CLIENT_PORT - 1;
 	}
 #endif
+	if (opt & OPT_o)
+		client_config.no_default_options = 1;
 	while (list_O) {
 		int n = index_in_strings(dhcp_option_strings, list_O->data);
 		if (n < 0)

Modified: trunk/busybox/networking/udhcp/dhcpc.h
===================================================================
--- trunk/busybox/networking/udhcp/dhcpc.h	2008-04-02 00:18:57 UTC (rev 21618)
+++ trunk/busybox/networking/udhcp/dhcpc.h	2008-04-02 13:04:19 UTC (rev 21619)
@@ -21,6 +21,7 @@
 	char release_on_quit;           /* Perform release on quit */
 	char abort_if_no_lease;         /* Abort if no lease */
 	char background_if_no_lease;    /* Fork to background if no lease */
+	char no_default_options;        /* Do not include default optins in request */
 	const char *interface;          /* The name of the interface to use */
 	char *pidfile;                  /* Optionally store the process ID */
 	const char *script;             /* User script to run at dhcp events */

Modified: trunk/busybox/networking/udhcp/files.c
===================================================================
--- trunk/busybox/networking/udhcp/files.c	2008-04-02 00:18:57 UTC (rev 21618)
+++ trunk/busybox/networking/udhcp/files.c	2008-04-02 13:04:19 UTC (rev 21619)
@@ -396,6 +396,7 @@
 	close(fp);
 
 	if (server_config.notify_file) {
+// TODO: vfork-based child creation
 		char *cmd = xasprintf("%s %s", server_config.notify_file, server_config.lease_file);
 		system(cmd);
 		free(cmd);
@@ -406,7 +407,7 @@
 void read_leases(const char *file)
 {
 	int fp;
-	unsigned int i = 0;
+	unsigned i;
 	struct dhcpOfferedAddr lease;
 
 	fp = open_or_warn(file, O_RDONLY);
@@ -414,6 +415,7 @@
 		return;
 	}
 
+	i = 0;
 	while (i < server_config.max_leases
 	 && full_read(fp, &lease, sizeof(lease)) == sizeof(lease)
 	) {
@@ -422,7 +424,7 @@
 		if (y >= server_config.start_ip && y <= server_config.end_ip) {
 			lease.expires = ntohl(lease.expires);
 			if (!server_config.remaining)
-				lease.expires -= time(0);
+				lease.expires -= time(NULL);
 			if (!(add_lease(lease.chaddr, lease.yiaddr, lease.expires))) {
 				bb_error_msg("too many leases while loading %s", file);
 				break;




More information about the busybox-cvs mailing list