Browse Source

[5036] excluded-prefix{-len} implemented in the bison parser

Tomek Mrugalski 8 years ago
parent
commit
dfac5a62ce

+ 10 - 0
doc/examples/kea6/advanced.json

@@ -66,6 +66,16 @@
   "subnet6": [
   "subnet6": [
     {
     {
       "pools": [ { "pool": "2001:db8:1::/80" } ],
       "pools": [ { "pool": "2001:db8:1::/80" } ],
+
+      "pd-pools": [
+      {
+          "prefix": "2001:db8:abcd::",
+          "prefix-len": 48,
+          "delegated-len": 64,
+          "excluded-prefix": "2001:db8:abcd:1234::",
+          "excluded-prefix-len": 62
+      }
+      ],
       "subnet": "2001:db8:1::/64",
       "subnet": "2001:db8:1::/64",
       "interface": "ethX"
       "interface": "ethX"
     }
     }

+ 2 - 1
doc/examples/kea6/reservations.json

@@ -81,7 +81,8 @@
               {
               {
                   "name": "nis-servers",
                   "name": "nis-servers",
                   "data": "3000:1::234"
                   "data": "3000:1::234"
-              }]
+              }],
+              "client-classes": [ "special_snowflake", "office" ]
           },
           },
 # This is a bit more advanced reservation. The client with the specified
 # This is a bit more advanced reservation. The client with the specified
 # DUID will get a reserved address, a reserved prefix and a hostname.
 # DUID will get a reserved address, a reserved prefix and a hostname.

+ 18 - 0
src/bin/dhcp6/dhcp6_lexer.ll

@@ -430,6 +430,24 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     }
     }
 }
 }
 
 
+\"excluded-prefix\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::PD_POOLS:
+        return isc::dhcp::Dhcp6Parser::make_EXCLUDED_PREFIX(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("excluded-prefix", driver.loc_);
+    }
+}
+
+\"excluded-prefix-len\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::PD_POOLS:
+        return isc::dhcp::Dhcp6Parser::make_EXCLUDED_PREFIX_LEN(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("excluded-prefix-len", driver.loc_);
+    }
+}
+
 \"delegated-len\" {
 \"delegated-len\" {
     switch(driver.ctx_) {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
     case isc::dhcp::Parser6Context::PD_POOLS:

+ 17 - 0
src/bin/dhcp6/dhcp6_parser.yy

@@ -86,6 +86,8 @@ using namespace std;
   PD_POOLS "pd-pools"
   PD_POOLS "pd-pools"
   PREFIX "prefix"
   PREFIX "prefix"
   PREFIX_LEN "prefix-len"
   PREFIX_LEN "prefix-len"
+  EXCLUDED_PREFIX "excluded-prefix"
+  EXCLUDED_PREFIX_LEN "excluded-prefix-len"
   DELEGATED_LEN "delegated-len"
   DELEGATED_LEN "delegated-len"
 
 
   SUBNET "subnet"
   SUBNET "subnet"
@@ -1070,6 +1072,8 @@ pd_pool_param: pd_prefix
              | pd_prefix_len
              | pd_prefix_len
              | pd_delegated_len
              | pd_delegated_len
              | option_data_list
              | option_data_list
+             | excluded_prefix
+             | excluded_prefix_len
              | unknown_map_entry
              | unknown_map_entry
              ;
              ;
 
 
@@ -1086,6 +1090,19 @@ pd_prefix_len: PREFIX_LEN COLON INTEGER {
     ctx.stack_.back()->set("prefix-len", prf);
     ctx.stack_.back()->set("prefix-len", prf);
 }
 }
 
 
+excluded_prefix: EXCLUDED_PREFIX {
+    ctx.enter(ctx.NO_KEYWORD);
+} COLON STRING {
+    ElementPtr prf(new StringElement($4, ctx.loc2pos(@4)));
+    ctx.stack_.back()->set("excluded-prefix", prf);
+    ctx.leave();
+}
+
+excluded_prefix_len: EXCLUDED_PREFIX_LEN COLON INTEGER {
+    ElementPtr prf(new IntElement($3, ctx.loc2pos(@3)));
+    ctx.stack_.back()->set("excluded-prefix-len", prf);
+}
+
 pd_delegated_len: DELEGATED_LEN COLON INTEGER {
 pd_delegated_len: DELEGATED_LEN COLON INTEGER {
     ElementPtr deleg(new IntElement($3, ctx.loc2pos(@3)));
     ElementPtr deleg(new IntElement($3, ctx.loc2pos(@3)));
     ctx.stack_.back()->set("delegated-len", deleg);
     ctx.stack_.back()->set("delegated-len", deleg);