diff --git a/src/bin/dhcp4/dhcp4_lexer.ll b/src/bin/dhcp4/dhcp4_lexer.ll index afb215b25c..7e360f9434 100644 --- a/src/bin/dhcp4/dhcp4_lexer.ll +++ b/src/bin/dhcp4/dhcp4_lexer.ll @@ -1868,6 +1868,15 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence} } } +\"ip-reservations-unique\" { + switch(driver.ctx_) { + case isc::dhcp::Parser4Context::DHCP4: + return isc::dhcp::Dhcp4Parser::make_IP_RESERVATIONS_UNIQUE(driver.loc_); + default: + return isc::dhcp::Dhcp4Parser::make_STRING("ip-reservations-unique", driver.loc_); + } +} + {JSONString} { /* A string has been matched. It contains the actual string and single quotes. We need to get those quotes out of the way and just use its content, e.g. diff --git a/src/bin/dhcp4/dhcp4_parser.yy b/src/bin/dhcp4/dhcp4_parser.yy index 3b4b78a38c..ea2f29bd8c 100644 --- a/src/bin/dhcp4/dhcp4_parser.yy +++ b/src/bin/dhcp4/dhcp4_parser.yy @@ -225,6 +225,7 @@ using namespace std; WHEN_NOT_PRESENT "when-not-present" HOSTNAME_CHAR_SET "hostname-char-set" HOSTNAME_CHAR_REPLACEMENT "hostname-char-replacement" + IP_RESERVATIONS_UNIQUE "ip-reservations-unique" LOGGERS "loggers" OUTPUT_OPTIONS "output_options" @@ -498,6 +499,7 @@ global_param: valid_lifetime | statistic_default_sample_count | statistic_default_sample_age | dhcp_multi_threading + | ip_reservations_unique | unknown_map_entry ; @@ -693,6 +695,12 @@ statistic_default_sample_age: STATISTIC_DEFAULT_SAMPLE_AGE COLON INTEGER { ctx.stack_.back()->set("statistic-default-sample-age", age); }; +ip_reservations_unique: IP_RESERVATIONS_UNIQUE COLON BOOLEAN { + ctx.unique("ip-reservations-unique", ctx.loc2pos(@1)); + ElementPtr unique(new BoolElement($3, ctx.loc2pos(@3))); + ctx.stack_.back()->set("ip-reservations-unique", unique); +}; + interfaces_config: INTERFACES_CONFIG { ctx.unique("interfaces-config", ctx.loc2pos(@1)); ElementPtr i(new MapElement(ctx.loc2pos(@1))); diff --git a/src/bin/dhcp4/json_config_parser.cc b/src/bin/dhcp4/json_config_parser.cc index 26627bf1ab..2a3df4f5b1 100644 --- a/src/bin/dhcp4/json_config_parser.cc +++ b/src/bin/dhcp4/json_config_parser.cc @@ -624,7 +624,8 @@ configureDhcp4Server(Dhcpv4Srv& server, isc::data::ConstElementPtr config_set, (config_pair.first == "ddns-qualifying-suffix") || (config_pair.first == "store-extended-info") || (config_pair.first == "statistic-default-sample-count") || - (config_pair.first == "statistic-default-sample-age")) { + (config_pair.first == "statistic-default-sample-age") || + (config_pair.first == "ip-reservations-unique")) { CfgMgr::instance().getStagingCfg()->addConfiguredGlobal(config_pair.first, config_pair.second); continue; diff --git a/src/bin/dhcp4/tests/get_config_unittest.cc b/src/bin/dhcp4/tests/get_config_unittest.cc index de261d1335..7e86cd2f6f 100644 --- a/src/bin/dhcp4/tests/get_config_unittest.cc +++ b/src/bin/dhcp4/tests/get_config_unittest.cc @@ -2298,6 +2298,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -2372,6 +2373,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -2470,6 +2472,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -2568,6 +2571,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -2672,6 +2676,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -2847,6 +2852,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -3022,6 +3028,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -3122,6 +3129,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -3225,6 +3233,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -3328,6 +3337,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -3428,6 +3438,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -3528,6 +3539,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -3655,6 +3667,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -3781,6 +3794,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -3908,6 +3922,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -4034,6 +4049,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -4138,6 +4154,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -4271,6 +4288,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -4371,6 +4389,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -4453,6 +4472,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -4535,6 +4555,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -4626,6 +4647,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -4708,6 +4730,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -4790,6 +4813,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -4872,6 +4896,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -4954,6 +4979,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -5071,6 +5097,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -5188,6 +5215,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -5315,6 +5343,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -5425,6 +5454,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -5578,6 +5608,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -5704,6 +5735,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -5847,6 +5879,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -5964,6 +5997,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -6086,6 +6120,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -6203,6 +6238,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -6313,6 +6349,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -6457,6 +6494,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -6572,6 +6610,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -6691,6 +6730,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"eth0\", \"eth1\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -6765,6 +6805,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\", \"eth0\", \"eth1\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -6839,6 +6880,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -6939,6 +6981,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -7039,6 +7082,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -7139,6 +7183,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -7239,6 +7284,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -7339,6 +7385,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -7517,6 +7564,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -7632,6 +7680,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -7885,6 +7934,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -8015,6 +8065,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -8193,6 +8244,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -8319,6 +8371,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -8391,6 +8444,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -8463,6 +8517,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -8535,6 +8590,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -8607,6 +8663,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -8707,6 +8764,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -8807,6 +8865,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -8907,6 +8966,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -9007,6 +9067,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -9133,6 +9194,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -9233,6 +9295,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -9333,6 +9396,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -9434,6 +9498,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -9539,6 +9604,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -9658,6 +9724,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -9779,6 +9846,7 @@ const char* UNPARSED_CONFIGS[] = { " \"comment\": \"Use wildcard\"\n" " }\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -9951,6 +10019,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -10131,6 +10200,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -10288,6 +10358,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -10413,6 +10484,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -10538,6 +10610,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -10612,6 +10685,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -10684,6 +10758,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" diff --git a/src/bin/dhcp6/dhcp6_lexer.ll b/src/bin/dhcp6/dhcp6_lexer.ll index 7bde4b74b4..8f095d0e27 100644 --- a/src/bin/dhcp6/dhcp6_lexer.ll +++ b/src/bin/dhcp6/dhcp6_lexer.ll @@ -1929,6 +1929,15 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence} } } +\"ip-reservations-unique\" { + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::DHCP6: + return isc::dhcp::Dhcp6Parser::make_IP_RESERVATIONS_UNIQUE(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("ip-reservations-unique", driver.loc_); + } +} + {JSONString} { /* A string has been matched. It contains the actual string and single quotes. We need to get those quotes out of the way and just use its content, e.g. diff --git a/src/bin/dhcp6/dhcp6_parser.yy b/src/bin/dhcp6/dhcp6_parser.yy index 63b45abb41..7e8857c975 100644 --- a/src/bin/dhcp6/dhcp6_parser.yy +++ b/src/bin/dhcp6/dhcp6_parser.yy @@ -231,6 +231,7 @@ using namespace std; WHEN_NOT_PRESENT "when-not-present" HOSTNAME_CHAR_SET "hostname-char-set" HOSTNAME_CHAR_REPLACEMENT "hostname-char-replacement" + IP_RESERVATIONS_UNIQUE "ip-reservations-unique" LOGGERS "loggers" OUTPUT_OPTIONS "output_options" @@ -506,6 +507,7 @@ global_param: data_directory | statistic_default_sample_count | statistic_default_sample_age | dhcp_multi_threading + | ip_reservations_unique | unknown_map_entry ; @@ -710,6 +712,12 @@ server_tag: SERVER_TAG { ctx.leave(); }; +ip_reservations_unique: IP_RESERVATIONS_UNIQUE COLON BOOLEAN { + ctx.unique("ip-reservations-unique", ctx.loc2pos(@1)); + ElementPtr unique(new BoolElement($3, ctx.loc2pos(@3))); + ctx.stack_.back()->set("ip-reservations-unique", unique); +}; + interfaces_config: INTERFACES_CONFIG { ctx.unique("interfaces-config", ctx.loc2pos(@1)); ElementPtr i(new MapElement(ctx.loc2pos(@1))); diff --git a/src/bin/dhcp6/json_config_parser.cc b/src/bin/dhcp6/json_config_parser.cc index 90bc929cb3..e72d406fd5 100644 --- a/src/bin/dhcp6/json_config_parser.cc +++ b/src/bin/dhcp6/json_config_parser.cc @@ -757,7 +757,8 @@ configureDhcp6Server(Dhcpv6Srv& server, isc::data::ConstElementPtr config_set, (config_pair.first == "ddns-qualifying-suffix") || (config_pair.first == "store-extended-info") || (config_pair.first == "statistic-default-sample-count") || - (config_pair.first == "statistic-default-sample-age")) { + (config_pair.first == "statistic-default-sample-age") || + (config_pair.first == "ip-reservations-unique")) { CfgMgr::instance().getStagingCfg()->addConfiguredGlobal(config_pair.first, config_pair.second); continue; diff --git a/src/bin/dhcp6/tests/get_config_unittest.cc b/src/bin/dhcp6/tests/get_config_unittest.cc index 985151c494..3f943bd977 100644 --- a/src/bin/dhcp6/tests/get_config_unittest.cc +++ b/src/bin/dhcp6/tests/get_config_unittest.cc @@ -2027,6 +2027,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -2106,6 +2107,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -2219,6 +2221,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -2399,6 +2402,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -2579,6 +2583,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -2759,6 +2764,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -2872,6 +2878,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -2978,6 +2985,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -3084,6 +3092,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -3222,6 +3231,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -3327,6 +3337,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -3434,6 +3445,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -3543,6 +3555,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -3667,6 +3680,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -3774,6 +3788,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -3861,6 +3876,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -3948,6 +3964,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -4044,6 +4061,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -4131,6 +4149,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -4218,6 +4237,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -4340,6 +4360,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -4462,6 +4483,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -4594,6 +4616,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -4709,6 +4732,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -4867,6 +4891,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -5015,6 +5040,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -5173,6 +5199,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -5293,6 +5320,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -5417,6 +5445,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"eth0\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -5496,6 +5525,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\", \"eth0\", \"eth1\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -5575,6 +5605,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -5680,6 +5711,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -5785,6 +5817,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -5968,6 +6001,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -6088,6 +6122,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -6216,6 +6251,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -6321,6 +6357,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -6426,6 +6463,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -6531,6 +6569,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -6761,6 +6800,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -6889,6 +6929,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -6968,6 +7009,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -7047,6 +7089,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -7256,6 +7299,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -7387,6 +7431,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -7466,6 +7511,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -7543,6 +7589,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -7620,6 +7667,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -7697,6 +7745,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -7788,6 +7837,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -7893,6 +7943,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -7998,6 +8049,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -8104,6 +8156,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -8215,6 +8268,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -8326,6 +8380,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -8433,6 +8488,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -8541,6 +8597,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -8668,6 +8725,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -8782,6 +8840,7 @@ const char* UNPARSED_CONFIGS[] = { " \"comment\": \"Use wildcard\"\n" " }\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -8972,6 +9031,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -9169,6 +9229,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -9248,6 +9309,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" @@ -9325,6 +9387,7 @@ const char* UNPARSED_CONFIGS[] = { " \"interfaces\": [ \"*\" ],\n" " \"re-detect\": false\n" " },\n" +" \"ip-reservations-unique\": true,\n" " \"lease-database\": {\n" " \"type\": \"memfile\"\n" " },\n" diff --git a/src/lib/dhcpsrv/parsers/simple_parser4.cc b/src/lib/dhcpsrv/parsers/simple_parser4.cc index f4f13e92cf..e2233060db 100644 --- a/src/lib/dhcpsrv/parsers/simple_parser4.cc +++ b/src/lib/dhcpsrv/parsers/simple_parser4.cc @@ -88,7 +88,8 @@ const SimpleKeywords SimpleParser4::GLOBAL4_PARAMETERS = { { "statistic-default-sample-age", Element::integer }, { "multi-threading", Element::map }, { "cache-threshold", Element::real }, - { "cache-max-age", Element::integer } + { "cache-max-age", Element::integer }, + { "ip-reservations-unique", Element::boolean } }; /// @brief This table defines default global values for DHCPv4 @@ -121,7 +122,8 @@ const SimpleDefaults SimpleParser4::GLOBAL4_DEFAULTS = { { "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" } + { "statistic-default-sample-age", Element::integer, "0" }, + { "ip-reservations-unique", Element::boolean, "true" } }; /// @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 e58cdae770..861acd136f 100644 --- a/src/lib/dhcpsrv/parsers/simple_parser6.cc +++ b/src/lib/dhcpsrv/parsers/simple_parser6.cc @@ -89,7 +89,8 @@ const SimpleKeywords SimpleParser6::GLOBAL6_PARAMETERS = { { "statistic-default-sample-age", Element::integer }, { "multi-threading", Element::map }, { "cache-threshold", Element::real }, - { "cache-max-age", Element::integer } + { "cache-max-age", Element::integer }, + { "ip-reservations-unique", Element::boolean } }; /// @brief This table defines default global values for DHCPv6 @@ -117,7 +118,8 @@ const SimpleDefaults SimpleParser6::GLOBAL6_DEFAULTS = { { "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" } + { "statistic-default-sample-age", Element::integer, "0" }, + { "ip-reservations-unique", Element::boolean, "true" } }; /// @brief This table defines all option definition parameters.