diff --git a/dhcp-3.0.5-dhclient-usage.patch b/dhcp-3.0.5-dhclient-usage.patch deleted file mode 100644 index 7240394..0000000 --- a/dhcp-3.0.5-dhclient-usage.patch +++ /dev/null @@ -1,42 +0,0 @@ ---- dhcp-3.0.5/client/dhclient.c.usage 2007-04-17 10:43:00.000000000 -0400 -+++ dhcp-3.0.5/client/dhclient.c 2007-04-17 10:43:30.000000000 -0400 -@@ -819,20 +819,29 @@ - - static void usage () - { -- log_info ("%s %s", message, DHCP_VERSION); -- log_info (copyright); -- log_info (arr); -- log_info (url); -+ printf ("%s %s\n", message, DHCP_VERSION); -+ printf (copyright); -+ printf ("\n"); -+ printf (arr); -+ printf ("\n"); -+ printf (url); -+ printf ("\n"); - - #ifdef EXTENDED_NEW_OPTION_INFO -- log_error ("Usage: dhclient [-1dqr] [-nwx] [-p ] %s", -+ printf ("Usage: dhclient [-1dqr] [-nwx] [-p ] %s", - #else -- log_error ("Usage: dhclient [-1dqr] [-nw] [-p ] %s", -+ printf ("Usage: dhclient [-1dqr] [-nw] [-p ] %s", - #endif -- "[-s server]"); -- log_error (" [-cf config-file] [-lf lease-file]%s", -- "[-pf pid-file] [-e VAR=val]"); -- log_fatal (" [-sf script-file] [interface]"); -+ "[-s server]"); -+ printf (" [-cf config-file] [-lf lease-file]%s", -+ "[-pf pid-file] [-e VAR=val]"); -+ printf (" [ -I ] [-B]\n"); -+ printf (" [ -H | -F ] [ -T ]\n"); -+ printf (" [ -V ]\n"); -+ printf (" [ -R ]\n"); -+ printf (" [-sf script-file] [interface]\n"); -+ -+ exit (EXIT_FAILURE); - } - - isc_result_t find_class (struct class **c, diff --git a/dhcp-3.0.5-extended-new-option-info.patch b/dhcp-3.0.5-extended-new-option-info.patch deleted file mode 100644 index 04af71d..0000000 --- a/dhcp-3.0.5-extended-new-option-info.patch +++ /dev/null @@ -1,210 +0,0 @@ ---- dhcp-3.0.5/client/dhclient.c.enoi 2007-03-30 16:27:32.000000000 -0400 -+++ dhcp-3.0.5/client/dhclient.c 2007-03-30 16:27:51.000000000 -0400 -@@ -74,6 +74,9 @@ - int onetry=0; - int quiet=0; - int nowait=0; -+#ifdef EXTENDED_NEW_OPTION_INFO -+int extended_option_environment = 0; -+#endif - - static void usage PROTO ((void)); - -@@ -203,6 +206,11 @@ - } else if (!strcmp (argv [i], "--version")) { - log_info ("isc-dhclient-%s", DHCP_VERSION); - exit (0); -+#ifdef EXTENDED_NEW_OPTION_INFO -+ } else if (!strcmp (argv [i], "-x")) { -+ extended_option_environment = 1; -+ new_option_info_tree = GENERATE_NEW_OPTION_INFO; -+#endif - } else if (argv [i][0] == '-') { - usage (); - } else { -@@ -475,7 +483,11 @@ - log_info (arr); - log_info (url); - -+#ifdef EXTENDED_NEW_OPTION_INFO -+ log_error ("Usage: dhclient [-1dqr] [-nwx] [-p ] %s", -+#else - log_error ("Usage: dhclient [-1dqr] [-nw] [-p ] %s", -+#endif - "[-s server]"); - log_error (" [-cf config-file] [-lf lease-file]%s", - "[-pf pid-file] [-e VAR=val]"); -@@ -2426,8 +2438,30 @@ - struct envadd_state { - struct client_state *client; - const char *prefix; -+#ifdef EXTENDED_NEW_OPTION_INFO -+ struct universe *universe; -+#endif - }; - -+#ifdef EXTENDED_NEW_OPTION_INFO -+static -+void build_universe_info_envvar -+( struct option_cache *oc, -+ struct packet *p, struct lease *l, -+ struct client_state *client, -+ struct option_state *in_o, -+ struct option_state *cf_o, -+ struct binding_scope **scope, -+ struct universe *u, void *es -+) -+{ -+ char info_name[512], info_data[512]; -+ snprintf(info_name, 512, "%s._universe_.", oc->option->universe->name); -+ snprintf(info_data, 512, "%u:%s", oc->option->code,oc->option->format); -+ client_envadd( client, info_name, oc->option->name, info_data ); -+} -+#endif -+ - void client_option_envadd (struct option_cache *oc, - struct packet *packet, struct lease *lease, - struct client_state *client_state, -@@ -2444,6 +2478,28 @@ - in_options, cfg_options, scope, oc, MDL)) { - if (data.len) { - char name [256]; -+#ifdef EXTENDED_NEW_OPTION_INFO -+ if (extended_option_environment) { -+ if ((oc->option->universe != &dhcp_universe) -+ && (oc->option->universe->index > fqdn_universe.index) -+ && (es->universe != oc->option->universe)) { -+ es->universe = oc->option->universe; -+ (*(es->universe->foreach)) ((struct packet *)0, -+ (struct lease *)0, -+ client_state, -+ in_options, cfg_options, -+ scope, es->universe, es, -+ build_universe_info_envvar); -+ } else { -+ if (lookup_new_option_info(oc->option) != NULL) { -+ build_universe_info_envvar(oc, packet, lease, -+ client_state, in_options, -+ cfg_options, scope, -+ oc->option->universe, es); -+ } -+ } -+ } -+#endif - if (dhcp_option_ev_name (name, sizeof name, - oc -> option)) { - client_envadd (es -> client, es -> prefix, -@@ -2470,6 +2526,7 @@ - - es.client = client; - es.prefix = prefix; -+ es.universe = NULL; - - client_envadd (client, - prefix, "ip_address", "%s", piaddr (lease -> address)); -@@ -2679,7 +2736,14 @@ - s = option -> name; - if (j + 1 == buflen) - return 0; -+#ifdef EXTENDED_NEW_OPTION_INFO -+ if (!extended_option_environment) -+ buf[j++] = '_'; -+ else -+ buf[j++] = '.'; -+#else - buf [j++] = '_'; -+#endif - } - ++i; - } while (i != 2); ---- dhcp-3.0.5/client/dhclient.8.enoi 2005-09-14 12:03:33.000000000 -0400 -+++ dhcp-3.0.5/client/dhclient.8 2007-03-30 16:27:32.000000000 -0400 -@@ -82,6 +82,9 @@ - .B -w - ] - [ -+.B -x -+] -+[ - .I if0 - [ - .I ...ifN -@@ -265,6 +268,11 @@ - supplying the - .B -nw - flag. -+.PP -+The -x argument enables extended option information to be created in the -+-s dhclient-script environment, which would allow applications running -+in that environment to handle options they do not know about in advance - -+this is a Red Hat extension to support dhcdbd and NetworkManager. - .SH CONFIGURATION - The syntax of the dhclient.conf(5) file is discussed separately. - .SH OMAPI ---- dhcp-3.0.5/common/parse.c.enoi 2007-03-30 16:27:32.000000000 -0400 -+++ dhcp-3.0.5/common/parse.c 2007-03-30 16:27:32.000000000 -0400 -@@ -1266,6 +1266,10 @@ - option_hash_add (option -> universe -> hash, - (const char *)option -> name, - 0, option, MDL); -+#ifdef EXTENDED_NEW_OPTION_INFO -+ if (new_option_info_tree != NULL) -+ add_new_option_info(option); -+#endif - return 1; - } - ---- dhcp-3.0.5/common/tables.c.enoi 2006-02-22 17:43:27.000000000 -0500 -+++ dhcp-3.0.5/common/tables.c 2007-03-30 16:27:32.000000000 -0400 -@@ -1250,3 +1250,35 @@ - fqdn_universe.name, 0, - &fqdn_universe, MDL); - } -+ -+#ifdef EXTENDED_NEW_OPTION_INFO -+#include -+ -+void *new_option_info_tree = NULL; -+ -+static int new_option_info_comparator(const void * p1, const void * p2) { -+ uint32_t ocode1 = (((const struct option*)p1)->universe->index << 8) -+ | (((const struct option*)p1)->code), -+ ocode2 = (((const struct option*)p2)->universe->index << 8) -+ | (((const struct option*)p2)->code); -+ -+ return((ocode1 == ocode2) ? 0 : ((ocode1 > ocode2) ? 1 : -1)); -+} -+ -+void *add_new_option_info(struct option * option) { -+ if (option->universe->index >= fqdn_universe.index) -+ return NULL; -+ -+ if (new_option_info_tree == GENERATE_NEW_OPTION_INFO) -+ new_option_info_tree = NULL; -+ -+ return tsearch(option, &(new_option_info_tree), new_option_info_comparator); -+} -+ -+void *lookup_new_option_info(struct option * option) { -+ if (new_option_info_tree == GENERATE_NEW_OPTION_INFO) -+ return NULL; -+ -+ return tfind(option, &(new_option_info_tree), new_option_info_comparator); -+} -+#endif ---- dhcp-3.0.5/includes/dhcpd.h.enoi 2006-05-17 16:16:59.000000000 -0400 -+++ dhcp-3.0.5/includes/dhcpd.h 2007-03-30 16:27:32.000000000 -0400 -@@ -1811,6 +1811,13 @@ - void initialize_common_option_spaces PROTO ((void)); - struct universe *config_universe; - -+#ifdef EXTENDED_NEW_OPTION_INFO -+#define GENERATE_NEW_OPTION_INFO ((void*)1) -+extern void *new_option_info_tree; -+extern void *add_new_option_info(struct option *); -+extern void *lookup_new_option_info(struct option *); -+#endif -+ - /* stables.c */ - #if defined (FAILOVER_PROTOCOL) - extern failover_option_t null_failover_option; diff --git a/dhcp-3.0.5-libdhcp4client.patch b/dhcp-3.0.5-libdhcp4client.patch deleted file mode 100644 index ee9beb0..0000000 --- a/dhcp-3.0.5-libdhcp4client.patch +++ /dev/null @@ -1,1082 +0,0 @@ ---- dhcp-3.0.5/client/dhclient.c.libdhcp4client 2007-03-30 20:54:06.000000000 -0400 -+++ dhcp-3.0.5/client/dhclient.c 2007-03-30 20:54:34.000000000 -0400 -@@ -85,16 +85,52 @@ - #endif - int bootp_broadcast_always = 0; - -+#ifdef LIBDHCP -+FILE *leaseFile = NULL; -+#endif -+ - extern u_int32_t default_requested_options[]; - - static void usage PROTO ((void)); - - void do_release(struct client_state *); - -+#ifdef LIBDHCP -+#include "libdhcp_control.h" -+LIBDHCP_Control *libdhcp_control; -+static void libdhcp_dispatch(void) -+{ -+ struct timeval tv = { 0, 0 }, *tvp; -+ isc_result_t status; -+ -+ /* Wait for a packet, or a timeout, or libdhcp being finished */ -+ do { -+ tvp = process_outstanding_timeouts(&tv); -+ status = omapi_one_dispatch(0, tvp); -+ -+ if (libdhcp_control && ((status == ISC_R_TIMEDOUT) || (libdhcp_control->timeout && (time(NULL) >= (libdhcp_control->timeout + libdhcp_control->now))))) { -+ if (libdhcp_control->callback) -+ libdhcp_control->callback(libdhcp_control, DHC_TIMEDOUT, NULL); -+ -+ break; -+ } -+ } while ((status != ISC_R_TIMEDOUT) && ((!libdhcp_control) || (!(libdhcp_control->finished)))); -+} -+ -+extern void omapi_free_all_pointers(void); -+ -+__attribute__ ((visibility ("default"))) -+int dhcpv4_client (libdhcp_ctl, argc, argv, envp) -+ LIBDHCP_Control *libdhcp_ctl; -+#else - int main (argc, argv, envp) -+#endif - int argc; - char **argv, **envp; - { -+#ifdef LIBDHCP -+ libdhcp_control = libdhcp_ctl; -+#endif - int i; - struct servent *ent; - struct interface_info *ip; -@@ -122,6 +158,7 @@ - char *arg_conf = NULL; - int arg_conf_len = 0; - -+#ifndef LIBDHCP - /* Make sure we have stdin, stdout and stderr. */ - i = open ("/dev/null", O_RDWR); - if (i == 0) -@@ -142,6 +179,7 @@ - #if !(defined (DEBUG) || defined (SYSLOG_4_2) || defined (__CYGWIN32__)) - setlogmask (LOG_UPTO (LOG_INFO)); - #endif -+#endif - - /* Set up the OMAPI. */ - status = omapi_init (); -@@ -439,8 +477,12 @@ - } - } - -+#ifdef LIBDHCP -+ if (libdhcp_control && (libdhcp_control->capability & DHCP_USE_PID_FILE)) -+#endif - write_client_pid_file(); - -+#ifndef LIBDHCP - if (!quiet) { - log_info ("%s %s", message, DHCP_VERSION); - log_info (copyright); -@@ -449,6 +491,7 @@ - log_info ("%s", ""); - } else - log_perror = 0; -+#endif - - /* If we're given a relay agent address to insert, for testing - purposes, figure out what it is. */ -@@ -683,11 +726,17 @@ - arg_conf_len = 0; - } - -+#ifdef LIBDHCP -+ if (libdhcp_control && (libdhcp_control->capability & DHCP_USE_LEASE_DATABASE)) { -+#endif - /* Parse the lease database. */ - read_client_leases (); - - /* Rewrite the lease database... */ - rewrite_client_leases (); -+#ifdef LIBDHCP -+ } -+#endif - - /* XXX */ - /* config_counter(&snd_counter, &rcv_counter); */ -@@ -706,7 +755,7 @@ - if (!persist) { - /* Nothing more to do. */ - log_info ("No broadcast interfaces found - exiting."); -- exit (0); -+ return (0); - } - } else if (!release_mode) { - /* Call the script with the list of interfaces. */ -@@ -800,6 +849,7 @@ - dmalloc_outstanding = 0; - #endif - -+#ifndef LIBDHCP - /* If we're not supposed to wait before getting the address, - don't. */ - if (nowait) -@@ -812,6 +862,128 @@ - - /* Start dispatching packets and timeouts... */ - dispatch (); -+#else -+ if (libdhcp_control) { -+ if (libdhcp_control->timeout) -+ libdhcp_control->now = time(NULL); -+ else -+ libdhcp_control->now = 0; -+ } -+ -+ libdhcp_dispatch(); -+ -+ /* libdhcp is finished with us. */ -+ -+ /* close all file descriptors: */ -+ for (ip = interfaces; ip; ip = ip->next) { -+ shutdown(ip->wfdesc, SHUT_RDWR); -+ close(ip->wfdesc); -+ -+ if (ip->rfdesc != ip->wfdesc) -+ close(ip->rfdesc); -+ } -+ -+ if (fallback_interface != 0) { -+ ip = fallback_interface; -+ shutdown(ip->wfdesc, SHUT_RDWR); -+ close(ip->wfdesc); -+ -+ if (ip->rfdesc != ip->wfdesc) -+ close(ip->rfdesc); -+ } -+ -+ if (leaseFile) -+ fclose (leaseFile); -+ -+ closelog(); -+ -+ char *current_pid_file = _PATH_DHCLIENT_PID; -+ -+ /* Free ALL allocated memory: */ -+ omapi_free_all_pointers(); -+ -+ /* Re-Initialize globals: */ -+ client_env = 0; -+ client_env_count = 0; -+ default_lease_time = 43200; -+ -+ dhcp_max_agent_option_packet_length = 0; -+ extended_option_environment = 0; -+ iaddr_any.len = 4; -+ memset(&(iaddr_any.iabuf[0]), '\0', 4); -+ iaddr_broadcast.len = 4; -+ memset(&(iaddr_broadcast.iabuf[0]), 0xff, 4); -+ interfaces_requested = 0; -+ leaseFile = 0; -+ -+ libdhcp_control = 0; -+ -+ local_port = 0; -+ no_daemon = 0; -+ nowait = 0; -+ onetry = 0; -+ quiet = 0; -+ max_lease_time = 86400; -+ path_dhclient_conf = _PATH_DHCLIENT_CONF; -+ path_dhclient_db = _PATH_DHCLIENT_DB; -+ path_dhclient_pid = _PATH_DHCLIENT_PID; -+ strcpy(&(path_dhclient_script_array[0]), _PATH_DHCLIENT_SCRIPT); -+ path_dhclient_script = path_dhclient_script_array; -+ remote_port = 0; -+ resolver_inited = 0; -+ new_option_info_tree = 0; -+ log_perror = 1; -+ global_scope = NULL; -+ root_group = NULL; -+ group_name_hash = NULL; -+ interfaces = NULL; -+ dummy_interfaces = NULL; -+ fallback_interface = NULL; -+ extern int have_setup_fallback; -+ have_setup_fallback = 0; -+ quiet_interface_discovery = 1; -+#ifndef LIBDHCP -+ timeouts = NULL; -+#endif -+ dhcp_type_interface = NULL; -+ interface_vector = NULL; -+ interface_count = 0; -+ interface_max = 0; -+ name_servers = 0; -+ domains = 0; -+ dhcp_type_interface = NULL; -+ dhcp_type_group = NULL; -+ dhcp_type_shared_network = NULL; -+ dhcp_type_control = NULL; -+ memset(&dhcp_universe, '\0', sizeof(struct universe)); -+ memset(&nwip_universe, '\0', sizeof(struct universe)); -+ memset(&fqdn_universe, '\0', sizeof(struct universe)); -+ universe_hash = 0; -+ universes = 0; -+ universe_count = 0; -+ universe_max = 0; -+ config_universe = 0; -+ extern struct hash_bucket *free_hash_buckets; -+ free_hash_buckets = NULL; -+ extern struct dhcp_packet *dhcp_free_list; -+ dhcp_free_list = NULL; -+ extern struct packet *packet_free_list; -+ packet_free_list = NULL; -+ extern struct binding_value *free_binding_values; -+ free_binding_values = NULL; -+ extern struct expression *free_expressions; -+ free_expressions = NULL; -+ extern struct option_cache *free_option_caches; -+ free_option_caches = NULL; -+ extern struct packet *free_packets; -+ free_packets = NULL; -+ extern pair free_pairs; -+ free_pairs = NULL; -+ extern omapi_io_object_t omapi_io_states; -+ memset(&omapi_io_states, '\0', sizeof(omapi_io_states)); -+ dhcp_control_object = NULL; -+ unlink(current_pid_file); -+#endif - - /*NOTREACHED*/ - return 0; -@@ -1204,7 +1376,20 @@ - if (client -> new -> rebind < cur_time) - client -> new -> rebind = TIME_MAX; - -+#ifdef LIBDHCP -+ /* We need the server's siaddr for the 'bootServer' -+ * pump option -+ */ -+ u_int32_t set_siaddr = 0; -+ set_siaddr = client->packet.siaddr.s_addr; -+ client->packet.siaddr.s_addr = packet->raw->siaddr.s_addr; -+#endif -+ - bind_lease (client); -+ -+#ifdef LIBDHCP -+ client->packet.siaddr.s_addr = set_siaddr; -+#endif - } - - void bind_lease (client) -@@ -1240,6 +1425,9 @@ - return; - } - -+#ifdef LIBDHCP -+ if (libdhcp_control && (libdhcp_control->capability & DHCP_USE_LEASE_DATABASE)) -+#endif - /* Write out the new lease. */ - write_client_lease (client, client -> new, 0, 0); - -@@ -1340,11 +1528,13 @@ - return 0; - } - -+#ifndef LIBDHCP - int write_lease (lease) - struct lease *lease; - { - return 0; - } -+#endif - - int write_host (host) - struct host_decl *host; -@@ -1915,6 +2105,10 @@ - tell the shell script that we failed to allocate an address, - and try again later. */ - if (onetry) { -+#ifdef LIBDHCP -+ script_init (client, "FAIL", (struct string_list *)0); -+ return; -+#endif - if (!quiet) - log_info ("Unable to obtain a lease on first try.%s", - " Exiting."); -@@ -2519,7 +2713,9 @@ - free_client_lease (lease, MDL); - } - -+#ifndef LIBDHCP - FILE *leaseFile; -+#endif - - void rewrite_client_leases () - { -@@ -2960,6 +3156,54 @@ - int script_go (client) - struct client_state *client; - { -+#ifdef LIBDHCP -+ struct string_list *sp; -+ -+ if (libdhcp_control && libdhcp_control->callback) { -+ int dhcmsg; -+ char *reason=""; -+ -+ for (sp = client->env; sp; sp = sp->next) -+ if (strncmp(sp->string, "reason=", 7) == 0) { -+ reason = sp->string + 7; -+ break; -+ } -+ -+ if (strcmp(reason,"NBI") == 0) -+ dhcmsg = DHC4_NBI; -+ else if (strcmp(reason,"PREINIT") == 0) -+ dhcmsg = DHC4_PREINIT; -+ else if (strcmp(reason,"BOUND") == 0) -+ dhcmsg = DHC4_BOUND; -+ else if (strcmp(reason,"RENEW") == 0) -+ dhcmsg = DHC4_RENEW; -+ else if (strcmp(reason,"REBOOT") == 0) -+ dhcmsg = DHC4_REBOOT; -+ else if (strcmp(reason,"REBIND") == 0) -+ dhcmsg = DHC4_REBIND; -+ else if (strcmp(reason,"STOP") == 0) -+ dhcmsg = DHC4_STOP; -+ else if (strcmp(reason,"MEDIUM") == 0) -+ dhcmsg = DHC4_MEDIUM; -+ else if (strcmp(reason,"TIMEOUT") == 0) -+ dhcmsg = DHC4_TIMEOUT; -+ else if (strcmp(reason,"FAIL") == 0) -+ dhcmsg = DHC4_FAIL; -+ else if (strcmp(reason,"EXPIRE") == 0) -+ dhcmsg = DHC4_EXPIRE; -+ else if (strcmp(reason,"RELEASE") == 0) -+ dhcmsg = DHC4_RELEASE; -+ else -+ dhcmsg = DHC4_NBI; -+ -+ (*libdhcp_control->callback) (libdhcp_control, dhcmsg, client); -+ -+ if (libdhcp_control->decline) -+ return 1; -+ } -+ -+ return 0; -+#else - char *scriptName; - char *argv [2]; - char **envp; -@@ -3033,6 +3277,7 @@ - GET_TIME (&cur_time); - return (WIFEXITED (wstatus) ? - WEXITSTATUS (wstatus) : -WTERMSIG (wstatus)); -+#endif - } - - void client_envadd (struct client_state *client, -@@ -3123,6 +3368,9 @@ - - /* Don't become a daemon if the user requested otherwise. */ - if (no_daemon) { -+#ifdef LIBDHCP -+ if (libdhcp_control && (libdhcp_control->capability & DHCP_USE_PID_FILE )) -+#endif - write_client_pid_file (); - return; - } -@@ -3132,6 +3380,10 @@ - return; - state = 1; - -+#ifdef LIBDHCP -+ return; -+#endif -+ - /* Stop logging to stderr... */ - log_perror = 0; - ---- dhcp-3.0.5/common/discover.c.libdhcp4client 2007-03-30 20:54:06.000000000 -0400 -+++ dhcp-3.0.5/common/discover.c 2007-03-30 20:54:06.000000000 -0400 -@@ -121,6 +121,10 @@ - register that interface with the network I/O software, figure out what - subnet it's on, and add it to the list of interfaces. */ - -+#ifdef LIBDHCP -+int have_setup_fallback = 0; -+#endif -+ - void discover_interfaces (state) - int state; - { -@@ -139,7 +143,9 @@ - char *s; - #endif - isc_result_t status; -+#ifndef LIBDHCP - static int setup_fallback = 0; -+#endif - int wifcount = 0; - - /* Create an unbound datagram socket to do the SIOCGIFADDR ioctl on. */ -@@ -692,10 +698,17 @@ - log_fatal ("Not configured to listen on any interfaces!"); - } - -+#ifdef LIBDHCP -+ if (!have_setup_fallback) { -+ have_setup_fallback = 1; -+ maybe_setup_fallback (); -+ } -+#else - if (!setup_fallback) { - setup_fallback = 1; - maybe_setup_fallback (); - } -+#endif - - #if defined (HAVE_SETFD) - if (fallback_interface) { ---- dhcp-3.0.5/common/alloc.c.libdhcp4client 2007-03-30 20:54:06.000000000 -0400 -+++ dhcp-3.0.5/common/alloc.c 2007-03-30 20:54:06.000000000 -0400 -@@ -1009,7 +1009,11 @@ - return 1; - } - -+#ifdef LIBDHCP -+struct packet *free_packets; -+#else - static struct packet *free_packets; -+#endif - - #if defined (DEBUG_MEMORY_LEAKAGE) || \ - defined (DEBUG_MEMORY_LEAKAGE_ON_EXIT) ---- dhcp-3.0.5/common/tree.c.libdhcp4client 2007-03-30 20:54:06.000000000 -0400 -+++ dhcp-3.0.5/common/tree.c 2007-03-30 20:54:06.000000000 -0400 -@@ -40,7 +40,7 @@ - #include "dhcpd.h" - #include - --struct binding_scope *global_scope; -+struct binding_scope __attribute__ ((visibility ("default"))) *global_scope; - - static int do_host_lookup PROTO ((struct data_string *, - struct dns_host_entry *)); -@@ -2615,6 +2615,7 @@ - result of that evaluation. There should never be both an expression - and a valid data_string. */ - -+__attribute__ ((visibility ("default"))) - int evaluate_option_cache (result, packet, lease, client_state, - in_options, cfg_options, scope, oc, file, line) - struct data_string *result; ---- dhcp-3.0.5/common/options.c.libdhcp4client 2007-03-30 20:54:06.000000000 -0400 -+++ dhcp-3.0.5/common/options.c 2007-03-30 20:54:06.000000000 -0400 -@@ -2153,6 +2153,7 @@ - return 1; - } - -+__attribute__ ((visibility ("default"))) - void option_space_foreach (struct packet *packet, struct lease *lease, - struct client_state *client_state, - struct option_state *in_options, ---- dhcp-3.0.5/common/dispatch.c.libdhcp4client 2007-03-30 20:54:06.000000000 -0400 -+++ dhcp-3.0.5/common/dispatch.c 2007-03-30 20:54:06.000000000 -0400 -@@ -39,8 +39,24 @@ - - #include "dhcpd.h" - --struct timeout *timeouts; --static struct timeout *free_timeouts; -+struct timeout { -+#ifndef LIBDHCP -+ struct timeout *next; -+#endif -+ TIME when; -+ void (*func) PROTO ((void *)); -+ void *what; -+ tvref_t ref; -+ tvunref_t unref; -+}; -+ -+#ifdef LIBDHCP -+static struct timeout *timeouts = NULL; -+static int ntimeouts = 0; -+#else -+static struct timeout *timeouts = NULL; -+static struct timeout *free_timeouts = NULL; -+#endif - - void set_time(TIME t) - { -@@ -53,9 +69,41 @@ - - struct timeval *process_outstanding_timeouts (struct timeval *tvp) - { -+#ifdef LIBDHCP -+ int i; -+ struct timeout t = { 0 }; -+#endif - /* Call any expired timeouts, and then if there's - still a timeout registered, time out the select - call then. */ -+#ifdef LIBDHCP -+ if (!ntimeouts) -+ return NULL; -+ -+ for (i = 0; i < ntimeouts && timeouts[i].when <= cur_time;) { -+ struct timeout *new_timeouts; -+ size_t n; -+ -+ memmove(&t, &timeouts[i], sizeof (t)); -+ -+ n = (ntimeouts - i - 1) * sizeof (t); -+ memmove(&timeouts[i+1], &timeouts[i], n); -+ -+ n = --ntimeouts * sizeof (t); -+ new_timeouts = realloc(timeouts, n); -+ /* XXX broken API, no way to return error here */ -+ if (new_timeouts || !n) -+ timeouts = new_timeouts; -+ -+ if (t.func) -+ t.func(t.what); -+ if (t.unref) -+ t.unref(t.what, MDL); -+ } -+ if (tvp && ntimeouts) { -+ tvp->tv_sec = timeouts[0].when; -+ tvp->tv_usec = 0; -+#else - another: - if (timeouts) { - struct timeout *t; -@@ -73,9 +121,15 @@ - tvp -> tv_sec = timeouts -> when; - tvp -> tv_usec = 0; - } -+#endif - return tvp; -+#ifdef LIBDHCP -+ } -+ return NULL; -+#else - } else - return (struct timeval *)0; -+#endif - } - - /* Wait for packets to come in using select(). When one does, call -@@ -104,13 +158,28 @@ - tvref_t ref; - tvunref_t unref; - { -+#ifdef LIBDHCP -+ struct timeout t = { -+ .when = when, -+ .func = where, -+ .what = what, -+ .ref = ref, -+ .unref = unref -+ }; -+ struct timeout *new_timeouts; -+ int i, pos = 0; -+#else - struct timeout *t, *q; -+#endif - - /* See if this timeout supersedes an existing timeout. */ -+#ifdef LIBDHCP -+ for (i = 0; i < ntimeouts; i++) { -+ struct timeout *q = &timeouts[i]; -+#else - t = (struct timeout *)0; - for (q = timeouts; q; q = q -> next) { -- if ((where == NULL || q -> func == where) && -- q -> what == what) { -+ if ((where == NULL || q -> func == where) && q -> what == what) { - if (t) - t -> next = q -> next; - else -@@ -119,7 +188,29 @@ - } - t = q; - } -+#endif - -+#ifdef LIBDHCP -+ /* If this one is already in the list with a different time, -+ * remove it and re-add */ -+ if ((where == NULL || q->func == where) && -+ q->what == what) { -+ size_t n = (--ntimeouts - i) * sizeof (*q); -+ memmove(&t, q, sizeof (t)); -+ -+ if (n) -+ memmove(&timeouts[i], &timeouts[i+1], n); -+ -+ if (ntimeouts) { -+ new_timeouts = realloc(timeouts, ntimeouts * sizeof (*q)); -+ /* XXX broken API, no way to return error here */ -+ if (new_timeouts) -+ timeouts = new_timeouts; -+ } else { -+ timeouts = NULL; -+ } -+ add_timeout(when, where, what, ref, unref); -+#else - /* If we didn't supersede a timeout, allocate a timeout - structure now. */ - if (!q) { -@@ -128,7 +219,7 @@ - free_timeouts = q -> next; - } else { - q = ((struct timeout *) -- dmalloc (sizeof (struct timeout), MDL)); -+ dmalloc (sizeof (struct timeout), MDL)); - if (!q) - log_fatal ("add_timeout: no memory!"); - } -@@ -158,22 +249,76 @@ - if (t -> next -> when > q -> when) { - q -> next = t -> next; - t -> next = q; -+#endif - return; -+#ifdef LIBDHCP -+ } else if (timeouts[i].when > when) { -+ pos = i; -+#endif - } - } - -+#ifdef LIBDHCP -+ /* If we didn't supersede an existing timeout, then pos is set -+ * to the timeout which will post after this one. Insert this -+ * one before it. */ -+ -+ new_timeouts = realloc(timeouts, sizeof (t) * (ntimeouts+1)); -+ /* XXX broken API, no way to return error here */ -+ if (new_timeouts) { -+ /* ntimeouts = 10 -+ * pos = 3; -+ * n = 10-3 * sizeof (t) = 7 * sizeof (t) -+ */ -+ size_t n = (ntimeouts - pos) * sizeof (t); -+ -+ timeouts = new_timeouts; -+ memmove(&timeouts[pos+1], &timeouts[pos], n); -+ memmove(&timeouts[pos], &t, sizeof (t)); -+ ntimeouts++; -+ } -+#else - /* End of list. */ - t -> next = q; - q -> next = (struct timeout *)0; -+#endif - } - - void cancel_timeout (where, what) - void (*where) PROTO ((void *)); - void *what; - { -+#ifdef LIBDHCP -+ struct timeout t; -+ int i = 0; -+#else - struct timeout *t, *q; -+#endif - - /* Look for this timeout on the list, and unlink it if we find it. */ -+#ifdef LIBDHCP -+ for (i = 0; i < ntimeouts; i++) { -+ struct timeout *new_timeouts, *q = &timeouts[i]; -+ -+ if (q->func == where && q->what == what) { -+ size_t n; -+ -+ memmove(&t, q, sizeof (t)); -+ -+ n = (ntimeouts - i - 1) * sizeof (t); -+ memmove(&timeouts[i+1], &timeouts[i], n); -+ -+ n = --ntimeouts * sizeof (t); -+ new_timeouts = realloc(timeouts, n); -+ /* XXX broken API, no way to return error here */ -+ if (new_timeouts || !n) -+ timeouts = new_timeouts; -+ -+ if (t.unref) -+ t.unref(t.what, MDL); -+ } -+ } -+#else - t = (struct timeout *)0; - for (q = timeouts; q; q = q -> next) { - if (q -> func == where && q -> what == what) { -@@ -193,10 +338,15 @@ - q -> next = free_timeouts; - free_timeouts = q; - } -+#endif - } - - void cancel_all_timeouts () - { -+#ifdef LIBDHCP -+ cur_time = TIME_MAX; -+ process_outstanding_timeouts(NULL); -+#else - struct timeout *t, *n; - for (t = timeouts; t; t = n) { - n = t -> next; -@@ -205,13 +355,20 @@ - t -> next = free_timeouts; - free_timeouts = t; - } -+#endif - } - -+__attribute__ ((visibility ("default"))) - void relinquish_timeouts () - { -+#ifdef LIBDHCP -+ while (ntimeouts) -+ cancel_timeout(timeouts[0].func, timeouts[0].what); -+#else - struct timeout *t, *n; - for (t = free_timeouts; t; t = n) { - n = t -> next; - dfree (t, MDL); - } -+#endif - } ---- dhcp-3.0.5/dst/hmac_link.c.libdhcp4client 2001-02-22 02:22:08.000000000 -0500 -+++ dhcp-3.0.5/dst/hmac_link.c 2007-03-30 20:54:06.000000000 -0400 -@@ -38,6 +38,10 @@ - - #include "dst_internal.h" - -+#ifdef LIBDHCP -+extern void* dmalloc(size_t,char *,int); -+#endif -+ - #ifdef USE_MD5 - # include "md5.h" - # ifndef _MD5_H_ -@@ -86,7 +90,11 @@ - MD5_CTX *ctx = NULL; - - if (mode & SIG_MODE_INIT) -+#ifdef LIBDHCP -+ ctx = (MD5_CTX *) dmalloc(sizeof(*ctx),__FILE__,__LINE__); -+#else - ctx = (MD5_CTX *) malloc(sizeof(*ctx)); -+#endif - else if (context) - ctx = (MD5_CTX *) *context; - if (ctx == NULL) -@@ -153,7 +161,11 @@ - MD5_CTX *ctx = NULL; - - if (mode & SIG_MODE_INIT) -+#ifdef LIBDHCP -+ ctx = (MD5_CTX *) dmalloc(sizeof(*ctx),__FILE__,__LINE__); -+#else - ctx = (MD5_CTX *) malloc(sizeof(*ctx)); -+#endif - else if (context) - ctx = (MD5_CTX *) *context; - if (ctx == NULL) -@@ -217,8 +229,11 @@ - - if (dkey == NULL || key == NULL || keylen < 0) - return (-1); -- -+#ifdef LIBDHCP -+ if ((hkey = (HMAC_Key *) dmalloc(sizeof(HMAC_Key),__FILE__,__LINE__)) == NULL) -+#else - if ((hkey = (HMAC_Key *) malloc(sizeof(HMAC_Key))) == NULL) -+#endif - return (-2); - - memset(hkey->hk_ipad, 0, sizeof(hkey->hk_ipad)); -@@ -347,7 +362,11 @@ - if (eol == NULL) - return (-4); - len = eol - p; -+#ifdef LIBDHCP -+ tmp = dmalloc(len + 2,__FILE__,__LINE__); -+#else - tmp = malloc(len + 2); -+#endif - memcpy(tmp, p, len); - *(tmp + len) = 0x0; - key_len = b64_pton((char *)tmp, key, HMAC_LEN+1); /* see above */ -@@ -439,8 +458,11 @@ - return(0); - - len = size > 64 ? 64 : size; -+#ifdef LIBDHCP -+ buff = dmalloc(len+8,__FILE__,__LINE__); -+#else - buff = malloc(len+8); -- -+#endif - n = dst_random(DST_RAND_SEMI, len, buff); - n += dst_random(DST_RAND_KEY, len, buff); - if (n <= len) { /* failed getting anything */ -@@ -463,7 +485,11 @@ - { - if (dst_t_func[KEY_HMAC_MD5] != NULL) - return (1); -+#ifdef LIBDHCP -+ dst_t_func[KEY_HMAC_MD5] = dmalloc(sizeof(struct dst_func),__FILE__,__LINE__); -+#else - dst_t_func[KEY_HMAC_MD5] = malloc(sizeof(struct dst_func)); -+#endif - if (dst_t_func[KEY_HMAC_MD5] == NULL) - return (0); - memset(dst_t_func[KEY_HMAC_MD5], 0, sizeof(struct dst_func)); ---- dhcp-3.0.5/includes/dhcpd.h.libdhcp4client 2007-03-30 20:54:06.000000000 -0400 -+++ dhcp-3.0.5/includes/dhcpd.h 2007-03-30 20:54:06.000000000 -0400 -@@ -855,14 +855,6 @@ - - typedef void (*tvref_t)(void *, void *, const char *, int); - typedef void (*tvunref_t)(void *, const char *, int); --struct timeout { -- struct timeout *next; -- TIME when; -- void (*func) PROTO ((void *)); -- void *what; -- tvref_t ref; -- tvunref_t unref; --}; - - struct protocol { - struct protocol *next; -@@ -1789,7 +1781,6 @@ - struct dhcp_packet *, unsigned, - unsigned int, - struct iaddr, struct hardware *)); --extern struct timeout *timeouts; - extern omapi_object_type_t *dhcp_type_interface; - #if defined (TRACING) - trace_type_t *interface_trace; ---- dhcp-3.0.5/omapip/alloc.c.libdhcp4client 2007-03-30 20:54:06.000000000 -0400 -+++ dhcp-3.0.5/omapip/alloc.c 2007-03-30 20:54:06.000000000 -0400 -@@ -40,6 +40,33 @@ - - #include - -+#ifdef LIBDHCP -+/* OK, we need a quick and dirty way of freeing all memory used by libdhcp. -+ All pointers will be stored in a glibc tree on alloc, and removed on free. -+ This is not too expensive for light single-call library use. -+*/ -+#include -+extern void tdestroy (void *root, void (*free_node)(void *nodep)); -+static void *all_pointers=0L; -+static int ptr_comparator(const void *p1, const void *p2) { -+ return ((p1 == p2) ? 0 : ((p1 > p2) ? 1 : -1)); -+} -+ -+static void record_pointer(void *ptr) { -+ tsearch(ptr, &(all_pointers), ptr_comparator); -+} -+ -+static void forget_pointer(void *ptr) { -+ tdelete(ptr, &(all_pointers), ptr_comparator); -+} -+ -+void omapi_free_all_pointers(void) { -+ if (all_pointers != NULL) -+ tdestroy(all_pointers, free); -+ all_pointers = NULL; -+} -+#endif -+ - #if defined (DEBUG_MEMORY_LEAKAGE) || defined (DEBUG_MALLOC_POOL) || \ - defined (DEBUG_MEMORY_LEAKAGE_ON_EXIT) - struct dmalloc_preamble *dmalloc_list; -@@ -77,7 +104,9 @@ - return (VOIDPTR)0; - - foo = malloc(len); -- -+#ifdef LIBDHCP -+ record_pointer(foo); -+#endif - if (!foo) - return (VOIDPTR)0; - bar = (VOIDPTR)(foo + DMDOFFSET); -@@ -199,6 +228,9 @@ - 0, (unsigned char *)ptr + DMDOFFSET, 0, 1, RC_MALLOC); - #endif - free (ptr); -+#ifdef LIBDHCP -+ forget_pointer(ptr); -+#endif - } - - #if defined (DEBUG_MEMORY_LEAKAGE) || defined (DEBUG_MALLOC_POOL) || \ ---- dhcp-3.0.5/omapip/dispatch.c.libdhcp4client 2004-11-24 12:39:17.000000000 -0500 -+++ dhcp-3.0.5/omapip/dispatch.c 2007-03-30 20:54:06.000000000 -0400 -@@ -34,7 +34,7 @@ - - #include - --static omapi_io_object_t omapi_io_states; -+omapi_io_object_t omapi_io_states; - TIME cur_time; - - OMAPI_OBJECT_ALLOC (omapi_io, ---- dhcp-3.0.5/omapip/errwarn.c.libdhcp4client 2007-03-30 20:54:06.000000000 -0400 -+++ dhcp-3.0.5/omapip/errwarn.c 2007-03-30 20:54:06.000000000 -0400 -@@ -39,6 +39,11 @@ - #include - #include - -+#ifdef LIBDHCP -+#include -+extern LIBDHCP_Control *libdhcp_control; -+#endif -+ - #ifdef DEBUG - int log_perror = -1; - #else -@@ -48,7 +53,9 @@ - void (*log_cleanup) (void); - - #define CVT_BUF_MAX 1023 -+#ifndef LIBDHCP - static char mbuf [CVT_BUF_MAX + 1]; -+#endif - static char fbuf [CVT_BUF_MAX + 1]; - - /* Log an error message, then exit... */ -@@ -58,6 +65,16 @@ - va_list list; - - do_percentm (fbuf, fmt); -+ -+#ifdef LIBDHCP -+ if (libdhcp_control && (libdhcp_control->eh)) { -+ va_start (list, fmt); -+ libdhcp_control->eh(libdhcp_control, LOG_FATAL, fbuf, list); -+ va_end(list); -+ libdhcp_control->finished = 1; -+ return; -+ } -+#else - - /* %Audit% This is log output. %2004.06.17,Safe% - * If we truncate we hope the user can get a hint from the log. -@@ -93,6 +110,7 @@ - if (log_cleanup) - (*log_cleanup) (); - exit (1); -+#endif - } - - /* Log an error message... */ -@@ -103,6 +121,13 @@ - - do_percentm (fbuf, fmt); - -+#ifdef LIBDHCP -+ if (libdhcp_control && libdhcp_control->eh) { -+ va_start (list, fmt); -+ libdhcp_control->eh(libdhcp_control, LOG_ERR, fbuf, list); -+ va_end(list); -+ } -+#else - /* %Audit% This is log output. %2004.06.17,Safe% - * If we truncate we hope the user can get a hint from the log. - */ -@@ -120,7 +145,7 @@ - if (write (STDERR_FILENO, "\n", 1) <= 0) - return 0; - } -- -+#endif - return 0; - } - -@@ -132,6 +157,13 @@ - - do_percentm (fbuf, fmt); - -+#ifdef LIBDHCP -+ if (libdhcp_control && libdhcp_control->eh) { -+ va_start (list, fmt); -+ libdhcp_control->eh(libdhcp_control, LOG_INFO, fbuf, list); -+ va_end(list); -+ } -+#else - /* %Audit% This is log output. %2004.06.17,Safe% - * If we truncate we hope the user can get a hint from the log. - */ -@@ -149,7 +181,7 @@ - if (write (STDERR_FILENO, "\n", 1) <= 0) - return 0; - } -- -+#endif - return 0; - } - -@@ -160,7 +192,13 @@ - va_list list; - - do_percentm (fbuf, fmt); -- -+#ifdef LIBDHCP -+ if (libdhcp_control && libdhcp_control->eh) { -+ va_start (list, fmt); -+ libdhcp_control->eh(libdhcp_control, LOG_DEBUG, fbuf, list); -+ va_end(list); -+ } -+#else - /* %Audit% This is log output. %2004.06.17,Safe% - * If we truncate we hope the user can get a hint from the log. - */ -@@ -178,7 +216,7 @@ - if (write (STDERR_FILENO, "\n", 1) <= 0) - return 0; - } -- -+#endif - return 0; - } - ---- dhcp-3.0.5/Makefile.dist.libdhcp4client 2004-06-10 13:59:10.000000000 -0400 -+++ dhcp-3.0.5/Makefile.dist 2007-03-30 20:54:06.000000000 -0400 -@@ -22,7 +22,7 @@ - # http://www.isc.org/ - - --SUBDIRS= common $(MINIRES) dst omapip server client relay dhcpctl -+SUBDIRS= common $(MINIRES) dst omapip server client relay dhcpctl libdhcp4client - - all: - @for dir in ${SUBDIRS}; do \ ---- dhcp-3.0.5/configure.libdhcp4client 2004-09-10 17:02:30.000000000 -0400 -+++ dhcp-3.0.5/configure 2007-03-30 20:54:06.000000000 -0400 -@@ -246,7 +246,7 @@ - fi - - if [ x"$dirs" = x ]; then -- dirs=". client server relay common omapip dhcpctl minires dst" -+ dirs=". client server relay common omapip dhcpctl minires dst libdhcp4client" - fi - - for foo in $dirs; do diff --git a/dhcp-3.0.5-manpages.patch b/dhcp-3.0.5-manpages.patch deleted file mode 100644 index 73ea521..0000000 --- a/dhcp-3.0.5-manpages.patch +++ /dev/null @@ -1,313 +0,0 @@ ---- dhcp-3.0.5/client/dhclient-script.8.manpages 2005-09-28 15:17:08.000000000 -0400 -+++ dhcp-3.0.5/client/dhclient-script.8 2007-04-26 14:52:13.000000000 -0400 -@@ -47,7 +47,7 @@ - exit hooks provided (see HOOKS for details). These hooks will allow the - user to override the default behaviour of the client in creating a - .B /etc/resolv.conf --file. -+file, and to handle DHCP options not handled by default. - .PP - No standard client script exists for some operating systems, even though - the actual client may work, so a pioneering user may well need to create -@@ -91,6 +91,27 @@ - .B ETCDIR/dhclient-exit-hooks - script can modify the valid of exit_status to change the exit status - of dhclient-script. -+.PP -+Immediately after dhclient brings an interface UP with a new IP address, -+subnet mask, and routes, in the REBOOT/BOUND states, it will check for the -+existence of an executable -+.B ETCDIR/dhclient-up-hooks -+script, and source it if found. This script can handle DHCP options in -+the environment that are not handled by default. A per-interface -+.B ETCDIR/dhclient-${IF}-up-hooks -+script will override the generic script and be sourced when interface -+$IF has been brought up. -+.PP -+Immediately before dhclient brings an interface DOWN, removing its IP -+address, subnet mask, and routes, in the STOP/RELEASE states, it will -+check for the existence of an executable -+.B ETCDIR/dhclient-down-hooks -+script, and source it if found. This script can handle DHCP options in -+the environment that are not handled by default. A per-interface -+.B ETCDIR/dhclient-${IF}-down-hooks -+script will override the generic script and be sourced when interface -+$IF is about to be brought down. -+ - .SH OPERATION - When dhclient needs to invoke the client configuration script, it - defines a set of variables in the environment, and then invokes ---- dhcp-3.0.5/client/dhclient.conf.5.manpages 2005-06-16 15:40:13.000000000 -0400 -+++ dhcp-3.0.5/client/dhclient.conf.5 2007-04-26 14:51:02.000000000 -0400 -@@ -185,7 +185,8 @@ - options. Only the option names should be specified in the request - statement - not option parameters. By default, the DHCP server - requests the subnet-mask, broadcast-address, time-offset, routers, --domain-name, domain-name-servers and host-name options. -+domain-name, domain-name-servers, host-name, nis-domain, nis-servers, -+and ntp-servers options. - .PP - In some cases, it may be desirable to send no parameter request list - at all. To do this, simply write the request statement but specify -@@ -581,6 +582,18 @@ - Whenever the client tries to renew the lease, it will use that same - media type. The lease must expire before the client will go back to - cycling through media types. -+.PP -+ \fBbootp-broadcast-always;\fR -+.PP -+The -+.B bootp-broadcast-always -+statement instructs dhclient to always set the bootp broadcast flag in -+request packets, so that servers will always broadcast replies. -+This is equivalent to supplying the dhclient -B argument, and has -+the same effect as specifying 'always-broadcast' in the server's dhcpd.conf. -+This option is provided as a Red Hat extension to enable dhclient to work -+on IBM zSeries z/OS Linux guests . -+.PP - .SH SAMPLE - The following configuration file is used on a laptop running NetBSD - 1.3. The laptop has an IP alias of 192.5.5.213, and has one ---- dhcp-3.0.5/client/dhclient.8.manpages 2007-04-26 14:51:02.000000000 -0400 -+++ dhcp-3.0.5/client/dhclient.8 2007-04-26 14:51:02.000000000 -0400 -@@ -85,6 +85,28 @@ - .B -x - ] - [ -+.B -I -+.I dhcp-client-identifier -+] -+[ -+.B -H -+.I host-name -+.R | -+.B -F fqdn.fqdn -+] -+[ -+.B -V -+.I vendor-class-identifier -+] -+[ -+.B -R -+.I request option list -+] -+[ -+.B -T -+.I timeout -+] -+[ - .I if0 - [ - .I ...ifN -@@ -273,6 +295,107 @@ - -s dhclient-script environment, which would allow applications running - in that environment to handle options they do not know about in advance - - this is a Red Hat extension to support dhcdbd and NetworkManager. -+.PP -+The -I argument allows you to specify the dhcp-client-identifier string, , -+to be sent to the dhcp server on the command line. It is equivalent to the -+top level dhclient.conf statement: -+.br -+ \fBsend dhcp-client-identifier "";\fR -+.br -+The -I command line option will override any top level dhclient.conf -+ 'send dhcp-client-identifier' statement, but more specific per-interface -+ 'interface "X" { send dhcp-client-identifier...; }' statements in dhclient.conf -+will override the -I command line option for interface "X". -+This option is provided as a Red Hat extension to enable dhclient to work -+on IBM zSeries z/OS Linux guests. -+.PP -+The -B option instructs dhclient to set the bootp broadcast flag in request -+packets, so that servers will always broadcast replies. This is equivalent -+to specifying the 'bootp-broadcast-always' option in dhclient.conf, and has -+the same effect as specifying 'always-broadcast' in the server's dhcpd.conf. -+This option is provided as a Red Hat extension to enable dhclient to work -+on IBM zSeries z/OS Linux guests. -+.PP -+The -H option allows you to specify the DHCP host-name option -+to send to the server on the dhclient command line. It is equivalent to the -+top level dhclient.conf statement: -+.br -+\f send host-name "";\fR -+.br -+The -H option will override any top level dhclient.conf -+ 'send host-name' statement, but more specific per-interface -+ 'interface "X" { send host-name...;' statements in dhclient.conf -+will override the -H command line option for interface "X". -+The host-name option only specifies the client's host name prefix, to which -+the server will append the 'ddns-domainname' or 'domain-name' options, if any, -+to derive the fully qualified domain name of the client host. -+The -H option cannot be used with the -F option. -+Only one -H option may be specified. -+The -H option is provided as a Red Hat extension to simplify -+configuration of clients of DHCP servers that require the host-name option -+to be sent (eg. some modern cable modems), and for dynamic DNS updates (DDNS). -+.PP -+The -F option allows you to specify the DHCP fqdn.fqdn option -+to send to the server on the dhclient command line. It is equivalent to the -+top level dhclient.conf statement: -+.br -+\f send fqdn.fqdn "";\fR -+.br -+The -F option will override any top level dhclient.conf -+ 'send fqdn.fqdn' statement, but more specific per-interface -+ 'interface "X" { send fqdn.fqdn...;' statements in dhclient.conf -+will override the -F command line option for interface "X". -+This option cannot be used with the -H option. -+The DHCP fqdn.fqdn option must specify the complete domain name of the client -+host, which the server may use for dynamic DNS updates. -+Only one -F option may be specified. -+The -F option is provided as a Red Hat extension to simplify -+configuration of DDNS. -+.PP -+The -T option allows you to specify the time after which -+the dhclient will decide that no DHCP servers can be contacted when -+no responses have been received. It is equivalent to the -+.br -+\f timeout ;\fR -+.br -+dhclient.conf statement, and will override any such statements in dhclient.conf. -+.br -+This option is provided as a Red Hat extension. -+.PP -+The -V option allows you to specify the DHCP -+vendor-class-identifier option to send to the server on the dhclient command line. -+It is equivalent to the top level dhclient.conf statement: -+.br -+\f send vendor-class-identifier "";\fR -+.br -+The -V option will override any top level dhclient.conf -+ 'send vendor-class-identifier' statement, but more specific per-interface -+ 'interface "X" { send vendor-class-identifier...;' statements in dhclient.conf -+will override the -V command line option for interface "X". -+The -V option is provided as a Red Hat extension to simplify -+configuration of clients of DHCP servers that require the vendor-class-identifier option -+to be sent. -+.PP -+The -R option allows you to specify the list of options the -+client is to request from the server on the dhclient command line. -+The option list must be a single string, consisting of option names separated -+by at least one comma and optional space characters. The default option list -+is : -+.br -+ subnet-mask, broadcast-address, time-offset, routers, -+.br -+ domain-name, domain-name-servers, host-name, nis-domain, -+.br -+ nis-servers, ntp-servers -+.br -+You can specify a different list of options to request with the -R