diff options
author | Francis Dupont <fdupont@isc.org> | 2016-02-20 14:43:21 +0100 |
---|---|---|
committer | Francis Dupont <fdupont@isc.org> | 2016-02-20 14:43:21 +0100 |
commit | 23a0327469e0e96711750206d67eb84dd3aedc34 (patch) | |
tree | 0b7fa9095b8f7b31333383a7a0bc3296c76e76e7 | |
parent | d02e6c3e22c10a3899b5fd79da618b00159d4e71 (diff) | |
download | isc-dhcp-rt41750.tar.gz |
Add IRT to default requested option list when statelessrt41750
-rw-r--r-- | RELNOTES | 4 | ||||
-rw-r--r-- | client/clparse.c | 85 | ||||
-rw-r--r-- | client/dhclient.c | 6 |
3 files changed, 44 insertions, 51 deletions
@@ -233,6 +233,10 @@ by Eric Young (eay@cryptsoft.com). Please look at doc/DHCPv4-over-DHCPv6 for more details. [ISC-Bugs #35711] +- Add the IRT (Information Refresh Time) option to the default requested + option list of the DHCPv6 stateless client. + [ISC-Bugs #41750] + Changes since 4.3.3b1 - None diff --git a/client/clparse.c b/client/clparse.c index 643b3fae..b60fc4d5 100644 --- a/client/clparse.c +++ b/client/clparse.c @@ -31,9 +31,8 @@ struct client_config top_level_config; -#define NUM_DEFAULT_REQUESTED_OPTS 9 -/* There can be 2 extra requested options for DHCPv4-over-DHCPv6. */ -struct option *default_requested_options[NUM_DEFAULT_REQUESTED_OPTS + 2 + 1]; +#define NUM_DEFAULT_REQUESTED_OPTS 11 +struct option *default_requested_options[NUM_DEFAULT_REQUESTED_OPTS + 1]; static void parse_client_default_duid(struct parse *cfile); static void parse_client6_lease_statement(struct parse *cfile); @@ -44,6 +43,7 @@ static struct dhc6_ia *parse_client6_ia_pd_statement(struct parse *cfile); static struct dhc6_addr *parse_client6_iaaddr_statement(struct parse *cfile); static struct dhc6_addr *parse_client6_iaprefix_statement(struct parse *cfile); #endif /* DHCPv6 */ +extern int stateless; /* client-conf-file :== client-declarations END_OF_FILE client-declarations :== <nil> @@ -55,6 +55,7 @@ isc_result_t read_client_conf () struct client_config *config; struct interface_info *ip; isc_result_t status; + unsigned last_index; unsigned code; /* @@ -70,94 +71,88 @@ isc_result_t read_client_conf () memset(default_requested_options, 0, sizeof(default_requested_options)); /* 1 */ + last_index = 0; code = DHO_SUBNET_MASK; - option_code_hash_lookup(&default_requested_options[0], + option_code_hash_lookup(&default_requested_options[last_index], dhcp_universe.code_hash, &code, 0, MDL); /* 2 */ + last_index++; code = DHO_BROADCAST_ADDRESS; - option_code_hash_lookup(&default_requested_options[1], + option_code_hash_lookup(&default_requested_options[last_index], dhcp_universe.code_hash, &code, 0, MDL); /* 3 */ + last_index++; code = DHO_TIME_OFFSET; - option_code_hash_lookup(&default_requested_options[2], + option_code_hash_lookup(&default_requested_options[last_index], dhcp_universe.code_hash, &code, 0, MDL); /* 4 */ + last_index++; code = DHO_ROUTERS; - option_code_hash_lookup(&default_requested_options[3], + option_code_hash_lookup(&default_requested_options[last_index], dhcp_universe.code_hash, &code, 0, MDL); /* 5 */ + last_index++; code = DHO_DOMAIN_NAME; - option_code_hash_lookup(&default_requested_options[4], + option_code_hash_lookup(&default_requested_options[last_index], dhcp_universe.code_hash, &code, 0, MDL); /* 6 */ + last_index++; code = DHO_DOMAIN_NAME_SERVERS; - option_code_hash_lookup(&default_requested_options[5], + option_code_hash_lookup(&default_requested_options[last_index], dhcp_universe.code_hash, &code, 0, MDL); /* 7 */ + last_index++; code = DHO_HOST_NAME; - option_code_hash_lookup(&default_requested_options[6], + option_code_hash_lookup(&default_requested_options[last_index], dhcp_universe.code_hash, &code, 0, MDL); /* 8 */ + last_index++; code = D6O_NAME_SERVERS; - option_code_hash_lookup(&default_requested_options[7], + option_code_hash_lookup(&default_requested_options[last_index], dhcpv6_universe.code_hash, &code, 0, MDL); /* 9 */ + last_index++; code = D6O_DOMAIN_SEARCH; - option_code_hash_lookup(&default_requested_options[8], + option_code_hash_lookup(&default_requested_options[last_index], dhcpv6_universe.code_hash, &code, 0, MDL); - for (code = 0 ; code < NUM_DEFAULT_REQUESTED_OPTS ; code++) { - if (default_requested_options[code] == NULL) - log_fatal("Unable to find option definition for " - "index %u during default parameter request " - "assembly.", code); + /* Called from run_stateless() so the IRT should be requested */ + if (stateless) { + /* 10 */ + last_index++; + code = D6O_INFORMATION_REFRESH_TIME; + option_code_hash_lookup(&default_requested_options[last_index], + dhcpv6_universe.code_hash, + &code, 0, MDL); } #ifdef DHCP4o6 - /* DHCPv4-over-DHCPv6 extra requested options in code order */ + /* The DHCP4o6 server option should be requested */ if (dhcpv4_over_dhcpv6 == 1) { - /* The DHCP4o6 server option should be requested */ + /* 10 or 11 */ + last_index++; code = D6O_DHCP4_O_DHCP6_SERVER; - option_code_hash_lookup(&default_requested_options[9], + option_code_hash_lookup(&default_requested_options[last_index], dhcpv6_universe.code_hash, &code, 0, MDL); - if (default_requested_options[9] == NULL) { - log_fatal("Unable to find option definition for " - "index %u during default parameter request " - "assembly.", code); - } - } else if (dhcpv4_over_dhcpv6 > 1) { - /* Called from run_stateless so the IRT should - be requested too */ - code = D6O_INFORMATION_REFRESH_TIME; - option_code_hash_lookup(&default_requested_options[9], - dhcpv6_universe.code_hash, - &code, 0, MDL); - if (default_requested_options[9] == NULL) { - log_fatal("Unable to find option definition for " - "index %u during default parameter request " - "assembly.", code); - } - code = D6O_DHCP4_O_DHCP6_SERVER; - option_code_hash_lookup(&default_requested_options[10], - dhcpv6_universe.code_hash, - &code, 0, MDL); - if (default_requested_options[10] == NULL) { + } +#endif + + for (code = 0 ; code <= last_index ; code++) { + if (default_requested_options[code] == NULL) log_fatal("Unable to find option definition for " "index %u during default parameter request " "assembly.", code); - } } -#endif - + /* Initialize the top level client configuration. */ memset (&top_level_config, 0, sizeof top_level_config); diff --git a/client/dhclient.c b/client/dhclient.c index 6e2480eb..5f0de860 100644 --- a/client/dhclient.c +++ b/client/dhclient.c @@ -892,12 +892,6 @@ void run_stateless(int exit_mode, u_int16_t port) usage("No interfaces available for stateless command: %s", "-S"); /* Parse the dhclient.conf file. */ -#ifdef DHCP4o6 - if (dhcpv4_over_dhcpv6) { - /* Mark we want to request IRT too! */ - dhcpv4_over_dhcpv6++; - } -#endif read_client_conf(); /* Parse the lease database. */ |