Index: include/usage.h
===================================================================
RCS file: /var/cvs/busybox/include/usage.h,v
retrieving revision 1.191
diff -u -r1.191 usage.h
--- a/include/usage.h	25 Feb 2004 10:35:55 -0000	1.191
+++ b/include/usage.h	5 Mar 2004 14:32:45 -0000
@@ -2606,6 +2606,7 @@
 	"\t-p,\t--pidfile=file\tStore process ID of daemon in file\n" \
 	"\t-q,\t--quit\tQuit after obtaining lease\n" \
 	"\t-r,\t--request=IP\tIP address to request (default: none)\n" \
+	"\t-R,\t--require=NAME\tAdd NAME to request\n" \
 	"\t-s,\t--script=file\tRun file at dhcp events (default: /usr/share/udhcpc/default.script)\n" \
 	"\t-v,\t--version\tDisplay version"
 
Index: networking/udhcp/README.udhcpc
===================================================================
RCS file: /var/cvs/busybox/networking/udhcp/README.udhcpc,v
retrieving revision 1.3
diff -u -r1.3 README.udhcpc
--- a/networking/udhcp/README.udhcpc	11 Dec 2002 21:12:44 -0000	1.3
+++ b/networking/udhcp/README.udhcpc	5 Mar 2004 14:32:46 -0000
@@ -22,6 +22,7 @@
 -p, --pidfile=file              Store process ID of daemon in file
 -q, --quit                      Quit after obtaining lease
 -r, --request=IP                IP address to request (default: none)
+-R, --require=NAME              Add NAME to request
 -s, --script=file               Run file at dhcp events (default:
                                 /usr/share/udhcpc/default.script)
 -v, --version                   Display version
@@ -101,6 +102,8 @@
 
 additional options are easily added in options.c.
 
+By default, only a few basic items are requested. To request additional
+items use the -R option. Example: "-R rootpath"
 
 note on udhcpc's random seed
 ---------------------------
Index: networking/udhcp/dhcpc.c
===================================================================
RCS file: /var/cvs/busybox/networking/udhcp/dhcpc.c,v
retrieving revision 1.16
diff -u -r1.16 dhcpc.c
--- a/networking/udhcp/dhcpc.c	30 Jan 2004 23:45:12 -0000	1.16
+++ b/networking/udhcp/dhcpc.c	5 Mar 2004 14:32:46 -0000
@@ -88,6 +88,7 @@
 "  -p, --pidfile=file              Store process ID of daemon in file\n"
 "  -q, --quit                      Quit after obtaining lease\n"
 "  -r, --request=IP                IP address to request (default: none)\n"
+"  -R, --require=NAME              Add NAME to the request\n"
 "  -s, --script=file               Run file at dhcp events (default:\n"
 "                                  " DEFAULT_SCRIPT ")\n"
 "  -v, --version                   Display version\n"
@@ -203,6 +204,7 @@
 		{"pidfile",	required_argument,	0, 'p'},
 		{"quit",	no_argument,		0, 'q'},
 		{"request",	required_argument,	0, 'r'},
+		{"require",	required_argument,      0, 'R'},
 		{"script",	required_argument,	0, 's'},
 		{"version",	no_argument,		0, 'v'},
 		{0, 0, 0, 0}
@@ -211,7 +213,7 @@
 	/* get options */
 	while (1) {
 		int option_index = 0;
-		c = getopt_long(argc, argv, "c:fbH:h:i:np:qr:s:v", arg_options, &option_index);
+		c = getopt_long(argc, argv, "c:fbH:h:i:np:qr:R:s:v", arg_options, &option_index);
 		if (c == -1) break;
 		
 		switch (c) {
@@ -254,6 +256,11 @@
 		case 'r':
 			requested_ip = inet_addr(optarg);
 			break;
+		case 'R':
+			if (require_option(optarg)) {
+				fprintf(stderr,"WARNING: %s unknown/not-supported (Ignored)\n", optarg );
+			}
+			break;
 		case 's':
 			client_config.script = optarg;
 			break;
Index: networking/udhcp/options.c
===================================================================
RCS file: /var/cvs/busybox/networking/udhcp/options.c,v
retrieving revision 1.7
diff -u -r1.7 options.c
--- a/networking/udhcp/options.c	30 Jan 2004 23:45:12 -0000	1.7
+++ b/networking/udhcp/options.c	5 Mar 2004 14:32:46 -0000
@@ -57,7 +57,19 @@
 	[OPTION_S32] =		4
 };
 
-
+/* find and mark requested item as required */
+int require_option(char *name)
+{
+	int i;
+	for (i = 0; dhcp_options[i].code; i++) {
+		if (strcmp(name, dhcp_options[i].name) == 0 ){
+			dhcp_options[i].flags |= OPTION_REQ;
+			return 0;
+		}
+	}
+	return 1;
+}
+  
 /* get an option with bounds checking (warning, not aligned). */
 uint8_t *get_option(struct dhcpMessage *packet, int code)
 {
Index: networking/udhcp/options.h
===================================================================
RCS file: /var/cvs/busybox/networking/udhcp/options.h,v
retrieving revision 1.5
diff -u -r1.5 options.h
--- a/networking/udhcp/options.h	30 Jan 2004 23:45:12 -0000	1.5
+++ b/networking/udhcp/options.h	5 Mar 2004 14:32:46 -0000
@@ -30,6 +30,7 @@
 extern struct dhcp_option dhcp_options[];
 extern int option_lengths[];
 
+int require_option(char *name);
 uint8_t *get_option(struct dhcpMessage *packet, int code);
 int end_option(uint8_t *optionptr);
 int add_option_string(uint8_t *optionptr, uint8_t *string);
