From: Francis Dupont Date: Fri, 4 Feb 2022 20:34:10 +0000 (+0100) Subject: [#2249] Checkpoint before regen X-Git-Tag: Kea-2.1.4~44 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=af504ccd27193ca6622d202244d4b7daf358fef7;p=thirdparty%2Fkea.git [#2249] Checkpoint before regen --- diff --git a/doc/examples/kea4/all-keys.json b/doc/examples/kea4/all-keys.json index a9f0fe78cf..e7fdc163c2 100644 --- a/doc/examples/kea4/all-keys.json +++ b/doc/examples/kea4/all-keys.json @@ -455,6 +455,13 @@ "re-detect": true }, + // Boolean parameter which controls whether an early global host + // reservations lookup should be performed. This lookup takes place + // before first classification step so before subnet selection. + // It can be used too to drop queries using host reservations as + // a decision table indexed by reservation identifiers. + "early-global-reservations-lookup": true, + // Boolean parameter which controls DHCP server's behavior with respect // to creating host reservations for the same IP address. By default // this flag is set to true in which case the server prevents creation diff --git a/doc/examples/kea6/all-keys.json b/doc/examples/kea6/all-keys.json index d21f6fcf5d..530e7a456e 100644 --- a/doc/examples/kea6/all-keys.json +++ b/doc/examples/kea6/all-keys.json @@ -398,6 +398,13 @@ "re-detect": true }, + // Boolean parameter which controls whether an early global host + // reservations lookup should be performed. This lookup takes place + // before first classification step so before subnet selection. + // It can be used too to drop queries using host reservations as + // a decision table indexed by reservation identifiers. + "early-global-reservations-lookup": true, + // Boolean parameter which controls DHCP server's behavior with respect // to creating host reservations for the same IP address or delegated // prefix. By default this flag is set to true in which case the server diff --git a/src/bin/dhcp4/dhcp4_lexer.ll b/src/bin/dhcp4/dhcp4_lexer.ll index f4bef02ac1..8f9bd8f449 100644 --- a/src/bin/dhcp4/dhcp4_lexer.ll +++ b/src/bin/dhcp4/dhcp4_lexer.ll @@ -2018,6 +2018,15 @@ ControlCharacterFill [^"\\]|\\["\\/bfnrtu] } } +\"early-global-reservations-lookup\" { + switch(driver.ctx_) { + case isc::dhcp::Parser4Context::DHCP4: + return isc::dhcp::Dhcp4Parser::make_EARLY_GLOBAL_RESERVATIONS_LOOKUP(driver.loc_); + default: + return isc::dhcp::Dhcp4Parser::make_STRING("early-global-reservations-lookup", driver.loc_); + } +} + \"ip-reservations-unique\" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: diff --git a/src/bin/dhcp4/dhcp4_parser.yy b/src/bin/dhcp4/dhcp4_parser.yy index e7b85e746f..f67edb903f 100644 --- a/src/bin/dhcp4/dhcp4_parser.yy +++ b/src/bin/dhcp4/dhcp4_parser.yy @@ -239,6 +239,7 @@ using namespace std; WHEN_NOT_PRESENT "when-not-present" HOSTNAME_CHAR_SET "hostname-char-set" HOSTNAME_CHAR_REPLACEMENT "hostname-char-replacement" + EARLY_GLOBAL_RESERVATIONS_LOOKUP "early-global-reservations-lookup" IP_RESERVATIONS_UNIQUE "ip-reservations-unique" RESERVATIONS_LOOKUP_FIRST "reservations-lookup-first" @@ -541,6 +542,7 @@ global_param: valid_lifetime | statistic_default_sample_count | statistic_default_sample_age | dhcp_multi_threading + | early_global_reservations_lookup | ip_reservations_unique | reservations_lookup_first | compatibility @@ -758,6 +760,12 @@ statistic_default_sample_age: STATISTIC_DEFAULT_SAMPLE_AGE COLON INTEGER { ctx.stack_.back()->set("statistic-default-sample-age", age); }; +early_global_reservations_lookup: EARLY_GLOBAL_RESERVATIONS_LOOKUP COLON BOOLEAN { + ctx.unique("early-global-reservations-lookup", ctx.loc2pos(@1)); + ElementPtr early(new BoolElement($3, ctx.loc2pos(@3))); + ctx.stack_.back()->set("early-global-reservations-lookup", early); +}; + ip_reservations_unique: IP_RESERVATIONS_UNIQUE COLON BOOLEAN { ctx.unique("ip-reservations-unique", ctx.loc2pos(@1)); ElementPtr unique(new BoolElement($3, ctx.loc2pos(@3))); diff --git a/src/bin/dhcp4/json_config_parser.cc b/src/bin/dhcp4/json_config_parser.cc index 457333d659..03e34025c2 100644 --- a/src/bin/dhcp4/json_config_parser.cc +++ b/src/bin/dhcp4/json_config_parser.cc @@ -681,6 +681,7 @@ configureDhcp4Server(Dhcpv4Srv& server, isc::data::ConstElementPtr config_set, (config_pair.first == "store-extended-info") || (config_pair.first == "statistic-default-sample-count") || (config_pair.first == "statistic-default-sample-age") || + (config_pair.first == "early-global-reservations-lookup") || (config_pair.first == "ip-reservations-unique") || (config_pair.first == "reservations-lookup-first") || (config_pair.first == "parked-packet-limit")) { diff --git a/src/bin/dhcp6/dhcp6_lexer.ll b/src/bin/dhcp6/dhcp6_lexer.ll index 27c7786bbc..82fc77c43c 100644 --- a/src/bin/dhcp6/dhcp6_lexer.ll +++ b/src/bin/dhcp6/dhcp6_lexer.ll @@ -2083,6 +2083,15 @@ ControlCharacterFill [^"\\]|\\["\\/bfnrtu] } } +\"early-global-reservations-lookup\" { + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::DHCP6: + return isc::dhcp::Dhcp6Parser::make_EARLY_GLOBAL_RESERVATIONS_LOOKUP(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("early-global-reservations-lookup", driver.loc_); + } +} + \"ip-reservations-unique\" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: diff --git a/src/bin/dhcp6/dhcp6_parser.yy b/src/bin/dhcp6/dhcp6_parser.yy index 51567265c3..e713fb4d13 100644 --- a/src/bin/dhcp6/dhcp6_parser.yy +++ b/src/bin/dhcp6/dhcp6_parser.yy @@ -246,6 +246,7 @@ using namespace std; WHEN_NOT_PRESENT "when-not-present" HOSTNAME_CHAR_SET "hostname-char-set" HOSTNAME_CHAR_REPLACEMENT "hostname-char-replacement" + EARLY_GLOBAL_RESERVATIONS_LOOKUP "early-global-reservations-lookup" IP_RESERVATIONS_UNIQUE "ip-reservations-unique" RESERVATIONS_LOOKUP_FIRST "reservations-lookup-first" @@ -550,6 +551,7 @@ global_param: data_directory | statistic_default_sample_count | statistic_default_sample_age | dhcp_multi_threading + | early_global_reservations_lookup | ip_reservations_unique | reservations_lookup_first | compatibility @@ -776,6 +778,12 @@ parked_packet_limit: PARKED_PACKET_LIMIT COLON INTEGER { ctx.stack_.back()->set("parked-packet-limit", ppl); }; +early_global_reservations_lookup: EARLY_GLOBAL_RESERVATIONS_LOOKUP COLON BOOLEAN { + ctx.unique("early-global-reservations-lookup", ctx.loc2pos(@1)); + ElementPtr early(new BoolElement($3, ctx.loc2pos(@3))); + ctx.stack_.back()->set("early-global-reservations-lookup", early); +}; + ip_reservations_unique: IP_RESERVATIONS_UNIQUE COLON BOOLEAN { ctx.unique("ip-reservations-unique", ctx.loc2pos(@1)); ElementPtr unique(new BoolElement($3, ctx.loc2pos(@3))); diff --git a/src/bin/dhcp6/json_config_parser.cc b/src/bin/dhcp6/json_config_parser.cc index b6156cbdb6..778c9a8e10 100644 --- a/src/bin/dhcp6/json_config_parser.cc +++ b/src/bin/dhcp6/json_config_parser.cc @@ -815,6 +815,7 @@ configureDhcp6Server(Dhcpv6Srv& server, isc::data::ConstElementPtr config_set, (config_pair.first == "store-extended-info") || (config_pair.first == "statistic-default-sample-count") || (config_pair.first == "statistic-default-sample-age") || + (config_pair.first == "early-global-reservations-lookup") || (config_pair.first == "ip-reservations-unique") || (config_pair.first == "reservations-lookup-first") || (config_pair.first == "parked-packet-limit")) { diff --git a/src/lib/dhcpsrv/cfg_globals.cc b/src/lib/dhcpsrv/cfg_globals.cc index 7a2870004d..eec05e5144 100644 --- a/src/lib/dhcpsrv/cfg_globals.cc +++ b/src/lib/dhcpsrv/cfg_globals.cc @@ -44,6 +44,7 @@ CfgGlobals::nameToIndex = { { "statistic-default-sample-age", STATISTIC_DEFAULT_SAMPLE_AGE }, { "cache-threshold", CACHE_THRESHOLD }, { "cache-max-age", CACHE_MAX_AGE }, + { "early-global-reservations-lookup", EARLY_GLOBAL_RESERVATIONS_LOOKUP }, { "ip-reservations-unique", IP_RESERVATIONS_UNIQUE }, { "reservations-lookup-first", RESERVATIONS_LOOKUP_FIRST }, { "ddns-update-on-renew", DDNS_UPDATE_ON_RENEW }, diff --git a/src/lib/dhcpsrv/cfg_globals.h b/src/lib/dhcpsrv/cfg_globals.h index 6ea9aabc67..af15edcc7a 100644 --- a/src/lib/dhcpsrv/cfg_globals.h +++ b/src/lib/dhcpsrv/cfg_globals.h @@ -67,6 +67,7 @@ public: STATISTIC_DEFAULT_SAMPLE_AGE, CACHE_THRESHOLD, CACHE_MAX_AGE, + EARLY_GLOBAL_RESERVATIONS_LOOKUP, IP_RESERVATIONS_UNIQUE, RESERVATIONS_LOOKUP_FIRST, DDNS_UPDATE_ON_RENEW, diff --git a/src/lib/dhcpsrv/parsers/simple_parser4.cc b/src/lib/dhcpsrv/parsers/simple_parser4.cc index 69863d38cd..ba6a809a66 100644 --- a/src/lib/dhcpsrv/parsers/simple_parser4.cc +++ b/src/lib/dhcpsrv/parsers/simple_parser4.cc @@ -36,68 +36,69 @@ namespace dhcp { /// list and map types for entries. /// Order follows global_param rule in bison grammar. const SimpleKeywords SimpleParser4::GLOBAL4_PARAMETERS = { - { "valid-lifetime", Element::integer }, - { "min-valid-lifetime", Element::integer }, - { "max-valid-lifetime", Element::integer }, - { "renew-timer", Element::integer }, - { "rebind-timer", Element::integer }, - { "decline-probation-period", Element::integer }, - { "subnet4", Element::list }, - { "shared-networks", Element::list }, - { "interfaces-config", Element::map }, - { "lease-database", Element::map }, - { "hosts-database", Element::map }, - { "hosts-databases", Element::list }, - { "host-reservation-identifiers", Element::list }, - { "client-classes", Element::list }, - { "option-def", Element::list }, - { "option-data", Element::list }, - { "hooks-libraries", Element::list }, - { "expired-leases-processing", Element::map }, - { "dhcp4o6-port", Element::integer }, - { "control-socket", Element::map }, - { "dhcp-queue-control", Element::map }, - { "dhcp-ddns", Element::map }, - { "echo-client-id", Element::boolean }, - { "match-client-id", Element::boolean }, - { "authoritative", Element::boolean }, - { "next-server", Element::string }, - { "server-hostname", Element::string }, - { "boot-file-name", Element::string }, - { "user-context", Element::map }, - { "comment", Element::string }, - { "sanity-checks", Element::map }, - { "reservations", Element::list }, - { "config-control", Element::map }, - { "server-tag", Element::string }, - { "reservation-mode", Element::string }, - { "reservations-global", Element::boolean }, - { "reservations-in-subnet", Element::boolean }, - { "reservations-out-of-pool", Element::boolean }, - { "calculate-tee-times", Element::boolean }, - { "t1-percent", Element::real }, - { "t2-percent", Element::real }, - { "loggers", Element::list }, - { "hostname-char-set", Element::string }, - { "hostname-char-replacement", Element::string }, - { "ddns-send-updates", Element::boolean }, - { "ddns-override-no-update", Element::boolean }, - { "ddns-override-client-update", Element::boolean }, - { "ddns-replace-client-name", Element::string }, - { "ddns-generated-prefix", Element::string }, - { "ddns-qualifying-suffix", Element::string }, - { "store-extended-info", Element::boolean }, - { "statistic-default-sample-count", Element::integer }, - { "statistic-default-sample-age", Element::integer }, - { "multi-threading", Element::map }, - { "cache-threshold", Element::real }, - { "cache-max-age", Element::integer }, - { "ip-reservations-unique", Element::boolean }, - { "reservations-lookup-first", Element::boolean }, - { "ddns-update-on-renew", Element::boolean }, - { "ddns-use-conflict-resolution", Element::boolean }, - { "compatibility", Element::map }, - { "parked-packet-limit", Element::integer }, + { "valid-lifetime", Element::integer }, + { "min-valid-lifetime", Element::integer }, + { "max-valid-lifetime", Element::integer }, + { "renew-timer", Element::integer }, + { "rebind-timer", Element::integer }, + { "decline-probation-period", Element::integer }, + { "subnet4", Element::list }, + { "shared-networks", Element::list }, + { "interfaces-config", Element::map }, + { "lease-database", Element::map }, + { "hosts-database", Element::map }, + { "hosts-databases", Element::list }, + { "host-reservation-identifiers", Element::list }, + { "client-classes", Element::list }, + { "option-def", Element::list }, + { "option-data", Element::list }, + { "hooks-libraries", Element::list }, + { "expired-leases-processing", Element::map }, + { "dhcp4o6-port", Element::integer }, + { "control-socket", Element::map }, + { "dhcp-queue-control", Element::map }, + { "dhcp-ddns", Element::map }, + { "echo-client-id", Element::boolean }, + { "match-client-id", Element::boolean }, + { "authoritative", Element::boolean }, + { "next-server", Element::string }, + { "server-hostname", Element::string }, + { "boot-file-name", Element::string }, + { "user-context", Element::map }, + { "comment", Element::string }, + { "sanity-checks", Element::map }, + { "reservations", Element::list }, + { "config-control", Element::map }, + { "server-tag", Element::string }, + { "reservation-mode", Element::string }, + { "reservations-global", Element::boolean }, + { "reservations-in-subnet", Element::boolean }, + { "reservations-out-of-pool", Element::boolean }, + { "calculate-tee-times", Element::boolean }, + { "t1-percent", Element::real }, + { "t2-percent", Element::real }, + { "loggers", Element::list }, + { "hostname-char-set", Element::string }, + { "hostname-char-replacement", Element::string }, + { "ddns-send-updates", Element::boolean }, + { "ddns-override-no-update", Element::boolean }, + { "ddns-override-client-update", Element::boolean }, + { "ddns-replace-client-name", Element::string }, + { "ddns-generated-prefix", Element::string }, + { "ddns-qualifying-suffix", Element::string }, + { "store-extended-info", Element::boolean }, + { "statistic-default-sample-count", Element::integer }, + { "statistic-default-sample-age", Element::integer }, + { "multi-threading", Element::map }, + { "cache-threshold", Element::real }, + { "cache-max-age", Element::integer }, + { "early-global-reservations-lookup", Element::boolean }, + { "ip-reservations-unique", Element::boolean }, + { "reservations-lookup-first", Element::boolean }, + { "ddns-update-on-renew", Element::boolean }, + { "ddns-use-conflict-resolution", Element::boolean }, + { "compatibility", Element::map }, + { "parked-packet-limit", Element::integer }, }; /// @brief This table defines default global values for DHCPv4 @@ -106,38 +107,39 @@ const SimpleKeywords SimpleParser4::GLOBAL4_PARAMETERS = { /// in Dhcp4) are optional. If not defined, the following values will be /// used. const SimpleDefaults SimpleParser4::GLOBAL4_DEFAULTS = { - { "valid-lifetime", Element::integer, "7200" }, - { "decline-probation-period", Element::integer, "86400" }, // 24h - { "dhcp4o6-port", Element::integer, "0" }, - { "echo-client-id", Element::boolean, "true" }, - { "match-client-id", Element::boolean, "true" }, - { "authoritative", Element::boolean, "false" }, - { "next-server", Element::string, "0.0.0.0" }, - { "server-hostname", Element::string, "" }, - { "boot-file-name", Element::string, "" }, - { "server-tag", Element::string, "" }, - { "reservations-global", Element::boolean, "false" }, - { "reservations-in-subnet", Element::boolean, "true" }, - { "reservations-out-of-pool", Element::boolean, "false" }, - { "calculate-tee-times", Element::boolean, "false" }, - { "t1-percent", Element::real, ".50" }, - { "t2-percent", Element::real, ".875" }, - { "ddns-send-updates", Element::boolean, "true" }, - { "ddns-override-no-update", Element::boolean, "false" }, - { "ddns-override-client-update", Element::boolean, "false" }, - { "ddns-replace-client-name", Element::string, "never" }, - { "ddns-generated-prefix", Element::string, "myhost" }, - { "ddns-qualifying-suffix", Element::string, "" }, - { "hostname-char-set", Element::string, "[^A-Za-z0-9.-]" }, - { "hostname-char-replacement", Element::string, "" }, - { "store-extended-info", Element::boolean, "false" }, - { "statistic-default-sample-count", Element::integer, "20" }, - { "statistic-default-sample-age", Element::integer, "0" }, - { "ip-reservations-unique", Element::boolean, "true" }, - { "reservations-lookup-first", Element::boolean, "false" }, - { "ddns-update-on-renew", Element::boolean, "false" }, - { "ddns-use-conflict-resolution", Element::boolean, "true" }, - { "parked-packet-limit", Element::integer, "256" }, + { "valid-lifetime", Element::integer, "7200" }, + { "decline-probation-period", Element::integer, "86400" }, // 24h + { "dhcp4o6-port", Element::integer, "0" }, + { "echo-client-id", Element::boolean, "true" }, + { "match-client-id", Element::boolean, "true" }, + { "authoritative", Element::boolean, "false" }, + { "next-server", Element::string, "0.0.0.0" }, + { "server-hostname", Element::string, "" }, + { "boot-file-name", Element::string, "" }, + { "server-tag", Element::string, "" }, + { "reservations-global", Element::boolean, "false" }, + { "reservations-in-subnet", Element::boolean, "true" }, + { "reservations-out-of-pool", Element::boolean, "false" }, + { "calculate-tee-times", Element::boolean, "false" }, + { "t1-percent", Element::real, ".50" }, + { "t2-percent", Element::real, ".875" }, + { "ddns-send-updates", Element::boolean, "true" }, + { "ddns-override-no-update", Element::boolean, "false" }, + { "ddns-override-client-update", Element::boolean, "false" }, + { "ddns-replace-client-name", Element::string, "never" }, + { "ddns-generated-prefix", Element::string, "myhost" }, + { "ddns-qualifying-suffix", Element::string, "" }, + { "hostname-char-set", Element::string, "[^A-Za-z0-9.-]" }, + { "hostname-char-replacement", Element::string, "" }, + { "store-extended-info", Element::boolean, "false" }, + { "statistic-default-sample-count", Element::integer, "20" }, + { "statistic-default-sample-age", Element::integer, "0" }, + { "early-global-reservations-lookup", Element::boolean, "false" }, + { "ip-reservations-unique", Element::boolean, "true" }, + { "reservations-lookup-first", Element::boolean, "false" }, + { "ddns-update-on-renew", Element::boolean, "false" }, + { "ddns-use-conflict-resolution", Element::boolean, "true" }, + { "parked-packet-limit", Element::integer, "256" }, }; /// @brief This table defines all option definition parameters. diff --git a/src/lib/dhcpsrv/parsers/simple_parser6.cc b/src/lib/dhcpsrv/parsers/simple_parser6.cc index 10586c04c0..6ed05ff92d 100644 --- a/src/lib/dhcpsrv/parsers/simple_parser6.cc +++ b/src/lib/dhcpsrv/parsers/simple_parser6.cc @@ -36,69 +36,70 @@ namespace dhcp { /// list and map types for entries. /// Order follows global_param rule in bison grammar. const SimpleKeywords SimpleParser6::GLOBAL6_PARAMETERS = { - { "data-directory", Element::string }, - { "preferred-lifetime", Element::integer }, - { "min-preferred-lifetime", Element::integer }, - { "max-preferred-lifetime", Element::integer }, - { "valid-lifetime", Element::integer }, - { "min-valid-lifetime", Element::integer }, - { "max-valid-lifetime", Element::integer }, - { "renew-timer", Element::integer }, - { "rebind-timer", Element::integer }, - { "decline-probation-period", Element::integer }, - { "subnet6", Element::list }, - { "shared-networks", Element::list }, - { "interfaces-config", Element::map }, - { "lease-database", Element::map }, - { "hosts-database", Element::map }, - { "hosts-databases", Element::list }, - { "mac-sources", Element::list }, - { "relay-supplied-options", Element::list }, - { "host-reservation-identifiers", Element::list }, - { "client-classes", Element::list }, - { "option-def", Element::list }, - { "option-data", Element::list }, - { "hooks-libraries", Element::list }, - { "expired-leases-processing", Element::map }, - { "server-id", Element::map }, - { "dhcp4o6-port", Element::integer }, - { "control-socket", Element::map }, - { "dhcp-queue-control", Element::map }, - { "dhcp-ddns", Element::map }, - { "user-context", Element::map }, - { "comment", Element::string }, - { "sanity-checks", Element::map }, - { "reservations", Element::list }, - { "config-control", Element::map }, - { "server-tag", Element::string }, - { "reservation-mode", Element::string }, - { "reservations-global", Element::boolean }, - { "reservations-in-subnet", Element::boolean }, - { "reservations-out-of-pool", Element::boolean }, - { "calculate-tee-times", Element::boolean }, - { "t1-percent", Element::real }, - { "t2-percent", Element::real }, - { "loggers", Element::list }, - { "hostname-char-set", Element::string }, - { "hostname-char-replacement", Element::string }, - { "ddns-send-updates", Element::boolean }, - { "ddns-override-no-update", Element::boolean }, - { "ddns-override-client-update", Element::boolean }, - { "ddns-replace-client-name", Element::string }, - { "ddns-generated-prefix", Element::string }, - { "ddns-qualifying-suffix", Element::string }, - { "store-extended-info", Element::boolean }, - { "statistic-default-sample-count", Element::integer }, - { "statistic-default-sample-age", Element::integer }, - { "multi-threading", Element::map }, - { "cache-threshold", Element::real }, - { "cache-max-age", Element::integer }, - { "ip-reservations-unique", Element::boolean }, - { "reservations-lookup-first", Element::boolean }, - { "ddns-update-on-renew", Element::boolean }, - { "ddns-use-conflict-resolution", Element::boolean }, - { "compatibility", Element::map }, - { "parked-packet-limit", Element::integer }, + { "data-directory", Element::string }, + { "preferred-lifetime", Element::integer }, + { "min-preferred-lifetime", Element::integer }, + { "max-preferred-lifetime", Element::integer }, + { "valid-lifetime", Element::integer }, + { "min-valid-lifetime", Element::integer }, + { "max-valid-lifetime", Element::integer }, + { "renew-timer", Element::integer }, + { "rebind-timer", Element::integer }, + { "decline-probation-period", Element::integer }, + { "subnet6", Element::list }, + { "shared-networks", Element::list }, + { "interfaces-config", Element::map }, + { "lease-database", Element::map }, + { "hosts-database", Element::map }, + { "hosts-databases", Element::list }, + { "mac-sources", Element::list }, + { "relay-supplied-options", Element::list }, + { "host-reservation-identifiers", Element::list }, + { "client-classes", Element::list }, + { "option-def", Element::list }, + { "option-data", Element::list }, + { "hooks-libraries", Element::list }, + { "expired-leases-processing", Element::map }, + { "server-id", Element::map }, + { "dhcp4o6-port", Element::integer }, + { "control-socket", Element::map }, + { "dhcp-queue-control", Element::map }, + { "dhcp-ddns", Element::map }, + { "user-context", Element::map }, + { "comment", Element::string }, + { "sanity-checks", Element::map }, + { "reservations", Element::list }, + { "config-control", Element::map }, + { "server-tag", Element::string }, + { "reservation-mode", Element::string }, + { "reservations-global", Element::boolean }, + { "reservations-in-subnet", Element::boolean }, + { "reservations-out-of-pool", Element::boolean }, + { "calculate-tee-times", Element::boolean }, + { "t1-percent", Element::real }, + { "t2-percent", Element::real }, + { "loggers", Element::list }, + { "hostname-char-set", Element::string }, + { "hostname-char-replacement", Element::string }, + { "ddns-send-updates", Element::boolean }, + { "ddns-override-no-update", Element::boolean }, + { "ddns-override-client-update", Element::boolean }, + { "ddns-replace-client-name", Element::string }, + { "ddns-generated-prefix", Element::string }, + { "ddns-qualifying-suffix", Element::string }, + { "store-extended-info", Element::boolean }, + { "statistic-default-sample-count", Element::integer }, + { "statistic-default-sample-age", Element::integer }, + { "multi-threading", Element::map }, + { "cache-threshold", Element::real }, + { "cache-max-age", Element::integer }, + { "early-global-reservations-lookup", Element::boolean }, + { "ip-reservations-unique", Element::boolean }, + { "reservations-lookup-first", Element::boolean }, + { "ddns-update-on-renew", Element::boolean }, + { "ddns-use-conflict-resolution", Element::boolean }, + { "compatibility", Element::map }, + { "parked-packet-limit", Element::integer }, }; /// @brief This table defines default global values for DHCPv6 @@ -107,33 +108,34 @@ const SimpleKeywords SimpleParser6::GLOBAL6_PARAMETERS = { /// in Dhcp6) are optional. If not defined, the following values will be /// used. const SimpleDefaults SimpleParser6::GLOBAL6_DEFAULTS = { - { "preferred-lifetime", Element::integer, "3600" }, - { "valid-lifetime", Element::integer, "7200" }, - { "decline-probation-period", Element::integer, "86400" }, // 24h - { "dhcp4o6-port", Element::integer, "0" }, - { "server-tag", Element::string, "" }, - { "reservations-global", Element::boolean, "false" }, - { "reservations-in-subnet", Element::boolean, "true" }, - { "reservations-out-of-pool", Element::boolean, "false" }, - { "calculate-tee-times", Element::boolean, "true" }, - { "t1-percent", Element::real, ".50" }, - { "t2-percent", Element::real, ".80" }, - { "ddns-send-updates", Element::boolean, "true" }, - { "ddns-override-no-update", Element::boolean, "false" }, - { "ddns-override-client-update", Element::boolean, "false" }, - { "ddns-replace-client-name", Element::string, "never" }, - { "ddns-generated-prefix", Element::string, "myhost" }, - { "ddns-qualifying-suffix", Element::string, "" }, - { "hostname-char-set", Element::string, "[^A-Za-z0-9.-]" }, - { "hostname-char-replacement", Element::string, "" }, - { "store-extended-info", Element::boolean, "false" }, - { "statistic-default-sample-count", Element::integer, "20" }, - { "statistic-default-sample-age", Element::integer, "0" }, - { "ip-reservations-unique", Element::boolean, "true" }, - { "reservations-lookup-first", Element::boolean, "false" }, - { "ddns-update-on-renew", Element::boolean, "false" }, - { "ddns-use-conflict-resolution", Element::boolean, "true" }, - { "parked-packet-limit", Element::integer, "256" } + { "preferred-lifetime", Element::integer, "3600" }, + { "valid-lifetime", Element::integer, "7200" }, + { "decline-probation-period", Element::integer, "86400" }, // 24h + { "dhcp4o6-port", Element::integer, "0" }, + { "server-tag", Element::string, "" }, + { "reservations-global", Element::boolean, "false" }, + { "reservations-in-subnet", Element::boolean, "true" }, + { "reservations-out-of-pool", Element::boolean, "false" }, + { "calculate-tee-times", Element::boolean, "true" }, + { "t1-percent", Element::real, ".50" }, + { "t2-percent", Element::real, ".80" }, + { "ddns-send-updates", Element::boolean, "true" }, + { "ddns-override-no-update", Element::boolean, "false" }, + { "ddns-override-client-update", Element::boolean, "false" }, + { "ddns-replace-client-name", Element::string, "never" }, + { "ddns-generated-prefix", Element::string, "myhost" }, + { "ddns-qualifying-suffix", Element::string, "" }, + { "hostname-char-set", Element::string, "[^A-Za-z0-9.-]" }, + { "hostname-char-replacement", Element::string, "" }, + { "store-extended-info", Element::boolean, "false" }, + { "statistic-default-sample-count", Element::integer, "20" }, + { "statistic-default-sample-age", Element::integer, "0" }, + { "early-global-reservations-lookup", Element::boolean, "false" }, + { "ip-reservations-unique", Element::boolean, "true" }, + { "reservations-lookup-first", Element::boolean, "false" }, + { "ddns-update-on-renew", Element::boolean, "false" }, + { "ddns-use-conflict-resolution", Element::boolean, "true" }, + { "parked-packet-limit", Element::integer, "256" } }; /// @brief This table defines all option definition parameters.