From: Francis Dupont Date: Thu, 26 Jan 2017 23:47:25 +0000 (+0100) Subject: [5121] Updated parser for HRmode X-Git-Tag: trac5227_base~6^2~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=03fc86a6802875237f9afd2d8032e9595a69d44b;p=thirdparty%2Fkea.git [5121] Updated parser for HRmode --- diff --git a/src/bin/dhcp4/dhcp4_lexer.ll b/src/bin/dhcp4/dhcp4_lexer.ll index ac84dd70df..dd8945ee71 100644 --- a/src/bin/dhcp4/dhcp4_lexer.ll +++ b/src/bin/dhcp4/dhcp4_lexer.ll @@ -536,6 +536,42 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence} } } +\"disabled\" { + switch(driver.ctx_) { + case isc::dhcp::Parser4Context::RESERVATION_MODE: + return isc::dhcp::Dhcp4Parser::make_DISABLED(driver.loc_); + default: + return isc::dhcp::Dhcp4Parser::make_STRING("disabled", driver.loc_); + } +} + +\"off\" { + switch(driver.ctx_) { + case isc::dhcp::Parser4Context::RESERVATION_MODE: + return isc::dhcp::Dhcp4Parser::make_DISABLED(driver.loc_); + default: + return isc::dhcp::Dhcp4Parser::make_STRING("off", driver.loc_); + } +} + +\"out-of-pool\" { + switch(driver.ctx_) { + case isc::dhcp::Parser4Context::RESERVATION_MODE: + return isc::dhcp::Dhcp4Parser::make_OUT_OF_POOL(driver.loc_); + default: + return isc::dhcp::Dhcp4Parser::make_STRING("out-of-pool", driver.loc_); + } +} + +\"all\" { + switch(driver.ctx_) { + case isc::dhcp::Parser4Context::RESERVATION_MODE: + return isc::dhcp::Dhcp4Parser::make_ALL(driver.loc_); + default: + return isc::dhcp::Dhcp4Parser::make_STRING("all", driver.loc_); + } +} + \"code\" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DEF: diff --git a/src/bin/dhcp4/dhcp4_parser.yy b/src/bin/dhcp4/dhcp4_parser.yy index a25c101e01..d3fb54fcdb 100644 --- a/src/bin/dhcp4/dhcp4_parser.yy +++ b/src/bin/dhcp4/dhcp4_parser.yy @@ -106,6 +106,9 @@ using namespace std; ID "id" RAPID_COMMIT "rapid-commit" RESERVATION_MODE "reservation-mode" + DISABLED "disabled" + OUT_OF_POOL "out-of-pool" + ALL "all" HOST_RESERVATION_IDENTIFIERS "host-reservation-identifiers" @@ -198,6 +201,7 @@ using namespace std; %type map_value %type socket_type %type db_type +%type hr_mode %type ncr_protocol_value %type replace_client_name_value @@ -881,13 +885,17 @@ client_class: CLIENT_CLASS { }; reservation_mode: RESERVATION_MODE { - ctx.enter(ctx.NO_KEYWORD); -} COLON STRING { - ElementPtr rm(new StringElement($4, ctx.loc2pos(@4))); - ctx.stack_.back()->set("reservation-mode", rm); + ctx.enter(ctx.RESERVATION_MODE); +} COLON hr_mode { + ctx.stack_.back()->set("reservation-mode", $4); ctx.leave(); }; +hr_mode: DISABLED { $$ = ElementPtr(new StringElement("disabled", ctx.loc2pos(@1))); } + | OUT_OF_POOL { $$ = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(@1))); } + | ALL { $$ = ElementPtr(new StringElement("all", ctx.loc2pos(@1))); } + ; + id: ID COLON INTEGER { ElementPtr id(new IntElement($3, ctx.loc2pos(@3))); ctx.stack_.back()->set("id", id); diff --git a/src/bin/dhcp4/parser_context.cc b/src/bin/dhcp4/parser_context.cc index f17a25164e..d3a08dfe8c 100644 --- a/src/bin/dhcp4/parser_context.cc +++ b/src/bin/dhcp4/parser_context.cc @@ -141,6 +141,8 @@ Parser4Context::contextName() return ("hooks-librairies"); case SUBNET4: return ("subnet4"); + case RESERVATION_MODE: + return ("reservation-mode"); case OPTION_DEF: return ("option-def"); case OPTION_DATA: diff --git a/src/bin/dhcp4/parser_context.h b/src/bin/dhcp4/parser_context.h index fa5a81c244..6eda2a35e9 100644 --- a/src/bin/dhcp4/parser_context.h +++ b/src/bin/dhcp4/parser_context.h @@ -216,6 +216,9 @@ public: /// Used while parsing Dhcp4/Subnet4 structures. SUBNET4, + /// Used while parsing Dhcp4/Subnet4/reservation-mode. + RESERVATION_MODE, + /// Used while parsing Dhcp4/option-def structures. OPTION_DEF, diff --git a/src/bin/dhcp6/dhcp6_lexer.ll b/src/bin/dhcp6/dhcp6_lexer.ll index c3402cea33..88902be1d6 100644 --- a/src/bin/dhcp6/dhcp6_lexer.ll +++ b/src/bin/dhcp6/dhcp6_lexer.ll @@ -803,6 +803,42 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence} } } +\"disabled\" { + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::RESERVATION_MODE: + return isc::dhcp::Dhcp6Parser::make_DISABLED(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("disabled", driver.loc_); + } +} + +\"off\" { + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::RESERVATION_MODE: + return isc::dhcp::Dhcp6Parser::make_DISABLED(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("off", driver.loc_); + } +} + +\"out-of-pool\" { + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::RESERVATION_MODE: + return isc::dhcp::Dhcp6Parser::make_OUT_OF_POOL(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("out-of-pool", driver.loc_); + } +} + +\"all\" { + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::RESERVATION_MODE: + return isc::dhcp::Dhcp6Parser::make_ALL(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("all", driver.loc_); + } +} + \"code\" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: diff --git a/src/bin/dhcp6/dhcp6_parser.yy b/src/bin/dhcp6/dhcp6_parser.yy index 76b824a07d..b45f978909 100644 --- a/src/bin/dhcp6/dhcp6_parser.yy +++ b/src/bin/dhcp6/dhcp6_parser.yy @@ -101,6 +101,9 @@ using namespace std; ID "id" RAPID_COMMIT "rapid-commit" RESERVATION_MODE "reservation-mode" + DISABLED "disabled" + OUT_OF_POOL "out-of-pool" + ALL "all" MAC_SOURCES "mac-sources" RELAY_SUPPLIED_OPTIONS "relay-supplied-options" @@ -205,6 +208,7 @@ using namespace std; %type value %type map_value %type db_type +%type hr_mode %type duid_type %type ncr_protocol_value %type replace_client_name_value @@ -862,13 +866,17 @@ client_class: CLIENT_CLASS { }; reservation_mode: RESERVATION_MODE { - ctx.enter(ctx.NO_KEYWORD); -} COLON STRING { - ElementPtr rm(new StringElement($4, ctx.loc2pos(@4))); - ctx.stack_.back()->set("reservation-mode", rm); + ctx.enter(ctx.RESERVATION_MODE); +} COLON hr_mode { + ctx.stack_.back()->set("reservation-mode", $4); ctx.leave(); }; +hr_mode: DISABLED { $$ = ElementPtr(new StringElement("disabled", ctx.loc2pos(@1))); } + | OUT_OF_POOL { $$ = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(@1))); } + | ALL { $$ = ElementPtr(new StringElement("all", ctx.loc2pos(@1))); } + ; + id: ID COLON INTEGER { ElementPtr id(new IntElement($3, ctx.loc2pos(@3))); ctx.stack_.back()->set("id", id); diff --git a/src/bin/dhcp6/parser_context.cc b/src/bin/dhcp6/parser_context.cc index 2645c1bc9e..71f89b6ee6 100644 --- a/src/bin/dhcp6/parser_context.cc +++ b/src/bin/dhcp6/parser_context.cc @@ -141,6 +141,8 @@ Parser6Context::contextName() return ("hooks-librairies"); case SUBNET6: return ("subnet6"); + case RESERVATION_MODE: + return ("reservation-mode"); case OPTION_DEF: return ("option-def"); case OPTION_DATA: diff --git a/src/bin/dhcp6/parser_context.h b/src/bin/dhcp6/parser_context.h index 3f2f94b17f..c909df0073 100644 --- a/src/bin/dhcp6/parser_context.h +++ b/src/bin/dhcp6/parser_context.h @@ -219,6 +219,9 @@ public: /// Used while parsing Dhcp6/Subnet6 structures. SUBNET6, + /// Used while parsing Dhcp6/Subnet6/reservation-mode. + RESERVATION_MODE, + /// Used while parsing Dhcp6/option-def structures. OPTION_DEF,