From: Francis Dupont Date: Thu, 12 Jan 2017 00:55:47 +0000 (+0100) Subject: [5097] Added missing user-context map in flex/bison X-Git-Tag: trac5119_base~2^2~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=46303ccf47cc3db22bb05aedf5bd3ac9909ac9b0;p=thirdparty%2Fkea.git [5097] Added missing user-context map in flex/bison --- diff --git a/src/bin/dhcp4/dhcp4_lexer.ll b/src/bin/dhcp4/dhcp4_lexer.ll index 29de204512..f88a66d6f1 100644 --- a/src/bin/dhcp4/dhcp4_lexer.ll +++ b/src/bin/dhcp4/dhcp4_lexer.ll @@ -426,6 +426,15 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence} } } +\"user-context\" { + switch(driver.ctx_) { + case isc::dhcp::Parser4Context::POOLS: + return isc::dhcp::Dhcp4Parser::make_USER_CONTEXT(driver.loc_); + default: + return isc::dhcp::Dhcp4Parser::make_STRING("user-context", driver.loc_); + } +} + \"subnet\" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: diff --git a/src/bin/dhcp4/dhcp4_parser.yy b/src/bin/dhcp4/dhcp4_parser.yy index 730e4de45c..27ed20c0ec 100644 --- a/src/bin/dhcp4/dhcp4_parser.yy +++ b/src/bin/dhcp4/dhcp4_parser.yy @@ -93,6 +93,7 @@ using namespace std; POOLS "pools" POOL "pool" + USER_CONTEXT "user-context" SUBNET "subnet" INTERFACE "interface" @@ -193,6 +194,7 @@ using namespace std; %token BOOLEAN "boolean" %type value +%type map_value %type socket_type %printer { yyoutput << $$; } <*>; @@ -246,6 +248,8 @@ map2: LCURLY_BRACKET { // for it. }; +map_value: map2 { $$ = ctx.stack_.back(); ctx.stack_.pop_back(); }; + // Assignments rule map_content: %empty // empty map | not_empty_map @@ -1106,6 +1110,7 @@ pool_params: pool_param pool_param: pool_entry | option_data_list + | user_context | unknown_map_entry ; @@ -1117,6 +1122,13 @@ pool_entry: POOL { ctx.leave(); }; +user_context: USER_CONTEXT { + ctx.enter(ctx.NO_KEYWORD); +} COLON map_value { + ctx.stack_.back()->set("user-context", $4); + ctx.leave(); +}; + // --- end of pools definition ------------------------------- // --- reservations ------------------------------------------ diff --git a/src/bin/dhcp4/tests/config_parser_unittest.cc b/src/bin/dhcp4/tests/config_parser_unittest.cc index a975b564dc..22f9508fc8 100644 --- a/src/bin/dhcp4/tests/config_parser_unittest.cc +++ b/src/bin/dhcp4/tests/config_parser_unittest.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2012-2016 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2012-2017 Internet Systems Consortium, Inc. ("ISC") // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -572,8 +572,9 @@ public: void getPool(const std::string& config, size_t subnet_index, size_t pool_index, PoolPtr& pool) { ConstElementPtr status; - ElementPtr json = Element::fromJSON(config); + ConstElementPtr json; + EXPECT_NO_THROW(json = parseDHCP4(config, true)); EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json)); ASSERT_TRUE(status); checkResult(status, 0); diff --git a/src/bin/dhcp6/dhcp6_lexer.ll b/src/bin/dhcp6/dhcp6_lexer.ll index 26a4588e5f..124f8bd6e6 100644 --- a/src/bin/dhcp6/dhcp6_lexer.ll +++ b/src/bin/dhcp6/dhcp6_lexer.ll @@ -466,6 +466,16 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence} } } +\"user-context\" { + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::POOLS: + case isc::dhcp::Parser6Context::PD_POOLS: + return isc::dhcp::Dhcp6Parser::make_USER_CONTEXT(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("user-context", driver.loc_); + } +} + \"subnet\" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: diff --git a/src/bin/dhcp6/dhcp6_parser.yy b/src/bin/dhcp6/dhcp6_parser.yy index 03d3b3893e..1530d88dda 100644 --- a/src/bin/dhcp6/dhcp6_parser.yy +++ b/src/bin/dhcp6/dhcp6_parser.yy @@ -88,6 +88,7 @@ using namespace std; EXCLUDED_PREFIX "excluded-prefix" EXCLUDED_PREFIX_LEN "excluded-prefix-len" DELEGATED_LEN "delegated-len" + USER_CONTEXT "user-context" SUBNET "subnet" INTERFACE "interface" @@ -194,6 +195,7 @@ using namespace std; %token BOOLEAN "boolean" %type value +%type map_value %type duid_type %printer { yyoutput << $$; } <*>; @@ -248,6 +250,8 @@ map2: LCURLY_BRACKET { // for it. }; +map_value: map2 { $$ = ctx.stack_.back(); ctx.stack_.pop_back(); }; + // Assignments rule map_content: %empty // empty map | not_empty_map @@ -1083,6 +1087,7 @@ pool_params: pool_param pool_param: pool_entry | option_data_list + | user_context | unknown_map_entry ; @@ -1094,6 +1099,13 @@ pool_entry: POOL { ctx.leave(); }; +user_context: USER_CONTEXT { + ctx.enter(ctx.NO_KEYWORD); +} COLON map_value { + ctx.stack_.back()->set("user-context", $4); + ctx.leave(); +}; + // --- end of pools definition ------------------------------- // --- pd-pools ---------------------------------------------- @@ -1143,6 +1155,7 @@ pd_pool_param: pd_prefix | option_data_list | excluded_prefix | excluded_prefix_len + | user_context | unknown_map_entry ; diff --git a/src/bin/dhcp6/tests/config_parser_unittest.cc b/src/bin/dhcp6/tests/config_parser_unittest.cc index fc479fc12e..d007490636 100644 --- a/src/bin/dhcp6/tests/config_parser_unittest.cc +++ b/src/bin/dhcp6/tests/config_parser_unittest.cc @@ -707,8 +707,9 @@ public: void getPool(const std::string& config, size_t subnet_index, size_t pool_index, Lease::Type type, PoolPtr& pool) { ConstElementPtr status; - ElementPtr json = Element::fromJSON(config); + ConstElementPtr json; + EXPECT_NO_THROW(json = parseDHCP6(config, true)); EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json)); ASSERT_TRUE(status); checkResult(status, 0);