]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[5121] Updated parser for HRmode
authorFrancis Dupont <fdupont@isc.org>
Thu, 26 Jan 2017 23:47:25 +0000 (00:47 +0100)
committerFrancis Dupont <fdupont@isc.org>
Thu, 26 Jan 2017 23:47:25 +0000 (00:47 +0100)
src/bin/dhcp4/dhcp4_lexer.ll
src/bin/dhcp4/dhcp4_parser.yy
src/bin/dhcp4/parser_context.cc
src/bin/dhcp4/parser_context.h
src/bin/dhcp6/dhcp6_lexer.ll
src/bin/dhcp6/dhcp6_parser.yy
src/bin/dhcp6/parser_context.cc
src/bin/dhcp6/parser_context.h

index ac84dd70df1adbe939683032e9fade270bf45a35..dd8945ee711aa221753b2d2bf06e0f6b5cfc9037 100644 (file)
@@ -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:
index a25c101e01e1c3bf342f5832353acbf72416a736..d3fb54fcdb066bd1b8fe7d38d9f6d8e6fb5b65d2 100644 (file)
@@ -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 <ElementPtr> map_value
 %type <ElementPtr> socket_type
 %type <ElementPtr> db_type
+%type <ElementPtr> hr_mode
 %type <ElementPtr> ncr_protocol_value
 %type <ElementPtr> 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);
index f17a25164ef4130644081f9cbc6ffe8fc2a1158e..d3a08dfe8c34639522909eeb3aa4bf7cb3a101b4 100644 (file)
@@ -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:
index fa5a81c2448e57ef0254d290ca10241c8f33e94b..6eda2a35e920111061dcd43a252a08faf44696cc 100644 (file)
@@ -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,
 
index c3402cea33da015d788017737403d5a788b12db0..88902be1d664987dea9058b2f60b2bb95fda0efd 100644 (file)
@@ -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:
index 76b824a07d768d9d54d6b91fd077275e69361ee4..b45f978909757cb0eeb76b6a0b39a347664c0e5e 100644 (file)
@@ -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 <ElementPtr> value
 %type <ElementPtr> map_value
 %type <ElementPtr> db_type
+%type <ElementPtr> hr_mode
 %type <ElementPtr> duid_type
 %type <ElementPtr> ncr_protocol_value
 %type <ElementPtr> 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);
index 2645c1bc9ec6ba207a108501206adf6fe7f672b7..71f89b6ee6736dad8132eed90ebb3cae999bd26a 100644 (file)
@@ -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:
index 3f2f94b17f84c69bac9b3a2f938e24f50dfc9502..c909df007342e19aafe92f7263acec0a76af438f 100644 (file)
@@ -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,