]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[trac5124a] regen flex/bison
authorFrancis Dupont <fdupont@isc.org>
Sat, 2 Sep 2017 12:38:14 +0000 (12:38 +0000)
committerFrancis Dupont <fdupont@isc.org>
Sat, 2 Sep 2017 12:38:14 +0000 (12:38 +0000)
12 files changed:
src/bin/dhcp4/dhcp4_lexer.cc
src/bin/dhcp4/dhcp4_parser.cc
src/bin/dhcp4/dhcp4_parser.h
src/bin/dhcp4/location.hh
src/bin/dhcp4/position.hh
src/bin/dhcp4/stack.hh
src/bin/dhcp6/dhcp6_lexer.cc
src/bin/dhcp6/dhcp6_parser.cc
src/bin/dhcp6/dhcp6_parser.h
src/bin/dhcp6/location.hh
src/bin/dhcp6/position.hh
src/bin/dhcp6/stack.hh

index eb2f91b4c188a08ec0ad65da6f5df4d99d07d96f..020b7b833b9b3ca7a4d25d56c27ad7b5da900b0a 100644 (file)
@@ -1547,23 +1547,23 @@ int yy_flex_debug = 1;
 
 static const flex_int16_t yy_rule_linenum[154] =
     {   0,
-      133,  135,  137,  142,  143,  148,  149,  150,  162,  165,
-      170,  177,  186,  195,  204,  213,  223,  232,  241,  250,
-      259,  268,  279,  288,  297,  306,  315,  325,  335,  345,
-      355,  365,  375,  385,  395,  405,  415,  425,  435,  444,
-      453,  462,  476,  491,  500,  509,  518,  527,  536,  545,
-      554,  563,  572,  581,  590,  599,  608,  617,  626,  636,
-      645,  654,  663,  672,  681,  690,  699,  708,  717,  726,
-      736,  746,  756,  765,  775,  785,  795,  805,  815,  824,
-      834,  843,  852,  861,  870,  879,  889,  899,  908,  917,
-      926,  935,  944,  953,  962,  971,  980,  989,  998, 1007,
-
-     1016, 1025, 1034, 1043, 1052, 1061, 1070, 1079, 1088, 1097,
-     1106, 1115, 1124, 1133, 1142, 1151, 1161, 1171, 1181, 1191,
-     1201, 1211, 1221, 1231, 1241, 1250, 1259, 1268, 1277, 1286,
-     1295, 1305, 1315, 1327, 1338, 1351, 1449, 1454, 1459, 1464,
-     1465, 1466, 1467, 1468, 1469, 1471, 1489, 1502, 1507, 1511,
-     1513, 1515, 1517
+      137,  139,  141,  146,  147,  152,  153,  154,  166,  169,
+      174,  181,  190,  199,  208,  217,  227,  236,  245,  254,
+      263,  272,  283,  292,  301,  310,  319,  329,  339,  349,
+      359,  369,  379,  389,  399,  409,  419,  429,  439,  448,
+      457,  466,  480,  495,  504,  513,  522,  531,  540,  549,
+      558,  567,  576,  585,  594,  603,  612,  621,  630,  640,
+      649,  658,  667,  676,  685,  694,  703,  712,  721,  730,
+      740,  750,  760,  769,  779,  789,  799,  809,  819,  828,
+      838,  847,  856,  865,  874,  883,  893,  903,  912,  921,
+      930,  939,  948,  957,  966,  975,  984,  993, 1002, 1011,
+
+     1020, 1029, 1038, 1047, 1056, 1065, 1074, 1083, 1092, 1101,
+     1110, 1119, 1128, 1137, 1146, 1155, 1165, 1175, 1185, 1195,
+     1205, 1215, 1225, 1235, 1245, 1254, 1263, 1272, 1281, 1290,
+     1299, 1309, 1319, 1331, 1342, 1355, 1453, 1458, 1463, 1468,
+     1469, 1470, 1471, 1472, 1473, 1475, 1493, 1506, 1511, 1515,
+     1517, 1519, 1521
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -1949,6 +1949,10 @@ YY_DECL
             return isc::dhcp::Dhcp4Parser::make_SUB_POOL4(driver.loc_);
         case Parser4Context::PARSER_HOST_RESERVATION:
             return isc::dhcp::Dhcp4Parser::make_SUB_RESERVATION(driver.loc_);
+        case Parser4Context::PARSER_OPTION_DEFS:
+            return isc::dhcp::Dhcp4Parser::make_SUB_OPTION_DEFS(driver.loc_);
+        case Parser4Context::PARSER_OPTION_DEF:
+            return isc::dhcp::Dhcp4Parser::make_SUB_OPTION_DEF(driver.loc_);
         case Parser4Context::PARSER_OPTION_DATA:
             return isc::dhcp::Dhcp4Parser::make_SUB_OPTION_DATA(driver.loc_);
         case Parser4Context::PARSER_HOOKS_LIBRARY:
@@ -1959,7 +1963,7 @@ YY_DECL
     }
 
 
-#line 1962 "dhcp4_lexer.cc"
+#line 1966 "dhcp4_lexer.cc"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@ -2037,17 +2041,17 @@ do_action:      /* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 133 "dhcp4_lexer.ll"
+#line 137 "dhcp4_lexer.ll"
 ;
        YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 135 "dhcp4_lexer.ll"
+#line 139 "dhcp4_lexer.ll"
 ;
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 137 "dhcp4_lexer.ll"
+#line 141 "dhcp4_lexer.ll"
 {
   BEGIN(COMMENT);
   comment_start_line = driver.loc_.end.line;;
@@ -2055,33 +2059,33 @@ YY_RULE_SETUP
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 142 "dhcp4_lexer.ll"
+#line 146 "dhcp4_lexer.ll"
 BEGIN(INITIAL);
        YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 143 "dhcp4_lexer.ll"
+#line 147 "dhcp4_lexer.ll"
 ;
        YY_BREAK
 case YY_STATE_EOF(COMMENT):
-#line 144 "dhcp4_lexer.ll"
+#line 148 "dhcp4_lexer.ll"
 {
     isc_throw(Dhcp4ParseError, "Comment not closed. (/* in line " << comment_start_line);
 }
        YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 148 "dhcp4_lexer.ll"
+#line 152 "dhcp4_lexer.ll"
 BEGIN(DIR_ENTER);
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 149 "dhcp4_lexer.ll"
+#line 153 "dhcp4_lexer.ll"
 BEGIN(DIR_INCLUDE);
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 150 "dhcp4_lexer.ll"
+#line 154 "dhcp4_lexer.ll"
 {
     /* Include directive. */
 
@@ -2095,19 +2099,19 @@ YY_RULE_SETUP
 case YY_STATE_EOF(DIR_ENTER):
 case YY_STATE_EOF(DIR_INCLUDE):
 case YY_STATE_EOF(DIR_EXIT):
-#line 159 "dhcp4_lexer.ll"
+#line 163 "dhcp4_lexer.ll"
 {
     isc_throw(Dhcp4ParseError, "Directive not closed.");
 }
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 162 "dhcp4_lexer.ll"
+#line 166 "dhcp4_lexer.ll"
 BEGIN(INITIAL);
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 165 "dhcp4_lexer.ll"
+#line 169 "dhcp4_lexer.ll"
 {
     /* Ok, we found a with space. Let's ignore it and update loc variable. */
     driver.loc_.step();
@@ -2116,7 +2120,7 @@ YY_RULE_SETUP
 case 11:
 /* rule 11 can match eol */
 YY_RULE_SETUP
-#line 170 "dhcp4_lexer.ll"
+#line 174 "dhcp4_lexer.ll"
 {
     /* Newline found. Let's update the location and continue. */
     driver.loc_.lines(yyleng);
@@ -2125,7 +2129,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 177 "dhcp4_lexer.ll"
+#line 181 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONFIG:
@@ -2137,7 +2141,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 186 "dhcp4_lexer.ll"
+#line 190 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2149,7 +2153,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 195 "dhcp4_lexer.ll"
+#line 199 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::INTERFACES_CONFIG:
@@ -2161,7 +2165,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 204 "dhcp4_lexer.ll"
+#line 208 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_SOCKET_TYPE:
@@ -2173,7 +2177,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 213 "dhcp4_lexer.ll"
+#line 217 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_SOCKET_TYPE:
@@ -2186,7 +2190,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 223 "dhcp4_lexer.ll"
+#line 227 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::INTERFACES_CONFIG:
@@ -2198,7 +2202,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 232 "dhcp4_lexer.ll"
+#line 236 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::INTERFACES_CONFIG:
@@ -2210,7 +2214,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 241 "dhcp4_lexer.ll"
+#line 245 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2222,7 +2226,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 250 "dhcp4_lexer.ll"
+#line 254 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2234,7 +2238,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 259 "dhcp4_lexer.ll"
+#line 263 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
@@ -2246,7 +2250,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 268 "dhcp4_lexer.ll"
+#line 272 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2260,7 +2264,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 279 "dhcp4_lexer.ll"
+#line 283 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DATABASE_TYPE:
@@ -2272,7 +2276,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 288 "dhcp4_lexer.ll"
+#line 292 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DATABASE_TYPE:
@@ -2284,7 +2288,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 297 "dhcp4_lexer.ll"
+#line 301 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DATABASE_TYPE:
@@ -2296,7 +2300,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 306 "dhcp4_lexer.ll"
+#line 310 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DATABASE_TYPE:
@@ -2308,7 +2312,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 315 "dhcp4_lexer.ll"
+#line 319 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2321,7 +2325,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 325 "dhcp4_lexer.ll"
+#line 329 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2334,7 +2338,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 335 "dhcp4_lexer.ll"
+#line 339 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2347,7 +2351,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 345 "dhcp4_lexer.ll"
+#line 349 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2360,7 +2364,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 355 "dhcp4_lexer.ll"
+#line 359 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2373,7 +2377,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 365 "dhcp4_lexer.ll"
+#line 369 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2386,7 +2390,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 375 "dhcp4_lexer.ll"
+#line 379 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2399,7 +2403,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 385 "dhcp4_lexer.ll"
+#line 389 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2412,7 +2416,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 395 "dhcp4_lexer.ll"
+#line 399 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2425,7 +2429,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 405 "dhcp4_lexer.ll"
+#line 409 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2438,7 +2442,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 415 "dhcp4_lexer.ll"
+#line 419 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2451,7 +2455,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 425 "dhcp4_lexer.ll"
+#line 429 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2464,7 +2468,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 435 "dhcp4_lexer.ll"
+#line 439 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2476,7 +2480,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 444 "dhcp4_lexer.ll"
+#line 448 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2488,7 +2492,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 453 "dhcp4_lexer.ll"
+#line 457 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2500,7 +2504,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 462 "dhcp4_lexer.ll"
+#line 466 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2517,7 +2521,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 476 "dhcp4_lexer.ll"
+#line 480 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -2535,7 +2539,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 491 "dhcp4_lexer.ll"
+#line 495 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DATA:
@@ -2547,7 +2551,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 500 "dhcp4_lexer.ll"
+#line 504 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DATA:
@@ -2559,7 +2563,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 509 "dhcp4_lexer.ll"
+#line 513 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2571,7 +2575,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 518 "dhcp4_lexer.ll"
+#line 522 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::POOLS:
@@ -2583,7 +2587,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 527 "dhcp4_lexer.ll"
+#line 531 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::POOLS:
@@ -2595,7 +2599,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 536 "dhcp4_lexer.ll"
+#line 540 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2607,7 +2611,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 545 "dhcp4_lexer.ll"
+#line 549 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2619,7 +2623,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 554 "dhcp4_lexer.ll"
+#line 558 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2631,7 +2635,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 563 "dhcp4_lexer.ll"
+#line 567 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2643,7 +2647,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 572 "dhcp4_lexer.ll"
+#line 576 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2655,7 +2659,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 581 "dhcp4_lexer.ll"
+#line 585 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2667,7 +2671,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 590 "dhcp4_lexer.ll"
+#line 594 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATION_MODE:
@@ -2679,7 +2683,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 599 "dhcp4_lexer.ll"
+#line 603 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATION_MODE:
@@ -2691,7 +2695,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 608 "dhcp4_lexer.ll"
+#line 612 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATION_MODE:
@@ -2703,7 +2707,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 617 "dhcp4_lexer.ll"
+#line 621 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATION_MODE:
@@ -2715,7 +2719,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 626 "dhcp4_lexer.ll"
+#line 630 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -2728,7 +2732,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 636 "dhcp4_lexer.ll"
+#line 640 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2740,7 +2744,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 645 "dhcp4_lexer.ll"
+#line 649 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONFIG:
@@ -2752,7 +2756,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 654 "dhcp4_lexer.ll"
+#line 658 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LOGGING:
@@ -2764,7 +2768,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 663 "dhcp4_lexer.ll"
+#line 667 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LOGGERS:
@@ -2776,7 +2780,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 672 "dhcp4_lexer.ll"
+#line 676 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
@@ -2788,7 +2792,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 681 "dhcp4_lexer.ll"
+#line 685 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LOGGERS:
@@ -2800,7 +2804,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 690 "dhcp4_lexer.ll"
+#line 694 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
@@ -2812,7 +2816,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 699 "dhcp4_lexer.ll"
+#line 703 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
@@ -2824,7 +2828,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 708 "dhcp4_lexer.ll"
+#line 712 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
@@ -2836,7 +2840,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 717 "dhcp4_lexer.ll"
+#line 721 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LOGGERS:
@@ -2848,7 +2852,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 726 "dhcp4_lexer.ll"
+#line 730 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2861,7 +2865,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 736 "dhcp4_lexer.ll"
+#line 740 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2874,7 +2878,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 746 "dhcp4_lexer.ll"
+#line 750 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CLIENT_CLASSES:
@@ -2887,7 +2891,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 756 "dhcp4_lexer.ll"
+#line 760 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2899,7 +2903,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 765 "dhcp4_lexer.ll"
+#line 769 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -2912,7 +2916,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 775 "dhcp4_lexer.ll"
+#line 779 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -2925,7 +2929,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 785 "dhcp4_lexer.ll"
+#line 789 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -2938,7 +2942,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 795 "dhcp4_lexer.ll"
+#line 799 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -2951,7 +2955,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 805 "dhcp4_lexer.ll"
+#line 809 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -2964,7 +2968,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 815 "dhcp4_lexer.ll"
+#line 819 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATIONS:
@@ -2976,7 +2980,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 824 "dhcp4_lexer.ll"
+#line 828 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -2989,7 +2993,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 834 "dhcp4_lexer.ll"
+#line 838 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DATA:
@@ -3001,7 +3005,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 843 "dhcp4_lexer.ll"
+#line 847 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -3013,7 +3017,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 852 "dhcp4_lexer.ll"
+#line 856 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -3025,7 +3029,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 861 "dhcp4_lexer.ll"
+#line 865 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -3037,7 +3041,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 870 "dhcp4_lexer.ll"
+#line 874 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3049,7 +3053,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 879 "dhcp4_lexer.ll"
+#line 883 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RELAY:
@@ -3062,7 +3066,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 889 "dhcp4_lexer.ll"
+#line 893 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3074,7 +3078,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 899 "dhcp4_lexer.ll"
+#line 903 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOOKS_LIBRARIES:
@@ -3086,7 +3090,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 908 "dhcp4_lexer.ll"
+#line 912 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOOKS_LIBRARIES:
@@ -3098,7 +3102,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 917 "dhcp4_lexer.ll"
+#line 921 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3110,7 +3114,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 926 "dhcp4_lexer.ll"
+#line 930 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -3122,7 +3126,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 92:
 YY_RULE_SETUP
-#line 935 "dhcp4_lexer.ll"
+#line 939 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -3134,7 +3138,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 944 "dhcp4_lexer.ll"
+#line 948 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -3146,7 +3150,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 94:
 YY_RULE_SETUP
-#line 953 "dhcp4_lexer.ll"
+#line 957 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -3158,7 +3162,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 962 "dhcp4_lexer.ll"
+#line 966 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -3170,7 +3174,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 96:
 YY_RULE_SETUP
-#line 971 "dhcp4_lexer.ll"
+#line 975 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -3182,7 +3186,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 97:
 YY_RULE_SETUP
-#line 980 "dhcp4_lexer.ll"
+#line 984 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3194,7 +3198,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 989 "dhcp4_lexer.ll"
+#line 993 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3206,7 +3210,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 998 "dhcp4_lexer.ll"
+#line 1002 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONTROL_SOCKET:
@@ -3218,7 +3222,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 1007 "dhcp4_lexer.ll"
+#line 1011 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONTROL_SOCKET:
@@ -3230,7 +3234,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 1016 "dhcp4_lexer.ll"
+#line 1020 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3242,7 +3246,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 102:
 YY_RULE_SETUP
-#line 1025 "dhcp4_lexer.ll"
+#line 1029 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3254,7 +3258,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 1034 "dhcp4_lexer.ll"
+#line 1038 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3266,7 +3270,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 104:
 YY_RULE_SETUP
-#line 1043 "dhcp4_lexer.ll"
+#line 1047 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3278,7 +3282,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 105:
 YY_RULE_SETUP
-#line 1052 "dhcp4_lexer.ll"
+#line 1056 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3290,7 +3294,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 106:
 YY_RULE_SETUP
-#line 1061 "dhcp4_lexer.ll"
+#line 1065 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3302,7 +3306,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 107:
 YY_RULE_SETUP
-#line 1070 "dhcp4_lexer.ll"
+#line 1074 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3314,7 +3318,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 108:
 YY_RULE_SETUP
-#line 1079 "dhcp4_lexer.ll"
+#line 1083 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3326,7 +3330,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 109:
 YY_RULE_SETUP
-#line 1088 "dhcp4_lexer.ll"
+#line 1092 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3338,7 +3342,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 110:
 YY_RULE_SETUP
-#line 1097 "dhcp4_lexer.ll"
+#line 1101 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3350,7 +3354,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 1106 "dhcp4_lexer.ll"
+#line 1110 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3362,7 +3366,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 112:
 YY_RULE_SETUP
-#line 1115 "dhcp4_lexer.ll"
+#line 1119 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3374,7 +3378,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 113:
 YY_RULE_SETUP
-#line 1124 "dhcp4_lexer.ll"
+#line 1128 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3386,7 +3390,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 114:
 YY_RULE_SETUP
-#line 1133 "dhcp4_lexer.ll"
+#line 1137 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3398,7 +3402,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 115:
 YY_RULE_SETUP
-#line 1142 "dhcp4_lexer.ll"
+#line 1146 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -3410,7 +3414,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 116:
 YY_RULE_SETUP
-#line 1151 "dhcp4_lexer.ll"
+#line 1155 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_PROTOCOL) {
@@ -3423,7 +3427,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 117:
 YY_RULE_SETUP
-#line 1161 "dhcp4_lexer.ll"
+#line 1165 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_PROTOCOL) {
@@ -3436,7 +3440,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 118:
 YY_RULE_SETUP
-#line 1171 "dhcp4_lexer.ll"
+#line 1175 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_FORMAT) {
@@ -3449,7 +3453,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 119:
 YY_RULE_SETUP
-#line 1181 "dhcp4_lexer.ll"
+#line 1185 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -3462,7 +3466,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 120:
 YY_RULE_SETUP
-#line 1191 "dhcp4_lexer.ll"
+#line 1195 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -3475,7 +3479,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 121:
 YY_RULE_SETUP
-#line 1201 "dhcp4_lexer.ll"
+#line 1205 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -3488,7 +3492,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 122:
 YY_RULE_SETUP
-#line 1211 "dhcp4_lexer.ll"
+#line 1215 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -3501,7 +3505,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 123:
 YY_RULE_SETUP
-#line 1221 "dhcp4_lexer.ll"
+#line 1225 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -3514,7 +3518,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 124:
 YY_RULE_SETUP
-#line 1231 "dhcp4_lexer.ll"
+#line 1235 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -3527,7 +3531,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 125:
 YY_RULE_SETUP
-#line 1241 "dhcp4_lexer.ll"
+#line 1245 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONFIG:
@@ -3539,7 +3543,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 126:
 YY_RULE_SETUP
-#line 1250 "dhcp4_lexer.ll"
+#line 1254 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONFIG:
@@ -3551,7 +3555,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 127:
 YY_RULE_SETUP
-#line 1259 "dhcp4_lexer.ll"
+#line 1263 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONFIG:
@@ -3563,7 +3567,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 128:
 YY_RULE_SETUP
-#line 1268 "dhcp4_lexer.ll"
+#line 1272 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3575,7 +3579,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 129:
 YY_RULE_SETUP
-#line 1277 "dhcp4_lexer.ll"
+#line 1281 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3587,7 +3591,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 130:
 YY_RULE_SETUP
-#line 1286 "dhcp4_lexer.ll"
+#line 1290 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3599,7 +3603,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 131:
 YY_RULE_SETUP
-#line 1295 "dhcp4_lexer.ll"
+#line 1299 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3612,7 +3616,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 132:
 YY_RULE_SETUP
-#line 1305 "dhcp4_lexer.ll"
+#line 1309 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3625,7 +3629,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 133:
 YY_RULE_SETUP
-#line 1315 "dhcp4_lexer.ll"
+#line 1319 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3640,7 +3644,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 134:
 YY_RULE_SETUP
-#line 1327 "dhcp4_lexer.ll"
+#line 1331 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3654,7 +3658,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 135:
 YY_RULE_SETUP
-#line 1338 "dhcp4_lexer.ll"
+#line 1342 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3668,7 +3672,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 136:
 YY_RULE_SETUP
-#line 1351 "dhcp4_lexer.ll"
+#line 1355 "dhcp4_lexer.ll"
 {
     /* 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.
@@ -3770,7 +3774,7 @@ YY_RULE_SETUP
 case 137:
 /* rule 137 can match eol */
 YY_RULE_SETUP
-#line 1449 "dhcp4_lexer.ll"
+#line 1453 "dhcp4_lexer.ll"
 {
     /* Bad string with a forbidden control character inside */
     driver.error(driver.loc_, "Invalid control in " + std::string(yytext));
@@ -3779,7 +3783,7 @@ YY_RULE_SETUP
 case 138:
 /* rule 138 can match eol */
 YY_RULE_SETUP
-#line 1454 "dhcp4_lexer.ll"
+#line 1458 "dhcp4_lexer.ll"
 {
     /* Bad string with a bad escape inside */
     driver.error(driver.loc_, "Bad escape in " + std::string(yytext));
@@ -3787,7 +3791,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 139:
 YY_RULE_SETUP
-#line 1459 "dhcp4_lexer.ll"
+#line 1463 "dhcp4_lexer.ll"
 {
     /* Bad string with an open escape at the end */
     driver.error(driver.loc_, "Overflow escape in " + std::string(yytext));
@@ -3795,37 +3799,37 @@ YY_RULE_SETUP
        YY_BREAK
 case 140:
 YY_RULE_SETUP
-#line 1464 "dhcp4_lexer.ll"
+#line 1468 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_LSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
 case 141:
 YY_RULE_SETUP
-#line 1465 "dhcp4_lexer.ll"
+#line 1469 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_RSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
 case 142:
 YY_RULE_SETUP
-#line 1466 "dhcp4_lexer.ll"
+#line 1470 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_LCURLY_BRACKET(driver.loc_); }
        YY_BREAK
 case 143:
 YY_RULE_SETUP
-#line 1467 "dhcp4_lexer.ll"
+#line 1471 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_RCURLY_BRACKET(driver.loc_); }
        YY_BREAK
 case 144:
 YY_RULE_SETUP
-#line 1468 "dhcp4_lexer.ll"
+#line 1472 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_COMMA(driver.loc_); }
        YY_BREAK
 case 145:
 YY_RULE_SETUP
-#line 1469 "dhcp4_lexer.ll"
+#line 1473 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_COLON(driver.loc_); }
        YY_BREAK
 case 146:
 YY_RULE_SETUP
-#line 1471 "dhcp4_lexer.ll"
+#line 1475 "dhcp4_lexer.ll"
 {
     /* An integer was found. */
     std::string tmp(yytext);
@@ -3846,7 +3850,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 147:
 YY_RULE_SETUP
-#line 1489 "dhcp4_lexer.ll"
+#line 1493 "dhcp4_lexer.ll"
 {
     /* A floating point was found. */
     std::string tmp(yytext);
@@ -3862,7 +3866,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 148:
 YY_RULE_SETUP
-#line 1502 "dhcp4_lexer.ll"
+#line 1506 "dhcp4_lexer.ll"
 {
     string tmp(yytext);
     return isc::dhcp::Dhcp4Parser::make_BOOLEAN(tmp == "true", driver.loc_);
@@ -3870,33 +3874,33 @@ YY_RULE_SETUP
        YY_BREAK
 case 149:
 YY_RULE_SETUP
-#line 1507 "dhcp4_lexer.ll"
+#line 1511 "dhcp4_lexer.ll"
 {
    return isc::dhcp::Dhcp4Parser::make_NULL_TYPE(driver.loc_);
 }
        YY_BREAK
 case 150:
 YY_RULE_SETUP
-#line 1511 "dhcp4_lexer.ll"
+#line 1515 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
        YY_BREAK
 case 151:
 YY_RULE_SETUP
-#line 1513 "dhcp4_lexer.ll"
+#line 1517 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
        YY_BREAK
 case 152:
 YY_RULE_SETUP
-#line 1515 "dhcp4_lexer.ll"
+#line 1519 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
        YY_BREAK
 case 153:
 YY_RULE_SETUP
-#line 1517 "dhcp4_lexer.ll"
+#line 1521 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "Invalid character: " + std::string(yytext));
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 1519 "dhcp4_lexer.ll"
+#line 1523 "dhcp4_lexer.ll"
 {
     if (driver.states_.empty()) {
         return isc::dhcp::Dhcp4Parser::make_END(driver.loc_);
@@ -3922,10 +3926,10 @@ case YY_STATE_EOF(INITIAL):
        YY_BREAK
 case 154:
 YY_RULE_SETUP
-#line 1542 "dhcp4_lexer.ll"
+#line 1546 "dhcp4_lexer.ll"
 ECHO;
        YY_BREAK
-#line 3928 "dhcp4_lexer.cc"
+#line 3932 "dhcp4_lexer.cc"
 
        case YY_END_OF_BUFFER:
                {
@@ -5030,7 +5034,7 @@ void yyfree (void * ptr )
 
 /* %ok-for-header */
 
-#line 1542 "dhcp4_lexer.ll"
+#line 1546 "dhcp4_lexer.ll"
 
 
 using namespace isc::dhcp;
index 5dcb91b0943c24de03ee81778c0218fe2842c906..d67db29f85310c9fe1babedf3c2e4ac92e994eb3 100644 (file)
@@ -253,29 +253,29 @@ namespace isc { namespace dhcp {
   {
       switch (that.type_get ())
     {
-      case 158: // value
-      case 162: // map_value
-      case 200: // socket_type
-      case 210: // db_type
-      case 287: // hr_mode
-      case 420: // ncr_protocol_value
-      case 428: // replace_client_name_value
+      case 160: // value
+      case 164: // map_value
+      case 202: // socket_type
+      case 212: // db_type
+      case 289: // hr_mode
+      case 424: // ncr_protocol_value
+      case 432: // replace_client_name_value
         value.move< ElementPtr > (that.value);
         break;
 
-      case 144: // "boolean"
+      case 145: // "boolean"
         value.move< bool > (that.value);
         break;
 
-      case 143: // "floating point"
+      case 144: // "floating point"
         value.move< double > (that.value);
         break;
 
-      case 142: // "integer"
+      case 143: // "integer"
         value.move< int64_t > (that.value);
         break;
 
-      case 141: // "constant string"
+      case 142: // "constant string"
         value.move< std::string > (that.value);
         break;
 
@@ -294,29 +294,29 @@ namespace isc { namespace dhcp {
     state = that.state;
       switch (that.type_get ())
     {
-      case 158: // value
-      case 162: // map_value
-      case 200: // socket_type
-      case 210: // db_type
-      case 287: // hr_mode
-      case 420: // ncr_protocol_value
-      case 428: // replace_client_name_value
+      case 160: // value
+      case 164: // map_value
+      case 202: // socket_type
+      case 212: // db_type
+      case 289: // hr_mode
+      case 424: // ncr_protocol_value
+      case 432: // replace_client_name_value
         value.copy< ElementPtr > (that.value);
         break;
 
-      case 144: // "boolean"
+      case 145: // "boolean"
         value.copy< bool > (that.value);
         break;
 
-      case 143: // "floating point"
+      case 144: // "floating point"
         value.copy< double > (that.value);
         break;
 
-      case 142: // "integer"
+      case 143: // "integer"
         value.copy< int64_t > (that.value);
         break;
 
-      case 141: // "constant string"
+      case 142: // "constant string"
         value.copy< std::string > (that.value);
         break;
 
@@ -356,79 +356,79 @@ namespace isc { namespace dhcp {
         << yysym.location << ": ";
     switch (yytype)
     {
-            case 141: // "constant string"
+            case 142: // "constant string"
 
-#line 217 "dhcp4_parser.yy" // lalr1.cc:636
+#line 218 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< std::string > (); }
 #line 364 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 142: // "integer"
+      case 143: // "integer"
 
-#line 217 "dhcp4_parser.yy" // lalr1.cc:636
+#line 218 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< int64_t > (); }
 #line 371 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 143: // "floating point"
+      case 144: // "floating point"
 
-#line 217 "dhcp4_parser.yy" // lalr1.cc:636
+#line 218 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< double > (); }
 #line 378 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 144: // "boolean"
+      case 145: // "boolean"
 
-#line 217 "dhcp4_parser.yy" // lalr1.cc:636
+#line 218 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< bool > (); }
 #line 385 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 158: // value
+      case 160: // value
 
-#line 217 "dhcp4_parser.yy" // lalr1.cc:636
+#line 218 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 392 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 162: // map_value
+      case 164: // map_value
 
-#line 217 "dhcp4_parser.yy" // lalr1.cc:636
+#line 218 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 399 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 200: // socket_type
+      case 202: // socket_type
 
-#line 217 "dhcp4_parser.yy" // lalr1.cc:636
+#line 218 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 406 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 210: // db_type
+      case 212: // db_type
 
-#line 217 "dhcp4_parser.yy" // lalr1.cc:636
+#line 218 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 413 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 287: // hr_mode
+      case 289: // hr_mode
 
-#line 217 "dhcp4_parser.yy" // lalr1.cc:636
+#line 218 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 420 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 420: // ncr_protocol_value
+      case 424: // ncr_protocol_value
 
-#line 217 "dhcp4_parser.yy" // lalr1.cc:636
+#line 218 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 427 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 428: // replace_client_name_value
+      case 432: // replace_client_name_value
 
-#line 217 "dhcp4_parser.yy" // lalr1.cc:636
+#line 218 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 434 "dhcp4_parser.cc" // lalr1.cc:636
         break;
@@ -630,29 +630,29 @@ namespace isc { namespace dhcp {
          when using variants.  */
         switch (yyr1_[yyn])
     {
-      case 158: // value
-      case 162: // map_value
-      case 200: // socket_type
-      case 210: // db_type
-      case 287: // hr_mode
-      case 420: // ncr_protocol_value
-      case 428: // replace_client_name_value
+      case 160: // value
+      case 164: // map_value
+      case 202: // socket_type
+      case 212: // db_type
+      case 289: // hr_mode
+      case 424: // ncr_protocol_value
+      case 432: // replace_client_name_value
         yylhs.value.build< ElementPtr > ();
         break;
 
-      case 144: // "boolean"
+      case 145: // "boolean"
         yylhs.value.build< bool > ();
         break;
 
-      case 143: // "floating point"
+      case 144: // "floating point"
         yylhs.value.build< double > ();
         break;
 
-      case 142: // "integer"
+      case 143: // "integer"
         yylhs.value.build< int64_t > ();
         break;
 
-      case 141: // "constant string"
+      case 142: // "constant string"
         yylhs.value.build< std::string > ();
         break;
 
@@ -674,272 +674,281 @@ namespace isc { namespace dhcp {
           switch (yyn)
             {
   case 2:
-#line 226 "dhcp4_parser.yy" // lalr1.cc:859
+#line 227 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.NO_KEYWORD; }
 #line 680 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 4:
-#line 227 "dhcp4_parser.yy" // lalr1.cc:859
+#line 228 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.CONFIG; }
 #line 686 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 6:
-#line 228 "dhcp4_parser.yy" // lalr1.cc:859
+#line 229 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.DHCP4; }
 #line 692 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 8:
-#line 229 "dhcp4_parser.yy" // lalr1.cc:859
+#line 230 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.INTERFACES_CONFIG; }
 #line 698 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 10:
-#line 230 "dhcp4_parser.yy" // lalr1.cc:859
+#line 231 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.SUBNET4; }
 #line 704 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 12:
-#line 231 "dhcp4_parser.yy" // lalr1.cc:859
+#line 232 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.POOLS; }
 #line 710 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 14:
-#line 232 "dhcp4_parser.yy" // lalr1.cc:859
+#line 233 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.RESERVATIONS; }
 #line 716 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 16:
-#line 233 "dhcp4_parser.yy" // lalr1.cc:859
-    { ctx.ctx_ = ctx.OPTION_DEF; }
+#line 234 "dhcp4_parser.yy" // lalr1.cc:859
+    { ctx.ctx_ = ctx.DHCP4; }
 #line 722 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 18:
-#line 234 "dhcp4_parser.yy" // lalr1.cc:859
-    { ctx.ctx_ = ctx.OPTION_DATA; }
+#line 235 "dhcp4_parser.yy" // lalr1.cc:859
+    { ctx.ctx_ = ctx.OPTION_DEF; }
 #line 728 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 20:
-#line 235 "dhcp4_parser.yy" // lalr1.cc:859
-    { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
+#line 236 "dhcp4_parser.yy" // lalr1.cc:859
+    { ctx.ctx_ = ctx.OPTION_DATA; }
 #line 734 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 22:
-#line 236 "dhcp4_parser.yy" // lalr1.cc:859
-    { ctx.ctx_ = ctx.DHCP_DDNS; }
+#line 237 "dhcp4_parser.yy" // lalr1.cc:859
+    { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
 #line 740 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 24:
-#line 244 "dhcp4_parser.yy" // lalr1.cc:859
-    { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
+#line 238 "dhcp4_parser.yy" // lalr1.cc:859
+    { ctx.ctx_ = ctx.DHCP_DDNS; }
 #line 746 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 25:
-#line 245 "dhcp4_parser.yy" // lalr1.cc:859
-    { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
-#line 752 "dhcp4_parser.cc" // lalr1.cc:859
-    break;
-
   case 26:
 #line 246 "dhcp4_parser.yy" // lalr1.cc:859
-    { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
-#line 758 "dhcp4_parser.cc" // lalr1.cc:859
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
+#line 752 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 27:
 #line 247 "dhcp4_parser.yy" // lalr1.cc:859
-    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
-#line 764 "dhcp4_parser.cc" // lalr1.cc:859
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
+#line 758 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 28:
 #line 248 "dhcp4_parser.yy" // lalr1.cc:859
-    { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
-#line 770 "dhcp4_parser.cc" // lalr1.cc:859
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
+#line 764 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 29:
 #line 249 "dhcp4_parser.yy" // lalr1.cc:859
-    { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 776 "dhcp4_parser.cc" // lalr1.cc:859
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
+#line 770 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 30:
 #line 250 "dhcp4_parser.yy" // lalr1.cc:859
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
+#line 776 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 31:
+#line 251 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 782 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 31:
-#line 253 "dhcp4_parser.yy" // lalr1.cc:859
+  case 32:
+#line 252 "dhcp4_parser.yy" // lalr1.cc:859
+    { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
+#line 788 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 33:
+#line 255 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Push back the JSON value on the stack
     ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ());
 }
-#line 791 "dhcp4_parser.cc" // lalr1.cc:859
+#line 797 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 32:
-#line 258 "dhcp4_parser.yy" // lalr1.cc:859
+  case 34:
+#line 260 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 802 "dhcp4_parser.cc" // lalr1.cc:859
+#line 808 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 33:
-#line 263 "dhcp4_parser.yy" // lalr1.cc:859
+  case 35:
+#line 265 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
     // for it.
 }
-#line 812 "dhcp4_parser.cc" // lalr1.cc:859
+#line 818 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 34:
-#line 269 "dhcp4_parser.yy" // lalr1.cc:859
+  case 36:
+#line 271 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 818 "dhcp4_parser.cc" // lalr1.cc:859
+#line 824 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 37:
-#line 276 "dhcp4_parser.yy" // lalr1.cc:859
+  case 39:
+#line 278 "dhcp4_parser.yy" // lalr1.cc:859
     {
                   // map containing a single entry
                   ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
                   }
-#line 827 "dhcp4_parser.cc" // lalr1.cc:859
+#line 833 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 38:
-#line 280 "dhcp4_parser.yy" // lalr1.cc:859
+  case 40:
+#line 282 "dhcp4_parser.yy" // lalr1.cc:859
     {
                   // map consisting of a shorter map followed by
                   // comma and string:value
                   ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
                   }
-#line 837 "dhcp4_parser.cc" // lalr1.cc:859
+#line 843 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 39:
-#line 287 "dhcp4_parser.yy" // lalr1.cc:859
+  case 41:
+#line 289 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
 }
-#line 846 "dhcp4_parser.cc" // lalr1.cc:859
+#line 852 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 40:
-#line 290 "dhcp4_parser.yy" // lalr1.cc:859
+  case 42:
+#line 292 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // list parsing complete. Put any sanity checking here
 }
-#line 854 "dhcp4_parser.cc" // lalr1.cc:859
+#line 860 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 43:
-#line 298 "dhcp4_parser.yy" // lalr1.cc:859
+  case 45:
+#line 300 "dhcp4_parser.yy" // lalr1.cc:859
     {
                   // List consisting of a single element.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
                   }
-#line 863 "dhcp4_parser.cc" // lalr1.cc:859
+#line 869 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 44:
-#line 302 "dhcp4_parser.yy" // lalr1.cc:859
+  case 46:
+#line 304 "dhcp4_parser.yy" // lalr1.cc:859
     {
                   // List ending with , and a value.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
                   }
-#line 872 "dhcp4_parser.cc" // lalr1.cc:859
+#line 878 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 45:
-#line 309 "dhcp4_parser.yy" // lalr1.cc:859
+  case 47:
+#line 311 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // List parsing about to start
 }
-#line 880 "dhcp4_parser.cc" // lalr1.cc:859
+#line 886 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 46:
-#line 311 "dhcp4_parser.yy" // lalr1.cc:859
+  case 48:
+#line 313 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // list parsing complete. Put any sanity checking here
     //ctx.stack_.pop_back();
 }
-#line 889 "dhcp4_parser.cc" // lalr1.cc:859
+#line 895 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 49:
-#line 320 "dhcp4_parser.yy" // lalr1.cc:859
+  case 51:
+#line 322 "dhcp4_parser.yy" // lalr1.cc:859
     {
                           ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
                           }
-#line 898 "dhcp4_parser.cc" // lalr1.cc:859
+#line 904 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 50:
-#line 324 "dhcp4_parser.yy" // lalr1.cc:859
+  case 52:
+#line 326 "dhcp4_parser.yy" // lalr1.cc:859
     {
                           ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
                           }
-#line 907 "dhcp4_parser.cc" // lalr1.cc:859
+#line 913 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 51:
-#line 335 "dhcp4_parser.yy" // lalr1.cc:859
+  case 53:
+#line 337 "dhcp4_parser.yy" // lalr1.cc:859
     {
     const std::string& where = ctx.contextName();
     const std::string& keyword = yystack_[1].value.as< std::string > ();
     error(yystack_[1].location,
           "got unexpected keyword \"" + keyword + "\" in " + where + " map.");
 }
-#line 918 "dhcp4_parser.cc" // lalr1.cc:859
+#line 924 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 52:
-#line 345 "dhcp4_parser.yy" // lalr1.cc:859
+  case 54:
+#line 347 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 929 "dhcp4_parser.cc" // lalr1.cc:859
+#line 935 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 53:
-#line 350 "dhcp4_parser.yy" // lalr1.cc:859
+  case 55:
+#line 352 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
     // for it.
+
+    // Dhcp4 is required
+    ctx.require("Dhcp4", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
 }
-#line 939 "dhcp4_parser.cc" // lalr1.cc:859
+#line 948 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 62:
-#line 371 "dhcp4_parser.yy" // lalr1.cc:859
+  case 64:
+#line 376 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -948,685 +957,695 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.DHCP4);
 }
-#line 952 "dhcp4_parser.cc" // lalr1.cc:859
+#line 961 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 63:
-#line 378 "dhcp4_parser.yy" // lalr1.cc:859
+  case 65:
+#line 383 "dhcp4_parser.yy" // lalr1.cc:859
     {
-    // map parsing completed. If we ever want to do any wrap up
-    // (maybe some sanity checking), this would be the best place
-    // for it.
+    // No global parameter is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 964 "dhcp4_parser.cc" // lalr1.cc:859
+#line 971 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 64:
-#line 388 "dhcp4_parser.yy" // lalr1.cc:859
+  case 66:
+#line 391 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the Dhcp4 map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 974 "dhcp4_parser.cc" // lalr1.cc:859
+#line 981 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 65:
-#line 392 "dhcp4_parser.yy" // lalr1.cc:859
+  case 67:
+#line 395 "dhcp4_parser.yy" // lalr1.cc:859
     {
+    // No global parameter is required
     // parsing completed
 }
-#line 982 "dhcp4_parser.cc" // lalr1.cc:859
+#line 990 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 89:
-#line 425 "dhcp4_parser.yy" // lalr1.cc:859
+  case 91:
+#line 429 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("valid-lifetime", prf);
 }
-#line 991 "dhcp4_parser.cc" // lalr1.cc:859
+#line 999 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 90:
-#line 430 "dhcp4_parser.yy" // lalr1.cc:859
+  case 92:
+#line 434 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("renew-timer", prf);
 }
-#line 1000 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1008 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 91:
-#line 435 "dhcp4_parser.yy" // lalr1.cc:859
+  case 93:
+#line 439 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rebind-timer", prf);
 }
-#line 1009 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1017 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 92:
-#line 440 "dhcp4_parser.yy" // lalr1.cc:859
+  case 94:
+#line 444 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr dpp(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("decline-probation-period", dpp);
 }
-#line 1018 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1026 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 93:
-#line 445 "dhcp4_parser.yy" // lalr1.cc:859
+  case 95:
+#line 449 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr echo(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("echo-client-id", echo);
 }
-#line 1027 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1035 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 94:
-#line 450 "dhcp4_parser.yy" // lalr1.cc:859
+  case 96:
+#line 454 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr match(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("match-client-id", match);
 }
-#line 1036 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1044 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 95:
-#line 456 "dhcp4_parser.yy" // lalr1.cc:859
+  case 97:
+#line 460 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interfaces-config", i);
     ctx.stack_.push_back(i);
     ctx.enter(ctx.INTERFACES_CONFIG);
 }
-#line 1047 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1055 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 96:
-#line 461 "dhcp4_parser.yy" // lalr1.cc:859
+  case 98:
+#line 465 "dhcp4_parser.yy" // lalr1.cc:859
     {
+    // No interfaces config param is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1056 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1065 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 102:
-#line 475 "dhcp4_parser.yy" // lalr1.cc:859
+  case 104:
+#line 480 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the interfaces-config map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1066 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1075 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 103:
-#line 479 "dhcp4_parser.yy" // lalr1.cc:859
+  case 105:
+#line 484 "dhcp4_parser.yy" // lalr1.cc:859
     {
+    // No interfaces config param is required
     // parsing completed
 }
-#line 1074 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1084 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 104:
-#line 483 "dhcp4_parser.yy" // lalr1.cc:859
+  case 106:
+#line 489 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interfaces", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1085 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1095 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 105:
-#line 488 "dhcp4_parser.yy" // lalr1.cc:859
+  case 107:
+#line 494 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1094 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1104 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 106:
-#line 493 "dhcp4_parser.yy" // lalr1.cc:859
+  case 108:
+#line 499 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.DHCP_SOCKET_TYPE);
 }
-#line 1102 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1112 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 107:
-#line 495 "dhcp4_parser.yy" // lalr1.cc:859
+  case 109:
+#line 501 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("dhcp-socket-type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1111 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1121 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 108:
-#line 500 "dhcp4_parser.yy" // lalr1.cc:859
+  case 110:
+#line 506 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("raw", ctx.loc2pos(yystack_[0].location))); }
-#line 1117 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1127 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 109:
-#line 501 "dhcp4_parser.yy" // lalr1.cc:859
+  case 111:
+#line 507 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("udp", ctx.loc2pos(yystack_[0].location))); }
-#line 1123 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1133 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 110:
-#line 504 "dhcp4_parser.yy" // lalr1.cc:859
+  case 112:
+#line 510 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("re-detect", b);
 }
-#line 1132 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1142 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 111:
-#line 510 "dhcp4_parser.yy" // lalr1.cc:859
+  case 113:
+#line 516 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lease-database", i);
     ctx.stack_.push_back(i);
     ctx.enter(ctx.LEASE_DATABASE);
 }
-#line 1143 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1153 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 112:
-#line 515 "dhcp4_parser.yy" // lalr1.cc:859
+  case 114:
+#line 521 "dhcp4_parser.yy" // lalr1.cc:859
     {
+    // The type parameter is required
+    ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1152 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1164 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 113:
-#line 520 "dhcp4_parser.yy" // lalr1.cc:859
+  case 115:
+#line 528 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hosts-database", i);
     ctx.stack_.push_back(i);
     ctx.enter(ctx.HOSTS_DATABASE);
 }
-#line 1163 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1175 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 114:
-#line 525 "dhcp4_parser.yy" // lalr1.cc:859
+  case 116:
+#line 533 "dhcp4_parser.yy" // lalr1.cc:859
     {
+    // The type parameter is required
+    ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1172 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1186 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 130:
-#line 549 "dhcp4_parser.yy" // lalr1.cc:859
+  case 132:
+#line 559 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.DATABASE_TYPE);
 }
-#line 1180 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1194 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 131:
-#line 551 "dhcp4_parser.yy" // lalr1.cc:859
+  case 133:
+#line 561 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1189 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1203 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 132:
-#line 556 "dhcp4_parser.yy" // lalr1.cc:859
+  case 134:
+#line 566 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
-#line 1195 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1209 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 133:
-#line 557 "dhcp4_parser.yy" // lalr1.cc:859
+  case 135:
+#line 567 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
-#line 1201 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1215 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 134:
-#line 558 "dhcp4_parser.yy" // lalr1.cc:859
+  case 136:
+#line 568 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
-#line 1207 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1221 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 135:
-#line 559 "dhcp4_parser.yy" // lalr1.cc:859
+  case 137:
+#line 569 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("cql", ctx.loc2pos(yystack_[0].location))); }
-#line 1213 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1227 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 136:
-#line 562 "dhcp4_parser.yy" // lalr1.cc:859
+  case 138:
+#line 572 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1221 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1235 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 137:
-#line 564 "dhcp4_parser.yy" // lalr1.cc:859
+  case 139:
+#line 574 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("user", user);
     ctx.leave();
 }
-#line 1231 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1245 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 138:
-#line 570 "dhcp4_parser.yy" // lalr1.cc:859
+  case 140:
+#line 580 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1239 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1253 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 139:
-#line 572 "dhcp4_parser.yy" // lalr1.cc:859
+  case 141:
+#line 582 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr pwd(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("password", pwd);
     ctx.leave();
 }
-#line 1249 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1263 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 140:
-#line 578 "dhcp4_parser.yy" // lalr1.cc:859
+  case 142:
+#line 588 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1257 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1271 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 141:
-#line 580 "dhcp4_parser.yy" // lalr1.cc:859
+  case 143:
+#line 590 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr h(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host", h);
     ctx.leave();
 }
-#line 1267 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1281 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 142:
-#line 586 "dhcp4_parser.yy" // lalr1.cc:859
+  case 144:
+#line 596 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr p(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("port", p);
 }
-#line 1276 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1290 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 143:
-#line 591 "dhcp4_parser.yy" // lalr1.cc:859
+  case 145:
+#line 601 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1284 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1298 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 144:
-#line 593 "dhcp4_parser.yy" // lalr1.cc:859
+  case 146:
+#line 603 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("name", name);
     ctx.leave();
 }
-#line 1294 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1308 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 145:
-#line 599 "dhcp4_parser.yy" // lalr1.cc:859
+  case 147:
+#line 609 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("persist", n);
 }
-#line 1303 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1317 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 146:
-#line 604 "dhcp4_parser.yy" // lalr1.cc:859
+  case 148:
+#line 614 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lfc-interval", n);
 }
-#line 1312 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1326 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 147:
-#line 609 "dhcp4_parser.yy" // lalr1.cc:859
+  case 149:
+#line 619 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("readonly", n);
 }
-#line 1321 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1335 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 148:
-#line 614 "dhcp4_parser.yy" // lalr1.cc:859
+  case 150:
+#line 624 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("connect-timeout", n);
 }
-#line 1330 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1344 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 149:
-#line 619 "dhcp4_parser.yy" // lalr1.cc:859
+  case 151:
+#line 629 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1338 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1352 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 150:
-#line 621 "dhcp4_parser.yy" // lalr1.cc:859
+  case 152:
+#line 631 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr cp(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("contact-points", cp);
     ctx.leave();
 }
-#line 1348 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1362 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 151:
-#line 627 "dhcp4_parser.yy" // lalr1.cc:859
+  case 153:
+#line 637 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1356 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1370 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 152:
-#line 629 "dhcp4_parser.yy" // lalr1.cc:859
+  case 154:
+#line 639 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr ks(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("keyspace", ks);
     ctx.leave();
 }
-#line 1366 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1380 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 153:
-#line 636 "dhcp4_parser.yy" // lalr1.cc:859
+  case 155:
+#line 646 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host-reservation-identifiers", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS);
 }
-#line 1377 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1391 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 154:
-#line 641 "dhcp4_parser.yy" // lalr1.cc:859
+  case 156:
+#line 651 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1386 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1400 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 162:
-#line 657 "dhcp4_parser.yy" // lalr1.cc:859
+  case 164:
+#line 667 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
 }
-#line 1395 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1409 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 163:
-#line 662 "dhcp4_parser.yy" // lalr1.cc:859
+  case 165:
+#line 672 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(hwaddr);
 }
-#line 1404 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1418 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 164:
-#line 667 "dhcp4_parser.yy" // lalr1.cc:859
+  case 166:
+#line 677 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr circuit(new StringElement("circuit-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(circuit);
 }
-#line 1413 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1427 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 165:
-#line 672 "dhcp4_parser.yy" // lalr1.cc:859
+  case 167:
+#line 682 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr client(new StringElement("client-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(client);
 }
-#line 1422 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1436 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 166:
-#line 677 "dhcp4_parser.yy" // lalr1.cc:859
+  case 168:
+#line 687 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(flex_id);
 }
-#line 1431 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1445 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 167:
-#line 682 "dhcp4_parser.yy" // lalr1.cc:859
+  case 169:
+#line 692 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hooks-libraries", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOOKS_LIBRARIES);
 }
-#line 1442 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1456 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 168:
-#line 687 "dhcp4_parser.yy" // lalr1.cc:859
+  case 170:
+#line 697 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1451 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1465 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 173:
-#line 700 "dhcp4_parser.yy" // lalr1.cc:859
+  case 175:
+#line 710 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1461 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1475 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 174:
-#line 704 "dhcp4_parser.yy" // lalr1.cc:859
+  case 176:
+#line 714 "dhcp4_parser.yy" // lalr1.cc:859
     {
+    // The library hooks parameter is required
+    ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 1469 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1485 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 175:
-#line 708 "dhcp4_parser.yy" // lalr1.cc:859
+  case 177:
+#line 720 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the hooks-libraries list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1479 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1495 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 176:
-#line 712 "dhcp4_parser.yy" // lalr1.cc:859
+  case 178:
+#line 724 "dhcp4_parser.yy" // lalr1.cc:859
     {
+    // The library hooks parameter is required
+    ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 1487 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1505 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 182:
-#line 725 "dhcp4_parser.yy" // lalr1.cc:859
+  case 184:
+#line 739 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1495 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1513 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 183:
-#line 727 "dhcp4_parser.yy" // lalr1.cc:859
+  case 185:
+#line 741 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr lib(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("library", lib);
     ctx.leave();
 }
-#line 1505 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1523 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 184:
-#line 733 "dhcp4_parser.yy" // lalr1.cc:859
+  case 186:
+#line 747 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1513 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1531 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 185:
-#line 735 "dhcp4_parser.yy" // lalr1.cc:859
+  case 187:
+#line 749 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("parameters", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1522 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1540 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 186:
-#line 741 "dhcp4_parser.yy" // lalr1.cc:859
+  case 188:
+#line 755 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("expired-leases-processing", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.EXPIRED_LEASES_PROCESSING);
 }
-#line 1533 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1551 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 187:
-#line 746 "dhcp4_parser.yy" // lalr1.cc:859
+  case 189:
+#line 760 "dhcp4_parser.yy" // lalr1.cc:859
     {
+    // No expired lease parameter is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1542 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1561 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 196:
-#line 763 "dhcp4_parser.yy" // lalr1.cc:859
+  case 198:
+#line 778 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reclaim-timer-wait-time", value);
 }
-#line 1551 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1570 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 197:
-#line 768 "dhcp4_parser.yy" // lalr1.cc:859
+  case 199:
+#line 783 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush-reclaimed-timer-wait-time", value);
 }
-#line 1560 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1579 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 198:
-#line 773 "dhcp4_parser.yy" // lalr1.cc:859
+  case 200:
+#line 788 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hold-reclaimed-time", value);
 }
-#line 1569 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1588 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 199:
-#line 778 "dhcp4_parser.yy" // lalr1.cc:859
+  case 201:
+#line 793 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reclaim-leases", value);
 }
-#line 1578 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1597 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 200:
-#line 783 "dhcp4_parser.yy" // lalr1.cc:859
+  case 202:
+#line 798 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reclaim-time", value);
 }
-#line 1587 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1606 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 201:
-#line 788 "dhcp4_parser.yy" // lalr1.cc:859
+  case 203:
+#line 803 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("unwarned-reclaim-cycles", value);
 }
-#line 1596 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1615 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 202:
-#line 796 "dhcp4_parser.yy" // lalr1.cc:859
+  case 204:
+#line 811 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet4", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.SUBNET4);
 }
-#line 1607 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1626 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 203:
-#line 801 "dhcp4_parser.yy" // lalr1.cc:859
+  case 205:
+#line 816 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1616 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1635 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 208:
-#line 821 "dhcp4_parser.yy" // lalr1.cc:859
+  case 210:
+#line 836 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1626 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1645 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 209:
-#line 825 "dhcp4_parser.yy" // lalr1.cc:859
+  case 211:
+#line 840 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Once we reached this place, the subnet parsing is now complete.
     // If we want to, we can implement default values here.
@@ -1643,1451 +1662,1495 @@ namespace isc { namespace dhcp {
     //         ctx.stack_.back()->set("renew-timer", renew);
     //     }
     // }
+
+    // The subnet subnet4 parameter is required
+    ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 1649 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1671 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 210:
-#line 844 "dhcp4_parser.yy" // lalr1.cc:859
+  case 212:
+#line 862 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the subnet4 list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1659 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1681 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 211:
-#line 848 "dhcp4_parser.yy" // lalr1.cc:859
+  case 213:
+#line 866 "dhcp4_parser.yy" // lalr1.cc:859
     {
+    // The subnet subnet4 parameter is required
+    ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 1667 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1691 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 234:
-#line 880 "dhcp4_parser.yy" // lalr1.cc:859
+  case 236:
+#line 900 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1675 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1699 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 235:
-#line 882 "dhcp4_parser.yy" // lalr1.cc:859
+  case 237:
+#line 902 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr subnet(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet", subnet);
     ctx.leave();
 }
-#line 1685 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1709 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 236:
-#line 888 "dhcp4_parser.yy" // lalr1.cc:859
+  case 238:
+#line 908 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1693 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1717 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 237:
-#line 890 "dhcp4_parser.yy" // lalr1.cc:859
+  case 239:
+#line 910 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("4o6-interface", iface);
     ctx.leave();
 }
-#line 1703 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1727 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 238:
-#line 896 "dhcp4_parser.yy" // lalr1.cc:859
+  case 240:
+#line 916 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1711 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1735 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 239:
-#line 898 "dhcp4_parser.yy" // lalr1.cc:859
+  case 241:
+#line 918 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("4o6-interface-id", iface);
     ctx.leave();
 }
-#line 1721 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1745 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 240:
-#line 904 "dhcp4_parser.yy" // lalr1.cc:859
+  case 242:
+#line 924 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1729 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1753 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 241:
-#line 906 "dhcp4_parser.yy" // lalr1.cc:859
+  case 243:
+#line 926 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("4o6-subnet", iface);
     ctx.leave();
 }
-#line 1739 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1763 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 242:
-#line 912 "dhcp4_parser.yy" // lalr1.cc:859
+  case 244:
+#line 932 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1747 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1771 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 243:
-#line 914 "dhcp4_parser.yy" // lalr1.cc:859
+  case 245:
+#line 934 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface", iface);
     ctx.leave();
 }
-#line 1757 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1781 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 244:
-#line 920 "dhcp4_parser.yy" // lalr1.cc:859
+  case 246:
+#line 940 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1765 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1789 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 245:
-#line 922 "dhcp4_parser.yy" // lalr1.cc:859
+  case 247:
+#line 942 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface-id", iface);
     ctx.leave();
 }
-#line 1775 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1799 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 246:
-#line 928 "dhcp4_parser.yy" // lalr1.cc:859
+  case 248:
+#line 948 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.CLIENT_CLASS);
 }
-#line 1783 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1807 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 247:
-#line 930 "dhcp4_parser.yy" // lalr1.cc:859
+  case 249:
+#line 950 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr cls(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-class", cls);
     ctx.leave();
 }
-#line 1793 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1817 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 248:
-#line 936 "dhcp4_parser.yy" // lalr1.cc:859
+  case 250:
+#line 956 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.RESERVATION_MODE);
 }
-#line 1801 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1825 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 249:
-#line 938 "dhcp4_parser.yy" // lalr1.cc:859
+  case 251:
+#line 958 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1810 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1834 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 250:
-#line 943 "dhcp4_parser.yy" // lalr1.cc:859
+  case 252:
+#line 963 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); }
-#line 1816 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1840 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 251:
-#line 944 "dhcp4_parser.yy" // lalr1.cc:859
+  case 253:
+#line 964 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); }
-#line 1822 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1846 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 252:
-#line 945 "dhcp4_parser.yy" // lalr1.cc:859
+  case 254:
+#line 965 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); }
-#line 1828 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1852 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 253:
-#line 948 "dhcp4_parser.yy" // lalr1.cc:859
+  case 255:
+#line 968 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr id(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("id", id);
 }
-#line 1837 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1861 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 254:
-#line 953 "dhcp4_parser.yy" // lalr1.cc:859
+  case 256:
+#line 973 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr rc(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rapid-commit", rc);
 }
-#line 1846 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1870 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 255:
-#line 962 "dhcp4_parser.yy" // lalr1.cc:859
+  case 257:
+#line 982 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("option-def", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DEF);
 }
-#line 1857 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1881 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 256:
-#line 967 "dhcp4_parser.yy" // lalr1.cc:859
+  case 258:
+#line 987 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1866 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1890 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 259:
+#line 995 "dhcp4_parser.yy" // lalr1.cc:859
+    {
+    ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.push_back(m);
+}
+#line 1899 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 261:
-#line 984 "dhcp4_parser.yy" // lalr1.cc:859
+  case 260:
+#line 998 "dhcp4_parser.yy" // lalr1.cc:859
+    {
+    // parsing completed
+}
+#line 1907 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 265:
+#line 1014 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1876 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1917 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 262:
-#line 988 "dhcp4_parser.yy" // lalr1.cc:859
+  case 266:
+#line 1018 "dhcp4_parser.yy" // lalr1.cc:859
     {
+    // The name, code and type option def parameters are required.
+    ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
+    ctx.require("code", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
+    ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 1884 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1929 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 263:
-#line 995 "dhcp4_parser.yy" // lalr1.cc:859
+  case 267:
+#line 1029 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the option-def list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1894 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1939 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 264:
-#line 999 "dhcp4_parser.yy" // lalr1.cc:859
+  case 268:
+#line 1033 "dhcp4_parser.yy" // lalr1.cc:859
     {
+    // The name, code and type option def parameters are required.
+    ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
+    ctx.require("code", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
+    ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 1902 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1951 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 278:
-#line 1025 "dhcp4_parser.yy" // lalr1.cc:859
+  case 282:
+#line 1063 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr code(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("code", code);
 }
-#line 1911 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1960 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 280:
-#line 1032 "dhcp4_parser.yy" // lalr1.cc:859
+  case 284:
+#line 1070 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1919 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1968 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 281:
-#line 1034 "dhcp4_parser.yy" // lalr1.cc:859
+  case 285:
+#line 1072 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("type", prf);
     ctx.leave();
 }
-#line 1929 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1978 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 282:
-#line 1040 "dhcp4_parser.yy" // lalr1.cc:859
+  case 286:
+#line 1078 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1937 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1986 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 283:
-#line 1042 "dhcp4_parser.yy" // lalr1.cc:859
+  case 287:
+#line 1080 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr rtypes(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("record-types", rtypes);
     ctx.leave();
 }
-#line 1947 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1996 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 284:
-#line 1048 "dhcp4_parser.yy" // lalr1.cc:859
+  case 288:
+#line 1086 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1955 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2004 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 285:
-#line 1050 "dhcp4_parser.yy" // lalr1.cc:859
+  case 289:
+#line 1088 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr space(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("space", space);
     ctx.leave();
 }
-#line 1965 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2014 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 287:
-#line 1058 "dhcp4_parser.yy" // lalr1.cc:859
+  case 291:
+#line 1096 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1973 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2022 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 288:
-#line 1060 "dhcp4_parser.yy" // lalr1.cc:859
+  case 292:
+#line 1098 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr encap(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("encapsulate", encap);
     ctx.leave();
 }
-#line 1983 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2032 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 289:
-#line 1066 "dhcp4_parser.yy" // lalr1.cc:859
+  case 293:
+#line 1104 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr array(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("array", array);
 }
-#line 1992 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2041 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 290:
-#line 1075 "dhcp4_parser.yy" // lalr1.cc:859
+  case 294:
+#line 1113 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("option-data", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DATA);
 }
-#line 2003 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2052 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 291:
-#line 1080 "dhcp4_parser.yy" // lalr1.cc:859
+  case 295:
+#line 1118 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2012 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2061 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 296:
-#line 1099 "dhcp4_parser.yy" // lalr1.cc:859
+  case 300:
+#line 1137 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2022 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2071 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 297:
-#line 1103 "dhcp4_parser.yy" // lalr1.cc:859
+  case 301:
+#line 1141 "dhcp4_parser.yy" // lalr1.cc:859
     {
+    /// @todo: the code or name parameters are required.
     ctx.stack_.pop_back();
 }
-#line 2030 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2080 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 298:
-#line 1110 "dhcp4_parser.yy" // lalr1.cc:859
+  case 302:
+#line 1149 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the option-data list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2040 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2090 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 299:
-#line 1114 "dhcp4_parser.yy" // lalr1.cc:859
+  case 303:
+#line 1153 "dhcp4_parser.yy" // lalr1.cc:859
     {
+    /// @todo: the code or name parameters are required.
     // parsing completed
 }
-#line 2048 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2099 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 312:
-#line 1144 "dhcp4_parser.yy" // lalr1.cc:859
+  case 316:
+#line 1184 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2056 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2107 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 313:
-#line 1146 "dhcp4_parser.yy" // lalr1.cc:859
+  case 317:
+#line 1186 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr data(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("data", data);
     ctx.leave();
 }
-#line 2066 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2117 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 316:
-#line 1156 "dhcp4_parser.yy" // lalr1.cc:859
+  case 320:
+#line 1196 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr space(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("csv-format", space);
 }
-#line 2075 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2126 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 317:
-#line 1161 "dhcp4_parser.yy" // lalr1.cc:859
+  case 321:
+#line 1201 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr persist(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("always-send", persist);
 }
-#line 2084 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2135 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 318:
-#line 1169 "dhcp4_parser.yy" // lalr1.cc:859
+  case 322:
+#line 1209 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pools", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.POOLS);
 }
-#line 2095 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2146 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 319:
-#line 1174 "dhcp4_parser.yy" // lalr1.cc:859
+  case 323:
+#line 1214 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2104 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2155 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 324:
-#line 1189 "dhcp4_parser.yy" // lalr1.cc:859
+  case 328:
+#line 1229 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2114 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2165 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 325:
-#line 1193 "dhcp4_parser.yy" // lalr1.cc:859
+  case 329:
+#line 1233 "dhcp4_parser.yy" // lalr1.cc:859
     {
+    // The pool parameter is required.
+    ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2122 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2175 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 326:
-#line 1197 "dhcp4_parser.yy" // lalr1.cc:859
+  case 330:
+#line 1239 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2132 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2185 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 327:
-#line 1201 "dhcp4_parser.yy" // lalr1.cc:859
+  case 331:
+#line 1243 "dhcp4_parser.yy" // lalr1.cc:859
     {
+    // The pool parameter is required.
+    ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2140 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2195 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 334:
-#line 1215 "dhcp4_parser.yy" // lalr1.cc:859
+  case 338:
+#line 1259 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2148 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2203 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 335:
-#line 1217 "dhcp4_parser.yy" // lalr1.cc:859
+  case 339:
+#line 1261 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr pool(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pool", pool);
     ctx.leave();
 }
-#line 2158 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2213 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 336:
-#line 1223 "dhcp4_parser.yy" // lalr1.cc:859
+  case 340:
+#line 1267 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2166 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2221 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 337:
-#line 1225 "dhcp4_parser.yy" // lalr1.cc:859
+  case 341:
+#line 1269 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("user-context", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2175 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2230 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 338:
-#line 1233 "dhcp4_parser.yy" // lalr1.cc:859
+  case 342:
+#line 1277 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.RESERVATIONS);
 }
-#line 2186 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2241 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 339:
-#line 1238 "dhcp4_parser.yy" // lalr1.cc:859
+  case 343:
+#line 1282 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2195 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2250 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 344:
-#line 1251 "dhcp4_parser.yy" // lalr1.cc:859
+  case 348:
+#line 1295 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2205 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2260 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 345:
-#line 1255 "dhcp4_parser.yy" // lalr1.cc:859
+  case 349:
+#line 1299 "dhcp4_parser.yy" // lalr1.cc:859
     {
+    /// @todo: an identifier parameter is required.
     ctx.stack_.pop_back();
 }
-#line 2213 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2269 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 346:
-#line 1259 "dhcp4_parser.yy" // lalr1.cc:859
+  case 350:
+#line 1304 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the reservations list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2223 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2279 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 347:
-#line 1263 "dhcp4_parser.yy" // lalr1.cc:859
+  case 351:
+#line 1308 "dhcp4_parser.yy" // lalr1.cc:859
     {
+    /// @todo: an identifier parameter is required.
     // parsing completed
 }
-#line 2231 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2288 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 365:
-#line 1291 "dhcp4_parser.yy" // lalr1.cc:859
+  case 369:
+#line 1337 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2239 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2296 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 366:
-#line 1293 "dhcp4_parser.yy" // lalr1.cc:859
+  case 370:
+#line 1339 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr next_server(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("next-server", next_server);
     ctx.leave();
 }
-#line 2249 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2306 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 367:
-#line 1299 "dhcp4_parser.yy" // lalr1.cc:859
+  case 371:
+#line 1345 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2257 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2314 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 368:
-#line 1301 "dhcp4_parser.yy" // lalr1.cc:859
+  case 372:
+#line 1347 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr srv(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-hostname", srv);
     ctx.leave();
 }
-#line 2267 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2324 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 369:
-#line 1307 "dhcp4_parser.yy" // lalr1.cc:859
+  case 373:
+#line 1353 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2275 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2332 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 370:
-#line 1309 "dhcp4_parser.yy" // lalr1.cc:859
+  case 374:
+#line 1355 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr bootfile(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("boot-file-name", bootfile);
     ctx.leave();
 }
-#line 2285 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2342 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 371:
-#line 1315 "dhcp4_parser.yy" // lalr1.cc:859
+  case 375:
+#line 1361 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2293 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2350 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 372:
-#line 1317 "dhcp4_parser.yy" // lalr1.cc:859
+  case 376:
+#line 1363 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr addr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-address", addr);
     ctx.leave();
 }
-#line 2303 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2360 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 373:
-#line 1323 "dhcp4_parser.yy" // lalr1.cc:859
+  case 377:
+#line 1369 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2311 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2368 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 374:
-#line 1325 "dhcp4_parser.yy" // lalr1.cc:859
+  case 378:
+#line 1371 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("duid", d);
     ctx.leave();
 }
-#line 2321 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2378 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 375:
-#line 1331 "dhcp4_parser.yy" // lalr1.cc:859
+  case 379:
+#line 1377 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2329 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2386 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 376:
-#line 1333 "dhcp4_parser.yy" // lalr1.cc:859
+  case 380:
+#line 1379 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hw-address", hw);
     ctx.leave();
 }
-#line 2339 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2396 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 377:
-#line 1339 "dhcp4_parser.yy" // lalr1.cc:859
+  case 381:
+#line 1385 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2347 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2404 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 378:
-#line 1341 "dhcp4_parser.yy" // lalr1.cc:859
+  case 382:
+#line 1387 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-id", hw);
     ctx.leave();
 }
-#line 2357 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2414 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 379:
-#line 1347 "dhcp4_parser.yy" // lalr1.cc:859
+  case 383:
+#line 1393 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2365 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2422 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 380:
-#line 1349 "dhcp4_parser.yy" // lalr1.cc:859
+  case 384:
+#line 1395 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("circuit-id", hw);
     ctx.leave();
 }
-#line 2375 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2432 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 381:
-#line 1355 "dhcp4_parser.yy" // lalr1.cc:859
+  case 385:
+#line 1401 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2383 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2440 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 382:
-#line 1357 "dhcp4_parser.yy" // lalr1.cc:859
+  case 386:
+#line 1403 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flex-id", hw);
     ctx.leave();
 }
-#line 2393 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2450 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 383:
-#line 1363 "dhcp4_parser.yy" // lalr1.cc:859
+  case 387:
+#line 1409 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2401 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2458 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 384:
-#line 1365 "dhcp4_parser.yy" // lalr1.cc:859
+  case 388:
+#line 1411 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname", host);
     ctx.leave();
 }
-#line 2411 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2468 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 385:
-#line 1371 "dhcp4_parser.yy" // lalr1.cc:859
+  case 389:
+#line 1417 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", c);
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2422 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2479 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 386:
-#line 1376 "dhcp4_parser.yy" // lalr1.cc:859
+  case 390:
+#line 1422 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2431 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2488 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 387:
-#line 1384 "dhcp4_parser.yy" // lalr1.cc:859
+  case 391:
+#line 1430 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("relay", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.RELAY);
 }
-#line 2442 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2499 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 388:
-#line 1389 "dhcp4_parser.yy" // lalr1.cc:859
+  case 392:
+#line 1435 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2451 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2508 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 389:
-#line 1394 "dhcp4_parser.yy" // lalr1.cc:859
+  case 393:
+#line 1440 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2459 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2516 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 390:
-#line 1396 "dhcp4_parser.yy" // lalr1.cc:859
+  case 394:
+#line 1442 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr ip(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-address", ip);
     ctx.leave();
 }
-#line 2469 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2526 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 391:
-#line 1405 "dhcp4_parser.yy" // lalr1.cc:859
+  case 395:
+#line 1451 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CLIENT_CLASSES);
 }
-#line 2480 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2537 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 392:
-#line 1410 "dhcp4_parser.yy" // lalr1.cc:859
+  case 396:
+#line 1456 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2489 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2546 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 395:
-#line 1419 "dhcp4_parser.yy" // lalr1.cc:859
+  case 399:
+#line 1465 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2499 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2556 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 396:
-#line 1423 "dhcp4_parser.yy" // lalr1.cc:859
+  case 400:
+#line 1469 "dhcp4_parser.yy" // lalr1.cc:859
     {
+    // The name client class parameter is required.
+    ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2507 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2566 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 409:
-#line 1446 "dhcp4_parser.yy" // lalr1.cc:859
+  case 413:
+#line 1494 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2515 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2574 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 410:
-#line 1448 "dhcp4_parser.yy" // lalr1.cc:859
+  case 414:
+#line 1496 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr test(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("test", test);
     ctx.leave();
 }
-#line 2525 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2584 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 411:
-#line 1458 "dhcp4_parser.yy" // lalr1.cc:859
+  case 415:
+#line 1506 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp4o6-port", time);
 }
-#line 2534 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2593 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 412:
-#line 1465 "dhcp4_parser.yy" // lalr1.cc:859
+  case 416:
+#line 1513 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("control-socket", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.CONTROL_SOCKET);
 }
-#line 2545 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2604 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 413:
-#line 1470 "dhcp4_parser.yy" // lalr1.cc:859
+  case 417:
+#line 1518 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2554 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2613 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 418:
-#line 1483 "dhcp4_parser.yy" // lalr1.cc:859
+  case 422:
+#line 1531 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2562 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2621 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 419:
-#line 1485 "dhcp4_parser.yy" // lalr1.cc:859
+  case 423:
+#line 1533 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr stype(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-type", stype);
     ctx.leave();
 }
-#line 2572 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2631 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 420:
-#line 1491 "dhcp4_parser.yy" // lalr1.cc:859
+  case 424:
+#line 1539 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2580 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2639 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 421:
-#line 1493 "dhcp4_parser.yy" // lalr1.cc:859
+  case 425:
+#line 1541 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-name", name);
     ctx.leave();
 }
-#line 2590 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2649 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 422:
-#line 1501 "dhcp4_parser.yy" // lalr1.cc:859
+  case 426:
+#line 1549 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp-ddns", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.DHCP_DDNS);
 }
-#line 2601 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2660 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 423:
-#line 1506 "dhcp4_parser.yy" // lalr1.cc:859
+  case 427:
+#line 1554 "dhcp4_parser.yy" // lalr1.cc:859
     {
+    // The enable updates DHCP DDNS parameter is required.
+    ctx.require("enable-updates", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2610 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2671 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 424:
-#line 1511 "dhcp4_parser.yy" // lalr1.cc:859
+  case 428:
+#line 1561 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the dhcp-ddns map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2620 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2681 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 425:
-#line 1515 "dhcp4_parser.yy" // lalr1.cc:859
+  case 429:
+#line 1565 "dhcp4_parser.yy" // lalr1.cc:859
     {
+    // The enable updates DHCP DDNS parameter is required.
+    ctx.require("enable-updates", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2628 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2691 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 443:
-#line 1540 "dhcp4_parser.yy" // lalr1.cc:859
+  case 447:
+#line 1592 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enable-updates", b);
 }
-#line 2637 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2700 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 444:
-#line 1545 "dhcp4_parser.yy" // lalr1.cc:859
+  case 448:
+#line 1597 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2645 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2708 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 445:
-#line 1547 "dhcp4_parser.yy" // lalr1.cc:859
+  case 449:
+#line 1599 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("qualifying-suffix", s);
     ctx.leave();
 }
-#line 2655 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2718 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 446:
-#line 1553 "dhcp4_parser.yy" // lalr1.cc:859
+  case 450:
+#line 1605 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2663 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2726 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 447:
-#line 1555 "dhcp4_parser.yy" // lalr1.cc:859
+  case 451:
+#line 1607 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-ip", s);
     ctx.leave();
 }
-#line 2673 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2736 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 448:
-#line 1561 "dhcp4_parser.yy" // lalr1.cc:859
+  case 452:
+#line 1613 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-port", i);
 }
-#line 2682 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2745 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 449:
-#line 1566 "dhcp4_parser.yy" // lalr1.cc:859
+  case 453:
+#line 1618 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2690 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2753 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 450:
-#line 1568 "dhcp4_parser.yy" // lalr1.cc:859
+  case 454:
+#line 1620 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-ip", s);
     ctx.leave();
 }
-#line 2700 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2763 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 451:
-#line 1574 "dhcp4_parser.yy" // lalr1.cc:859
+  case 455:
+#line 1626 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-port", i);
 }
-#line 2709 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2772 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 452:
-#line 1579 "dhcp4_parser.yy" // lalr1.cc:859
+  case 456:
+#line 1631 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-queue-size", i);
 }
-#line 2718 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2781 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 453:
-#line 1584 "dhcp4_parser.yy" // lalr1.cc:859
+  case 457:
+#line 1636 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NCR_PROTOCOL);
 }
-#line 2726 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2789 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 454:
-#line 1586 "dhcp4_parser.yy" // lalr1.cc:859
+  case 458:
+#line 1638 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2735 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2798 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 455:
-#line 1592 "dhcp4_parser.yy" // lalr1.cc:859
+  case 459:
+#line 1644 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
-#line 2741 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2804 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 456:
-#line 1593 "dhcp4_parser.yy" // lalr1.cc:859
+  case 460:
+#line 1645 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
-#line 2747 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2810 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 457:
-#line 1596 "dhcp4_parser.yy" // lalr1.cc:859
+  case 461:
+#line 1648 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NCR_FORMAT);
 }
-#line 2755 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2818 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 458:
-#line 1598 "dhcp4_parser.yy" // lalr1.cc:859
+  case 462:
+#line 1650 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ncr-format", json);
     ctx.leave();
 }
-#line 2765 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2828 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 459:
-#line 1604 "dhcp4_parser.yy" // lalr1.cc:859
+  case 463:
+#line 1656 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("always-include-fqdn", b);
 }
-#line 2774 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2837 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 460:
-#line 1609 "dhcp4_parser.yy" // lalr1.cc:859
+  case 464:
+#line 1661 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-no-update", b);
 }
-#line 2783 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2846 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 461:
-#line 1614 "dhcp4_parser.yy" // lalr1.cc:859
+  case 465:
+#line 1666 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-client-update", b);
 }
-#line 2792 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2855 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 462:
-#line 1619 "dhcp4_parser.yy" // lalr1.cc:859
+  case 466:
+#line 1671 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.REPLACE_CLIENT_NAME);
 }
-#line 2800 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2863 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 463:
-#line 1621 "dhcp4_parser.yy" // lalr1.cc:859
+  case 467:
+#line 1673 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2809 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2872 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 464:
-#line 1627 "dhcp4_parser.yy" // lalr1.cc:859
+  case 468:
+#line 1679 "dhcp4_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location))); 
       }
-#line 2817 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2880 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 465:
-#line 1630 "dhcp4_parser.yy" // lalr1.cc:859
+  case 469:
+#line 1682 "dhcp4_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
       }
-#line 2825 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2888 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 466:
-#line 1633 "dhcp4_parser.yy" // lalr1.cc:859
+  case 470:
+#line 1685 "dhcp4_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
       }
-#line 2833 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2896 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 467:
-#line 1636 "dhcp4_parser.yy" // lalr1.cc:859
+  case 471:
+#line 1688 "dhcp4_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
       }
-#line 2841 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2904 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 468:
-#line 1639 "dhcp4_parser.yy" // lalr1.cc:859
+  case 472:
+#line 1691 "dhcp4_parser.yy" // lalr1.cc:859
     {
       error(yystack_[0].location, "boolean values for the replace-client-name are "
                 "no longer supported");
       }
-#line 2850 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2913 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 469:
-#line 1645 "dhcp4_parser.yy" // lalr1.cc:859
+  case 473:
+#line 1697 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2858 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2921 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 470:
-#line 1647 "dhcp4_parser.yy" // lalr1.cc:859
+  case 474:
+#line 1699 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("generated-prefix", s);
     ctx.leave();
 }
-#line 2868 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2931 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 471:
-#line 1655 "dhcp4_parser.yy" // lalr1.cc:859
+  case 475:
+#line 1707 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2876 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2939 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 472:
-#line 1657 "dhcp4_parser.yy" // lalr1.cc:859
+  case 476:
+#line 1709 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Dhcp6", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2885 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2948 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 473:
-#line 1662 "dhcp4_parser.yy" // lalr1.cc:859
+  case 477:
+#line 1714 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2893 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2956 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 474:
-#line 1664 "dhcp4_parser.yy" // lalr1.cc:859
+  case 478:
+#line 1716 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2902 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2965 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 475:
-#line 1669 "dhcp4_parser.yy" // lalr1.cc:859
+  case 479:
+#line 1721 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2910 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2973 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 476:
-#line 1671 "dhcp4_parser.yy" // lalr1.cc:859
+  case 480:
+#line 1723 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Control-agent", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2919 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2982 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 477:
-#line 1681 "dhcp4_parser.yy" // lalr1.cc:859
+  case 481:
+#line 1733 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("Logging", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.LOGGING);
 }
-#line 2930 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2993 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 478:
-#line 1686 "dhcp4_parser.yy" // lalr1.cc:859
+  case 482:
+#line 1738 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2939 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3002 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 482:
-#line 1703 "dhcp4_parser.yy" // lalr1.cc:859
+  case 486:
+#line 1755 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("loggers", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.LOGGERS);
 }
-#line 2950 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3013 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 483:
-#line 1708 "dhcp4_parser.yy" // lalr1.cc:859
+  case 487:
+#line 1760 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2959 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3022 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 486:
-#line 1720 "dhcp4_parser.yy" // lalr1.cc:859
+  case 490:
+#line 1772 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 2969 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3032 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 487:
-#line 1724 "dhcp4_parser.yy" // lalr1.cc:859
+  case 491:
+#line 1776 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 2977 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3040 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 495:
-#line 1739 "dhcp4_parser.yy" // lalr1.cc:859
+  case 499:
+#line 1791 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("debuglevel", dl);
 }
-#line 2986 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3049 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 496:
-#line 1744 "dhcp4_parser.yy" // lalr1.cc:859
+  case 500:
+#line 1796 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2994 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3057 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 497:
-#line 1746 "dhcp4_parser.yy" // lalr1.cc:859
+  case 501:
+#line 1798 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("severity", sev);
     ctx.leave();
 }
-#line 3004 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3067 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 498:
-#line 1752 "dhcp4_parser.yy" // lalr1.cc:859
+  case 502:
+#line 1804 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output_options", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OUTPUT_OPTIONS);
 }
-#line 3015 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3078 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 499:
-#line 1757 "dhcp4_parser.yy" // lalr1.cc:859
+  case 503:
+#line 1809 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3024 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3087 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 502:
-#line 1766 "dhcp4_parser.yy" // lalr1.cc:859
+  case 506:
+#line 1818 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3034 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3097 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 503:
-#line 1770 "dhcp4_parser.yy" // lalr1.cc:859
+  case 507:
+#line 1822 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 3042 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3105 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 510:
-#line 1784 "dhcp4_parser.yy" // lalr1.cc:859
+  case 514:
+#line 1836 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3050 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3113 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 511:
-#line 1786 "dhcp4_parser.yy" // lalr1.cc:859
+  case 515:
+#line 1838 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output", sev);
     ctx.leave();
 }
-#line 3060 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3123 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 512:
-#line 1792 "dhcp4_parser.yy" // lalr1.cc:859
+  case 516:
+#line 1844 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr flush(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush", flush);
 }
-#line 3069 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3132 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 513:
-#line 1797 "dhcp4_parser.yy" // lalr1.cc:859
+  case 517:
+#line 1849 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr maxsize(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxsize", maxsize);
 }
-#line 3078 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3141 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 514:
-#line 1802 "dhcp4_parser.yy" // lalr1.cc:859
+  case 518:
+#line 1854 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr maxver(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxver", maxver);
 }
-#line 3087 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3150 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
 
-#line 3091 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3154 "dhcp4_parser.cc" // lalr1.cc:859
             default:
               break;
             }
@@ -3342,571 +3405,576 @@ namespace isc { namespace dhcp {
   }
 
 
-  const short int Dhcp4Parser::yypact_ninf_ = -486;
+  const short int Dhcp4Parser::yypact_ninf_ = -493;
 
   const signed char Dhcp4Parser::yytable_ninf_ = -1;
 
   const short int
   Dhcp4Parser::yypact_[] =
   {
-     119,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,  -486,    33,    19,    35,    39,    54,    81,    83,   114,
-     127,   136,   149,   158,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,  -486,  -486,  -486,  -486,  -486,    19,   -43,    17,    30,
-     269,    18,   -16,    99,   131,    79,   -46,    91,  -486,   166,
-     181,   231,   255,   265,  -486,  -486,  -486,  -486,  -486,   267,
-    -486,    32,  -486,  -486,  -486,  -486,  -486,  -486,  -486,   270,
-     271,  -486,  -486,  -486,   272,   279,   282,   284,  -486,  -486,
-    -486,  -486,  -486,  -486,  -486,   285,  -486,  -486,  -486,    42,
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,  -486,  -486,   286,    57,  -486,  -486,  -486,  -486,  -486,
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,   288,   289,  -486,
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,    86,  -486,
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,   109,
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,  -486,  -486,  -486,  -486,   261,   291,  -486,  -486,  -486,
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,   292,  -486,  -486,  -486,   301,  -486,  -486,   299,   306,
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,   308,   309,  -486,  -486,  -486,  -486,   302,   311,  -486,
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,   165,
-    -486,  -486,  -486,   312,  -486,  -486,   314,  -486,   315,   316,
-    -486,  -486,   318,   319,   320,  -486,  -486,  -486,   209,  -486,
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,  -486,  -486,  -486,  -486,    19,    19,  -486,   184,   322,
-     323,   324,   325,   327,  -486,    17,  -486,   328,   189,   190,
-     331,   332,   333,   196,   197,   198,   199,   338,   339,   340,
-     341,   342,   343,   344,   207,   346,   347,    30,  -486,   348,
-     349,   210,   269,  -486,    66,   351,   352,   356,   357,   358,
-     359,   360,   223,   224,   362,   363,   365,   366,    18,  -486,
-     367,   368,   -16,  -486,   369,   370,   371,   372,   373,   374,
-     375,   376,   377,   378,  -486,    99,   379,   380,   243,   382,
-     383,   384,   245,  -486,   131,   386,   247,   248,  -486,    79,
-     389,   390,   -17,  -486,   251,   392,   393,   256,   395,   260,
-     262,   396,   397,   263,   264,   266,   399,   401,    91,  -486,
-    -486,  -486,   402,   404,   405,    19,    19,    19,  -486,   406,
-    -486,  -486,   268,   407,   408,  -486,  -486,  -486,  -486,   411,
-     412,   413,   414,   415,   416,   417,  -486,   418,   419,  -486,
-     422,    60,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,   420,   426,  -486,  -486,  -486,   281,   290,   293,   425,
-     294,   295,   296,  -486,  -486,   142,   297,   427,   433,  -486,
-     300,   435,  -486,   305,   310,   422,   317,   326,   329,   330,
-     334,   335,   336,  -486,   337,   345,  -486,   350,   353,   354,
-    -486,  -486,   355,  -486,  -486,  -486,   361,    19,  -486,  -486,
-     364,   381,  -486,   385,  -486,  -486,    14,   387,  -486,  -486,
-    -486,    25,   388,  -486,    19,    30,   304,  -486,  -486,  -486,
-     269,  -486,    73,    73,   436,   440,   443,   128,    23,   445,
-      61,    41,    91,  -486,  -486,  -486,  -486,  -486,   429,  -486,
-      66,  -486,  -486,  -486,   446,  -486,  -486,  -486,  -486,  -486,
-    -486,  -486,  -486,   448,   398,  -486,  -486,  -486,  -486,  -486,
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,   215,  -486,   216,  -486,  -486,   218,  -486,  -486,  -486,
-    -486,   453,   455,   456,   457,   459,  -486,  -486,  -486,   219,
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,  -486,  -486,   222,  -486,   458,   462,  -486,  -486,   466,
-     465,  -486,  -486,   468,   476,  -486,  -486,  -486,  -486,  -486,
-    -486,    28,  -486,  -486,  -486,  -486,  -486,  -486,  -486,   151,
-    -486,   475,   479,  -486,   480,   481,   483,   484,   485,   486,
-     225,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-     226,  -486,  -486,  -486,   228,   391,   394,  -486,  -486,   477,
-     489,  -486,  -486,   487,   494,  -486,  -486,   490,  -486,   495,
-     304,  -486,  -486,   497,   499,   500,   502,   400,   403,   409,
-     410,   421,   503,   504,    73,  -486,  -486,    18,  -486,   436,
-     131,  -486,   440,    79,  -486,   443,   128,  -486,    23,  -486,
-     -46,  -486,   445,   423,   424,   428,   430,   431,   432,    61,
-    -486,   505,   506,    41,  -486,  -486,  -486,   507,   508,  -486,
-     -16,  -486,   446,    99,  -486,   448,   510,  -486,   511,  -486,
-     275,   434,   437,   438,  -486,  -486,  -486,  -486,  -486,   439,
-     441,  -486,   235,  -486,   509,  -486,   512,  -486,  -486,  -486,
-     236,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,   442,
-     444,  -486,  -486,   447,   238,  -486,   513,  -486,   449,   516,
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,   239,  -486,    44,   516,  -486,  -486,   514,  -486,  -486,
-    -486,   257,  -486,  -486,  -486,  -486,  -486,   515,   450,   520,
-      44,  -486,   522,  -486,   452,  -486,   518,  -486,  -486,   258,
-    -486,   -70,   518,  -486,  -486,   524,   526,   527,   259,  -486,
-    -486,  -486,  -486,  -486,  -486,   529,   451,   454,   460,   -70,
-    -486,   463,  -486,  -486,  -486,  -486,  -486
+     217,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,
+    -493,  -493,  -493,    34,    19,    23,    58,    68,    80,   124,
+     150,   151,   162,   166,   175,   179,  -493,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,
+      19,  -100,    17,    30,    73,    18,     8,    99,   157,    81,
+      57,   -52,   145,  -493,   208,   215,   216,   220,   233,  -493,
+    -493,  -493,  -493,  -493,   234,  -493,    47,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,   238,   256,  -493,  -493,  -493,   268,
+     270,   271,   272,  -493,  -493,  -493,  -493,  -493,  -493,  -493,
+     274,  -493,  -493,  -493,    85,  -493,  -493,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,   275,   109,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,
+    -493,  -493,   277,   279,  -493,  -493,  -493,  -493,  -493,  -493,
+    -493,  -493,  -493,   126,  -493,  -493,  -493,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,   140,  -493,  -493,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,
+     251,   262,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,   276,  -493,  -493,   281,  -493,  -493,
+    -493,   284,  -493,  -493,   282,   286,  -493,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,   288,   289,  -493,
+    -493,  -493,  -493,   295,   293,  -493,  -493,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,  -493,   163,  -493,  -493,  -493,   300,
+    -493,  -493,   301,  -493,   302,   306,  -493,  -493,   309,   311,
+     312,  -493,  -493,  -493,   177,  -493,  -493,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,
+    -493,    19,    19,  -493,   129,   313,   314,   315,   316,   317,
+    -493,    17,  -493,   319,   181,   182,   320,   321,   324,   186,
+     187,   188,   189,   330,   331,   332,   333,   334,   335,   336,
+     198,   338,   339,    30,  -493,   355,   356,   218,    73,  -493,
+      77,   357,   358,   360,   361,   362,   363,   364,   226,   225,
+     367,   368,   369,   370,    18,  -493,   371,   372,     8,  -493,
+     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
+    -493,    99,  -493,   383,   384,   246,   386,   387,   388,   248,
+    -493,    81,   390,   250,   252,  -493,    57,   392,   394,   -24,
+    -493,   257,   395,   396,   258,   399,   264,   265,   400,   401,
+     266,   269,   273,   402,   405,   145,  -493,  -493,  -493,   406,
+     408,   409,    19,    19,    19,  -493,   410,  -493,  -493,   278,
+     412,   414,  -493,  -493,  -493,  -493,   407,   417,   418,   419,
+     420,   422,   421,  -493,   423,   424,  -493,   427,   100,  -493,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,   425,   426,
+    -493,  -493,  -493,   292,   294,   296,   430,   297,   303,   304,
+    -493,  -493,    35,   307,   432,   435,  -493,   308,   437,  -493,
+     310,   318,   427,   322,   325,   326,   327,   328,   329,   337,
+    -493,   340,   341,  -493,   342,   343,   344,  -493,  -493,   345,
+    -493,  -493,  -493,   346,    19,  -493,  -493,   347,   348,  -493,
+     349,  -493,  -493,    16,   350,  -493,  -493,  -493,   -71,   351,
+    -493,    19,    30,   353,  -493,  -493,  -493,    73,  -493,   160,
+     160,   444,   446,   447,   125,    22,   448,    64,    26,   145,
+    -493,  -493,  -493,  -493,  -493,   452,  -493,    77,  -493,  -493,
+    -493,   454,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,
+     455,   391,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,   180,  -493,
+     203,  -493,  -493,   204,  -493,  -493,  -493,  -493,   462,   471,
+     472,   474,   476,  -493,  -493,  -493,   207,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,
+     213,  -493,   453,   478,  -493,  -493,   486,   491,  -493,  -493,
+     489,   493,  -493,  -493,  -493,  -493,  -493,  -493,    48,  -493,
+    -493,  -493,  -493,  -493,  -493,  -493,   261,  -493,   492,   494,
+    -493,   495,   496,   497,   498,   499,   500,   219,  -493,  -493,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,   221,  -493,  -493,
+    -493,   222,   365,   366,  -493,  -493,   503,   502,  -493,  -493,
+     504,   508,  -493,  -493,   505,  -493,   510,   353,  -493,  -493,
+     511,   512,   513,   514,   385,   389,   393,   397,   398,   515,
+     516,   160,  -493,  -493,    18,  -493,   444,    81,  -493,   446,
+      57,  -493,   447,   125,  -493,    22,  -493,   -52,  -493,   448,
+     403,   404,   411,   413,   415,   416,    64,  -493,   517,   518,
+      26,  -493,  -493,  -493,   506,   520,  -493,     8,  -493,   454,
+      99,  -493,   455,   521,  -493,   501,  -493,   114,   428,   429,
+     431,  -493,  -493,  -493,  -493,  -493,   433,   434,  -493,   223,
+    -493,   519,  -493,   522,  -493,  -493,  -493,   229,  -493,  -493,
+    -493,  -493,  -493,  -493,  -493,  -493,   436,   438,  -493,  -493,
+     439,   232,  -493,   523,  -493,   440,   525,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,   263,  -493,
+      45,   525,  -493,  -493,   529,  -493,  -493,  -493,   254,  -493,
+    -493,  -493,  -493,  -493,   531,   441,   533,    45,  -493,   524,
+    -493,   443,  -493,   532,  -493,  -493,   267,  -493,   -86,   532,
+    -493,  -493,   534,   536,   539,   255,  -493,  -493,  -493,  -493,
+    -493,  -493,   540,   442,   445,   449,   -86,  -493,   451,  -493,
+    -493,  -493,  -493,  -493
   };
 
   const unsigned short int
   Dhcp4Parser::yydefact_[] =
   {
        0,     2,     4,     6,     8,    10,    12,    14,    16,    18,
-      20,    22,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     1,    39,    32,    28,    27,    24,
-      25,    26,    31,     3,    29,    30,    52,     5,    64,     7,
-     102,     9,   210,    11,   326,    13,   346,    15,   263,    17,
-     298,    19,   175,    21,   424,    23,    41,    35,     0,     0,
-       0,     0,     0,   348,   265,   300,     0,     0,    43,     0,
-      42,     0,     0,    36,    62,   477,   471,   473,   475,     0,
-      61,     0,    54,    56,    58,    59,    60,    57,    95,     0,
-       0,   365,   111,   113,     0,     0,     0,     0,   202,   255,
-     290,   153,   391,   167,   186,     0,   412,   422,    88,     0,
-      66,    68,    69,    70,    71,    85,    86,    73,    74,    75,
-      76,    80,    81,    72,    78,    79,    87,    77,    82,    83,
-      84,   104,   106,     0,     0,    97,    99,   100,   101,   395,
-     236,   238,   240,   318,   234,   242,   244,     0,     0,   248,
-     246,   338,   387,   233,   214,   215,   216,   228,     0,   212,
-     219,   230,   231,   232,   220,   221,   224,   226,   222,   223,
-     217,   218,   225,   229,   227,   334,   336,   333,   331,     0,
-     328,   330,   332,   367,   369,   385,   373,   375,   379,   377,
-     383,   381,   371,   364,   360,     0,   349,   350,   361,   362,
-     363,   357,   352,   358,   354,   355,   356,   359,   353,   280,
-     143,     0,   284,   282,   287,     0,   276,   277,     0,   266,
-     267,   269,   279,   270,   271,   272,   286,   273,   274,   275,
-     312,     0,     0,   310,   311,   314,   315,     0,   301,   302,
-     304,   305,   306,   307,   308,   309,   182,   184,   179,     0,
-     177,   180,   181,     0,   444,   446,     0,   449,     0,     0,
-     453,   457,     0,     0,     0,   462,   469,   442,     0,   426,
-     428,   429,   430,   431,   432,   433,   434,   435,   436,   437,
-     438,   439,   440,   441,    40,     0,     0,    33,     0,     0,
-       0,     0,     0,     0,    51,     0,    53,     0,     0,     0,
+      20,    22,    24,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     1,    41,    34,    30,
+      29,    26,    27,    28,    33,     3,    31,    32,    54,     5,
+      66,     7,   104,     9,   212,    11,   330,    13,   350,    15,
+     259,    17,   267,    19,   302,    21,   177,    23,   428,    25,
+      43,    37,     0,     0,     0,     0,     0,   352,     0,   269,
+     304,     0,     0,    45,     0,    44,     0,     0,    38,    64,
+     481,   475,   477,   479,     0,    63,     0,    56,    58,    60,
+      61,    62,    59,    97,     0,     0,   369,   113,   115,     0,
+       0,     0,     0,   204,   257,   294,   155,   395,   169,   188,
+       0,   416,   426,    90,     0,    68,    70,    71,    72,    73,
+      87,    88,    75,    76,    77,    78,    82,    83,    74,    80,
+      81,    89,    79,    84,    85,    86,   106,   108,     0,     0,
+      99,   101,   102,   103,   399,   238,   240,   242,   322,   236,
+     244,   246,     0,     0,   250,   248,   342,   391,   235,   216,
+     217,   218,   230,     0,   214,   221,   232,   233,   234,   222,
+     223,   226,   228,   224,   225,   219,   220,   227,   231,   229,
+     338,   340,   337,   335,     0,   332,   334,   336,   371,   373,
+     389,   377,   379,   383,   381,   387,   385,   375,   368,   364,
+       0,   353,   354,   365,   366,   367,   361,   356,   362,   358,
+     359,   360,   363,   357,     0,   284,   145,     0,   288,   286,
+     291,     0,   280,   281,     0,   270,   271,   273,   283,   274,
+     275,   276,   290,   277,   278,   279,   316,     0,     0,   314,
+     315,   318,   319,     0,   305,   306,   308,   309,   310,   311,
+     312,   313,   184,   186,   181,     0,   179,   182,   183,     0,
+     448,   450,     0,   453,     0,     0,   457,   461,     0,     0,
+       0,   466,   473,   446,     0,   430,   432,   433,   434,   435,
+     436,   437,   438,   439,   440,   441,   442,   443,   444,   445,
+      42,     0,     0,    35,     0,     0,     0,     0,     0,     0,
+      53,     0,    55,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    65,     0,
-       0,     0,     0,   103,   397,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   211,
-       0,     0,     0,   327,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   347,     0,     0,     0,     0,     0,
-       0,     0,     0,   264,     0,     0,     0,     0,   299,     0,
-       0,     0,     0,   176,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   425,
-      44,    37,     0,     0,     0,     0,     0,     0,    55,     0,
-      93,    94,     0,     0,     0,    89,    90,    91,    92,     0,
-       0,     0,     0,     0,     0,     0,   411,     0,     0,    67,
-       0,     0,   110,    98,   409,   407,   408,   403,   404,   405,
-     406,     0,   398,   399,   401,   402,     0,     0,     0,     0,
-       0,     0,     0,   253,   254,     0,     0,     0,     0,   213,
-       0,     0,   329,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   351,     0,     0,   278,     0,     0,     0,
-     289,   268,     0,   316,   317,   303,     0,     0,   178,   443,
-       0,     0,   448,     0,   451,   452,     0,     0,   459,   460,
-     461,     0,     0,   427,     0,     0,     0,   472,   474,   476,
-       0,   366,     0,     0,   204,   257,   292,     0,     0,   169,
-       0,     0,     0,    45,   105,   108,   109,   107,     0,   396,
-       0,   237,   239,   241,   320,   235,   243,   245,   250,   251,
-     252,   249,   247,   340,     0,   335,    34,   337,   368,   370,
-     386,   374,   376,   380,   378,   384,   382,   372,   281,   144,
-     285,   283,   288,   313,   183,   185,   445,   447,   450,   455,
-     456,   454,   458,   464,   465,   466,   467,   468,   463,   470,
-      38,     0,   482,     0,   479,   481,     0,   130,   136,   138,
-     140,     0,     0,     0,     0,     0,   149,   151,   129,     0,
-     115,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,     0,   208,     0,   205,   206,   261,     0,
-     258,   259,   296,     0,   293,   294,   162,   163,   164,   165,
-     166,     0,   155,   157,   158,   159,   160,   161,   393,     0,
-     173,     0,   170,   171,     0,     0,     0,     0,     0,     0,
-       0,   188,   190,   191,   192,   193,   194,   195,   418,   420,
-       0,   414,   416,   417,     0,    47,     0,   400,   324,     0,
-     321,   322,   344,     0,   341,   342,   389,     0,    63,     0,
-       0,   478,    96,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   112,   114,     0,   203,     0,
-     265,   256,     0,   300,   291,     0,     0,   154,     0,   392,
-       0,   168,     0,     0,     0,     0,     0,     0,     0,     0,
-     187,     0,     0,     0,   413,   423,    49,     0,    48,   410,
-       0,   319,     0,   348,   339,     0,     0,   388,     0,   480,
-       0,     0,     0,     0,   142,   145,   146,   147,   148,     0,
-       0,   116,     0,   207,     0,   260,     0,   295,   156,   394,
-       0,   172,   196,   197,   198,   199,   200,   201,   189,     0,
-       0,   415,    46,     0,     0,   323,     0,   343,     0,     0,
-     132,   133,   134,   135,   131,   137,   139,   141,   150,   152,
-     209,   262,   297,   174,   419,   421,    50,   325,   345,   390,
-     486,     0,   484,     0,     0,   483,   498,     0,   496,   494,
-     490,     0,   488,   492,   493,   491,   485,     0,     0,     0,
-       0,   487,     0,   495,     0,   489,     0,   497,   502,     0,
-     500,     0,     0,   499,   510,     0,     0,     0,     0,   504,
-     506,   507,   508,   509,   501,     0,     0,     0,     0,     0,
-     503,     0,   512,   513,   514,   505,   511
+       0,     0,     0,     0,    67,     0,     0,     0,     0,   105,
+     401,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   213,     0,     0,     0,   331,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     351,     0,   260,     0,     0,     0,     0,     0,     0,     0,
+     268,     0,     0,     0,     0,   303,     0,     0,     0,     0,
+     178,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   429,    46,    39,     0,
+       0,     0,     0,     0,     0,    57,     0,    95,    96,     0,
+       0,     0,    91,    92,    93,    94,     0,     0,     0,     0,
+       0,     0,     0,   415,     0,     0,    69,     0,     0,   112,
+     100,   413,   411,   412,   407,   408,   409,   410,     0,   402,
+     403,   405,   406,     0,     0,     0,     0,     0,     0,     0,
+     255,   256,     0,     0,     0,     0,   215,     0,     0,   333,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     355,     0,     0,   282,     0,     0,     0,   293,   272,     0,
+     320,   321,   307,     0,     0,   180,   447,     0,     0,   452,
+       0,   455,   456,     0,     0,   463,   464,   465,     0,     0,
+     431,     0,     0,     0,   476,   478,   480,     0,   370,     0,
+       0,   206,   261,   296,     0,     0,   171,     0,     0,     0,
+      47,   107,   110,   111,   109,     0,   400,     0,   239,   241,
+     243,   324,   237,   245,   247,   252,   253,   254,   251,   249,
+     344,     0,   339,    36,   341,   372,   374,   390,   378,   380,
+     384,   382,   388,   386,   376,   285,   146,   289,   287,   292,
+     317,   185,   187,   449,   451,   454,   459,   460,   458,   462,
+     468,   469,   470,   471,   472,   467,   474,    40,     0,   486,
+       0,   483,   485,     0,   132,   138,   140,   142,     0,     0,
+       0,     0,     0,   151,   153,   131,     0,   117,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+       0,   210,     0,   207,   208,   265,     0,   262,   263,   300,
+       0,   297,   298,   164,   165,   166,   167,   168,     0,   157,
+     159,   160,   161,   162,   163,   397,     0,   175,     0,   172,
+     173,     0,     0,     0,     0,     0,     0,     0,   190,   192,
+     193,   194,   195,   196,   197,   422,   424,     0,   418,   420,
+     421,     0,    49,     0,   404,   328,     0,   325,   326,   348,
+       0,   345,   346,   393,     0,    65,     0,     0,   482,    98,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   114,   116,     0,   205,     0,   269,   258,     0,
+     304,   295,     0,     0,   156,     0,   396,     0,   170,     0,
+       0,     0,     0,     0,     0,     0,     0,   189,     0,     0,
+       0,   417,   427,    51,     0,    50,   414,     0,   323,     0,
+     352,   343,     0,     0,   392,     0,   484,     0,     0,     0,
+       0,   144,   147,   148,   149,   150,     0,     0,   118,     0,
+     209,     0,   264,     0,   299,   158,   398,     0,   174,   198,
+     199,   200,   201,   202,   203,   191,     0,     0,   419,    48,
+       0,     0,   327,     0,   347,     0,     0,   134,   135,   136,
+     137,   133,   139,   141,   143,   152,   154,   211,   266,   301,
+     176,   423,   425,    52,   329,   349,   394,   490,     0,   488,
+       0,     0,   487,   502,     0,   500,   498,   494,     0,   492,
+     496,   497,   495,   489,     0,     0,     0,     0,   491,     0,
+     499,     0,   493,     0,   501,   506,     0,   504,     0,     0,
+     503,   514,     0,     0,     0,     0,   508,   510,   511,   512,
+     513,   505,     0,     0,     0,     0,     0,   507,     0,   516,
+     517,   518,   509,   515
   };
 
   const short int
   Dhcp4Parser::yypgoto_[] =
   {
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,  -486,  -486,   -38,  -486,    64,  -486,  -486,  -486,  -486,
-    -486,  -486,  -486,  -486,    82,  -486,  -486,  -486,   -58,  -486,
-    -486,  -486,   217,  -486,  -486,  -486,  -486,    43,   227,   -60,
-     -59,   -40,  -486,  -486,   -39,  -486,  -486,    34,   214,  -486,
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,    36,  -144,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,  -486,  -486,   -54,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,  -486,  -486,  -486,  -486,  -486,  -155,  -486,  -486,  -486,
-    -486,  -486,  -486,  -486,  -486,  -486,  -159,  -486,  -486,  -486,
-    -154,   173,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -161,
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-    -140,  -486,  -486,  -486,  -137,   220,  -486,  -486,  -486,  -486,
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -485,  -486,
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -139,
-    -486,  -486,  -486,  -138,  -486,   191,  -486,   -52,  -486,  -486,
-    -486,  -486,  -486,   -48,  -486,  -486,  -486,  -486,  -486,   -47,
-    -486,  -486,  -486,  -136,  -486,  -486,  -486,  -133,  -486,   187,
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,  -165,  -486,  -486,  -486,  -158,   229,  -486,  -486,  -486,
-    -486,  -486,  -486,  -486,  -486,  -164,  -486,  -486,  -486,  -156,
-    -486,   213,   -51,  -486,  -305,  -486,  -304,  -486,  -486,  -486,
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,  -486,  -486,  -486,    49,  -486,  -486,  -486,  -486,  -486,
-    -486,  -486,  -149,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,    65,   188,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,  -486,
-    -486,  -486,  -486,  -486,  -486,   -89,  -486,  -486,  -486,  -210,
-    -486,  -486,  -224,  -486,  -486,  -486,  -486,  -486,  -486,  -235,
-    -486,  -486,  -250,  -486,  -486,  -486,  -486,  -486
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,   -58,  -493,   -45,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,  -493,    62,  -493,  -493,  -493,   -62,
+    -493,  -493,  -493,   244,  -493,  -493,  -493,  -493,    24,   227,
+     -47,   -46,   -44,  -493,  -493,   -43,  -493,  -493,    41,   224,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,
+    -493,  -493,    39,  -140,  -493,  -493,  -493,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,   -69,  -493,  -493,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,  -150,  -493,  -493,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,  -154,  -493,  -493,
+    -493,  -147,   178,  -493,  -493,  -493,  -493,  -493,  -493,  -493,
+    -155,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,
+    -493,  -134,  -493,  -493,  -493,  -131,   228,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -492,
+    -493,  -493,  -493,  -493,  -493,  -493,   509,  -493,  -493,  -493,
+    -493,  -493,  -135,  -493,  -493,  -493,  -132,  -493,   195,  -493,
+     -64,  -493,  -493,  -493,  -493,  -493,   -54,  -493,  -493,  -493,
+    -493,  -493,   -53,  -493,  -493,  -493,  -133,  -493,  -493,  -493,
+    -126,  -493,   191,  -493,  -493,  -493,  -493,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,  -161,  -493,  -493,  -493,  -148,   235,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -146,  -493,
+    -493,  -493,  -141,  -493,   230,   -50,  -493,  -319,  -493,  -310,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,    63,  -493,  -493,
+    -493,  -493,  -493,  -493,  -493,  -125,  -493,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,    75,   201,  -493,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,
+    -493,  -493,  -493,  -493,  -493,  -493,  -493,  -493,   -80,  -493,
+    -493,  -493,  -203,  -493,  -493,  -218,  -493,  -493,  -493,  -493,
+    -493,  -493,  -229,  -493,  -493,  -245,  -493,  -493,  -493,  -493,
+    -493
   };
 
   const short int
   Dhcp4Parser::yydefgoto_[] =
   {
-      -1,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    32,    33,    34,    57,   537,    72,    73,
-      35,    56,    69,    70,   514,   655,   717,   718,   108,    37,
-      58,    81,    82,    83,   289,    39,    59,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,   297,   134,   135,    41,
-      60,   136,   319,   137,   320,   517,   138,   118,   301,   119,
-     302,   589,   590,   591,   673,   774,   592,   674,   593,   675,
-     594,   676,   595,   217,   357,   597,   598,   599,   600,   601,
-     682,   602,   683,   120,   310,   621,   622,   623,   624,   625,
-     626,   627,   121,   312,   631,   632,   633,   700,    53,    66,
-     249,   250,   251,   370,   252,   371,   122,   313,   640,   641,
-     642,   643,   644,   645,   646,   647,   123,   307,   605,   606,
-     607,   687,    43,    61,   158,   159,   160,   329,   161,   325,
-     162,   326,   163,   327,   164,   330,   165,   331,   166,   335,
-     167,   334,   531,   168,   169,   124,   308,   609,   610,   611,
-     690,    49,    64,   218,   219,   220,   221,   222,   223,   224,
-     356,   225,   360,   226,   359,   227,   228,   361,   229,   125,
-     309,   613,   614,   615,   693,    51,    65,   237,   238,   239,
-     240,   241,   365,   242,   243,   244,   245,   171,   328,   659,
-     660,   661,   720,    45,    62,   179,   180,   181,   340,   182,
-     341,   172,   336,   663,   664,   665,   723,    47,    63,   195,
-     196,   197,   126,   300,   199,   344,   200,   345,   201,   353,
-     202,   347,   203,   348,   204,   350,   205,   349,   206,   352,
-     207,   351,   208,   346,   174,   337,   667,   726,   127,   311,
-     629,   324,   431,   432,   433,   434,   435,   518,   128,   129,
-     315,   650,   651,   652,   711,   653,   712,   130,   316,    55,
-      67,   268,   269,   270,   271,   375,   272,   376,   273,   274,
-     378,   275,   276,   277,   381,   561,   278,   382,   279,   280,
-     281,   282,   386,   568,   283,   387,    84,   291,    85,   292,
-      86,   293,    87,   290,   573,   574,   575,   669,   791,   792,
-     793,   801,   802,   803,   804,   809,   805,   807,   819,   820,
-     821,   828,   829,   830,   835,   831,   832,   833
+      -1,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    34,    35,    36,    61,   544,    77,
+      78,    37,    60,    74,    75,   521,   662,   724,   725,   113,
+      39,    62,    86,    87,    88,   295,    41,    63,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   303,   139,   140,
+      43,    64,   141,   325,   142,   326,   524,   143,   123,   307,
+     124,   308,   596,   597,   598,   680,   781,   599,   681,   600,
+     682,   601,   683,   602,   223,   364,   604,   605,   606,   607,
+     608,   689,   609,   690,   125,   316,   628,   629,   630,   631,
+     632,   633,   634,   126,   318,   638,   639,   640,   707,    57,
+      71,   255,   256,   257,   377,   258,   378,   127,   319,   647,
+     648,   649,   650,   651,   652,   653,   654,   128,   313,   612,
+     613,   614,   694,    45,    65,   163,   164,   165,   335,   166,
+     331,   167,   332,   168,   333,   169,   336,   170,   337,   171,
+     341,   172,   340,   538,   173,   174,   129,   314,    51,    68,
+     616,   617,   618,   697,    53,    69,   224,   225,   226,   227,
+     228,   229,   230,   363,   231,   367,   232,   366,   233,   234,
+     368,   235,   130,   315,   620,   621,   622,   700,    55,    70,
+     243,   244,   245,   246,   247,   372,   248,   249,   250,   251,
+     176,   334,   666,   667,   668,   727,    47,    66,   184,   185,
+     186,   346,   187,   347,   177,   342,   670,   671,   672,   730,
+      49,    67,   200,   201,   202,   131,   306,   204,   350,   205,
+     351,   206,   359,   207,   353,   208,   354,   209,   356,   210,
+     355,   211,   358,   212,   357,   213,   352,   179,   343,   674,
+     733,   132,   317,   636,   330,   438,   439,   440,   441,   442,
+     525,   133,   134,   321,   657,   658,   659,   718,   660,   719,
+     135,   322,    59,    72,   274,   275,   276,   277,   382,   278,
+     383,   279,   280,   385,   281,   282,   283,   388,   568,   284,
+     389,   285,   286,   287,   288,   393,   575,   289,   394,    89,
+     297,    90,   298,    91,   299,    92,   296,   580,   581,   582,
+     676,   798,   799,   800,   808,   809,   810,   811,   816,   812,
+     814,   826,   827,   828,   835,   836,   837,   842,   838,   839,
+     840
   };
 
   const unsigned short int
   Dhcp4Parser::yytable_[] =
   {
-      80,   154,   155,   153,   177,   193,   216,   233,   248,   267,
-     173,   234,   198,   235,   170,   178,   194,   236,    68,   429,
-     430,   156,   157,   628,    25,   139,    26,    74,    27,   559,
-     139,   696,   100,    24,   697,   295,    90,    91,   246,   247,
-     296,    88,    36,   175,   176,   317,    38,    89,    90,    91,
-     318,   824,    92,    93,   825,   826,   827,    94,    95,    96,
-     322,    40,   140,   141,   142,   323,   100,   246,   247,    94,
-      95,    96,    97,    98,   515,   516,   143,    99,   100,   144,
-     145,   146,   147,   148,   149,    91,   183,   184,    42,   338,
-      44,   150,   151,   210,   339,    79,   150,   577,    71,   152,
-     101,   102,   578,   579,   580,   581,   582,   583,   584,   585,
-     586,   587,   342,   103,   100,   210,   104,   343,    91,   183,
-     184,    46,   210,   105,   106,    79,   560,   107,   210,   230,
-     211,   212,   231,   232,    48,    75,   648,   649,   424,   563,
-     564,   565,   566,    50,    76,    77,    78,   100,   634,   635,
-     636,   637,   638,   639,   698,   209,    52,   699,    79,    79,
-      28,    29,    30,    31,   796,    54,   797,   798,   372,   567,
-     185,    79,   284,   373,   186,   187,   188,   189,   190,   191,
-     210,   192,   211,   212,   285,    79,   213,   214,   215,   253,
-     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
-     264,   265,   266,   616,   617,   618,   619,    79,   620,   528,
-     529,   530,   388,   749,    79,   429,   430,   389,   317,   670,
-      79,   322,   684,   668,   671,   684,   672,   685,   709,   713,
-     686,   388,    79,   710,   714,   286,   715,    80,   338,   372,
-      79,   342,   794,   780,   783,   795,   787,   390,   391,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-     810,   822,   839,   287,   823,   811,   425,   840,   288,   354,
-     426,   294,    79,   428,   298,   299,   303,   427,   154,   155,
-     153,   131,   132,   304,   177,   133,   305,   173,   306,   314,
-     321,   170,   332,   333,   355,   178,   358,   193,   156,   157,
-     770,   771,   772,   773,   198,   362,   216,   363,   194,   364,
-     368,   233,   366,   367,   369,   234,   374,   235,   377,   379,
-     380,   236,   383,   384,   385,   392,   393,   394,   395,   396,
-     267,   397,   399,   400,   401,   402,   403,   404,   405,   406,
-     407,   408,   409,   410,   411,   412,   413,   414,   415,   416,
-     417,   418,   420,   421,   422,   436,   437,   497,   498,   499,
-     438,   439,   440,   441,   442,   443,   445,   446,   444,   447,
-     448,   450,   451,   453,   454,   455,   456,   457,   458,   459,
-     460,   461,   462,   464,   465,   466,   467,   468,   469,   470,
-     472,   473,   474,   476,   477,   479,   480,   481,   482,   483,
-     486,   487,   484,   491,   485,   492,   494,   488,   489,   501,
-     490,   495,   496,   500,   502,   503,   504,   505,   506,   507,
-     508,   509,   521,   572,   510,   511,   512,   513,   519,   520,
-     524,   522,   533,   656,   523,   525,   526,   527,   532,   555,
-     534,   535,    26,   604,   588,   588,   538,   608,   596,   596,
-     612,   539,   630,   658,   267,   662,   570,   677,   541,   678,
-     679,   680,   425,   681,   688,   689,   426,   542,   692,   428,
-     543,   544,   691,   427,   694,   545,   546,   547,   548,   695,
-     666,   701,   702,   721,   703,   704,   549,   705,   706,   707,
-     708,   550,   722,   724,   551,   552,   553,   725,   727,   728,
-     562,   730,   554,   731,   732,   556,   733,   739,   740,   759,
-     760,   763,   398,   762,   768,   536,   769,   781,   808,   812,
-     782,   788,   557,   790,   814,   818,   558,   816,   836,   569,
-     837,   838,   716,   841,   576,   719,   423,   540,   571,   603,
-     741,   748,   734,   751,   419,   478,   750,   735,   758,   743,
-     742,   736,   744,   745,   737,   471,   475,   765,   449,   747,
-     746,   767,   764,   738,   761,   752,   753,   766,   463,   657,
-     754,   452,   755,   756,   757,   775,   493,   654,   776,   777,
-     778,   729,   779,   784,   806,   785,   815,   834,   786,   845,
-     789,     0,   813,   817,     0,   842,   843,     0,     0,     0,
-       0,     0,   844,     0,   846,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   588,   154,   155,   153,
-     596,     0,   216,     0,     0,   233,   173,     0,     0,   234,
-     170,   235,   248,     0,     0,   236,     0,   156,   157,     0,
+      85,   240,    73,   158,   182,   198,   241,   222,   239,   254,
+     273,   436,   175,   183,   199,   178,   242,   203,   159,   160,
+     437,   161,   162,   635,    27,   144,    28,    79,    29,   144,
+      38,   566,   252,   253,    26,   831,    95,    96,   832,   833,
+     834,    93,    76,   570,   571,   572,   573,    94,    95,    96,
+     301,   703,    97,    98,   704,   302,   105,    99,   100,   101,
+     252,   253,   145,   146,   147,    40,   105,   180,   181,    99,
+     100,   101,   102,   103,   574,    42,   148,   104,   105,   149,
+     150,   151,   152,   153,   154,   136,   137,    44,   323,   138,
+      84,   155,   156,   324,   216,   155,    96,   188,   189,   157,
+     106,   107,   535,   536,   537,   215,   216,   236,   217,   218,
+     237,   238,   328,   108,   522,   523,   109,   329,    96,   188,
+     189,   655,   656,   110,   111,   105,   216,   112,   567,   344,
+     216,    46,   217,   218,   345,    80,   219,   220,   221,   777,
+     778,   779,   780,   348,    81,    82,    83,   105,   349,   431,
+      84,   641,   642,   643,   644,   645,   646,    48,    50,    84,
+      84,    30,    31,    32,    33,   803,   379,   804,   805,    52,
+     190,   380,    84,    54,   191,   192,   193,   194,   195,   196,
+     395,   197,    56,   323,   584,   396,    58,    84,   675,   585,
+     586,   587,   588,   589,   590,   591,   592,   593,   594,    84,
+     623,   624,   625,   626,   104,   627,   677,   328,   436,   216,
+     691,   678,   679,   756,   290,   692,   691,   437,   291,    84,
+     292,   693,   716,    84,   720,   395,   344,   717,   293,   721,
+     722,   787,   379,   397,   398,   348,   294,   790,   300,    85,
+     794,    84,   304,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   817,   846,   360,
+     305,   433,   818,   847,   705,   361,   801,   706,   432,   802,
+     829,   399,   309,   830,   310,   311,   312,   434,   320,   327,
+     435,   338,   158,   339,   362,   365,   182,    84,   369,   371,
+     370,   175,   373,   374,   178,   183,   376,   159,   160,   198,
+     161,   162,    84,   375,   381,   384,   386,   240,   199,   222,
+     387,   203,   241,   390,   239,   391,   392,   400,   401,   402,
+     403,   404,   242,   406,   409,   410,   407,   408,   411,   412,
+     413,   414,   415,   273,   416,   417,   418,   419,   420,   421,
+     422,   423,   424,   425,   504,   505,   506,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,   427,
+     428,   443,   444,   429,   445,   446,   447,   448,   449,   450,
+     451,   452,   453,   454,   455,   457,   458,   460,   461,   462,
+     463,   464,   465,   466,   467,   468,   469,   471,   472,   473,
+     474,   475,   476,   477,   479,   480,   483,   481,   484,   487,
+     488,   489,   486,   490,   493,   494,   498,   491,   492,   499,
+     501,   495,   511,   543,   496,   502,   503,   507,   497,   509,
+     508,   510,   512,   513,   514,   515,   562,   516,   517,   527,
+     518,   519,   520,   526,   528,   531,   529,   540,   530,   532,
+     603,   603,   541,   577,    28,   533,   534,   595,   595,   539,
+     542,   611,   545,   615,   619,   637,   663,   273,   433,   695,
+     546,   665,   669,   569,   548,   432,   684,   549,   550,   551,
+     552,   553,   579,   673,   434,   685,   686,   435,   687,   554,
+     688,   696,   555,   556,   557,   558,   559,   560,   561,   563,
+     564,   565,   698,   576,   699,   701,   702,   709,   708,   710,
+     711,   712,   713,   714,   715,   729,   776,   723,   726,   728,
+     731,   732,   769,   734,   735,   737,   738,   739,   740,   746,
+     747,   766,   767,   770,   547,   775,   578,   788,   741,   823,
+     789,   795,   797,   815,   742,   819,   743,   821,   843,   825,
+     844,   745,   744,   845,   848,   405,   759,   760,   583,   610,
+     426,   748,   430,   755,   761,   758,   762,   485,   763,   764,
+     757,   765,   750,   749,   752,   751,   478,   482,   772,   754,
+     782,   783,   456,   784,   753,   785,   786,   214,   791,   771,
+     792,   793,   796,   459,   820,   824,   774,   849,   850,   773,
+     664,   470,   851,   853,   661,   768,   500,   736,   813,   822,
+     841,   852,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   177,     0,     0,   193,     0,     0,     0,     0,
-       0,     0,   198,   178,     0,     0,   194,     0,     0,     0,
+       0,     0,   603,     0,     0,     0,     0,     0,     0,   595,
+       0,   240,   158,     0,     0,   222,   241,     0,   239,     0,
+       0,   175,     0,     0,   178,   254,   242,   159,   160,     0,
+     161,   162,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   182,     0,     0,   198,     0,
+       0,     0,     0,     0,   183,     0,     0,   199,     0,     0,
+     203,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   799,     0,     0,     0,   800,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   799,     0,     0,     0,   800
+       0,   807,     0,     0,     0,     0,     0,     0,   806,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   807,     0,
+       0,     0,     0,     0,     0,   806
   };
 
   const short int
   Dhcp4Parser::yycheck_[] =
   {
-      58,    61,    61,    61,    62,    63,    64,    65,    66,    67,
-      61,    65,    63,    65,    61,    62,    63,    65,    56,   324,
-     324,    61,    61,   508,     5,     7,     7,    10,     9,    15,
-       7,     3,    48,     0,     6,     3,    18,    19,    84,    85,
-       8,    11,     7,    59,    60,     3,     7,    17,    18,    19,
-       8,   121,    22,    23,   124,   125,   126,    39,    40,    41,
-       3,     7,    44,    45,    46,     8,    48,    84,    85,    39,
-      40,    41,    42,    43,    14,    15,    58,    47,    48,    61,
-      62,    63,    64,    65,    66,    19,    20,    21,     7,     3,
-       7,    73,    74,    49,     8,   141,    73,    24,   141,    81,
-      70,    71,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,     3,    83,    48,    49,    86,     8,    19,    20,
-      21,     7,    49,    93,    94,   141,   112,    97,    49,    50,
-      51,    52,    53,    54,     7,   118,    95,    96,    72,   114,
-     115,   116,   117,     7,   127,   128,   129,    48,    87,    88,
-      89,    90,    91,    92,     3,    24,     7,     6,   141,   141,
-     141,   142,   143,   144,   120,     7,   122,   123,     3,   144,
-      71,   141,     6,     8,    75,    76,    77,    78,    79,    80,
-      49,    82,    51,    52,     3,   141,    55,    56,    57,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,    75,    76,    77,    78,   141,    80,    67,
-      68,    69,     3,   698,   141,   520,   520,     8,     3,     3,
-     141,     3,     3,     8,     8,     3,     8,     8,     3,     3,
-       8,     3,   141,     8,     8,     4,     8,   295,     3,     3,
-     141,     3,     3,     8,     8,     6,     8,   285,   286,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-       3,     3,     3,     8,     6,     8,   324,     8,     3,     8,
-     324,     4,   141,   324,     4,     4,     4,   324,   338,   338,
-     338,    12,    13,     4,   342,    16,     4,   338,     4,     4,
-       4,   338,     4,     4,     3,   342,     4,   355,   338,   338,
-      25,    26,    27,    28,   355,     4,   364,     8,   355,     3,
-       8,   369,     4,     4,     3,   369,     4,   369,     4,     4,
-       4,   369,     4,     4,     4,   141,     4,     4,     4,     4,
-     388,     4,     4,   144,   144,     4,     4,     4,   142,   142,
-     142,   142,     4,     4,     4,     4,     4,     4,     4,   142,
-       4,     4,     4,     4,   144,     4,     4,   395,   396,   397,
-       4,     4,     4,     4,     4,   142,     4,     4,   144,     4,
-       4,     4,     4,     4,     4,     4,     4,     4,     4,     4,
-       4,     4,     4,     4,     4,   142,     4,     4,     4,   144,
-       4,   144,   144,     4,     4,   144,     4,     4,   142,     4,
-       4,     4,   142,     4,   142,     4,     4,   144,   144,   141,
-     144,     7,     7,     7,     7,     7,     5,     5,     5,     5,
-       5,     5,   141,   119,     7,     7,     7,     5,     8,     3,
-       5,   141,     5,     4,   141,   141,   141,   141,   141,   477,
-       7,   141,     7,     7,   502,   503,   141,     7,   502,   503,
-       7,   141,     7,     7,   512,     7,   494,     4,   141,     4,
-       4,     4,   520,     4,     6,     3,   520,   141,     3,   520,
-     141,   141,     6,   520,     6,   141,   141,   141,   141,     3,
-      82,     6,     3,     6,     4,     4,   141,     4,     4,     4,
-       4,   141,     3,     6,   141,   141,   141,     3,     8,     4,
-     113,     4,   141,     4,     4,   141,     4,     4,     4,     4,
-       4,     3,   295,     6,     4,   451,     5,     8,     4,     4,
-       8,     8,   141,     7,     4,     7,   141,     5,     4,   141,
-       4,     4,   141,     4,   500,   141,   322,   455,   495,   503,
-     684,   696,   142,   702,   317,   372,   700,   144,   709,   689,
-     687,   142,   690,   692,   144,   364,   369,   722,   338,   695,
-     693,   725,   720,   142,   713,   142,   142,   723,   355,   520,
-     142,   342,   142,   142,   142,   141,   388,   512,   141,   141,
-     141,   670,   141,   141,   794,   141,   810,   822,   141,   839,
-     141,    -1,   142,   141,    -1,   144,   142,    -1,    -1,    -1,
-      -1,    -1,   142,    -1,   141,    -1,    -1,    -1,    -1,    -1,
+      62,    70,    60,    65,    66,    67,    70,    69,    70,    71,
+      72,   330,    65,    66,    67,    65,    70,    67,    65,    65,
+     330,    65,    65,   515,     5,     7,     7,    10,     9,     7,
+       7,    15,    84,    85,     0,   121,    18,    19,   124,   125,
+     126,    11,   142,   114,   115,   116,   117,    17,    18,    19,
+       3,     3,    22,    23,     6,     8,    48,    39,    40,    41,
+      84,    85,    44,    45,    46,     7,    48,    59,    60,    39,
+      40,    41,    42,    43,   145,     7,    58,    47,    48,    61,
+      62,    63,    64,    65,    66,    12,    13,     7,     3,    16,
+     142,    73,    74,     8,    49,    73,    19,    20,    21,    81,
+      70,    71,    67,    68,    69,    24,    49,    50,    51,    52,
+      53,    54,     3,    83,    14,    15,    86,     8,    19,    20,
+      21,    95,    96,    93,    94,    48,    49,    97,   112,     3,
+      49,     7,    51,    52,     8,   118,    55,    56,    57,    25,
+      26,    27,    28,     3,   127,   128,   129,    48,     8,    72,
+     142,    87,    88,    89,    90,    91,    92,     7,     7,   142,
+     142,   142,   143,   144,   145,   120,     3,   122,   123,     7,
+      71,     8,   142,     7,    75,    76,    77,    78,    79,    80,
+       3,    82,     7,     3,    24,     8,     7,   142,     8,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,   142,
+      75,    76,    77,    78,    47,    80,     3,     3,   527,    49,
+       3,     8,     8,   705,     6,     8,     3,   527,     3,   142,
+       4,     8,     3,   142,     3,     3,     3,     8,     8,     8,
+       8,     8,     3,   291,   292,     3,     3,     8,     4,   301,
+       8,   142,     4,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,     3,     3,     8,
+       4,   330,     8,     8,     3,     3,     3,     6,   330,     6,
+       3,   142,     4,     6,     4,     4,     4,   330,     4,     4,
+     330,     4,   344,     4,     8,     4,   348,   142,     4,     3,
+       8,   344,     4,     4,   344,   348,     3,   344,   344,   361,
+     344,   344,   142,     8,     4,     4,     4,   376,   361,   371,
+       4,   361,   376,     4,   376,     4,     4,     4,     4,     4,
+       4,     4,   376,     4,     4,     4,   145,   145,     4,   143,
+     143,   143,   143,   395,     4,     4,     4,     4,     4,     4,
+       4,   143,     4,     4,   402,   403,   404,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,     4,
+       4,     4,     4,   145,     4,     4,     4,     4,     4,   143,
+     145,     4,     4,     4,     4,     4,     4,     4,     4,     4,
+       4,     4,     4,     4,     4,     4,     4,     4,     4,   143,
+       4,     4,     4,   145,     4,   145,     4,   145,     4,     4,
+       4,   143,   145,     4,     4,     4,     4,   143,   143,     4,
+       4,   145,     5,   458,   145,     7,     7,     7,   145,     7,
+     142,     7,     5,     5,     5,     5,   484,     5,     7,     3,
+       7,     7,     5,     8,   142,     5,   142,     5,   142,   142,
+     509,   510,     7,   501,     7,   142,   142,   509,   510,   142,
+     142,     7,   142,     7,     7,     7,     4,   519,   527,     6,
+     142,     7,     7,   113,   142,   527,     4,   142,   142,   142,
+     142,   142,   119,    82,   527,     4,     4,   527,     4,   142,
+       4,     3,   142,   142,   142,   142,   142,   142,   142,   142,
+     142,   142,     6,   142,     3,     6,     3,     3,     6,     4,
+       4,     4,     4,     4,     4,     3,     5,   142,   142,     6,
+       6,     3,     6,     8,     4,     4,     4,     4,     4,     4,
+       4,     4,     4,     3,   462,     4,   502,     8,   143,     5,
+       8,     8,     7,     4,   145,     4,   143,     4,     4,     7,
+       4,   143,   145,     4,     4,   301,   143,   143,   507,   510,
+     323,   691,   328,   703,   143,   709,   143,   379,   143,   143,
+     707,   716,   696,   694,   699,   697,   371,   376,   729,   702,
+     142,   142,   344,   142,   700,   142,   142,    68,   142,   727,
+     142,   142,   142,   348,   143,   142,   732,   145,   143,   730,
+     527,   361,   143,   142,   519,   720,   395,   677,   801,   817,
+     829,   846,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   684,   687,   687,   687,
-     684,    -1,   690,    -1,    -1,   693,   687,    -1,    -1,   693,
-     687,   693,   700,    -1,    -1,   693,    -1,   687,   687,    -1,
+      -1,    -1,   691,    -1,    -1,    -1,    -1,    -1,    -1,   691,
+      -1,   700,   694,    -1,    -1,   697,   700,    -1,   700,    -1,
+      -1,   694,    -1,    -1,   694,   707,   700,   694,   694,    -1,
+     694,   694,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   727,    -1,    -1,   730,    -1,
+      -1,    -1,    -1,    -1,   727,    -1,    -1,   730,    -1,    -1,
+     730,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   720,    -1,    -1,   723,    -1,    -1,    -1,    -1,
-      -1,    -1,   723,   720,    -1,    -1,   723,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   793,    -1,    -1,    -1,   793,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   810,    -1,    -1,    -1,   810
+      -1,   800,    -1,    -1,    -1,    -1,    -1,    -1,   800,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   817,    -1,
+      -1,    -1,    -1,    -1,    -1,   817
   };
 
   const unsigned short int
   Dhcp4Parser::yystos_[] =
   {
        0,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,     0,     5,     7,     9,   141,   142,
-     143,   144,   158,   159,   160,   165,     7,   174,     7,   180,
-       7,   194,     7,   267,     7,   338,     7,   352,     7,   296,
-       7,   320,     7,   243,     7,   404,   166,   161,   175,   181,
-     195,   268,   339,   353,   297,   321,   244,   405,   158,   167,
-     168,   141,   163,   164,    10,   118,   127,   128,   129,   141,
-     173,   176,   177,   178,   431,   433,   435,   437,    11,    17,
-      18,    19,    22,    23,    39,    40,    41,    42,    43,    47,
-      48,    70,    71,    83,    86,    93,    94,    97,   173,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   202,   204,
-     228,   237,   251,   261,   290,   314,   357,   383,   393,   394,
-     402,    12,    13,    16,   192,   193,   196,   198,   201,     7,
-      44,    45,    46,    58,    61,    62,    63,    64,    65,    66,
-      73,    74,    81,   173,   184,   185,   186,   189,   269,   270,
-     271,   273,   275,   277,   279,   281,   283,   285,   288,   289,
-     314,   332,   346,   357,   379,    59,    60,   173,   314,   340,
-     341,   342,   344,    20,    21,    71,    75,    76,    77,    78,
-      79,    80,    82,   173,   314,   354,   355,   356,   357,   359,
-     361,   363,   365,   367,   369,   371,   373,   375,   377,    24,
-      49,    51,    52,    55,    56,    57,   173,   218,   298,   299,
-     300,   301,   302,   303,   304,   306,   308,   310,   311,   313,
-      50,    53,    54,   173,   218,   302,   308,   322,   323,   324,
-     325,   326,   328,   329,   330,   331,    84,    85,   173,   245,
-     246,   247,   249,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   173,   406,   407,
-     408,   409,   411,   413,   414,   416,   417,   418,   421,   423,
-     424,   425,   426,   429,     6,     3,     4,     8,     3,   179,
-     438,   432,   434,   436,     4,     3,     8,   191,     4,     4,
-     358,   203,   205,     4,     4,     4,     4,   262,   291,   315,
-     229,   384,   238,   252,     4,   395,   403,     3,     8,   197,
-     199,     4,     3,     8,   386,   274,   276,   278,   333,   272,
-     280,   282,     4,     4,   286,   284,   347,   380,     3,     8,
-     343,   345,     3,     8,   360,   362,   378,   366,   368,   372,
-     370,   376,   374,   364,     8,     3,   305,   219,     4,   309,
-     307,   312,     4,     8,     3,   327,     4,     4,     8,     3,
-     248,   250,     3,     8,     4,   410,   412,     4,   415,     4,
-       4,   419,   422,     4,     4,     4,   427,   430,     3,     8,
-     158,   158,   141,     4,     4,     4,     4,     4,   177,     4,
-     144,   144,     4,     4,     4,   142,   142,   142,   142,     4,
-       4,     4,     4,     4,     4,     4,   142,     4,     4,   183,
-       4,     4,   144,   193,    72,   173,   218,   314,   357,   359,
-     361,   387,   388,   389,   390,   391,     4,     4,     4,     4,
-       4,     4,     4,   142,   144,     4,     4,     4,     4,   270,
-       4,     4,   341,     4,     4,     4,     4,     4,     4,     4,
-       4,     4,     4,   356,     4,     4,   142,     4,     4,     4,
-     144,   300,     4,   144,   144,   324,     4,     4,   246,   144,
-       4,     4,   142,     4,   142,   142,     4,     4,   144,   144,
-     144,     4,     4,   407,     4,     7,     7,   158,   158,   158,
-       7,   141,     7,     7,     5,     5,     5,     5,     5,     5,
-       7,     7,     7,     5,   169,    14,    15,   200,   392,     8,
-       3,   141,   141,   141,     5,   141,   141,   141,    67,    68,
-      69,   287,   141,     5,     7,   141,   160,   162,   141,   141,
-     169,   141,   141,   141,   141,   141,   141,   141,   141,   141,
-     141,   141,   141,   141,   141,   158,   141,   141,   141,    15,
-     112,   420,   113,   114,   115,   116,   117,   144,   428,   141,
-     158,   182,   119,   439,   440,   441,   192,    24,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,   173,   206,
-     207,   208,   211,   213,   215,   217,   218,   220,   221,   222,
-     223,   224,   226,   206,     7,   263,   264,   265,     7,   292,
-     293,   294,     7,   316,   317,   318,    75,    76,    77,    78,
-      80,   230,   231,   232,   233,   234,   235,   236,   283,   385,
-       7,   239,   240,   241,    87,    88,    89,    90,    91,    92,
-     253,   254,   255,   256,   257,   258,   259,   260,    95,    96,
-     396,   397,   398,   400,   406,   170,     4,   389,     7,   334,
-     335,   336,     7,   348,   349,   350,    82,   381,     8,   442,
-       3,     8,     8,   209,   212,   214,   216,     4,     4,     4,
-       4,     4,   225,   227,     3,     8,     8,   266,     6,     3,
-     295,     6,     3,   319,     6,     3,     3,     6,     3,     6,
-     242,     6,     3,     4,     4,     4,     4,     4,     4,     3,
-       8,   399,   401,     3,     8,     8,   141,   171,   172,   141,
-     337,     6,     3,   351,     6,     3,   382,     8,     4,   440,
-       4,     4,     4,     4,   142,   144,   142,   144,   142,     4,
-       4,   207,   269,   265,   298,   294,   322,   318,   231,   283,
-     245,   241,   142,   142,   142,   142,   142,   142,   254,     4,
-       4,   397,     6,     3,   340,   336,   354,   350,     4,     5,
-      25,    26,    27,    28,   210,   141,   141,   141,   141,   141,
-       8,     8,     8,     8,   141,   141,   141,     8,     8,   141,
-       7,   443,   444,   445,     3,     6,   120,   122,   123,   173,
-     218,   446,   447,   448,   449,   451,   444,   452,     4,   450,
-       3,     8,     4,   142,     4,   447,     5,   141,     7,   453,
-     454,   455,     3,     6,   121,   124,   125,   126,   456,   457,
-     458,   460,   461,   462,   454,   459,     4,     4,     4,     3,
-       8,     4,   144,   142,   142,   457,   141
+     139,   140,   141,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,     0,     5,     7,     9,
+     142,   143,   144,   145,   160,   161,   162,   167,     7,   176,
+       7,   182,     7,   196,     7,   269,     7,   342,     7,   356,
+       7,   294,     7,   300,     7,   324,     7,   245,     7,   408,
+     168,   163,   177,   183,   197,   270,   343,   357,   295,   301,
+     325,   246,   409,   160,   169,   170,   142,   165,   166,    10,
+     118,   127,   128,   129,   142,   175,   178,   179,   180,   435,
+     437,   439,   441,    11,    17,    18,    19,    22,    23,    39,
+      40,    41,    42,    43,    47,    48,    70,    71,    83,    86,
+      93,    94,    97,   175,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   204,   206,   230,   239,   253,   263,   292,
+     318,   361,   387,   397,   398,   406,    12,    13,    16,   194,
+     195,   198,   200,   203,     7,    44,    45,    46,    58,    61,
+      62,    63,    64,    65,    66,    73,    74,    81,   175,   186,
+     187,   188,   191,   271,   272,   273,   275,   277,   279,   281,
+     283,   285,   287,   290,   291,   318,   336,   350,   361,   383,
+      59,    60,   175,   318,   344,   345,   346,   348,    20,    21,
+      71,    75,    76,    77,    78,    79,    80,    82,   175,   318,
+     358,   359,   360,   361,   363,   365,   367,   369,   371,   373,
+     375,   377,   379,   381,   292,    24,    49,    51,    52,    55,
+      56,    57,   175,   220,   302,   303,   304,   305,   306,   307,
+     308,   310,   312,   314,   315,   317,    50,    53,    54,   175,
+     220,   306,   312,   326,   327,   328,   329,   330,   332,   333,
+     334,   335,    84,    85,   175,   247,   248,   249,   251,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   175,   410,   411,   412,   413,   415,   417,
+     418,   420,   421,   422,   425,   427,   428,   429,   430,   433,
+       6,     3,     4,     8,     3,   181,   442,   436,   438,   440,
+       4,     3,     8,   193,     4,     4,   362,   205,   207,     4,
+       4,     4,     4,   264,   293,   319,   231,   388,   240,   254,
+       4,   399,   407,     3,     8,   199,   201,     4,     3,     8,
+     390,   276,   278,   280,   337,   274,   282,   284,     4,     4,
+     288,   286,   351,   384,     3,     8,   347,   349,     3,     8,
+     364,   366,   382,   370,   372,   376,   374,   380,   378,   368,
+       8,     3,     8,   309,   221,     4,   313,   311,   316,     4,
+       8,     3,   331,     4,     4,     8,     3,   250,   252,     3,
+       8,     4,   414,   416,     4,   419,     4,     4,   423,   426,
+       4,     4,     4,   431,   434,     3,     8,   160,   160,   142,
+       4,     4,     4,     4,     4,   179,     4,   145,   145,     4,
+       4,     4,   143,   143,   143,   143,     4,     4,     4,     4,
+       4,     4,     4,   143,     4,     4,   185,     4,     4,   145,
+     195,    72,   175,   220,   318,   361,   363,   365,   391,   392,
+     393,   394,   395,     4,     4,     4,     4,     4,     4,     4,
+     143,   145,     4,     4,     4,     4,   272,     4,     4,   345,
+       4,     4,     4,     4,     4,     4,     4,     4,     4,     4,
+     360,     4,     4,   143,     4,     4,     4,   145,   304,     4,
+     145,   145,   328,     4,     4,   248,   145,     4,     4,   143,
+       4,   143,   143,     4,     4,   145,   145,   145,     4,     4,
+     411,     4,     7,     7,   160,   160,   160,     7,   142,     7,
+       7,     5,     5,     5,     5,     5,     5,     7,     7,     7,
+       5,   171,    14,    15,   202,   396,     8,     3,   142,   142,
+     142,     5,   142,   142,   142,    67,    68,    69,   289,   142,
+       5,     7,   142,   162,   164,   142,   142,   171,   142,   142,
+     142,   142,   142,   142,   142,   142,   142,   142,   142,   142,
+     142,   142,   160,   142,   142,   142,    15,   112,   424,   113,
+     114,   115,   116,   117,   145,   432,   142,   160,   184,   119,
+     443,   444,   445,   194,    24,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,   175,   208,   209,   210,   213,
+     215,   217,   219,   220,   222,   223,   224,   225,   226,   228,
+     208,     7,   265,   266,   267,     7,   296,   297,   298,     7,
+     320,   321,   322,    75,    76,    77,    78,    80,   232,   233,
+     234,   235,   236,   237,   238,   285,   389,     7,   241,   242,
+     243,    87,    88,    89,    90,    91,    92,   255,   256,   257,
+     258,   259,   260,   261,   262,    95,    96,   400,   401,   402,
+     404,   410,   172,     4,   393,     7,   338,   339,   340,     7,
+     352,   353,   354,    82,   385,     8,   446,     3,     8,     8,
+     211,   214,   216,   218,     4,     4,     4,     4,     4,   227,
+     229,     3,     8,     8,   268,     6,     3,   299,     6,     3,
+     323,     6,     3,     3,     6,     3,     6,   244,     6,     3,
+       4,     4,     4,     4,     4,     4,     3,     8,   403,   405,
+       3,     8,     8,   142,   173,   174,   142,   341,     6,     3,
+     355,     6,     3,   386,     8,     4,   444,     4,     4,     4,
+       4,   143,   145,   143,   145,   143,     4,     4,   209,   271,
+     267,   302,   298,   326,   322,   233,   285,   247,   243,   143,
+     143,   143,   143,   143,   143,   256,     4,     4,   401,     6,
+       3,   344,   340,   358,   354,     4,     5,    25,    26,    27,
+      28,   212,   142,   142,   142,   142,   142,     8,     8,     8,
+       8,   142,   142,   142,     8,     8,   142,     7,   447,   448,
+     449,     3,     6,   120,   122,   123,   175,   220,   450,   451,
+     452,   453,   455,   448,   456,     4,   454,     3,     8,     4,
+     143,     4,   451,     5,   142,     7,   457,   458,   459,     3,
+       6,   121,   124,   125,   126,   460,   461,   462,   464,   465,
+     466,   458,   463,     4,     4,     4,     3,     8,     4,   145,
+     143,   143,   461,   142
   };
 
   const unsigned short int
   Dhcp4Parser::yyr1_[] =
   {
-       0,   145,   147,   146,   148,   146,   149,   146,   150,   146,
-     151,   146,   152,   146,   153,   146,   154,   146,   155,   146,
-     156,   146,   157,   146,   158,   158,   158,   158,   158,   158,
-     158,   159,   161,   160,   162,   163,   163,   164,   164,   166,
-     165,   167,   167,   168,   168,   170,   169,   171,   171,   172,
-     172,   173,   175,   174,   176,   176,   177,   177,   177,   177,
-     177,   177,   179,   178,   181,   180,   182,   182,   183,   183,
-     183,   183,   183,   183,   183,   183,   183,   183,   183,   183,
-     183,   183,   183,   183,   183,   183,   183,   183,   183,   184,
-     185,   186,   187,   188,   189,   191,   190,   192,   192,   193,
-     193,   193,   195,   194,   197,   196,   199,   198,   200,   200,
-     201,   203,   202,   205,   204,   206,   206,   207,   207,   207,
-     207,   207,   207,   207,   207,   207,   207,   207,   207,   207,
-     209,   208,   210,   210,   210,   210,   212,   211,   214,   213,
-     216,   215,   217,   219,   218,   220,   221,   222,   223,   225,
-     224,   227,   226,   229,   228,   230,   230,   231,   231,   231,
-     231,   231,   232,   233,   234,   235,   236,   238,   237,   239,
-     239,   240,   240,   242,   241,   244,   243,   245,   245,   245,
-     246,   246,   248,   247,   250,   249,   252,   251,   253,   253,
-     254,   254,   254,   254,   254,   254,   255,   256,   257,   258,
-     259,   260,   262,   261,   263,   263,   264,   264,   266,   265,
-     268,   267,   269,   269,   270,   270,   270,   270,   270,   270,
-     270,   270,   270,   270,   270,   270,   270,   270,   270,   270,
-     270,   270,   270,   270,   272,   271,   274,   273,   276,   275,
+       0,   146,   148,   147,   149,   147,   150,   147,   151,   147,
+     152,   147,   153,   147,   154,   147,   155,   147,   156,   147,
+     157,   147,   158,   147,   159,   147,   160,   160,   160,   160,
+     160,   160,   160,   161,   163,   162,   164,   165,   165,   166,
+     166,   168,   167,   169,   169,   170,   170,   172,   171,   173,
+     173,   174,   174,   175,   177,   176,   178,   178,   179,   179,
+     179,   179,   179,   179,   181,   180,   183,   182,   184,   184,
+     185,   185,   185,   185,   185,   185,   185,   185,   185,   185,
+     185,   185,   185,   185,   185,   185,   185,   185,   185,   185,
+     185,   186,   187,   188,   189,   190,   191,   193,   192,   194,
+     194,   195,   195,   195,   197,   196,   199,   198,   201,   200,
+     202,   202,   203,   205,   204,   207,   206,   208,   208,   209,
+     209,   209,   209,   209,   209,   209,   209,   209,   209,   209,
+     209,   209,   211,   210,   212,   212,   212,   212,   214,   213,
+     216,   215,   218,   217,   219,   221,   220,   222,   223,   224,
+     225,   227,   226,   229,   228,   231,   230,   232,   232,   233,
+     233,   233,   233,   233,   234,   235,   236,   237,   238,   240,
+     239,   241,   241,   242,   242,   244,   243,   246,   245,   247,
+     247,   247,   248,   248,   250,   249,   252,   251,   254,   253,
+     255,   255,   256,   256,   256,   256,   256,   256,   257,   258,
+     259,   260,   261,   262,   264,   263,   265,   265,   266,   266,
+     268,   267,   270,   269,   271,   271,   272,   272,   272,   272,
+     272,   272,   272,   272,   272,   272,   272,   272,   272,   272,
+     272,   272,   272,   272,   272,   272,   274,   273,   276,   275,
      278,   277,   280,   279,   282,   281,   284,   283,   286,   285,
-     287,   287,   287,   288,   289,   291,   290,   292,   292,   293,
-     293,   295,   294,   297,   296,   298,   298,   299,   299,   300,
-     300,   300,   300,   300,   300,   300,   300,   301,   302,   303,
-     305,   304,   307,   306,   309,   308,   310,   312,   311,   313,
-     315,   314,   316,   316,   317,   317,   319,   318,   321,   320,
-     322,   322,   323,   323,   324,   324,   324,   324,   324,   324,
-     324,   325,   327,   326,   328,   329,   330,   331,   333,   332,
-     334,   334,   335,   335,   337,   336,   339,   338,   340,   340,
-     341,   341,   341,   341,   343,   342,   345,   344,   347,   346,
-     348,   348,   349,   349,   351,   350,   353,   352,   354,   354,
-     355,   355,   356,   356,   356,   356,   356,   356,   356,   356,
-     356,   356,   356,   356,   356,   358,   357,   360,   359,   362,
+     288,   287,   289,   289,   289,   290,   291,   293,   292,   295,
+     294,   296,   296,   297,   297,   299,   298,   301,   300,   302,
+     302,   303,   303,   304,   304,   304,   304,   304,   304,   304,
+     304,   305,   306,   307,   309,   308,   311,   310,   313,   312,
+     314,   316,   315,   317,   319,   318,   320,   320,   321,   321,
+     323,   322,   325,   324,   326,   326,   327,   327,   328,   328,
+     328,   328,   328,   328,   328,   329,   331,   330,   332,   333,
+     334,   335,   337,   336,   338,   338,   339,   339,   341,   340,
+     343,   342,   344,   344,   345,   345,   345,   345,   347,   346,
+     349,   348,   351,   350,   352,   352,   353,   353,   355,   354,
+     357,   356,   358,   358,   359,   359,   360,   360,   360,   360,
+     360,   360,   360,   360,   360,   360,   360,   360,   360,   362,
      361,   364,   363,   366,   365,   368,   367,   370,   369,   372,
      371,   374,   373,   376,   375,   378,   377,   380,   379,   382,
-     381,   384,   383,   385,   385,   386,   283,   387,   387,   388,
-     388,   389,   389,   389,   389,   389,   389,   389,   390,   392,
-     391,   393,   395,   394,   396,   396,   397,   397,   399,   398,
-     401,   400,   403,   402,   405,   404,   406,   406,   407,   407,
-     407,   407,   407,   407,   407,   407,   407,   407,   407,   407,
-     407,   407,   407,   408,   410,   409,   412,   411,   413,   415,
-     414,   416,   417,   419,   418,   420,   420,   422,   421,   423,
-     424,   425,   427,   426,   428,   428,   428,   428,   428,   430,
-     429,   432,   431,   434,   433,   436,   435,   438,   437,   439,
-     439,   440,   442,   441,   443,   443,   445,   444,   446,   446,
-     447,   447,   447,   447,   447,   448,   450,   449,   452,   451,
-     453,   453,   455,   454,   456,   456,   457,   457,   457,   457,
-     459,   458,   460,   461,   462
+     381,   384,   383,   386,   385,   388,   387,   389,   389,   390,
+     285,   391,   391,   392,   392,   393,   393,   393,   393,   393,
+     393,   393,   394,   396,   395,   397,   399,   398,   400,   400,
+     401,   401,   403,   402,   405,   404,   407,   406,   409,   408,
+     410,   410,   411,   411,   411,   411,   411,   411,   411,   411,
+     411,   411,   411,   411,   411,   411,   411,   412,   414,   413,
+     416,   415,   417,   419,   418,   420,   421,   423,   422,   424,
+     424,   426,   425,   427,   428,   429,   431,   430,   432,   432,
+     432,   432,   432,   434,   433,   436,   435,   438,   437,   440,
+     439,   442,   441,   443,   443,   444,   446,   445,   447,   447,
+     449,   448,   450,   450,   451,   451,   451,   451,   451,   452,
+     454,   453,   456,   455,   457,   457,   459,   458,   460,   460,
+     461,   461,   461,   461,   463,   462,   464,   465,   466
   };
 
   const unsigned char
@@ -3914,56 +3982,56 @@ namespace isc { namespace dhcp {
   {
        0,     2,     0,     3,     0,     3,     0,     3,     0,     3,
        0,     3,     0,     3,     0,     3,     0,     3,     0,     3,
-       0,     3,     0,     3,     1,     1,     1,     1,     1,     1,
-       1,     1,     0,     4,     1,     0,     1,     3,     5,     0,
-       4,     0,     1,     1,     3,     0,     4,     0,     1,     1,
-       3,     2,     0,     4,     1,     3,     1,     1,     1,     1,
-       1,     1,     0,     6,     0,     4,     1,     3,     1,     1,
+       0,     3,     0,     3,     0,     3,     1,     1,     1,     1,
+       1,     1,     1,     1,     0,     4,     1,     0,     1,     3,
+       5,     0,     4,     0,     1,     1,     3,     0,     4,     0,
+       1,     1,     3,     2,     0,     4,     1,     3,     1,     1,
+       1,     1,     1,     1,     0,     6,     0,     4,     1,     3,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
-       3,     3,     3,     3,     3,     0,     6,     1,     3,     1,
-       1,     1,     0,     4,     0,     4,     0,     4,     1,     1,
-       3,     0,     6,     0,     6,     1,     3,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       0,     4,     1,     1,     1,     1,     0,     4,     0,     4,
-       0,     4,     3,     0,     4,     3,     3,     3,     3,     0,
-       4,     0,     4,     0,     6,     1,     3,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     0,     6,     0,
-       1,     1,     3,     0,     4,     0,     4,     1,     3,     1,
-       1,     1,     0,     4,     0,     4,     0,     6,     1,     3,
-       1,     1,     1,     1,     1,     1,     3,     3,     3,     3,
-       3,     3,     0,     6,     0,     1,     1,     3,     0,     4,
-       0,     4,     1,     3,     1,     1,     1,     1,     1,     1,
+       1,     3,     3,     3,     3,     3,     3,     0,     6,     1,
+       3,     1,     1,     1,     0,     4,     0,     4,     0,     4,
+       1,     1,     3,     0,     6,     0,     6,     1,     3,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     0,     4,     0,     4,     0,     4,
+       1,     1,     0,     4,     1,     1,     1,     1,     0,     4,
+       0,     4,     0,     4,     3,     0,     4,     3,     3,     3,
+       3,     0,     4,     0,     4,     0,     6,     1,     3,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
+       6,     0,     1,     1,     3,     0,     4,     0,     4,     1,
+       3,     1,     1,     1,     0,     4,     0,     4,     0,     6,
+       1,     3,     1,     1,     1,     1,     1,     1,     3,     3,
+       3,     3,     3,     3,     0,     6,     0,     1,     1,     3,
+       0,     4,     0,     4,     1,     3,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     0,     4,     0,     4,
        0,     4,     0,     4,     0,     4,     0,     4,     0,     4,
-       1,     1,     1,     3,     3,     0,     6,     0,     1,     1,
-       3,     0,     4,     0,     4,     0,     1,     1,     3,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     3,     1,
-       0,     4,     0,     4,     0,     4,     1,     0,     4,     3,
-       0,     6,     0,     1,     1,     3,     0,     4,     0,     4,
-       0,     1,     1,     3,     1,     1,     1,     1,     1,     1,
-       1,     1,     0,     4,     1,     1,     3,     3,     0,     6,
-       0,     1,     1,     3,     0,     4,     0,     4,     1,     3,
-       1,     1,     1,     1,     0,     4,     0,     4,     0,     6,
-       0,     1,     1,     3,     0,     4,     0,     4,     0,     1,
-       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     0,     4,     0,     4,     0,
+       0,     4,     1,     1,     1,     3,     3,     0,     6,     0,
+       4,     0,     1,     1,     3,     0,     4,     0,     4,     0,
+       1,     1,     3,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     3,     1,     0,     4,     0,     4,     0,     4,
+       1,     0,     4,     3,     0,     6,     0,     1,     1,     3,
+       0,     4,     0,     4,     0,     1,     1,     3,     1,     1,
+       1,     1,     1,     1,     1,     1,     0,     4,     1,     1,
+       3,     3,     0,     6,     0,     1,     1,     3,     0,     4,
+       0,     4,     1,     3,     1,     1,     1,     1,     0,     4,
+       0,     4,     0,     6,     0,     1,     1,     3,     0,     4,
+       0,     4,     0,     1,     1,     3,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
        4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
-       4,     0,     4,     0,     4,     0,     4,     0,     6,     0,
-       4,     0,     6,     1,     3,     0,     4,     0,     1,     1,
-       3,     1,     1,     1,     1,     1,     1,     1,     1,     0,
-       4,     3,     0,     6,     1,     3,     1,     1,     0,     4,
-       0,     4,     0,     6,     0,     4,     1,     3,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     3,     0,     4,     0,     4,     3,     0,
-       4,     3,     3,     0,     4,     1,     1,     0,     4,     3,
-       3,     3,     0,     4,     1,     1,     1,     1,     1,     0,
-       4,     0,     4,     0,     4,     0,     4,     0,     6,     1,
-       3,     1,     0,     6,     1,     3,     0,     4,     1,     3,
-       1,     1,     1,     1,     1,     3,     0,     4,     0,     6,
-       1,     3,     0,     4,     1,     3,     1,     1,     1,     1,
-       0,     4,     3,     3,     3
+       4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
+       4,     0,     6,     0,     4,     0,     6,     1,     3,     0,
+       4,     0,     1,     1,     3,     1,     1,     1,     1,     1,
+       1,     1,     1,     0,     4,     3,     0,     6,     1,     3,
+       1,     1,     0,     4,     0,     4,     0,     6,     0,     4,
+       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     3,     0,     4,
+       0,     4,     3,     0,     4,     3,     3,     0,     4,     1,
+       1,     0,     4,     3,     3,     3,     0,     4,     1,     1,
+       1,     1,     1,     0,     4,     0,     4,     0,     4,     0,
+       4,     0,     6,     1,     3,     1,     0,     6,     1,     3,
+       0,     4,     1,     3,     1,     1,     1,     1,     1,     3,
+       0,     4,     0,     6,     1,     3,     0,     4,     1,     3,
+       1,     1,     1,     1,     0,     4,     3,     3,     3
   };
 
 
@@ -4011,84 +4079,84 @@ namespace isc { namespace dhcp {
   "\"debuglevel\"", "\"severity\"", "\"flush\"", "\"maxsize\"",
   "\"maxver\"", "\"Dhcp6\"", "\"DhcpDdns\"", "\"Control-agent\"",
   "TOPLEVEL_JSON", "TOPLEVEL_DHCP4", "SUB_DHCP4", "SUB_INTERFACES4",
-  "SUB_SUBNET4", "SUB_POOL4", "SUB_RESERVATION", "SUB_OPTION_DEF",
-  "SUB_OPTION_DATA", "SUB_HOOKS_LIBRARY", "SUB_DHCP_DDNS",
-  "\"constant string\"", "\"integer\"", "\"floating point\"",
-  "\"boolean\"", "$accept", "start", "$@1", "$@2", "$@3", "$@4", "$@5",
-  "$@6", "$@7", "$@8", "$@9", "$@10", "$@11", "value", "sub_json", "map2",
-  "$@12", "map_value", "map_content", "not_empty_map", "list_generic",
-  "$@13", "list_content", "not_empty_list", "list_strings", "$@14",
-  "list_strings_content", "not_empty_list_strings", "unknown_map_entry",
-  "syntax_map", "$@15", "global_objects", "global_object", "dhcp4_object",
-  "$@16", "sub_dhcp4", "$@17", "global_params", "global_param",
-  "valid_lifetime", "renew_timer", "rebind_timer",
-  "decline_probation_period", "echo_client_id", "match_client_id",
-  "interfaces_config", "$@18", "interfaces_config_params",
-  "interfaces_config_param", "sub_interfaces4", "$@19", "interfaces_list",
-  "$@20", "dhcp_socket_type", "$@21", "socket_type", "re_detect",
-  "lease_database", "$@22", "hosts_database", "$@23",
-  "database_map_params", "database_map_param", "database_type", "$@24",
-  "db_type", "user", "$@25", "password", "$@26", "host", "$@27", "port",
-  "name", "$@28", "persist", "lfc_interval", "readonly", "connect_timeout",
-  "contact_points", "$@29", "keyspace", "$@30",
-  "host_reservation_identifiers", "$@31",
+  "SUB_SUBNET4", "SUB_POOL4", "SUB_RESERVATION", "SUB_OPTION_DEFS",
+  "SUB_OPTION_DEF", "SUB_OPTION_DATA", "SUB_HOOKS_LIBRARY",
+  "SUB_DHCP_DDNS", "\"constant string\"", "\"integer\"",
+  "\"floating point\"", "\"boolean\"", "$accept", "start", "$@1", "$@2",
+  "$@3", "$@4", "$@5", "$@6", "$@7", "$@8", "$@9", "$@10", "$@11", "$@12",
+  "value", "sub_json", "map2", "$@13", "map_value", "map_content",
+  "not_empty_map", "list_generic", "$@14", "list_content",
+  "not_empty_list", "list_strings", "$@15", "list_strings_content",
+  "not_empty_list_strings", "unknown_map_entry", "syntax_map", "$@16",
+  "global_objects", "global_object", "dhcp4_object", "$@17", "sub_dhcp4",
+  "$@18", "global_params", "global_param", "valid_lifetime", "renew_timer",
+  "rebind_timer", "decline_probation_period", "echo_client_id",
+  "match_client_id", "interfaces_config", "$@19",
+  "interfaces_config_params", "interfaces_config_param", "sub_interfaces4",
+  "$@20", "interfaces_list", "$@21", "dhcp_socket_type", "$@22",
+  "socket_type", "re_detect", "lease_database", "$@23", "hosts_database",
+  "$@24", "database_map_params", "database_map_param", "database_type",
+  "$@25", "db_type", "user", "$@26", "password", "$@27", "host", "$@28",
+  "port", "name", "$@29", "persist", "lfc_interval", "readonly",
+  "connect_timeout", "contact_points", "$@30", "keyspace", "$@31",
+  "host_reservation_identifiers", "$@32",
   "host_reservation_identifiers_list", "host_reservation_identifier",
   "duid_id", "hw_address_id", "circuit_id", "client_id", "flex_id",
-  "hooks_libraries", "$@32", "hooks_libraries_list",
-  "not_empty_hooks_libraries_list", "hooks_library", "$@33",
-  "sub_hooks_library", "$@34", "hooks_params", "hooks_param", "library",
-  "$@35", "parameters", "$@36", "expired_leases_processing", "$@37",
+  "hooks_libraries", "$@33", "hooks_libraries_list",
+  "not_empty_hooks_libraries_list", "hooks_library", "$@34",
+  "sub_hooks_library", "$@35", "hooks_params", "hooks_param", "library",
+  "$@36", "parameters", "$@37", "expired_leases_processing", "$@38",
   "expired_leases_params", "expired_leases_param",
   "reclaim_timer_wait_time", "flush_reclaimed_timer_wait_time",
   "hold_reclaimed_time", "max_reclaim_leases", "max_reclaim_time",
-  "unwarned_reclaim_cycles", "subnet4_list", "$@38",
-  "subnet4_list_content", "not_empty_subnet4_list", "subnet4", "$@39",
-  "sub_subnet4", "$@40", "subnet4_params", "subnet4_param", "subnet",
-  "$@41", "subnet_4o6_interface", "$@42", "subnet_4o6_interface_id",
-  "$@43", "subnet_4o6_subnet", "$@44", "interface", "$@45", "interface_id",
-  "$@46", "client_class", "$@47", "reservation_mode", "$@48", "hr_mode",
-  "id", "rapid_commit", "option_def_list", "$@49",
-  "option_def_list_content", "not_empty_option_def_list",
-  "option_def_entry", "$@50", "sub_option_def", "$@51",
+  "unwarned_reclaim_cycles", "subnet4_list", "$@39",
+  "subnet4_list_content", "not_empty_subnet4_list", "subnet4", "$@40",
+  "sub_subnet4", "$@41", "subnet4_params", "subnet4_param", "subnet",
+  "$@42", "subnet_4o6_interface", "$@43", "subnet_4o6_interface_id",
+  "$@44", "subnet_4o6_subnet", "$@45", "interface", "$@46", "interface_id",
+  "$@47", "client_class", "$@48", "reservation_mode", "$@49", "hr_mode",
+  "id", "rapid_commit", "option_def_list", "$@50", "sub_option_def_list",
+  "$@51", "option_def_list_content", "not_empty_option_def_list",
+  "option_def_entry", "$@52", "sub_option_def", "$@53",
   "option_def_params", "not_empty_option_def_params", "option_def_param",
-  "option_def_name", "code", "option_def_code", "option_def_type", "$@52",
-  "option_def_record_types", "$@53", "space", "$@54", "option_def_space",
-  "option_def_encapsulate", "$@55", "option_def_array", "option_data_list",
-  "$@56", "option_data_list_content", "not_empty_option_data_list",
-  "option_data_entry", "$@57", "sub_option_data", "$@58",
+  "option_def_name", "code", "option_def_code", "option_def_type", "$@54",
+  "option_def_record_types", "$@55", "space", "$@56", "option_def_space",
+  "option_def_encapsulate", "$@57", "option_def_array", "option_data_list",
+  "$@58", "option_data_list_content", "not_empty_option_data_list",
+  "option_data_entry", "$@59", "sub_option_data", "$@60",
   "option_data_params", "not_empty_option_data_params",
-  "option_data_param", "option_data_name", "option_data_data", "$@59",
+  "option_data_param", "option_data_name", "option_data_data", "$@61",
   "option_data_code", "option_data_space", "option_data_csv_format",
-  "option_data_always_send", "pools_list", "$@60", "pools_list_content",
-  "not_empty_pools_list", "pool_list_entry", "$@61", "sub_pool4", "$@62",
-  "pool_params", "pool_param", "pool_entry", "$@63", "user_context",
-  "$@64", "reservations", "$@65", "reservations_list",
-  "not_empty_reservations_list", "reservation", "$@66", "sub_reservation",
-  "$@67", "reservation_params", "not_empty_reservation_params",
-  "reservation_param", "next_server", "$@68", "server_hostname", "$@69",
-  "boot_file_name", "$@70", "ip_address", "$@71", "duid", "$@72",
-  "hw_address", "$@73", "client_id_value", "$@74", "circuit_id_value",
-  "$@75", "flex_id_value", "$@76", "hostname", "$@77",
-  "reservation_client_classes", "$@78", "relay", "$@79", "relay_map",
-  "$@80", "client_classes", "$@81", "client_classes_list", "$@82",
+  "option_data_always_send", "pools_list", "$@62", "pools_list_content",
+  "not_empty_pools_list", "pool_list_entry", "$@63", "sub_pool4", "$@64",
+  "pool_params", "pool_param", "pool_entry", "$@65", "user_context",
+  "$@66", "reservations", "$@67", "reservations_list",
+  "not_empty_reservations_list", "reservation", "$@68", "sub_reservation",
+  "$@69", "reservation_params", "not_empty_reservation_params",
+  "reservation_param", "next_server", "$@70", "server_hostname", "$@71",
+  "boot_file_name", "$@72", "ip_address", "$@73", "duid", "$@74",
+  "hw_address", "$@75", "client_id_value", "$@76", "circuit_id_value",
+  "$@77", "flex_id_value", "$@78", "hostname", "$@79",
+  "reservation_client_classes", "$@80", "relay", "$@81", "relay_map",
+  "$@82", "client_classes", "$@83", "client_classes_list", "$@84",
   "client_class_params", "not_empty_client_class_params",
-  "client_class_param", "client_class_name", "client_class_test", "$@83",
-  "dhcp4o6_port", "control_socket", "$@84", "control_socket_params",
-  "control_socket_param", "control_socket_type", "$@85",
-  "control_socket_name", "$@86", "dhcp_ddns", "$@87", "sub_dhcp_ddns",
-  "$@88", "dhcp_ddns_params", "dhcp_ddns_param", "enable_updates",
-  "qualifying_suffix", "$@89", "server_ip", "$@90", "server_port",
-  "sender_ip", "$@91", "sender_port", "max_queue_size", "ncr_protocol",
-  "$@92", "ncr_protocol_value", "ncr_format", "$@93",
+  "client_class_param", "client_class_name", "client_class_test", "$@85",
+  "dhcp4o6_port", "control_socket", "$@86", "control_socket_params",
+  "control_socket_param", "control_socket_type", "$@87",
+  "control_socket_name", "$@88", "dhcp_ddns", "$@89", "sub_dhcp_ddns",
+  "$@90", "dhcp_ddns_params", "dhcp_ddns_param", "enable_updates",
+  "qualifying_suffix", "$@91", "server_ip", "$@92", "server_port",
+  "sender_ip", "$@93", "sender_port", "max_queue_size", "ncr_protocol",
+  "$@94", "ncr_protocol_value", "ncr_format", "$@95",
   "always_include_fqdn", "override_no_update", "override_client_update",
-  "replace_client_name", "$@94", "replace_client_name_value",
-  "generated_prefix", "$@95", "dhcp6_json_object", "$@96",
-  "dhcpddns_json_object", "$@97", "control_agent_json_object", "$@98",
-  "logging_object", "$@99", "logging_params", "logging_param", "loggers",
-  "$@100", "loggers_entries", "logger_entry", "$@101", "logger_params",
-  "logger_param", "debuglevel", "severity", "$@102", "output_options_list",
-  "$@103", "output_options_list_content", "output_entry", "$@104",
-  "output_params_list", "output_params", "output", "$@105", "flush",
+  "replace_client_name", "$@96", "replace_client_name_value",
+  "generated_prefix", "$@97", "dhcp6_json_object", "$@98",
+  "dhcpddns_json_object", "$@99", "control_agent_json_object", "$@100",
+  "logging_object", "$@101", "logging_params", "logging_param", "loggers",
+  "$@102", "loggers_entries", "logger_entry", "$@103", "logger_params",
+  "logger_param", "debuglevel", "severity", "$@104", "output_options_list",
+  "$@105", "output_options_list_content", "output_entry", "$@106",
+  "output_params_list", "output_params", "output", "$@107", "flush",
   "maxsize", "maxver", YY_NULLPTR
   };
 
@@ -4096,58 +4164,58 @@ namespace isc { namespace dhcp {
   const unsigned short int
   Dhcp4Parser::yyrline_[] =
   {
-       0,   226,   226,   226,   227,   227,   228,   228,   229,   229,
-     230,   230,   231,   231,   232,   232,   233,   233,   234,   234,
-     235,   235,   236,   236,   244,   245,   246,   247,   248,   249,
-     250,   253,   258,   258,   269,   272,   273,   276,   280,   287,
-     287,   294,   295,   298,   302,   309,   309,   316,   317,   320,
-     324,   335,   345,   345,   358,   359,   363,   364,   365,   366,
-     367,   368,   371,   371,   388,   388,   396,   397,   402,   403,
-     404,   405,   406,   407,   408,   409,   410,   411,   412,   413,
-     414,   415,   416,   417,   418,   419,   420,   421,   422,   425,
-     430,   435,   440,   445,   450,   456,   456,   466,   467,   470,
-     471,   472,   475,   475,   483,   483,   493,   493,   500,   501,
-     504,   510,   510,   520,   520,   530,   531,   534,   535,   536,
-     537,   538,   539,   540,   541,   542,   543,   544,   545,   546,
-     549,   549,   556,   557,   558,   559,   562,   562,   570,   570,
-     578,   578,   586,   591,   591,   599,   604,   609,   614,   619,
-     619,   627,   627,   636,   636,   646,   647,   650,   651,   652,
-     653,   654,   657,   662,   667,   672,   677,   682,   682,   692,
-     693,   696,   697,   700,   700,   708,   708,   716,   717,   718,
-     721,   722,   725,   725,   733,   733,   741,   741,   751,   752,
-     755,   756,   757,   758,   759,   760,   763,   768,   773,   778,
-     783,   788,   796,   796,   809,   810,   813,   814,   821,   821,
-     844,   844,   853,   854,   858,   859,   860,   861,   862,   863,
-     864,   865,   866,   867,   868,   869,   870,   871,   872,   873,
-     874,   875,   876,   877,   880,   880,   888,   888,   896,   896,
-     904,   904,   912,   912,   920,   920,   928,   928,   936,   936,
-     943,   944,   945,   948,   953,   962,   962,   974,   975,   978,
-     979,   984,   984,   995,   995,  1005,  1006,  1009,  1010,  1013,
-    1014,  1015,  1016,  1017,  1018,  1019,  1020,  1023,  1025,  1030,
-    1032,  1032,  1040,  1040,  1048,  1048,  1056,  1058,  1058,  1066,
-    1075,  1075,  1087,  1088,  1093,  1094,  1099,  1099,  1110,  1110,
-    1121,  1122,  1127,  1128,  1133,  1134,  1135,  1136,  1137,  1138,
-    1139,  1142,  1144,  1144,  1152,  1154,  1156,  1161,  1169,  1169,
-    1181,  1182,  1185,  1186,  1189,  1189,  1197,  1197,  1205,  1206,
-    1209,  1210,  1211,  1212,  1215,  1215,  1223,  1223,  1233,  1233,
-    1243,  1244,  1247,  1248,  1251,  1251,  1259,  1259,  1267,  1268,
-    1271,  1272,  1276,  1277,  1278,  1279,  1280,  1281,  1282,  1283,
-    1284,  1285,  1286,  1287,  1288,  1291,  1291,  1299,  1299,  1307,
-    1307,  1315,  1315,  1323,  1323,  1331,  1331,  1339,  1339,  1347,
-    1347,  1355,  1355,  1363,  1363,  1371,  1371,  1384,  1384,  1394,
-    1394,  1405,  1405,  1415,  1416,  1419,  1419,  1427,  1428,  1431,
-    1432,  1435,  1436,  1437,  1438,  1439,  1440,  1441,  1444,  1446,
-    1446,  1458,  1465,  1465,  1475,  1476,  1479,  1480,  1483,  1483,
-    1491,  1491,  1501,  1501,  1511,  1511,  1519,  1520,  1523,  1524,
-    1525,  1526,  1527,  1528,  1529,  1530,  1531,  1532,  1533,  1534,
-    1535,  1536,  1537,  1540,  1545,  1545,  1553,  1553,  1561,  1566,
-    1566,  1574,  1579,  1584,  1584,  1592,  1593,  1596,  1596,  1604,
-    1609,  1614,  1619,  1619,  1627,  1630,  1633,  1636,  1639,  1645,
-    1645,  1655,  1655,  1662,  1662,  1669,  1669,  1681,  1681,  1694,
-    1695,  1699,  1703,  1703,  1715,  1716,  1720,  1720,  1728,  1729,
-    1732,  1733,  1734,  1735,  1736,  1739,  1744,  1744,  1752,  1752,
-    1762,  1763,  1766,  1766,  1774,  1775,  1778,  1779,  1780,  1781,
-    1784,  1784,  1792,  1797,  1802
+       0,   227,   227,   227,   228,   228,   229,   229,   230,   230,
+     231,   231,   232,   232,   233,   233,   234,   234,   235,   235,
+     236,   236,   237,   237,   238,   238,   246,   247,   248,   249,
+     250,   251,   252,   255,   260,   260,   271,   274,   275,   278,
+     282,   289,   289,   296,   297,   300,   304,   311,   311,   318,
+     319,   322,   326,   337,   347,   347,   363,   364,   368,   369,
+     370,   371,   372,   373,   376,   376,   391,   391,   400,   401,
+     406,   407,   408,   409,   410,   411,   412,   413,   414,   415,
+     416,   417,   418,   419,   420,   421,   422,   423,   424,   425,
+     426,   429,   434,   439,   444,   449,   454,   460,   460,   471,
+     472,   475,   476,   477,   480,   480,   489,   489,   499,   499,
+     506,   507,   510,   516,   516,   528,   528,   540,   541,   544,
+     545,   546,   547,   548,   549,   550,   551,   552,   553,   554,
+     555,   556,   559,   559,   566,   567,   568,   569,   572,   572,
+     580,   580,   588,   588,   596,   601,   601,   609,   614,   619,
+     624,   629,   629,   637,   637,   646,   646,   656,   657,   660,
+     661,   662,   663,   664,   667,   672,   677,   682,   687,   692,
+     692,   702,   703,   706,   707,   710,   710,   720,   720,   730,
+     731,   732,   735,   736,   739,   739,   747,   747,   755,   755,
+     766,   767,   770,   771,   772,   773,   774,   775,   778,   783,
+     788,   793,   798,   803,   811,   811,   824,   825,   828,   829,
+     836,   836,   862,   862,   873,   874,   878,   879,   880,   881,
+     882,   883,   884,   885,   886,   887,   888,   889,   890,   891,
+     892,   893,   894,   895,   896,   897,   900,   900,   908,   908,
+     916,   916,   924,   924,   932,   932,   940,   940,   948,   948,
+     956,   956,   963,   964,   965,   968,   973,   982,   982,   995,
+     995,  1004,  1005,  1008,  1009,  1014,  1014,  1029,  1029,  1043,
+    1044,  1047,  1048,  1051,  1052,  1053,  1054,  1055,  1056,  1057,
+    1058,  1061,  1063,  1068,  1070,  1070,  1078,  1078,  1086,  1086,
+    1094,  1096,  1096,  1104,  1113,  1113,  1125,  1126,  1131,  1132,
+    1137,  1137,  1149,  1149,  1161,  1162,  1167,  1168,  1173,  1174,
+    1175,  1176,  1177,  1178,  1179,  1182,  1184,  1184,  1192,  1194,
+    1196,  1201,  1209,  1209,  1221,  1222,  1225,  1226,  1229,  1229,
+    1239,  1239,  1249,  1250,  1253,  1254,  1255,  1256,  1259,  1259,
+    1267,  1267,  1277,  1277,  1287,  1288,  1291,  1292,  1295,  1295,
+    1304,  1304,  1313,  1314,  1317,  1318,  1322,  1323,  1324,  1325,
+    1326,  1327,  1328,  1329,  1330,  1331,  1332,  1333,  1334,  1337,
+    1337,  1345,  1345,  1353,  1353,  1361,  1361,  1369,  1369,  1377,
+    1377,  1385,  1385,  1393,  1393,  1401,  1401,  1409,  1409,  1417,
+    1417,  1430,  1430,  1440,  1440,  1451,  1451,  1461,  1462,  1465,
+    1465,  1475,  1476,  1479,  1480,  1483,  1484,  1485,  1486,  1487,
+    1488,  1489,  1492,  1494,  1494,  1506,  1513,  1513,  1523,  1524,
+    1527,  1528,  1531,  1531,  1539,  1539,  1549,  1549,  1561,  1561,
+    1571,  1572,  1575,  1576,  1577,  1578,  1579,  1580,  1581,  1582,
+    1583,  1584,  1585,  1586,  1587,  1588,  1589,  1592,  1597,  1597,
+    1605,  1605,  1613,  1618,  1618,  1626,  1631,  1636,  1636,  1644,
+    1645,  1648,  1648,  1656,  1661,  1666,  1671,  1671,  1679,  1682,
+    1685,  1688,  1691,  1697,  1697,  1707,  1707,  1714,  1714,  1721,
+    1721,  1733,  1733,  1746,  1747,  1751,  1755,  1755,  1767,  1768,
+    1772,  1772,  1780,  1781,  1784,  1785,  1786,  1787,  1788,  1791,
+    1796,  1796,  1804,  1804,  1814,  1815,  1818,  1818,  1826,  1827,
+    1830,  1831,  1832,  1833,  1836,  1836,  1844,  1849,  1854
   };
 
   // Print the state stack on the debug stream.
@@ -4182,8 +4250,8 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp4_parser.yy" // lalr1.cc:1167
 } } // isc::dhcp
-#line 4186 "dhcp4_parser.cc" // lalr1.cc:1167
-#line 1807 "dhcp4_parser.yy" // lalr1.cc:1168
+#line 4254 "dhcp4_parser.cc" // lalr1.cc:1167
+#line 1859 "dhcp4_parser.yy" // lalr1.cc:1168
 
 
 void
index 6e948ea3d2fdd418e8472196f247ff5930da6c97..c0fa4e5059b5569c6988dcb2e93b64541d84c699 100644 (file)
@@ -481,14 +481,15 @@ namespace isc { namespace dhcp {
         TOKEN_SUB_SUBNET4 = 389,
         TOKEN_SUB_POOL4 = 390,
         TOKEN_SUB_RESERVATION = 391,
-        TOKEN_SUB_OPTION_DEF = 392,
-        TOKEN_SUB_OPTION_DATA = 393,
-        TOKEN_SUB_HOOKS_LIBRARY = 394,
-        TOKEN_SUB_DHCP_DDNS = 395,
-        TOKEN_STRING = 396,
-        TOKEN_INTEGER = 397,
-        TOKEN_FLOAT = 398,
-        TOKEN_BOOLEAN = 399
+        TOKEN_SUB_OPTION_DEFS = 392,
+        TOKEN_SUB_OPTION_DEF = 393,
+        TOKEN_SUB_OPTION_DATA = 394,
+        TOKEN_SUB_HOOKS_LIBRARY = 395,
+        TOKEN_SUB_DHCP_DDNS = 396,
+        TOKEN_STRING = 397,
+        TOKEN_INTEGER = 398,
+        TOKEN_FLOAT = 399,
+        TOKEN_BOOLEAN = 400
       };
     };
 
@@ -1143,6 +1144,10 @@ namespace isc { namespace dhcp {
     symbol_type
     make_SUB_RESERVATION (const location_type& l);
 
+    static inline
+    symbol_type
+    make_SUB_OPTION_DEFS (const location_type& l);
+
     static inline
     symbol_type
     make_SUB_OPTION_DEF (const location_type& l);
@@ -1380,12 +1385,12 @@ namespace isc { namespace dhcp {
     enum
     {
       yyeof_ = 0,
-      yylast_ = 756,     ///< Last index in yytable_.
-      yynnts_ = 318,  ///< Number of nonterminal symbols.
-      yyfinal_ = 24, ///< Termination state number.
+      yylast_ = 755,     ///< Last index in yytable_.
+      yynnts_ = 321,  ///< Number of nonterminal symbols.
+      yyfinal_ = 26, ///< Termination state number.
       yyterror_ = 1,
       yyerrcode_ = 256,
-      yyntokens_ = 145  ///< Number of tokens.
+      yyntokens_ = 146  ///< Number of tokens.
     };
 
 
@@ -1441,9 +1446,10 @@ namespace isc { namespace dhcp {
      105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
      115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145
     };
-    const unsigned int user_token_number_max_ = 399;
+    const unsigned int user_token_number_max_ = 400;
     const token_number_type undef_token_ = 2;
 
     if (static_cast<int>(t) <= yyeof_)
@@ -1476,29 +1482,29 @@ namespace isc { namespace dhcp {
   {
       switch (other.type_get ())
     {
-      case 158: // value
-      case 162: // map_value
-      case 200: // socket_type
-      case 210: // db_type
-      case 287: // hr_mode
-      case 420: // ncr_protocol_value
-      case 428: // replace_client_name_value
+      case 160: // value
+      case 164: // map_value
+      case 202: // socket_type
+      case 212: // db_type
+      case 289: // hr_mode
+      case 424: // ncr_protocol_value
+      case 432: // replace_client_name_value
         value.copy< ElementPtr > (other.value);
         break;
 
-      case 144: // "boolean"
+      case 145: // "boolean"
         value.copy< bool > (other.value);
         break;
 
-      case 143: // "floating point"
+      case 144: // "floating point"
         value.copy< double > (other.value);
         break;
 
-      case 142: // "integer"
+      case 143: // "integer"
         value.copy< int64_t > (other.value);
         break;
 
-      case 141: // "constant string"
+      case 142: // "constant string"
         value.copy< std::string > (other.value);
         break;
 
@@ -1519,29 +1525,29 @@ namespace isc { namespace dhcp {
     (void) v;
       switch (this->type_get ())
     {
-      case 158: // value
-      case 162: // map_value
-      case 200: // socket_type
-      case 210: // db_type
-      case 287: // hr_mode
-      case 420: // ncr_protocol_value
-      case 428: // replace_client_name_value
+      case 160: // value
+      case 164: // map_value
+      case 202: // socket_type
+      case 212: // db_type
+      case 289: // hr_mode
+      case 424: // ncr_protocol_value
+      case 432: // replace_client_name_value
         value.copy< ElementPtr > (v);
         break;
 
-      case 144: // "boolean"
+      case 145: // "boolean"
         value.copy< bool > (v);
         break;
 
-      case 143: // "floating point"
+      case 144: // "floating point"
         value.copy< double > (v);
         break;
 
-      case 142: // "integer"
+      case 143: // "integer"
         value.copy< int64_t > (v);
         break;
 
-      case 141: // "constant string"
+      case 142: // "constant string"
         value.copy< std::string > (v);
         break;
 
@@ -1621,29 +1627,29 @@ namespace isc { namespace dhcp {
     // Type destructor.
     switch (yytype)
     {
-      case 158: // value
-      case 162: // map_value
-      case 200: // socket_type
-      case 210: // db_type
-      case 287: // hr_mode
-      case 420: // ncr_protocol_value
-      case 428: // replace_client_name_value
+      case 160: // value
+      case 164: // map_value
+      case 202: // socket_type
+      case 212: // db_type
+      case 289: // hr_mode
+      case 424: // ncr_protocol_value
+      case 432: // replace_client_name_value
         value.template destroy< ElementPtr > ();
         break;
 
-      case 144: // "boolean"
+      case 145: // "boolean"
         value.template destroy< bool > ();
         break;
 
-      case 143: // "floating point"
+      case 144: // "floating point"
         value.template destroy< double > ();
         break;
 
-      case 142: // "integer"
+      case 143: // "integer"
         value.template destroy< int64_t > ();
         break;
 
-      case 141: // "constant string"
+      case 142: // "constant string"
         value.template destroy< std::string > ();
         break;
 
@@ -1670,29 +1676,29 @@ namespace isc { namespace dhcp {
     super_type::move(s);
       switch (this->type_get ())
     {
-      case 158: // value
-      case 162: // map_value
-      case 200: // socket_type
-      case 210: // db_type
-      case 287: // hr_mode
-      case 420: // ncr_protocol_value
-      case 428: // replace_client_name_value
+      case 160: // value
+      case 164: // map_value
+      case 202: // socket_type
+      case 212: // db_type
+      case 289: // hr_mode
+      case 424: // ncr_protocol_value
+      case 432: // replace_client_name_value
         value.move< ElementPtr > (s.value);
         break;
 
-      case 144: // "boolean"
+      case 145: // "boolean"
         value.move< bool > (s.value);
         break;
 
-      case 143: // "floating point"
+      case 144: // "floating point"
         value.move< double > (s.value);
         break;
 
-      case 142: // "integer"
+      case 143: // "integer"
         value.move< int64_t > (s.value);
         break;
 
-      case 141: // "constant string"
+      case 142: // "constant string"
         value.move< std::string > (s.value);
         break;
 
@@ -1765,7 +1771,7 @@ namespace isc { namespace dhcp {
      365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
      385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
-     395,   396,   397,   398,   399
+     395,   396,   397,   398,   399,   400
     };
     return static_cast<token_type> (yytoken_number_[type]);
   }
@@ -2580,6 +2586,12 @@ namespace isc { namespace dhcp {
     return symbol_type (token::TOKEN_SUB_RESERVATION, l);
   }
 
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SUB_OPTION_DEFS (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_SUB_OPTION_DEFS, l);
+  }
+
   Dhcp4Parser::symbol_type
   Dhcp4Parser::make_SUB_OPTION_DEF (const location_type& l)
   {
@@ -2631,7 +2643,7 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp4_parser.yy" // lalr1.cc:377
 } } // isc::dhcp
-#line 2635 "dhcp4_parser.h" // lalr1.cc:377
+#line 2647 "dhcp4_parser.h" // lalr1.cc:377
 
 
 
index 8d6f1d76b1873c24494985d5eca255bc88908091..43ad59cd5b4608eb2590fb4f76c56f0a623a15fc 100644 (file)
@@ -1,4 +1,4 @@
-// Generated 201708070754
+// Generated 201709021237
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Locations for Bison parsers in C++
index ec94795f77b282dbd9afa18145a87b71ac51d691..d6a1f0e98d1e5f90adcf9658bd9c8bdde296aef5 100644 (file)
@@ -1,4 +1,4 @@
-// Generated 201708070754
+// Generated 201709021237
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Positions for Bison parsers in C++
index e4f3e74d26ee0cb97f1010f4ec75db4e99662a19..c2d03fb188b1ff5b1f9daf184db7fc5aa2317b90 100644 (file)
@@ -1,4 +1,4 @@
-// Generated 201708070754
+// Generated 201709021237
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Stack handling for Bison parsers in C++
index 7f36e63a731b99fad1cdbba2f59f26c163f61c5e..ac0c8430a045832efb578e5eb6b66fd4d8cab574 100644 (file)
@@ -1557,23 +1557,23 @@ int yy_flex_debug = 1;
 
 static const flex_int16_t yy_rule_linenum[160] =
     {   0,
-      135,  137,  139,  144,  145,  150,  151,  152,  164,  167,
-      172,  179,  188,  197,  206,  215,  224,  233,  242,  251,
-      260,  269,  278,  287,  296,  305,  315,  325,  335,  345,
-      355,  365,  375,  385,  395,  404,  413,  422,  431,  440,
-      449,  458,  470,  479,  488,  497,  506,  516,  526,  536,
-      546,  557,  567,  577,  587,  597,  607,  617,  627,  637,
-      646,  655,  664,  679,  694,  703,  712,  721,  730,  739,
-      748,  757,  766,  775,  784,  794,  803,  812,  821,  830,
-      839,  848,  857,  866,  875,  884,  894,  903,  912,  921,
-      930,  939,  948,  957,  966,  975,  985,  994, 1003, 1013,
-
-     1023, 1033, 1042, 1051, 1060, 1071, 1081, 1090, 1100, 1110,
-     1119, 1128, 1137, 1146, 1155, 1164, 1174, 1183, 1192, 1201,
-     1210, 1219, 1228, 1237, 1246, 1255, 1264, 1273, 1282, 1291,
-     1300, 1309, 1318, 1327, 1336, 1345, 1354, 1363, 1372, 1381,
-     1390, 1400, 1498, 1503, 1508, 1513, 1514, 1515, 1516, 1517,
-     1518, 1520, 1538, 1551, 1556, 1560, 1562, 1564, 1566
+      139,  141,  143,  148,  149,  154,  155,  156,  168,  171,
+      176,  183,  192,  201,  210,  219,  228,  237,  246,  255,
+      264,  273,  282,  291,  300,  309,  319,  329,  339,  349,
+      359,  369,  379,  389,  399,  408,  417,  426,  435,  444,
+      453,  462,  474,  483,  492,  501,  510,  520,  530,  540,
+      550,  561,  571,  581,  591,  601,  611,  621,  631,  641,
+      650,  659,  668,  683,  698,  707,  716,  725,  734,  743,
+      752,  761,  770,  779,  788,  798,  807,  816,  825,  834,
+      843,  852,  861,  870,  879,  888,  898,  907,  916,  925,
+      934,  943,  952,  961,  970,  979,  989,  998, 1007, 1017,
+
+     1027, 1037, 1046, 1055, 1064, 1075, 1085, 1094, 1104, 1114,
+     1123, 1132, 1141, 1150, 1159, 1168, 1178, 1187, 1196, 1205,
+     1214, 1223, 1232, 1241, 1250, 1259, 1268, 1277, 1286, 1295,
+     1304, 1313, 1322, 1331, 1340, 1349, 1358, 1367, 1376, 1385,
+     1394, 1404, 1502, 1507, 1512, 1517, 1518, 1519, 1520, 1521,
+     1522, 1524, 1542, 1555, 1560, 1564, 1566, 1568, 1570
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -1961,6 +1961,10 @@ YY_DECL
             return isc::dhcp::Dhcp6Parser::make_SUB_PD_POOL(driver.loc_);
         case Parser6Context::PARSER_HOST_RESERVATION:
             return isc::dhcp::Dhcp6Parser::make_SUB_RESERVATION(driver.loc_);
+        case Parser6Context::PARSER_OPTION_DEFS:
+            return isc::dhcp::Dhcp6Parser::make_SUB_OPTION_DEFS(driver.loc_);
+        case Parser6Context::PARSER_OPTION_DEF:
+            return isc::dhcp::Dhcp6Parser::make_SUB_OPTION_DEF(driver.loc_);
         case Parser6Context::PARSER_OPTION_DATA:
             return isc::dhcp::Dhcp6Parser::make_SUB_OPTION_DATA(driver.loc_);
         case Parser6Context::PARSER_HOOKS_LIBRARY:
@@ -1971,7 +1975,7 @@ YY_DECL
     }
 
 
-#line 1974 "dhcp6_lexer.cc"
+#line 1978 "dhcp6_lexer.cc"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@ -2049,17 +2053,17 @@ do_action:      /* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 135 "dhcp6_lexer.ll"
+#line 139 "dhcp6_lexer.ll"
 ;
        YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 137 "dhcp6_lexer.ll"
+#line 141 "dhcp6_lexer.ll"
 ;
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 139 "dhcp6_lexer.ll"
+#line 143 "dhcp6_lexer.ll"
 {
   BEGIN(COMMENT);
   comment_start_line = driver.loc_.end.line;;
@@ -2067,33 +2071,33 @@ YY_RULE_SETUP
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 144 "dhcp6_lexer.ll"
+#line 148 "dhcp6_lexer.ll"
 BEGIN(INITIAL);
        YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 145 "dhcp6_lexer.ll"
+#line 149 "dhcp6_lexer.ll"
 ;
        YY_BREAK
 case YY_STATE_EOF(COMMENT):
-#line 146 "dhcp6_lexer.ll"
+#line 150 "dhcp6_lexer.ll"
 {
     isc_throw(Dhcp6ParseError, "Comment not closed. (/* in line " << comment_start_line);
 }
        YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 150 "dhcp6_lexer.ll"
+#line 154 "dhcp6_lexer.ll"
 BEGIN(DIR_ENTER);
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 151 "dhcp6_lexer.ll"
+#line 155 "dhcp6_lexer.ll"
 BEGIN(DIR_INCLUDE);
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 152 "dhcp6_lexer.ll"
+#line 156 "dhcp6_lexer.ll"
 {
     /* Include directive. */
 
@@ -2107,19 +2111,19 @@ YY_RULE_SETUP
 case YY_STATE_EOF(DIR_ENTER):
 case YY_STATE_EOF(DIR_INCLUDE):
 case YY_STATE_EOF(DIR_EXIT):
-#line 161 "dhcp6_lexer.ll"
+#line 165 "dhcp6_lexer.ll"
 {
     isc_throw(Dhcp6ParseError, "Directive not closed.");
 }
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 164 "dhcp6_lexer.ll"
+#line 168 "dhcp6_lexer.ll"
 BEGIN(INITIAL);
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 167 "dhcp6_lexer.ll"
+#line 171 "dhcp6_lexer.ll"
 {
     /* Ok, we found a with space. Let's ignore it and update loc variable. */
     driver.loc_.step();
@@ -2128,7 +2132,7 @@ YY_RULE_SETUP
 case 11:
 /* rule 11 can match eol */
 YY_RULE_SETUP
-#line 172 "dhcp6_lexer.ll"
+#line 176 "dhcp6_lexer.ll"
 {
     /* Newline found. Let's update the location and continue. */
     driver.loc_.lines(yyleng);
@@ -2137,7 +2141,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 179 "dhcp6_lexer.ll"
+#line 183 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2149,7 +2153,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 188 "dhcp6_lexer.ll"
+#line 192 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2161,7 +2165,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 197 "dhcp6_lexer.ll"
+#line 201 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2173,7 +2177,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 206 "dhcp6_lexer.ll"
+#line 210 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2185,7 +2189,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 215 "dhcp6_lexer.ll"
+#line 219 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2197,7 +2201,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 224 "dhcp6_lexer.ll"
+#line 228 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2209,7 +2213,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 233 "dhcp6_lexer.ll"
+#line 237 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2221,7 +2225,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 242 "dhcp6_lexer.ll"
+#line 246 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2233,7 +2237,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 251 "dhcp6_lexer.ll"
+#line 255 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2245,7 +2249,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 260 "dhcp6_lexer.ll"
+#line 264 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2257,7 +2261,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 269 "dhcp6_lexer.ll"
+#line 273 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2269,7 +2273,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 278 "dhcp6_lexer.ll"
+#line 282 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2281,7 +2285,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 287 "dhcp6_lexer.ll"
+#line 291 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2293,7 +2297,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 296 "dhcp6_lexer.ll"
+#line 300 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2305,7 +2309,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 305 "dhcp6_lexer.ll"
+#line 309 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::NCR_PROTOCOL) {
@@ -2318,7 +2322,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 315 "dhcp6_lexer.ll"
+#line 319 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::NCR_PROTOCOL) {
@@ -2331,7 +2335,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 325 "dhcp6_lexer.ll"
+#line 329 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::NCR_FORMAT) {
@@ -2344,7 +2348,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 335 "dhcp6_lexer.ll"
+#line 339 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
@@ -2357,7 +2361,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 345 "dhcp6_lexer.ll"
+#line 349 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
@@ -2370,7 +2374,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 355 "dhcp6_lexer.ll"
+#line 359 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
@@ -2383,7 +2387,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 365 "dhcp6_lexer.ll"
+#line 369 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
@@ -2396,7 +2400,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 375 "dhcp6_lexer.ll"
+#line 379 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
@@ -2409,7 +2413,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 385 "dhcp6_lexer.ll"
+#line 389 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
@@ -2422,7 +2426,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 395 "dhcp6_lexer.ll"
+#line 399 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -2434,7 +2438,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 404 "dhcp6_lexer.ll"
+#line 408 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2446,7 +2450,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 413 "dhcp6_lexer.ll"
+#line 417 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::INTERFACES_CONFIG:
@@ -2458,7 +2462,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 422 "dhcp6_lexer.ll"
+#line 426 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::INTERFACES_CONFIG:
@@ -2470,7 +2474,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 431 "dhcp6_lexer.ll"
+#line 435 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2482,7 +2486,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 440 "dhcp6_lexer.ll"
+#line 444 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2494,7 +2498,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 449 "dhcp6_lexer.ll"
+#line 453 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
@@ -2506,7 +2510,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 458 "dhcp6_lexer.ll"
+#line 462 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2521,7 +2525,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 470 "dhcp6_lexer.ll"
+#line 474 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DATABASE_TYPE:
@@ -2533,7 +2537,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 479 "dhcp6_lexer.ll"
+#line 483 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DATABASE_TYPE:
@@ -2545,7 +2549,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 488 "dhcp6_lexer.ll"
+#line 492 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DATABASE_TYPE:
@@ -2557,7 +2561,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 497 "dhcp6_lexer.ll"
+#line 501 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DATABASE_TYPE:
@@ -2569,7 +2573,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 506 "dhcp6_lexer.ll"
+#line 510 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2582,7 +2586,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 516 "dhcp6_lexer.ll"
+#line 520 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2595,7 +2599,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 526 "dhcp6_lexer.ll"
+#line 530 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2608,7 +2612,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 536 "dhcp6_lexer.ll"
+#line 540 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2621,7 +2625,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 546 "dhcp6_lexer.ll"
+#line 550 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2635,7 +2639,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 557 "dhcp6_lexer.ll"
+#line 561 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2648,7 +2652,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 567 "dhcp6_lexer.ll"
+#line 571 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2661,7 +2665,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 577 "dhcp6_lexer.ll"
+#line 581 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2674,7 +2678,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 587 "dhcp6_lexer.ll"
+#line 591 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2687,7 +2691,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 597 "dhcp6_lexer.ll"
+#line 601 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2700,7 +2704,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 607 "dhcp6_lexer.ll"
+#line 611 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2713,7 +2717,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 617 "dhcp6_lexer.ll"
+#line 621 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2726,7 +2730,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 627 "dhcp6_lexer.ll"
+#line 631 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2739,7 +2743,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 637 "dhcp6_lexer.ll"
+#line 641 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2751,7 +2755,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 646 "dhcp6_lexer.ll"
+#line 650 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2763,7 +2767,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 655 "dhcp6_lexer.ll"
+#line 659 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2775,7 +2779,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 664 "dhcp6_lexer.ll"
+#line 668 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2793,7 +2797,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 679 "dhcp6_lexer.ll"
+#line 683 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2811,7 +2815,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 694 "dhcp6_lexer.ll"
+#line 698 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DATA:
@@ -2823,7 +2827,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 703 "dhcp6_lexer.ll"
+#line 707 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DATA:
@@ -2835,7 +2839,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 712 "dhcp6_lexer.ll"
+#line 716 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -2847,7 +2851,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 721 "dhcp6_lexer.ll"
+#line 725 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -2859,7 +2863,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 730 "dhcp6_lexer.ll"
+#line 734 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -2871,7 +2875,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 739 "dhcp6_lexer.ll"
+#line 743 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -2883,7 +2887,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 748 "dhcp6_lexer.ll"
+#line 752 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -2895,7 +2899,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 757 "dhcp6_lexer.ll"
+#line 761 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -2907,7 +2911,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 766 "dhcp6_lexer.ll"
+#line 770 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -2919,7 +2923,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 775 "dhcp6_lexer.ll"
+#line 779 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::POOLS:
@@ -2931,7 +2935,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 784 "dhcp6_lexer.ll"
+#line 788 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::POOLS:
@@ -2944,7 +2948,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 794 "dhcp6_lexer.ll"
+#line 798 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -2956,7 +2960,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 803 "dhcp6_lexer.ll"
+#line 807 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -2968,7 +2972,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 812 "dhcp6_lexer.ll"
+#line 816 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -2980,7 +2984,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 821 "dhcp6_lexer.ll"
+#line 825 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -2992,7 +2996,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 830 "dhcp6_lexer.ll"
+#line 834 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3004,7 +3008,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 839 "dhcp6_lexer.ll"
+#line 843 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3016,7 +3020,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 848 "dhcp6_lexer.ll"
+#line 852 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -3028,7 +3032,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 857 "dhcp6_lexer.ll"
+#line 861 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -3040,7 +3044,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 866 "dhcp6_lexer.ll"
+#line 870 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -3052,7 +3056,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 875 "dhcp6_lexer.ll"
+#line 879 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -3064,7 +3068,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 884 "dhcp6_lexer.ll"
+#line 888 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -3077,7 +3081,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 894 "dhcp6_lexer.ll"
+#line 898 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3089,7 +3093,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 903 "dhcp6_lexer.ll"
+#line 907 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3101,7 +3105,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 912 "dhcp6_lexer.ll"
+#line 916 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3113,7 +3117,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 921 "dhcp6_lexer.ll"
+#line 925 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -3125,7 +3129,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 930 "dhcp6_lexer.ll"
+#line 934 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGING:
@@ -3137,7 +3141,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 92:
 YY_RULE_SETUP
-#line 939 "dhcp6_lexer.ll"
+#line 943 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGERS:
@@ -3149,7 +3153,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 948 "dhcp6_lexer.ll"
+#line 952 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -3161,7 +3165,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 94:
 YY_RULE_SETUP
-#line 957 "dhcp6_lexer.ll"
+#line 961 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -3173,7 +3177,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 966 "dhcp6_lexer.ll"
+#line 970 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -3185,7 +3189,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 96:
 YY_RULE_SETUP
-#line 975 "dhcp6_lexer.ll"
+#line 979 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -3197,7 +3201,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 97:
 YY_RULE_SETUP
-#line 985 "dhcp6_lexer.ll"
+#line 989 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGERS:
@@ -3209,7 +3213,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 994 "dhcp6_lexer.ll"
+#line 998 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGERS:
@@ -3221,7 +3225,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 1003 "dhcp6_lexer.ll"
+#line 1007 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3234,7 +3238,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 1013 "dhcp6_lexer.ll"
+#line 1017 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3247,7 +3251,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 1023 "dhcp6_lexer.ll"
+#line 1027 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CLIENT_CLASSES:
@@ -3260,7 +3264,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 102:
 YY_RULE_SETUP
-#line 1033 "dhcp6_lexer.ll"
+#line 1037 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3272,7 +3276,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 1042 "dhcp6_lexer.ll"
+#line 1046 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATIONS:
@@ -3284,7 +3288,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 104:
 YY_RULE_SETUP
-#line 1051 "dhcp6_lexer.ll"
+#line 1055 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATIONS:
@@ -3296,7 +3300,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 105:
 YY_RULE_SETUP
-#line 1060 "dhcp6_lexer.ll"
+#line 1064 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::MAC_SOURCES:
@@ -3310,7 +3314,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 106:
 YY_RULE_SETUP
-#line 1071 "dhcp6_lexer.ll"
+#line 1075 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS:
@@ -3323,7 +3327,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 107:
 YY_RULE_SETUP
-#line 1081 "dhcp6_lexer.ll"
+#line 1085 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATIONS:
@@ -3335,7 +3339,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 108:
 YY_RULE_SETUP
-#line 1090 "dhcp6_lexer.ll"
+#line 1094 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS:
@@ -3348,7 +3352,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 109:
 YY_RULE_SETUP
-#line 1100 "dhcp6_lexer.ll"
+#line 1104 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -3361,7 +3365,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 110:
 YY_RULE_SETUP
-#line 1110 "dhcp6_lexer.ll"
+#line 1114 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DATA:
@@ -3373,7 +3377,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 1119 "dhcp6_lexer.ll"
+#line 1123 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -3385,7 +3389,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 112:
 YY_RULE_SETUP
-#line 1128 "dhcp6_lexer.ll"
+#line 1132 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -3397,7 +3401,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 113:
 YY_RULE_SETUP
-#line 1137 "dhcp6_lexer.ll"
+#line 1141 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -3409,7 +3413,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 114:
 YY_RULE_SETUP
-#line 1146 "dhcp6_lexer.ll"
+#line 1150 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3421,7 +3425,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 115:
 YY_RULE_SETUP
-#line 1155 "dhcp6_lexer.ll"
+#line 1159 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RELAY:
@@ -3433,7 +3437,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 116:
 YY_RULE_SETUP
-#line 1164 "dhcp6_lexer.ll"
+#line 1168 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3445,7 +3449,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 117:
 YY_RULE_SETUP
-#line 1174 "dhcp6_lexer.ll"
+#line 1178 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOOKS_LIBRARIES:
@@ -3457,7 +3461,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 118:
 YY_RULE_SETUP
-#line 1183 "dhcp6_lexer.ll"
+#line 1187 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOOKS_LIBRARIES:
@@ -3469,7 +3473,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 119:
 YY_RULE_SETUP
-#line 1192 "dhcp6_lexer.ll"
+#line 1196 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3481,7 +3485,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 120:
 YY_RULE_SETUP
-#line 1201 "dhcp6_lexer.ll"
+#line 1205 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DUID_TYPE:
@@ -3493,7 +3497,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 121:
 YY_RULE_SETUP
-#line 1210 "dhcp6_lexer.ll"
+#line 1214 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DUID_TYPE:
@@ -3505,7 +3509,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 122:
 YY_RULE_SETUP
-#line 1219 "dhcp6_lexer.ll"
+#line 1223 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DUID_TYPE:
@@ -3517,7 +3521,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 123:
 YY_RULE_SETUP
-#line 1228 "dhcp6_lexer.ll"
+#line 1232 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -3529,7 +3533,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 124:
 YY_RULE_SETUP
-#line 1237 "dhcp6_lexer.ll"
+#line 1241 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -3541,7 +3545,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 125:
 YY_RULE_SETUP
-#line 1246 "dhcp6_lexer.ll"
+#line 1250 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -3553,7 +3557,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 126:
 YY_RULE_SETUP
-#line 1255 "dhcp6_lexer.ll"
+#line 1259 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -3565,7 +3569,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 127:
 YY_RULE_SETUP
-#line 1264 "dhcp6_lexer.ll"
+#line 1268 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3577,7 +3581,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 128:
 YY_RULE_SETUP
-#line 1273 "dhcp6_lexer.ll"
+#line 1277 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -3589,7 +3593,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 129:
 YY_RULE_SETUP
-#line 1282 "dhcp6_lexer.ll"
+#line 1286 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -3601,7 +3605,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 130:
 YY_RULE_SETUP
-#line 1291 "dhcp6_lexer.ll"
+#line 1295 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -3613,7 +3617,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 131:
 YY_RULE_SETUP
-#line 1300 "dhcp6_lexer.ll"
+#line 1304 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -3625,7 +3629,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 132:
 YY_RULE_SETUP
-#line 1309 "dhcp6_lexer.ll"
+#line 1313 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -3637,7 +3641,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 133:
 YY_RULE_SETUP
-#line 1318 "dhcp6_lexer.ll"
+#line 1322 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -3649,7 +3653,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 134:
 YY_RULE_SETUP
-#line 1327 "dhcp6_lexer.ll"
+#line 1331 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3661,7 +3665,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 135:
 YY_RULE_SETUP
-#line 1336 "dhcp6_lexer.ll"
+#line 1340 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3673,7 +3677,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 136:
 YY_RULE_SETUP
-#line 1345 "dhcp6_lexer.ll"
+#line 1349 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONTROL_SOCKET:
@@ -3685,7 +3689,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 137:
 YY_RULE_SETUP
-#line 1354 "dhcp6_lexer.ll"
+#line 1358 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONTROL_SOCKET:
@@ -3697,7 +3701,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 138:
 YY_RULE_SETUP
-#line 1363 "dhcp6_lexer.ll"
+#line 1367 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3709,7 +3713,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 139:
 YY_RULE_SETUP
-#line 1372 "dhcp6_lexer.ll"
+#line 1376 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -3721,7 +3725,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 140:
 YY_RULE_SETUP
-#line 1381 "dhcp6_lexer.ll"
+#line 1385 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -3733,7 +3737,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 141:
 YY_RULE_SETUP
-#line 1390 "dhcp6_lexer.ll"
+#line 1394 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -3745,7 +3749,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 142:
 YY_RULE_SETUP
-#line 1400 "dhcp6_lexer.ll"
+#line 1404 "dhcp6_lexer.ll"
 {
     /* 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.
@@ -3847,7 +3851,7 @@ YY_RULE_SETUP
 case 143:
 /* rule 143 can match eol */
 YY_RULE_SETUP
-#line 1498 "dhcp6_lexer.ll"
+#line 1502 "dhcp6_lexer.ll"
 {
     /* Bad string with a forbidden control character inside */
     driver.error(driver.loc_, "Invalid control in " + std::string(yytext));
@@ -3856,7 +3860,7 @@ YY_RULE_SETUP
 case 144:
 /* rule 144 can match eol */
 YY_RULE_SETUP
-#line 1503 "dhcp6_lexer.ll"
+#line 1507 "dhcp6_lexer.ll"
 {
     /* Bad string with a bad escape inside */
     driver.error(driver.loc_, "Bad escape in " + std::string(yytext));
@@ -3864,7 +3868,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 145:
 YY_RULE_SETUP
-#line 1508 "dhcp6_lexer.ll"
+#line 1512 "dhcp6_lexer.ll"
 {
     /* Bad string with an open escape at the end */
     driver.error(driver.loc_, "Overflow escape in " + std::string(yytext));
@@ -3872,37 +3876,37 @@ YY_RULE_SETUP
        YY_BREAK
 case 146:
 YY_RULE_SETUP
-#line 1513 "dhcp6_lexer.ll"
+#line 1517 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_LSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
 case 147:
 YY_RULE_SETUP
-#line 1514 "dhcp6_lexer.ll"
+#line 1518 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_RSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
 case 148:
 YY_RULE_SETUP
-#line 1515 "dhcp6_lexer.ll"
+#line 1519 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_LCURLY_BRACKET(driver.loc_); }
        YY_BREAK
 case 149:
 YY_RULE_SETUP
-#line 1516 "dhcp6_lexer.ll"
+#line 1520 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_RCURLY_BRACKET(driver.loc_); }
        YY_BREAK
 case 150:
 YY_RULE_SETUP
-#line 1517 "dhcp6_lexer.ll"
+#line 1521 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_COMMA(driver.loc_); }
        YY_BREAK
 case 151:
 YY_RULE_SETUP
-#line 1518 "dhcp6_lexer.ll"
+#line 1522 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_COLON(driver.loc_); }
        YY_BREAK
 case 152:
 YY_RULE_SETUP
-#line 1520 "dhcp6_lexer.ll"
+#line 1524 "dhcp6_lexer.ll"
 {
     /* An integer was found. */
     std::string tmp(yytext);
@@ -3923,7 +3927,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 153:
 YY_RULE_SETUP
-#line 1538 "dhcp6_lexer.ll"
+#line 1542 "dhcp6_lexer.ll"
 {
     /* A floating point was found. */
     std::string tmp(yytext);
@@ -3939,7 +3943,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 154:
 YY_RULE_SETUP
-#line 1551 "dhcp6_lexer.ll"
+#line 1555 "dhcp6_lexer.ll"
 {
     string tmp(yytext);
     return isc::dhcp::Dhcp6Parser::make_BOOLEAN(tmp == "true", driver.loc_);
@@ -3947,33 +3951,33 @@ YY_RULE_SETUP
        YY_BREAK
 case 155:
 YY_RULE_SETUP
-#line 1556 "dhcp6_lexer.ll"
+#line 1560 "dhcp6_lexer.ll"
 {
    return isc::dhcp::Dhcp6Parser::make_NULL_TYPE(driver.loc_);
 }
        YY_BREAK
 case 156:
 YY_RULE_SETUP
-#line 1560 "dhcp6_lexer.ll"
+#line 1564 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
        YY_BREAK
 case 157:
 YY_RULE_SETUP
-#line 1562 "dhcp6_lexer.ll"
+#line 1566 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
        YY_BREAK
 case 158:
 YY_RULE_SETUP
-#line 1564 "dhcp6_lexer.ll"
+#line 1568 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
        YY_BREAK
 case 159:
 YY_RULE_SETUP
-#line 1566 "dhcp6_lexer.ll"
+#line 1570 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "Invalid character: " + std::string(yytext));
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 1568 "dhcp6_lexer.ll"
+#line 1572 "dhcp6_lexer.ll"
 {
     if (driver.states_.empty()) {
         return isc::dhcp::Dhcp6Parser::make_END(driver.loc_);
@@ -3999,10 +4003,10 @@ case YY_STATE_EOF(INITIAL):
        YY_BREAK
 case 160:
 YY_RULE_SETUP
-#line 1591 "dhcp6_lexer.ll"
+#line 1595 "dhcp6_lexer.ll"
 ECHO;
        YY_BREAK
-#line 4005 "dhcp6_lexer.cc"
+#line 4009 "dhcp6_lexer.cc"
 
        case YY_END_OF_BUFFER:
                {
@@ -5107,7 +5111,7 @@ void yyfree (void * ptr )
 
 /* %ok-for-header */
 
-#line 1591 "dhcp6_lexer.ll"
+#line 1595 "dhcp6_lexer.ll"
 
 
 using namespace isc::dhcp;
index afd7b1a8f0eed9799e6f2c208d5c8dfe1464d5fa..dba8d9f6c49e80b1206c9d03c55387a829aa36eb 100644 (file)
@@ -253,29 +253,29 @@ namespace isc { namespace dhcp {
   {
       switch (that.type_get ())
     {
-      case 167: // value
-      case 171: // map_value
-      case 215: // db_type
-      case 291: // hr_mode
-      case 412: // duid_type
-      case 445: // ncr_protocol_value
-      case 453: // replace_client_name_value
+      case 169: // value
+      case 173: // map_value
+      case 217: // db_type
+      case 293: // hr_mode
+      case 416: // duid_type
+      case 449: // ncr_protocol_value
+      case 457: // replace_client_name_value
         value.move< ElementPtr > (that.value);
         break;
 
-      case 152: // "boolean"
+      case 153: // "boolean"
         value.move< bool > (that.value);
         break;
 
-      case 151: // "floating point"
+      case 152: // "floating point"
         value.move< double > (that.value);
         break;
 
-      case 150: // "integer"
+      case 151: // "integer"
         value.move< int64_t > (that.value);
         break;
 
-      case 149: // "constant string"
+      case 150: // "constant string"
         value.move< std::string > (that.value);
         break;
 
@@ -294,29 +294,29 @@ namespace isc { namespace dhcp {
     state = that.state;
       switch (that.type_get ())
     {
-      case 167: // value
-      case 171: // map_value
-      case 215: // db_type
-      case 291: // hr_mode
-      case 412: // duid_type
-      case 445: // ncr_protocol_value
-      case 453: // replace_client_name_value
+      case 169: // value
+      case 173: // map_value
+      case 217: // db_type
+      case 293: // hr_mode
+      case 416: // duid_type
+      case 449: // ncr_protocol_value
+      case 457: // replace_client_name_value
         value.copy< ElementPtr > (that.value);
         break;
 
-      case 152: // "boolean"
+      case 153: // "boolean"
         value.copy< bool > (that.value);
         break;
 
-      case 151: // "floating point"
+      case 152: // "floating point"
         value.copy< double > (that.value);
         break;
 
-      case 150: // "integer"
+      case 151: // "integer"
         value.copy< int64_t > (that.value);
         break;
 
-      case 149: // "constant string"
+      case 150: // "constant string"
         value.copy< std::string > (that.value);
         break;
 
@@ -356,79 +356,79 @@ namespace isc { namespace dhcp {
         << yysym.location << ": ";
     switch (yytype)
     {
-            case 149: // "constant string"
+            case 150: // "constant string"
 
-#line 225 "dhcp6_parser.yy" // lalr1.cc:636
+#line 226 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< std::string > (); }
 #line 364 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 150: // "integer"
+      case 151: // "integer"
 
-#line 225 "dhcp6_parser.yy" // lalr1.cc:636
+#line 226 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< int64_t > (); }
 #line 371 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 151: // "floating point"
+      case 152: // "floating point"
 
-#line 225 "dhcp6_parser.yy" // lalr1.cc:636
+#line 226 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< double > (); }
 #line 378 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 152: // "boolean"
+      case 153: // "boolean"
 
-#line 225 "dhcp6_parser.yy" // lalr1.cc:636
+#line 226 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< bool > (); }
 #line 385 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 167: // value
+      case 169: // value
 
-#line 225 "dhcp6_parser.yy" // lalr1.cc:636
+#line 226 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 392 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 171: // map_value
+      case 173: // map_value
 
-#line 225 "dhcp6_parser.yy" // lalr1.cc:636
+#line 226 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 399 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 215: // db_type
+      case 217: // db_type
 
-#line 225 "dhcp6_parser.yy" // lalr1.cc:636
+#line 226 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 406 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 291: // hr_mode
+      case 293: // hr_mode
 
-#line 225 "dhcp6_parser.yy" // lalr1.cc:636
+#line 226 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 413 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 412: // duid_type
+      case 416: // duid_type
 
-#line 225 "dhcp6_parser.yy" // lalr1.cc:636
+#line 226 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 420 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 445: // ncr_protocol_value
+      case 449: // ncr_protocol_value
 
-#line 225 "dhcp6_parser.yy" // lalr1.cc:636
+#line 226 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 427 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 453: // replace_client_name_value
+      case 457: // replace_client_name_value
 
-#line 225 "dhcp6_parser.yy" // lalr1.cc:636
+#line 226 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 434 "dhcp6_parser.cc" // lalr1.cc:636
         break;
@@ -630,29 +630,29 @@ namespace isc { namespace dhcp {
          when using variants.  */
         switch (yyr1_[yyn])
     {
-      case 167: // value
-      case 171: // map_value
-      case 215: // db_type
-      case 291: // hr_mode
-      case 412: // duid_type
-      case 445: // ncr_protocol_value
-      case 453: // replace_client_name_value
+      case 169: // value
+      case 173: // map_value
+      case 217: // db_type
+      case 293: // hr_mode
+      case 416: // duid_type
+      case 449: // ncr_protocol_value
+      case 457: // replace_client_name_value
         yylhs.value.build< ElementPtr > ();
         break;
 
-      case 152: // "boolean"
+      case 153: // "boolean"
         yylhs.value.build< bool > ();
         break;
 
-      case 151: // "floating point"
+      case 152: // "floating point"
         yylhs.value.build< double > ();
         break;
 
-      case 150: // "integer"
+      case 151: // "integer"
         yylhs.value.build< int64_t > ();
         break;
 
-      case 149: // "constant string"
+      case 150: // "constant string"
         yylhs.value.build< std::string > ();
         break;
 
@@ -674,278 +674,287 @@ namespace isc { namespace dhcp {
           switch (yyn)
             {
   case 2:
-#line 234 "dhcp6_parser.yy" // lalr1.cc:859
+#line 235 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.NO_KEYWORD; }
 #line 680 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 4:
-#line 235 "dhcp6_parser.yy" // lalr1.cc:859
+#line 236 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.CONFIG; }
 #line 686 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 6:
-#line 236 "dhcp6_parser.yy" // lalr1.cc:859
+#line 237 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.DHCP6; }
 #line 692 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 8:
-#line 237 "dhcp6_parser.yy" // lalr1.cc:859
+#line 238 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.INTERFACES_CONFIG; }
 #line 698 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 10:
-#line 238 "dhcp6_parser.yy" // lalr1.cc:859
+#line 239 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.SUBNET6; }
 #line 704 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 12:
-#line 239 "dhcp6_parser.yy" // lalr1.cc:859
+#line 240 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.POOLS; }
 #line 710 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 14:
-#line 240 "dhcp6_parser.yy" // lalr1.cc:859
+#line 241 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.PD_POOLS; }
 #line 716 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 16:
-#line 241 "dhcp6_parser.yy" // lalr1.cc:859
+#line 242 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.RESERVATIONS; }
 #line 722 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 18:
-#line 242 "dhcp6_parser.yy" // lalr1.cc:859
-    { ctx.ctx_ = ctx.OPTION_DEF; }
+#line 243 "dhcp6_parser.yy" // lalr1.cc:859
+    { ctx.ctx_ = ctx.DHCP6; }
 #line 728 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 20:
-#line 243 "dhcp6_parser.yy" // lalr1.cc:859
-    { ctx.ctx_ = ctx.OPTION_DATA; }
+#line 244 "dhcp6_parser.yy" // lalr1.cc:859
+    { ctx.ctx_ = ctx.OPTION_DEF; }
 #line 734 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 22:
-#line 244 "dhcp6_parser.yy" // lalr1.cc:859
-    { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
+#line 245 "dhcp6_parser.yy" // lalr1.cc:859
+    { ctx.ctx_ = ctx.OPTION_DATA; }
 #line 740 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 24:
-#line 245 "dhcp6_parser.yy" // lalr1.cc:859
-    { ctx.ctx_ = ctx.DHCP_DDNS; }
+#line 246 "dhcp6_parser.yy" // lalr1.cc:859
+    { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
 #line 746 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 26:
-#line 253 "dhcp6_parser.yy" // lalr1.cc:859
-    { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
+#line 247 "dhcp6_parser.yy" // lalr1.cc:859
+    { ctx.ctx_ = ctx.DHCP_DDNS; }
 #line 752 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 27:
-#line 254 "dhcp6_parser.yy" // lalr1.cc:859
-    { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
-#line 758 "dhcp6_parser.cc" // lalr1.cc:859
-    break;
-
   case 28:
 #line 255 "dhcp6_parser.yy" // lalr1.cc:859
-    { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
-#line 764 "dhcp6_parser.cc" // lalr1.cc:859
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
+#line 758 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 29:
 #line 256 "dhcp6_parser.yy" // lalr1.cc:859
-    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
-#line 770 "dhcp6_parser.cc" // lalr1.cc:859
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
+#line 764 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 30:
 #line 257 "dhcp6_parser.yy" // lalr1.cc:859
-    { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
-#line 776 "dhcp6_parser.cc" // lalr1.cc:859
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
+#line 770 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 31:
 #line 258 "dhcp6_parser.yy" // lalr1.cc:859
-    { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 782 "dhcp6_parser.cc" // lalr1.cc:859
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
+#line 776 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 32:
 #line 259 "dhcp6_parser.yy" // lalr1.cc:859
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
+#line 782 "dhcp6_parser.cc" // lalr1.cc:859
+    break;
+
+  case 33:
+#line 260 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 788 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 33:
-#line 262 "dhcp6_parser.yy" // lalr1.cc:859
+  case 34:
+#line 261 "dhcp6_parser.yy" // lalr1.cc:859
+    { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
+#line 794 "dhcp6_parser.cc" // lalr1.cc:859
+    break;
+
+  case 35:
+#line 264 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Push back the JSON value on the stack
     ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ());
 }
-#line 797 "dhcp6_parser.cc" // lalr1.cc:859
+#line 803 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 34:
-#line 267 "dhcp6_parser.yy" // lalr1.cc:859
+  case 36:
+#line 269 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 808 "dhcp6_parser.cc" // lalr1.cc:859
+#line 814 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 35:
-#line 272 "dhcp6_parser.yy" // lalr1.cc:859
+  case 37:
+#line 274 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
     // for it.
 }
-#line 818 "dhcp6_parser.cc" // lalr1.cc:859
+#line 824 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 36:
-#line 278 "dhcp6_parser.yy" // lalr1.cc:859
+  case 38:
+#line 280 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 824 "dhcp6_parser.cc" // lalr1.cc:859
+#line 830 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 39:
-#line 285 "dhcp6_parser.yy" // lalr1.cc:859
+  case 41:
+#line 287 "dhcp6_parser.yy" // lalr1.cc:859
     {
                   // map containing a single entry
                   ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
                   }
-#line 833 "dhcp6_parser.cc" // lalr1.cc:859
+#line 839 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 40:
-#line 289 "dhcp6_parser.yy" // lalr1.cc:859
+  case 42:
+#line 291 "dhcp6_parser.yy" // lalr1.cc:859
     {
                   // map consisting of a shorter map followed by
                   // comma and string:value
                   ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
                   }
-#line 843 "dhcp6_parser.cc" // lalr1.cc:859
+#line 849 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 41:
-#line 296 "dhcp6_parser.yy" // lalr1.cc:859
+  case 43:
+#line 298 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
 }
-#line 852 "dhcp6_parser.cc" // lalr1.cc:859
+#line 858 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 42:
-#line 299 "dhcp6_parser.yy" // lalr1.cc:859
+  case 44:
+#line 301 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // list parsing complete. Put any sanity checking here
 }
-#line 860 "dhcp6_parser.cc" // lalr1.cc:859
+#line 866 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 45:
-#line 307 "dhcp6_parser.yy" // lalr1.cc:859
+  case 47:
+#line 309 "dhcp6_parser.yy" // lalr1.cc:859
     {
                   // List consisting of a single element.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
                   }
-#line 869 "dhcp6_parser.cc" // lalr1.cc:859
+#line 875 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 46:
-#line 311 "dhcp6_parser.yy" // lalr1.cc:859
+  case 48:
+#line 313 "dhcp6_parser.yy" // lalr1.cc:859
     {
                   // List ending with , and a value.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
                   }
-#line 878 "dhcp6_parser.cc" // lalr1.cc:859
+#line 884 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 47:
-#line 318 "dhcp6_parser.yy" // lalr1.cc:859
+  case 49:
+#line 320 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // List parsing about to start
 }
-#line 886 "dhcp6_parser.cc" // lalr1.cc:859
+#line 892 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 48:
-#line 320 "dhcp6_parser.yy" // lalr1.cc:859
+  case 50:
+#line 322 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // list parsing complete. Put any sanity checking here
     //ctx.stack_.pop_back();
 }
-#line 895 "dhcp6_parser.cc" // lalr1.cc:859
+#line 901 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 51:
-#line 329 "dhcp6_parser.yy" // lalr1.cc:859
+  case 53:
+#line 331 "dhcp6_parser.yy" // lalr1.cc:859
     {
                           ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
                           }
-#line 904 "dhcp6_parser.cc" // lalr1.cc:859
+#line 910 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 52:
-#line 333 "dhcp6_parser.yy" // lalr1.cc:859
+  case 54:
+#line 335 "dhcp6_parser.yy" // lalr1.cc:859
     {
                           ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
                           }
-#line 913 "dhcp6_parser.cc" // lalr1.cc:859
+#line 919 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 53:
-#line 344 "dhcp6_parser.yy" // lalr1.cc:859
+  case 55:
+#line 346 "dhcp6_parser.yy" // lalr1.cc:859
     {
     const std::string& where = ctx.contextName();
     const std::string& keyword = yystack_[1].value.as< std::string > ();
     error(yystack_[1].location,
           "got unexpected keyword \"" + keyword + "\" in " + where + " map.");
 }
-#line 924 "dhcp6_parser.cc" // lalr1.cc:859
+#line 930 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 54:
-#line 354 "dhcp6_parser.yy" // lalr1.cc:859
+  case 56:
+#line 356 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 935 "dhcp6_parser.cc" // lalr1.cc:859
+#line 941 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 55:
-#line 359 "dhcp6_parser.yy" // lalr1.cc:859
+  case 57:
+#line 361 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
     // for it.
+
+    // Dhcp6 is required
+    ctx.require("Dhcp6", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
 }
-#line 945 "dhcp6_parser.cc" // lalr1.cc:859
+#line 954 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 64:
-#line 379 "dhcp6_parser.yy" // lalr1.cc:859
+  case 66:
+#line 384 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -954,678 +963,688 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.DHCP6);
 }
-#line 958 "dhcp6_parser.cc" // lalr1.cc:859
+#line 967 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 65:
-#line 386 "dhcp6_parser.yy" // lalr1.cc:859
+  case 67:
+#line 391 "dhcp6_parser.yy" // lalr1.cc:859
     {
-    // map parsing completed. If we ever want to do any wrap up
-    // (maybe some sanity checking), this would be the best place
-    // for it.
+    // No global parameter is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 970 "dhcp6_parser.cc" // lalr1.cc:859
+#line 977 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 66:
-#line 396 "dhcp6_parser.yy" // lalr1.cc:859
+  case 68:
+#line 399 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the Dhcp6 map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 980 "dhcp6_parser.cc" // lalr1.cc:859
+#line 987 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 67:
-#line 400 "dhcp6_parser.yy" // lalr1.cc:859
+  case 69:
+#line 403 "dhcp6_parser.yy" // lalr1.cc:859
     {
+    // No global parameter is required
     // parsing completed
 }
-#line 988 "dhcp6_parser.cc" // lalr1.cc:859
+#line 996 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 92:
-#line 434 "dhcp6_parser.yy" // lalr1.cc:859
+  case 94:
+#line 438 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("preferred-lifetime", prf);
 }
-#line 997 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1005 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 93:
-#line 439 "dhcp6_parser.yy" // lalr1.cc:859
+  case 95:
+#line 443 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("valid-lifetime", prf);
 }
-#line 1006 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1014 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 94:
-#line 444 "dhcp6_parser.yy" // lalr1.cc:859
+  case 96:
+#line 448 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("renew-timer", prf);
 }
-#line 1015 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1023 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 95:
-#line 449 "dhcp6_parser.yy" // lalr1.cc:859
+  case 97:
+#line 453 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rebind-timer", prf);
 }
-#line 1024 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1032 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 96:
-#line 454 "dhcp6_parser.yy" // lalr1.cc:859
+  case 98:
+#line 458 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr dpp(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("decline-probation-period", dpp);
 }
-#line 1033 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1041 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 97:
-#line 459 "dhcp6_parser.yy" // lalr1.cc:859
+  case 99:
+#line 463 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interfaces-config", i);
     ctx.stack_.push_back(i);
     ctx.enter(ctx.INTERFACES_CONFIG);
 }
-#line 1044 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1052 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 98:
-#line 464 "dhcp6_parser.yy" // lalr1.cc:859
+  case 100:
+#line 468 "dhcp6_parser.yy" // lalr1.cc:859
     {
+    // No interfaces config param is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1053 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1062 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 99:
-#line 469 "dhcp6_parser.yy" // lalr1.cc:859
+  case 101:
+#line 474 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the interfaces-config map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1063 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1072 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 100:
-#line 473 "dhcp6_parser.yy" // lalr1.cc:859
+  case 102:
+#line 478 "dhcp6_parser.yy" // lalr1.cc:859
     {
+    // No interfaces config param is required
     // parsing completed
 }
-#line 1071 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1081 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 105:
-#line 485 "dhcp6_parser.yy" // lalr1.cc:859
+  case 107:
+#line 491 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interfaces", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1082 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1092 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 106:
-#line 490 "dhcp6_parser.yy" // lalr1.cc:859
+  case 108:
+#line 496 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1091 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1101 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 107:
-#line 495 "dhcp6_parser.yy" // lalr1.cc:859
+  case 109:
+#line 501 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("re-detect", b);
 }
-#line 1100 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1110 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 108:
-#line 501 "dhcp6_parser.yy" // lalr1.cc:859
+  case 110:
+#line 507 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lease-database", i);
     ctx.stack_.push_back(i);
     ctx.enter(ctx.LEASE_DATABASE);
 }
-#line 1111 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1121 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 109:
-#line 506 "dhcp6_parser.yy" // lalr1.cc:859
+  case 111:
+#line 512 "dhcp6_parser.yy" // lalr1.cc:859
     {
+    // The type parameter is required
+    ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1120 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1132 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 110:
-#line 511 "dhcp6_parser.yy" // lalr1.cc:859
+  case 112:
+#line 519 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hosts-database", i);
     ctx.stack_.push_back(i);
     ctx.enter(ctx.HOSTS_DATABASE);
 }
-#line 1131 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1143 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 111:
-#line 516 "dhcp6_parser.yy" // lalr1.cc:859
+  case 113:
+#line 524 "dhcp6_parser.yy" // lalr1.cc:859
     {
+    // The type parameter is required
+    ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1140 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1154 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 127:
-#line 540 "dhcp6_parser.yy" // lalr1.cc:859
+  case 129:
+#line 550 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.DATABASE_TYPE);
 }
-#line 1148 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1162 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 128:
-#line 542 "dhcp6_parser.yy" // lalr1.cc:859
+  case 130:
+#line 552 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1157 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1171 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 129:
-#line 547 "dhcp6_parser.yy" // lalr1.cc:859
+  case 131:
+#line 557 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
-#line 1163 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1177 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 130:
-#line 548 "dhcp6_parser.yy" // lalr1.cc:859
+  case 132:
+#line 558 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
-#line 1169 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1183 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 131:
-#line 549 "dhcp6_parser.yy" // lalr1.cc:859
+  case 133:
+#line 559 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
-#line 1175 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1189 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 132:
-#line 550 "dhcp6_parser.yy" // lalr1.cc:859
+  case 134:
+#line 560 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("cql", ctx.loc2pos(yystack_[0].location))); }
-#line 1181 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1195 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 133:
-#line 553 "dhcp6_parser.yy" // lalr1.cc:859
+  case 135:
+#line 563 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1189 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1203 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 134:
-#line 555 "dhcp6_parser.yy" // lalr1.cc:859
+  case 136:
+#line 565 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("user", user);
     ctx.leave();
 }
-#line 1199 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1213 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 135:
-#line 561 "dhcp6_parser.yy" // lalr1.cc:859
+  case 137:
+#line 571 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1207 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1221 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 136:
-#line 563 "dhcp6_parser.yy" // lalr1.cc:859
+  case 138:
+#line 573 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr pwd(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("password", pwd);
     ctx.leave();
 }
-#line 1217 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1231 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 137:
-#line 569 "dhcp6_parser.yy" // lalr1.cc:859
+  case 139:
+#line 579 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1225 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1239 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 138:
-#line 571 "dhcp6_parser.yy" // lalr1.cc:859
+  case 140:
+#line 581 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr h(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host", h);
     ctx.leave();
 }
-#line 1235 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1249 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 139:
-#line 577 "dhcp6_parser.yy" // lalr1.cc:859
+  case 141:
+#line 587 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr p(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("port", p);
 }
-#line 1244 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1258 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 140:
-#line 582 "dhcp6_parser.yy" // lalr1.cc:859
+  case 142:
+#line 592 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1252 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1266 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 141:
-#line 584 "dhcp6_parser.yy" // lalr1.cc:859
+  case 143:
+#line 594 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("name", name);
     ctx.leave();
 }
-#line 1262 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1276 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 142:
-#line 590 "dhcp6_parser.yy" // lalr1.cc:859
+  case 144:
+#line 600 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("persist", n);
 }
-#line 1271 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1285 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 143:
-#line 595 "dhcp6_parser.yy" // lalr1.cc:859
+  case 145:
+#line 605 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lfc-interval", n);
 }
-#line 1280 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1294 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 144:
-#line 600 "dhcp6_parser.yy" // lalr1.cc:859
+  case 146:
+#line 610 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("readonly", n);
 }
-#line 1289 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1303 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 145:
-#line 605 "dhcp6_parser.yy" // lalr1.cc:859
+  case 147:
+#line 615 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("connect-timeout", n);
 }
-#line 1298 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1312 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 146:
-#line 610 "dhcp6_parser.yy" // lalr1.cc:859
+  case 148:
+#line 620 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1306 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1320 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 147:
-#line 612 "dhcp6_parser.yy" // lalr1.cc:859
+  case 149:
+#line 622 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr cp(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("contact-points", cp);
     ctx.leave();
 }
-#line 1316 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1330 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 148:
-#line 618 "dhcp6_parser.yy" // lalr1.cc:859
+  case 150:
+#line 628 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1324 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1338 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 149:
-#line 620 "dhcp6_parser.yy" // lalr1.cc:859
+  case 151:
+#line 630 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr ks(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("keyspace", ks);
     ctx.leave();
 }
-#line 1334 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1348 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 150:
-#line 627 "dhcp6_parser.yy" // lalr1.cc:859
+  case 152:
+#line 637 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("mac-sources", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.MAC_SOURCES);
 }
-#line 1345 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1359 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 151:
-#line 632 "dhcp6_parser.yy" // lalr1.cc:859
+  case 153:
+#line 642 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1354 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1368 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 156:
-#line 645 "dhcp6_parser.yy" // lalr1.cc:859
+  case 158:
+#line 655 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
 }
-#line 1363 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1377 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 157:
-#line 650 "dhcp6_parser.yy" // lalr1.cc:859
+  case 159:
+#line 660 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr duid(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
 }
-#line 1372 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1386 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 158:
-#line 655 "dhcp6_parser.yy" // lalr1.cc:859
+  case 160:
+#line 665 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host-reservation-identifiers", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS);
 }
-#line 1383 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1397 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 159:
-#line 660 "dhcp6_parser.yy" // lalr1.cc:859
+  case 161:
+#line 670 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1392 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1406 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 165:
-#line 674 "dhcp6_parser.yy" // lalr1.cc:859
+  case 167:
+#line 684 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(hwaddr);
 }
-#line 1401 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1415 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 166:
-#line 679 "dhcp6_parser.yy" // lalr1.cc:859
+  case 168:
+#line 689 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(flex_id);
 }
-#line 1410 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1424 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 167:
-#line 686 "dhcp6_parser.yy" // lalr1.cc:859
+  case 169:
+#line 696 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("relay-supplied-options", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1421 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1435 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 168:
-#line 691 "dhcp6_parser.yy" // lalr1.cc:859
+  case 170:
+#line 701 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1430 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1444 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 169:
-#line 696 "dhcp6_parser.yy" // lalr1.cc:859
+  case 171:
+#line 706 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hooks-libraries", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOOKS_LIBRARIES);
 }
-#line 1441 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1455 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 170:
-#line 701 "dhcp6_parser.yy" // lalr1.cc:859
+  case 172:
+#line 711 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1450 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1464 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 175:
-#line 714 "dhcp6_parser.yy" // lalr1.cc:859
+  case 177:
+#line 724 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1460 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1474 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 176:
-#line 718 "dhcp6_parser.yy" // lalr1.cc:859
+  case 178:
+#line 728 "dhcp6_parser.yy" // lalr1.cc:859
     {
+    // The library hooks parameter is required
+    ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 1468 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1484 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 177:
-#line 722 "dhcp6_parser.yy" // lalr1.cc:859
+  case 179:
+#line 734 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the hooks-libraries list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1478 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1494 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 178:
-#line 726 "dhcp6_parser.yy" // lalr1.cc:859
+  case 180:
+#line 738 "dhcp6_parser.yy" // lalr1.cc:859
     {
+    // The library hooks parameter is required
+    ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 1486 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1504 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 184:
-#line 739 "dhcp6_parser.yy" // lalr1.cc:859
+  case 186:
+#line 753 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1494 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1512 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 185:
-#line 741 "dhcp6_parser.yy" // lalr1.cc:859
+  case 187:
+#line 755 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr lib(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("library", lib);
     ctx.leave();
 }
-#line 1504 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1522 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 186:
-#line 747 "dhcp6_parser.yy" // lalr1.cc:859
+  case 188:
+#line 761 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1512 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1530 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 187:
-#line 749 "dhcp6_parser.yy" // lalr1.cc:859
+  case 189:
+#line 763 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("parameters", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1521 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1539 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 188:
-#line 755 "dhcp6_parser.yy" // lalr1.cc:859
+  case 190:
+#line 769 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("expired-leases-processing", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.EXPIRED_LEASES_PROCESSING);
 }
-#line 1532 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1550 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 189:
-#line 760 "dhcp6_parser.yy" // lalr1.cc:859
+  case 191:
+#line 774 "dhcp6_parser.yy" // lalr1.cc:859
     {
+    // No expired lease parameter is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1541 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1560 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 198:
-#line 777 "dhcp6_parser.yy" // lalr1.cc:859
+  case 200:
+#line 792 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reclaim-timer-wait-time", value);
 }
-#line 1550 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1569 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 199:
-#line 782 "dhcp6_parser.yy" // lalr1.cc:859
+  case 201:
+#line 797 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush-reclaimed-timer-wait-time", value);
 }
-#line 1559 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1578 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 200:
-#line 787 "dhcp6_parser.yy" // lalr1.cc:859
+  case 202:
+#line 802 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hold-reclaimed-time", value);
 }
-#line 1568 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1587 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 201:
-#line 792 "dhcp6_parser.yy" // lalr1.cc:859
+  case 203:
+#line 807 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reclaim-leases", value);
 }
-#line 1577 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1596 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 202:
-#line 797 "dhcp6_parser.yy" // lalr1.cc:859
+  case 204:
+#line 812 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reclaim-time", value);
 }
-#line 1586 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1605 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 203:
-#line 802 "dhcp6_parser.yy" // lalr1.cc:859
+  case 205:
+#line 817 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("unwarned-reclaim-cycles", value);
 }
-#line 1595 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1614 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 204:
-#line 810 "dhcp6_parser.yy" // lalr1.cc:859
+  case 206:
+#line 825 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet6", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.SUBNET6);
 }
-#line 1606 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1625 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 205:
-#line 815 "dhcp6_parser.yy" // lalr1.cc:859
+  case 207:
+#line 830 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1615 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1634 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 210:
-#line 835 "dhcp6_parser.yy" // lalr1.cc:859
+  case 212:
+#line 850 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1625 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1644 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 211:
-#line 839 "dhcp6_parser.yy" // lalr1.cc:859
+  case 213:
+#line 854 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Once we reached this place, the subnet parsing is now complete.
     // If we want to, we can implement default values here.
@@ -1642,1548 +1661,1601 @@ namespace isc { namespace dhcp {
     //         ctx.stack_.back()->set("renew-timer", renew);
     //     }
     // }
+
+    // The subnet subnet6 parameter is required
+    ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 1648 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1670 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 212:
-#line 858 "dhcp6_parser.yy" // lalr1.cc:859
+  case 214:
+#line 876 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the subnet6 list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1658 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1680 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 213:
-#line 862 "dhcp6_parser.yy" // lalr1.cc:859
+  case 215:
+#line 880 "dhcp6_parser.yy" // lalr1.cc:859
     {
+    // The subnet subnet6 parameter is required
+    ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 1666 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1690 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 233:
-#line 891 "dhcp6_parser.yy" // lalr1.cc:859
+  case 235:
+#line 911 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1674 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1698 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 234:
-#line 893 "dhcp6_parser.yy" // lalr1.cc:859
+  case 236:
+#line 913 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr subnet(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet", subnet);
     ctx.leave();
 }
-#line 1684 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1708 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 235:
-#line 899 "dhcp6_parser.yy" // lalr1.cc:859
+  case 237:
+#line 919 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1692 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1716 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 236:
-#line 901 "dhcp6_parser.yy" // lalr1.cc:859
+  case 238:
+#line 921 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface", iface);
     ctx.leave();
 }
-#line 1702 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1726 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 237:
-#line 907 "dhcp6_parser.yy" // lalr1.cc:859
+  case 239:
+#line 927 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1710 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1734 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 238:
-#line 909 "dhcp6_parser.yy" // lalr1.cc:859
+  case 240:
+#line 929 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface-id", iface);
     ctx.leave();
 }
-#line 1720 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1744 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 239:
-#line 915 "dhcp6_parser.yy" // lalr1.cc:859
+  case 241:
+#line 935 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.CLIENT_CLASS);
 }
-#line 1728 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1752 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 240:
-#line 917 "dhcp6_parser.yy" // lalr1.cc:859
+  case 242:
+#line 937 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr cls(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-class", cls);
     ctx.leave();
 }
-#line 1738 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1762 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 241:
-#line 923 "dhcp6_parser.yy" // lalr1.cc:859
+  case 243:
+#line 943 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.RESERVATION_MODE);
 }
-#line 1746 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1770 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 242:
-#line 925 "dhcp6_parser.yy" // lalr1.cc:859
+  case 244:
+#line 945 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1755 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1779 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 243:
-#line 930 "dhcp6_parser.yy" // lalr1.cc:859
+  case 245:
+#line 950 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); }
-#line 1761 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1785 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 244:
-#line 931 "dhcp6_parser.yy" // lalr1.cc:859
+  case 246:
+#line 951 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); }
-#line 1767 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1791 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 245:
-#line 932 "dhcp6_parser.yy" // lalr1.cc:859
+  case 247:
+#line 952 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); }
-#line 1773 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1797 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 246:
-#line 935 "dhcp6_parser.yy" // lalr1.cc:859
+  case 248:
+#line 955 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr id(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("id", id);
 }
-#line 1782 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1806 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 247:
-#line 940 "dhcp6_parser.yy" // lalr1.cc:859
+  case 249:
+#line 960 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr rc(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rapid-commit", rc);
 }
-#line 1791 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1815 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 248:
-#line 949 "dhcp6_parser.yy" // lalr1.cc:859
+  case 250:
+#line 969 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("option-def", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DEF);
 }
-#line 1802 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1826 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 249:
-#line 954 "dhcp6_parser.yy" // lalr1.cc:859
+  case 251:
+#line 974 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1811 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1835 "dhcp6_parser.cc" // lalr1.cc:859
+    break;
+
+  case 252:
+#line 982 "dhcp6_parser.yy" // lalr1.cc:859
+    {
+    ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.push_back(m);
+}
+#line 1844 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 254:
-#line 971 "dhcp6_parser.yy" // lalr1.cc:859
+  case 253:
+#line 985 "dhcp6_parser.yy" // lalr1.cc:859
+    {
+    // parsing completed
+}
+#line 1852 "dhcp6_parser.cc" // lalr1.cc:859
+    break;
+
+  case 258:
+#line 1001 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1821 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1862 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 255:
-#line 975 "dhcp6_parser.yy" // lalr1.cc:859
+  case 259:
+#line 1005 "dhcp6_parser.yy" // lalr1.cc:859
     {
+    // The name, code and type option def parameters are required.
+    ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
+    ctx.require("code", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
+    ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 1829 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1874 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 256:
-#line 982 "dhcp6_parser.yy" // lalr1.cc:859
+  case 260:
+#line 1016 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the option-def list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1839 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1884 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 257:
-#line 986 "dhcp6_parser.yy" // lalr1.cc:859
+  case 261:
+#line 1020 "dhcp6_parser.yy" // lalr1.cc:859
     {
+    // The name, code and type option def parameters are required.
+    ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
+    ctx.require("code", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
+    ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 1847 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1896 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 271:
-#line 1012 "dhcp6_parser.yy" // lalr1.cc:859
+  case 275:
+#line 1050 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr code(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("code", code);
 }
-#line 1856 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1905 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 273:
-#line 1019 "dhcp6_parser.yy" // lalr1.cc:859
+  case 277:
+#line 1057 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1864 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1913 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 274:
-#line 1021 "dhcp6_parser.yy" // lalr1.cc:859
+  case 278:
+#line 1059 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("type", prf);
     ctx.leave();
 }
-#line 1874 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1923 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 275:
-#line 1027 "dhcp6_parser.yy" // lalr1.cc:859
+  case 279:
+#line 1065 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1882 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1931 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 276:
-#line 1029 "dhcp6_parser.yy" // lalr1.cc:859
+  case 280:
+#line 1067 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr rtypes(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("record-types", rtypes);
     ctx.leave();
 }
-#line 1892 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1941 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 277:
-#line 1035 "dhcp6_parser.yy" // lalr1.cc:859
+  case 281:
+#line 1073 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1900 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1949 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 278:
-#line 1037 "dhcp6_parser.yy" // lalr1.cc:859
+  case 282:
+#line 1075 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr space(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("space", space);
     ctx.leave();
 }
-#line 1910 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1959 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 280:
-#line 1045 "dhcp6_parser.yy" // lalr1.cc:859
+  case 284:
+#line 1083 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1918 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1967 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 281:
-#line 1047 "dhcp6_parser.yy" // lalr1.cc:859
+  case 285:
+#line 1085 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr encap(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("encapsulate", encap);
     ctx.leave();
 }
-#line 1928 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1977 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 282:
-#line 1053 "dhcp6_parser.yy" // lalr1.cc:859
+  case 286:
+#line 1091 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr array(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("array", array);
 }
-#line 1937 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1986 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 283:
-#line 1062 "dhcp6_parser.yy" // lalr1.cc:859
+  case 287:
+#line 1100 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("option-data", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DATA);
 }
-#line 1948 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1997 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 284:
-#line 1067 "dhcp6_parser.yy" // lalr1.cc:859
+  case 288:
+#line 1105 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1957 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2006 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 289:
-#line 1086 "dhcp6_parser.yy" // lalr1.cc:859
+  case 293:
+#line 1124 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1967 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2016 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 290:
-#line 1090 "dhcp6_parser.yy" // lalr1.cc:859
+  case 294:
+#line 1128 "dhcp6_parser.yy" // lalr1.cc:859
     {
+    /// @todo: the code or name parameters are required.
     ctx.stack_.pop_back();
 }
-#line 1975 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2025 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 291:
-#line 1097 "dhcp6_parser.yy" // lalr1.cc:859
+  case 295:
+#line 1136 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the option-data list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1985 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2035 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 292:
-#line 1101 "dhcp6_parser.yy" // lalr1.cc:859
+  case 296:
+#line 1140 "dhcp6_parser.yy" // lalr1.cc:859
     {
+    /// @todo: the code or name parameters are required.
     // parsing completed
 }
-#line 1993 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2044 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 305:
-#line 1131 "dhcp6_parser.yy" // lalr1.cc:859
+  case 309:
+#line 1171 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2001 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2052 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 306:
-#line 1133 "dhcp6_parser.yy" // lalr1.cc:859
+  case 310:
+#line 1173 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr data(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("data", data);
     ctx.leave();
 }
-#line 2011 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2062 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 309:
-#line 1143 "dhcp6_parser.yy" // lalr1.cc:859
+  case 313:
+#line 1183 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr space(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("csv-format", space);
 }
-#line 2020 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2071 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 310:
-#line 1148 "dhcp6_parser.yy" // lalr1.cc:859
+  case 314:
+#line 1188 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr persist(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("always-send", persist);
 }
-#line 2029 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2080 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 311:
-#line 1156 "dhcp6_parser.yy" // lalr1.cc:859
+  case 315:
+#line 1196 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pools", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.POOLS);
 }
-#line 2040 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2091 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 312:
-#line 1161 "dhcp6_parser.yy" // lalr1.cc:859
+  case 316:
+#line 1201 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2049 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2100 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 317:
-#line 1176 "dhcp6_parser.yy" // lalr1.cc:859
+  case 321:
+#line 1216 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2059 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2110 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 318:
-#line 1180 "dhcp6_parser.yy" // lalr1.cc:859
+  case 322:
+#line 1220 "dhcp6_parser.yy" // lalr1.cc:859
     {
+    // The pool parameter is required.
+    ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2067 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2120 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 319:
-#line 1184 "dhcp6_parser.yy" // lalr1.cc:859
+  case 323:
+#line 1226 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2077 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2130 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 320:
-#line 1188 "dhcp6_parser.yy" // lalr1.cc:859
+  case 324:
+#line 1230 "dhcp6_parser.yy" // lalr1.cc:859
     {
-    // parsing completed
+    // The pool parameter is required.
+    ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
 }
-#line 2085 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2139 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 327:
-#line 1202 "dhcp6_parser.yy" // lalr1.cc:859
+  case 331:
+#line 1245 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2093 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2147 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 328:
-#line 1204 "dhcp6_parser.yy" // lalr1.cc:859
+  case 332:
+#line 1247 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr pool(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pool", pool);
     ctx.leave();
 }
-#line 2103 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2157 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 329:
-#line 1210 "dhcp6_parser.yy" // lalr1.cc:859
+  case 333:
+#line 1253 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2111 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2165 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 330:
-#line 1212 "dhcp6_parser.yy" // lalr1.cc:859
+  case 334:
+#line 1255 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("user-context", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2120 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2174 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 331:
-#line 1220 "dhcp6_parser.yy" // lalr1.cc:859
+  case 335:
+#line 1263 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pd-pools", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.PD_POOLS);
 }
-#line 2131 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2185 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 332:
-#line 1225 "dhcp6_parser.yy" // lalr1.cc:859
+  case 336:
+#line 1268 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2140 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2194 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 337:
-#line 1240 "dhcp6_parser.yy" // lalr1.cc:859
+  case 341:
+#line 1283 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2150 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2204 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 338:
-#line 1244 "dhcp6_parser.yy" // lalr1.cc:859
+  case 342:
+#line 1287 "dhcp6_parser.yy" // lalr1.cc:859
     {
+    // The prefix, prefix len and delegated len parameters are required.
+    ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
+    ctx.require("prefix-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
+    ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2158 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2216 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 339:
-#line 1248 "dhcp6_parser.yy" // lalr1.cc:859
+  case 343:
+#line 1295 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the pd-pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2168 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2226 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 340:
-#line 1252 "dhcp6_parser.yy" // lalr1.cc:859
+  case 344:
+#line 1299 "dhcp6_parser.yy" // lalr1.cc:859
     {
+    // The prefix, prefix len and delegated len parameters are required.
+    ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
+    ctx.require("prefix-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
+    ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2176 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2238 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 351:
-#line 1270 "dhcp6_parser.yy" // lalr1.cc:859
+  case 355:
+#line 1321 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2184 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2246 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 352:
-#line 1272 "dhcp6_parser.yy" // lalr1.cc:859
+  case 356:
+#line 1323 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("prefix", prf);
     ctx.leave();
 }
-#line 2194 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2256 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 353:
-#line 1278 "dhcp6_parser.yy" // lalr1.cc:859
+  case 357:
+#line 1329 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("prefix-len", prf);
 }
-#line 2203 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2265 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 354:
-#line 1283 "dhcp6_parser.yy" // lalr1.cc:859
+  case 358:
+#line 1334 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2211 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2273 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 355:
-#line 1285 "dhcp6_parser.yy" // lalr1.cc:859
+  case 359:
+#line 1336 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("excluded-prefix", prf);
     ctx.leave();
 }
-#line 2221 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2283 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 356:
-#line 1291 "dhcp6_parser.yy" // lalr1.cc:859
+  case 360:
+#line 1342 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("excluded-prefix-len", prf);
 }
-#line 2230 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2292 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 357:
-#line 1296 "dhcp6_parser.yy" // lalr1.cc:859
+  case 361:
+#line 1347 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr deleg(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("delegated-len", deleg);
 }
-#line 2239 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2301 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 358:
-#line 1304 "dhcp6_parser.yy" // lalr1.cc:859
+  case 362:
+#line 1355 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.RESERVATIONS);
 }
-#line 2250 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2312 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 359:
-#line 1309 "dhcp6_parser.yy" // lalr1.cc:859
+  case 363:
+#line 1360 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2259 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2321 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 364:
-#line 1322 "dhcp6_parser.yy" // lalr1.cc:859
+  case 368:
+#line 1373 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2269 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2331 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 365:
-#line 1326 "dhcp6_parser.yy" // lalr1.cc:859
+  case 369:
+#line 1377 "dhcp6_parser.yy" // lalr1.cc:859
     {
+    /// @todo: an identifier parameter is required.
     ctx.stack_.pop_back();
 }
-#line 2277 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2340 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 366:
-#line 1330 "dhcp6_parser.yy" // lalr1.cc:859
+  case 370:
+#line 1382 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the reservations list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2287 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2350 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 367:
-#line 1334 "dhcp6_parser.yy" // lalr1.cc:859
+  case 371:
+#line 1386 "dhcp6_parser.yy" // lalr1.cc:859
     {
+    /// @todo: an identifier parameter is required.
     // parsing completed
 }
-#line 2295 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2359 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 381:
-#line 1358 "dhcp6_parser.yy" // lalr1.cc:859
+  case 385:
+#line 1411 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-addresses", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2306 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2370 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 382:
-#line 1363 "dhcp6_parser.yy" // lalr1.cc:859
+  case 386:
+#line 1416 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2315 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2379 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 383:
-#line 1368 "dhcp6_parser.yy" // lalr1.cc:859
+  case 387:
+#line 1421 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("prefixes", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2326 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2390 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 384:
-#line 1373 "dhcp6_parser.yy" // lalr1.cc:859
+  case 388:
+#line 1426 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2335 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2399 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 385:
-#line 1378 "dhcp6_parser.yy" // lalr1.cc:859
+  case 389:
+#line 1431 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2343 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2407 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 386:
-#line 1380 "dhcp6_parser.yy" // lalr1.cc:859
+  case 390:
+#line 1433 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("duid", d);
     ctx.leave();
 }
-#line 2353 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2417 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 387:
-#line 1386 "dhcp6_parser.yy" // lalr1.cc:859
+  case 391:
+#line 1439 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2361 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2425 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 388:
-#line 1388 "dhcp6_parser.yy" // lalr1.cc:859
+  case 392:
+#line 1441 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hw-address", hw);
     ctx.leave();
 }
-#line 2371 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2435 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 389:
-#line 1394 "dhcp6_parser.yy" // lalr1.cc:859
+  case 393:
+#line 1447 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2379 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2443 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 390:
-#line 1396 "dhcp6_parser.yy" // lalr1.cc:859
+  case 394:
+#line 1449 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname", host);
     ctx.leave();
 }
-#line 2389 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2453 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 391:
-#line 1402 "dhcp6_parser.yy" // lalr1.cc:859
+  case 395:
+#line 1455 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2397 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2461 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 392:
-#line 1404 "dhcp6_parser.yy" // lalr1.cc:859
+  case 396:
+#line 1457 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flex-id", hw);
     ctx.leave();
 }
-#line 2407 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2471 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 393:
-#line 1410 "dhcp6_parser.yy" // lalr1.cc:859
+  case 397:
+#line 1463 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", c);
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2418 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2482 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 394:
-#line 1415 "dhcp6_parser.yy" // lalr1.cc:859
+  case 398:
+#line 1468 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2427 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2491 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 395:
-#line 1423 "dhcp6_parser.yy" // lalr1.cc:859
+  case 399:
+#line 1476 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("relay", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.RELAY);
 }
-#line 2438 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2502 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 396:
-#line 1428 "dhcp6_parser.yy" // lalr1.cc:859
+  case 400:
+#line 1481 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2447 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2511 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 397:
-#line 1433 "dhcp6_parser.yy" // lalr1.cc:859
+  case 401:
+#line 1486 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2455 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2519 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 398:
-#line 1435 "dhcp6_parser.yy" // lalr1.cc:859
+  case 402:
+#line 1488 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr ip(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-address", ip);
     ctx.leave();
 }
-#line 2465 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2529 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 399:
-#line 1444 "dhcp6_parser.yy" // lalr1.cc:859
+  case 403:
+#line 1497 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CLIENT_CLASSES);
 }
-#line 2476 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2540 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 400:
-#line 1449 "dhcp6_parser.yy" // lalr1.cc:859
+  case 404:
+#line 1502 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2485 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2549 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 403:
-#line 1458 "dhcp6_parser.yy" // lalr1.cc:859
+  case 407:
+#line 1511 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2495 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2559 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 404:
-#line 1462 "dhcp6_parser.yy" // lalr1.cc:859
+  case 408:
+#line 1515 "dhcp6_parser.yy" // lalr1.cc:859
     {
+    // The name client class parameter is required.
+    ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2503 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2569 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 414:
-#line 1482 "dhcp6_parser.yy" // lalr1.cc:859
+  case 418:
+#line 1537 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2511 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2577 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 415:
-#line 1484 "dhcp6_parser.yy" // lalr1.cc:859
+  case 419:
+#line 1539 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr test(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("test", test);
     ctx.leave();
 }
-#line 2521 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2587 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 416:
-#line 1493 "dhcp6_parser.yy" // lalr1.cc:859
+  case 420:
+#line 1548 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-id", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SERVER_ID);
 }
-#line 2532 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2598 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 417:
-#line 1498 "dhcp6_parser.yy" // lalr1.cc:859
+  case 421:
+#line 1553 "dhcp6_parser.yy" // lalr1.cc:859
     {
+    // The type parameter is required.
+    ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2541 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2609 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 427:
-#line 1516 "dhcp6_parser.yy" // lalr1.cc:859
+  case 431:
+#line 1573 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.DUID_TYPE);
 }
-#line 2549 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2617 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 428:
-#line 1518 "dhcp6_parser.yy" // lalr1.cc:859
+  case 432:
+#line 1575 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2558 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2626 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 429:
-#line 1523 "dhcp6_parser.yy" // lalr1.cc:859
+  case 433:
+#line 1580 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); }
-#line 2564 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2632 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 430:
-#line 1524 "dhcp6_parser.yy" // lalr1.cc:859
+  case 434:
+#line 1581 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); }
-#line 2570 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2638 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 431:
-#line 1525 "dhcp6_parser.yy" // lalr1.cc:859
+  case 435:
+#line 1582 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); }
-#line 2576 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2644 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 432:
-#line 1528 "dhcp6_parser.yy" // lalr1.cc:859
+  case 436:
+#line 1585 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr htype(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("htype", htype);
 }
-#line 2585 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2653 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 433:
-#line 1533 "dhcp6_parser.yy" // lalr1.cc:859
+  case 437:
+#line 1590 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2593 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2661 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 434:
-#line 1535 "dhcp6_parser.yy" // lalr1.cc:859
+  case 438:
+#line 1592 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr id(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("identifier", id);
     ctx.leave();
 }
-#line 2603 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2671 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 435:
-#line 1541 "dhcp6_parser.yy" // lalr1.cc:859
+  case 439:
+#line 1598 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("time", time);
 }
-#line 2612 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2680 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 436:
-#line 1546 "dhcp6_parser.yy" // lalr1.cc:859
+  case 440:
+#line 1603 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enterprise-id", time);
 }
-#line 2621 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2689 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 437:
-#line 1553 "dhcp6_parser.yy" // lalr1.cc:859
+  case 441:
+#line 1610 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp4o6-port", time);
 }
-#line 2630 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2698 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 438:
-#line 1560 "dhcp6_parser.yy" // lalr1.cc:859
+  case 442:
+#line 1617 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("control-socket", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.CONTROL_SOCKET);
 }
-#line 2641 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2709 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 439:
-#line 1565 "dhcp6_parser.yy" // lalr1.cc:859
+  case 443:
+#line 1622 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2650 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2718 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 444:
-#line 1578 "dhcp6_parser.yy" // lalr1.cc:859
+  case 448:
+#line 1635 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2658 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2726 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 445:
-#line 1580 "dhcp6_parser.yy" // lalr1.cc:859
+  case 449:
+#line 1637 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr stype(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-type", stype);
     ctx.leave();
 }
-#line 2668 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2736 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 446:
-#line 1586 "dhcp6_parser.yy" // lalr1.cc:859
+  case 450:
+#line 1643 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2676 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2744 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 447:
-#line 1588 "dhcp6_parser.yy" // lalr1.cc:859
+  case 451:
+#line 1645 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-name", name);
     ctx.leave();
 }
-#line 2686 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2754 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 448:
-#line 1596 "dhcp6_parser.yy" // lalr1.cc:859
+  case 452:
+#line 1653 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp-ddns", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.DHCP_DDNS);
 }
-#line 2697 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2765 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 449:
-#line 1601 "dhcp6_parser.yy" // lalr1.cc:859
+  case 453:
+#line 1658 "dhcp6_parser.yy" // lalr1.cc:859
     {
+    // The enable updates DHCP DDNS parameter is required.
+    ctx.require("enable-updates", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2706 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2776 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 450:
-#line 1606 "dhcp6_parser.yy" // lalr1.cc:859
+  case 454:
+#line 1665 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the dhcp-ddns map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2716 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2786 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 451:
-#line 1610 "dhcp6_parser.yy" // lalr1.cc:859
+  case 455:
+#line 1669 "dhcp6_parser.yy" // lalr1.cc:859
     {
+    // The enable updates DHCP DDNS parameter is required.
+    ctx.require("enable-updates", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2724 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2796 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 469:
-#line 1635 "dhcp6_parser.yy" // lalr1.cc:859
+  case 473:
+#line 1696 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enable-updates", b);
 }
-#line 2733 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2805 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 470:
-#line 1640 "dhcp6_parser.yy" // lalr1.cc:859
+  case 474:
+#line 1701 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2741 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2813 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 471:
-#line 1642 "dhcp6_parser.yy" // lalr1.cc:859
+  case 475:
+#line 1703 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("qualifying-suffix", s);
     ctx.leave();
 }
-#line 2751 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2823 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 472:
-#line 1648 "dhcp6_parser.yy" // lalr1.cc:859
+  case 476:
+#line 1709 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2759 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2831 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 473:
-#line 1650 "dhcp6_parser.yy" // lalr1.cc:859
+  case 477:
+#line 1711 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-ip", s);
     ctx.leave();
 }
-#line 2769 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2841 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 474:
-#line 1656 "dhcp6_parser.yy" // lalr1.cc:859
+  case 478:
+#line 1717 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-port", i);
 }
-#line 2778 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2850 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 475:
-#line 1661 "dhcp6_parser.yy" // lalr1.cc:859
+  case 479:
+#line 1722 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2786 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2858 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 476:
-#line 1663 "dhcp6_parser.yy" // lalr1.cc:859
+  case 480:
+#line 1724 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-ip", s);
     ctx.leave();
 }
-#line 2796 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2868 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 477:
-#line 1669 "dhcp6_parser.yy" // lalr1.cc:859
+  case 481:
+#line 1730 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-port", i);
 }
-#line 2805 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2877 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 478:
-#line 1674 "dhcp6_parser.yy" // lalr1.cc:859
+  case 482:
+#line 1735 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-queue-size", i);
 }
-#line 2814 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2886 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 479:
-#line 1679 "dhcp6_parser.yy" // lalr1.cc:859
+  case 483:
+#line 1740 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NCR_PROTOCOL);
 }
-#line 2822 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2894 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 480:
-#line 1681 "dhcp6_parser.yy" // lalr1.cc:859
+  case 484:
+#line 1742 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2831 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2903 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 481:
-#line 1687 "dhcp6_parser.yy" // lalr1.cc:859
+  case 485:
+#line 1748 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
-#line 2837 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2909 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 482:
-#line 1688 "dhcp6_parser.yy" // lalr1.cc:859
+  case 486:
+#line 1749 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
-#line 2843 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2915 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 483:
-#line 1691 "dhcp6_parser.yy" // lalr1.cc:859
+  case 487:
+#line 1752 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NCR_FORMAT);
 }
-#line 2851 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2923 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 484:
-#line 1693 "dhcp6_parser.yy" // lalr1.cc:859
+  case 488:
+#line 1754 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ncr-format", json);
     ctx.leave();
 }
-#line 2861 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2933 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 485:
-#line 1699 "dhcp6_parser.yy" // lalr1.cc:859
+  case 489:
+#line 1760 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("always-include-fqdn", b);
 }
-#line 2870 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2942 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 486:
-#line 1704 "dhcp6_parser.yy" // lalr1.cc:859
+  case 490:
+#line 1765 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-no-update", b);
 }
-#line 2879 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2951 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 487:
-#line 1709 "dhcp6_parser.yy" // lalr1.cc:859
+  case 491:
+#line 1770 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-client-update", b);
 }
-#line 2888 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2960 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 488:
-#line 1714 "dhcp6_parser.yy" // lalr1.cc:859
+  case 492:
+#line 1775 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.REPLACE_CLIENT_NAME);
 }
-#line 2896 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2968 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 489:
-#line 1716 "dhcp6_parser.yy" // lalr1.cc:859
+  case 493:
+#line 1777 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2905 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2977 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 490:
-#line 1722 "dhcp6_parser.yy" // lalr1.cc:859
+  case 494:
+#line 1783 "dhcp6_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location))); 
       }
-#line 2913 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2985 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 491:
-#line 1725 "dhcp6_parser.yy" // lalr1.cc:859
+  case 495:
+#line 1786 "dhcp6_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
       }
-#line 2921 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2993 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 492:
-#line 1728 "dhcp6_parser.yy" // lalr1.cc:859
+  case 496:
+#line 1789 "dhcp6_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
       }
-#line 2929 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3001 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 493:
-#line 1731 "dhcp6_parser.yy" // lalr1.cc:859
+  case 497:
+#line 1792 "dhcp6_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
       }
-#line 2937 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3009 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 494:
-#line 1734 "dhcp6_parser.yy" // lalr1.cc:859
+  case 498:
+#line 1795 "dhcp6_parser.yy" // lalr1.cc:859
     {
       error(yystack_[0].location, "boolean values for the replace-client-name are "
                 "no longer supported");
       }
-#line 2946 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3018 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 495:
-#line 1740 "dhcp6_parser.yy" // lalr1.cc:859
+  case 499:
+#line 1801 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2954 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3026 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 496:
-#line 1742 "dhcp6_parser.yy" // lalr1.cc:859
+  case 500:
+#line 1803 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("generated-prefix", s);
     ctx.leave();
 }
-#line 2964 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3036 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 497:
-#line 1750 "dhcp6_parser.yy" // lalr1.cc:859
+  case 501:
+#line 1811 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2972 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3044 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 498:
-#line 1752 "dhcp6_parser.yy" // lalr1.cc:859
+  case 502:
+#line 1813 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Dhcp4", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2981 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3053 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 499:
-#line 1757 "dhcp6_parser.yy" // lalr1.cc:859
+  case 503:
+#line 1818 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2989 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3061 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 500:
-#line 1759 "dhcp6_parser.yy" // lalr1.cc:859
+  case 504:
+#line 1820 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2998 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3070 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 501:
-#line 1764 "dhcp6_parser.yy" // lalr1.cc:859
+  case 505:
+#line 1825 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3006 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3078 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 502:
-#line 1766 "dhcp6_parser.yy" // lalr1.cc:859
+  case 506:
+#line 1827 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Control-agent", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3015 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3087 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 503:
-#line 1777 "dhcp6_parser.yy" // lalr1.cc:859
+  case 507:
+#line 1838 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("Logging", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.LOGGING);
 }
-#line 3026 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3098 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 504:
-#line 1782 "dhcp6_parser.yy" // lalr1.cc:859
+  case 508:
+#line 1843 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3035 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3107 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 508:
-#line 1799 "dhcp6_parser.yy" // lalr1.cc:859
+  case 512:
+#line 1860 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("loggers", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.LOGGERS);
 }
-#line 3046 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3118 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 509:
-#line 1804 "dhcp6_parser.yy" // lalr1.cc:859
+  case 513:
+#line 1865 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3055 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3127 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 512:
-#line 1816 "dhcp6_parser.yy" // lalr1.cc:859
+  case 516:
+#line 1877 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 3065 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3137 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 513:
-#line 1820 "dhcp6_parser.yy" // lalr1.cc:859
+  case 517:
+#line 1881 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 3073 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3145 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 521:
-#line 1835 "dhcp6_parser.yy" // lalr1.cc:859
+  case 525:
+#line 1896 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("debuglevel", dl);
 }
-#line 3082 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3154 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 522:
-#line 1840 "dhcp6_parser.yy" // lalr1.cc:859
+  case 526:
+#line 1901 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3090 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3162 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 523:
-#line 1842 "dhcp6_parser.yy" // lalr1.cc:859
+  case 527:
+#line 1903 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("severity", sev);
     ctx.leave();
 }
-#line 3100 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3172 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 524:
-#line 1848 "dhcp6_parser.yy" // lalr1.cc:859
+  case 528:
+#line 1909 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output_options", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OUTPUT_OPTIONS);
 }
-#line 3111 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3183 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 525:
-#line 1853 "dhcp6_parser.yy" // lalr1.cc:859
+  case 529:
+#line 1914 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3120 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3192 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 528:
-#line 1862 "dhcp6_parser.yy" // lalr1.cc:859
+  case 532:
+#line 1923 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3130 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3202 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 529:
-#line 1866 "dhcp6_parser.yy" // lalr1.cc:859
+  case 533:
+#line 1927 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 3138 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3210 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 536:
-#line 1880 "dhcp6_parser.yy" // lalr1.cc:859
+  case 540:
+#line 1941 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3146 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3218 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 537:
-#line 1882 "dhcp6_parser.yy" // lalr1.cc:859
+  case 541:
+#line 1943 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output", sev);
     ctx.leave();
 }
-#line 3156 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3228 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 538:
-#line 1888 "dhcp6_parser.yy" // lalr1.cc:859
+  case 542:
+#line 1949 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr flush(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush", flush);
 }
-#line 3165 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3237 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 539:
-#line 1893 "dhcp6_parser.yy" // lalr1.cc:859
+  case 543:
+#line 1954 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr maxsize(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxsize", maxsize);
 }
-#line 3174 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3246 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 540:
-#line 1898 "dhcp6_parser.yy" // lalr1.cc:859
+  case 544:
+#line 1959 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr maxver(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxver", maxver);
 }
-#line 3183 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3255 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
 
-#line 3187 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3259 "dhcp6_parser.cc" // lalr1.cc:859
             default:
               break;
             }
@@ -3438,603 +3510,606 @@ namespace isc { namespace dhcp {
   }
 
 
-  const short int Dhcp6Parser::yypact_ninf_ = -507;
+  const short int Dhcp6Parser::yypact_ninf_ = -509;
 
   const signed char Dhcp6Parser::yytable_ninf_ = -1;
 
   const short int
   Dhcp6Parser::yypact_[] =
   {
-     118,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,
-    -507,  -507,  -507,    33,    19,    24,    34,    63,   106,   113,
-     122,   128,   168,   191,   199,   203,  -507,  -507,  -507,  -507,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,
-      19,   -97,    17,    31,    76,    23,    -9,   105,    72,    62,
-      -5,   -33,   233,  -507,   210,   242,   263,   228,   270,  -507,
-    -507,  -507,  -507,  -507,   276,  -507,    71,  -507,  -507,  -507,
-    -507,  -507,  -507,  -507,  -507,  -507,   280,   281,   283,   284,
-     286,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,
-    -507,   287,  -507,  -507,  -507,   103,  -507,  -507,  -507,  -507,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,   288,
-     111,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,
-     292,   293,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,
-    -507,   124,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,   125,
-    -507,  -507,  -507,  -507,   294,  -507,   298,   303,  -507,  -507,
-    -507,   159,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,   300,   307,  -507,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,   309,
-    -507,  -507,  -507,   310,  -507,  -507,   311,   308,  -507,  -507,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,   314,
-     319,  -507,  -507,  -507,  -507,   316,   312,  -507,  -507,  -507,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,   170,  -507,  -507,
-    -507,   321,  -507,  -507,   322,  -507,   323,   324,  -507,  -507,
-     325,   326,   327,  -507,  -507,  -507,   171,  -507,  -507,  -507,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,
-    -507,  -507,  -507,    19,    19,  -507,   183,   329,   330,   331,
-     347,   348,  -507,    17,  -507,   349,   350,   351,   207,   208,
-     209,   211,   212,   352,   356,   359,   360,   361,   362,   363,
-     364,   365,   366,   221,   368,   369,    31,  -507,   370,   225,
-      76,  -507,    48,   371,   372,   374,   375,   376,   231,   234,
-     379,   380,   381,   383,    23,  -507,   384,   385,    -9,  -507,
-     386,   241,   388,   244,   245,   105,  -507,   389,   392,   393,
-     394,   395,   396,   397,  -507,    72,   398,   399,   254,   401,
-     402,   403,   256,  -507,    62,   405,   258,   259,  -507,    -5,
-     408,   409,   169,  -507,   262,   411,   415,   271,   416,   272,
-     273,   420,   421,   274,   275,   277,   424,   426,   233,  -507,
-    -507,  -507,   427,   425,   428,    19,    19,    19,  -507,   429,
-     430,   431,  -507,  -507,  -507,  -507,  -507,   434,   435,   436,
-     437,   438,   439,   440,   441,   442,   443,  -507,   446,   447,
-    -507,   450,  -507,  -507,  -507,  -507,  -507,  -507,   448,   454,
-    -507,  -507,  -507,   456,   457,   285,   315,   317,  -507,  -507,
-     100,   318,   458,   452,  -507,   328,   461,  -507,   332,  -507,
-     333,  -507,  -507,  -507,   450,   450,   450,   334,   335,   336,
-     337,  -507,   338,   339,  -507,   340,   341,   342,  -507,  -507,
-     343,  -507,  -507,  -507,   344,    19,  -507,  -507,   345,   346,
-    -507,   353,  -507,  -507,    36,   313,  -507,  -507,  -507,   -31,
-     354,  -507,    19,    31,   373,  -507,  -507,  -507,    76,   160,
-     160,   463,   464,   465,   -32,    19,   116,    25,   466,   115,
-      28,   177,   233,  -507,  -507,   470,  -507,    48,   468,   469,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,   472,   400,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,
-    -507,  -507,  -507,  -507,  -507,   204,  -507,   205,  -507,  -507,
-     206,  -507,  -507,  -507,  -507,   493,   494,   496,   497,   500,
-    -507,  -507,  -507,   214,  -507,  -507,  -507,  -507,  -507,  -507,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,   215,  -507,   499,
-     503,  -507,  -507,   501,   505,  -507,  -507,   504,   506,  -507,
-    -507,  -507,    45,  -507,  -507,  -507,   508,  -507,  -507,  -507,
-     243,  -507,  -507,  -507,  -507,   247,  -507,   509,   513,  -507,
-     507,   514,   515,   516,   517,   518,   216,  -507,  -507,  -507,
-    -507,  -507,  -507,  -507,  -507,  -507,   519,   520,   521,  -507,
-    -507,   217,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,
-     223,  -507,  -507,  -507,   224,   377,   378,  -507,  -507,   511,
-     525,  -507,  -507,   523,   527,  -507,  -507,   526,   528,  -507,
-    -507,   529,  -507,   530,   373,  -507,  -507,   531,   532,   534,
-     535,   390,   391,   404,   406,   407,   537,   538,   160,  -507,
-    -507,    23,  -507,   463,    62,  -507,   464,    -5,  -507,   465,
-     -32,  -507,  -507,   116,  -507,    25,  -507,   -33,  -507,   466,
-     410,   412,   413,   414,   417,   418,   115,  -507,   540,   541,
-     419,   422,   423,    28,  -507,   542,   543,   177,  -507,  -507,
-    -507,   544,   545,  -507,    -9,  -507,   468,   105,  -507,   469,
-      72,  -507,   472,   547,  -507,   548,  -507,   119,   432,   433,
-     444,  -507,  -507,  -507,  -507,  -507,   445,   449,  -507,   226,
-    -507,   551,  -507,   553,  -507,  -507,  -507,  -507,   230,  -507,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,   -34,   451,  -507,
-    -507,  -507,  -507,   453,   455,  -507,  -507,   459,   232,  -507,
-     236,  -507,   557,  -507,   460,   549,  -507,  -507,  -507,  -507,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,
-    -507,  -507,  -507,   265,  -507,    66,   549,  -507,  -507,   562,
-    -507,  -507,  -507,   239,  -507,  -507,  -507,  -507,  -507,   566,
-     462,   567,    66,  -507,   550,  -507,   467,  -507,   568,  -507,
-    -507,   266,  -507,   -56,   568,  -507,  -507,   570,   572,   573,
-     240,  -507,  -507,  -507,  -507,  -507,  -507,   574,   471,   474,
-     475,   -56,  -507,   473,  -507,  -507,  -507,  -507,  -507
+     107,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,    30,    20,    26,    37,    68,    75,
+      82,    85,    95,   118,   124,   140,   183,   200,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,    20,  -111,    18,    27,    97,    19,
+      -2,    32,    86,   188,    58,    73,   -27,    89,  -509,   231,
+     254,   263,   251,   291,  -509,  -509,  -509,  -509,  -509,   292,
+    -509,    29,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,   298,   305,   320,   321,   322,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,   323,  -509,  -509,  -509,
+     141,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,   324,   142,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,   325,   326,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,   206,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,   208,  -509,  -509,  -509,  -509,   327,
+    -509,   329,   330,  -509,  -509,  -509,   210,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,   303,   314,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,   328,  -509,  -509,   331,  -509,  -509,  -509,   333,
+    -509,  -509,   332,   335,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,   337,   338,  -509,  -509,  -509,
+    -509,   336,   340,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,   212,  -509,  -509,  -509,   341,  -509,  -509,
+     342,  -509,   343,   344,  -509,  -509,   345,   346,   347,  -509,
+    -509,  -509,   214,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,    20,
+      20,  -509,   202,   349,   350,   351,   352,   353,  -509,    18,
+    -509,   354,   355,   356,   211,   213,   215,   217,   219,   357,
+     359,   361,   363,   365,   367,   368,   369,   370,   371,   227,
+     372,   373,    27,  -509,   375,   228,    97,  -509,    -4,   376,
+     378,   379,   380,   381,   236,   233,   384,   385,   386,   387,
+      19,  -509,   388,   389,    -2,  -509,   390,   244,   392,   246,
+     247,    32,  -509,   395,   396,   397,   398,   399,   400,   401,
+    -509,    86,  -509,   402,   403,   259,   404,   405,   407,   260,
+    -509,    58,   408,   261,   262,  -509,    73,   412,   413,   196,
+    -509,   270,   414,   415,   273,   421,   275,   276,   424,   425,
+     278,   279,   280,   426,   430,    89,  -509,  -509,  -509,   431,
+     429,   432,    20,    20,    20,  -509,   433,   434,   437,  -509,
+    -509,  -509,  -509,  -509,   440,   441,   442,   443,   444,   447,
+     448,   449,   450,   451,  -509,   452,   455,  -509,   459,  -509,
+    -509,  -509,  -509,  -509,  -509,   457,   435,  -509,  -509,  -509,
+     461,   462,   287,   306,   319,  -509,  -509,    93,   334,   465,
+     464,  -509,   339,   466,  -509,   348,  -509,   358,  -509,  -509,
+    -509,   459,   459,   459,   360,   362,   364,   366,  -509,   374,
+     377,  -509,   382,   383,   391,  -509,  -509,   393,  -509,  -509,
+    -509,   394,    20,  -509,  -509,   406,   409,  -509,   410,  -509,
+    -509,   168,   411,  -509,  -509,  -509,    57,   416,  -509,    20,
+      27,   419,  -509,  -509,  -509,    97,   112,   112,   467,   468,
+     469,   -44,    20,   -30,    36,   471,    98,    24,    74,    89,
+    -509,  -509,   475,  -509,    -4,   473,   474,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,   476,   417,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,   216,  -509,   218,  -509,  -509,   224,  -509,  -509,
+    -509,  -509,   478,   481,   482,   483,   484,  -509,  -509,  -509,
+     225,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,   226,  -509,   485,   487,  -509,  -509,
+     486,   490,  -509,  -509,   488,   492,  -509,  -509,  -509,   126,
+    -509,  -509,  -509,   493,  -509,  -509,  -509,   235,  -509,  -509,
+    -509,  -509,   297,  -509,   495,   499,  -509,   500,   501,   502,
+     503,   505,   507,   232,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,   509,   511,   514,  -509,  -509,   255,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,   257,  -509,  -509,
+    -509,   258,   418,   420,  -509,  -509,   497,   516,  -509,  -509,
+     515,   517,  -509,  -509,   519,   520,  -509,  -509,   518,  -509,
+     524,   419,  -509,  -509,   525,   526,   530,   531,   304,   422,
+     423,   427,   428,   532,   533,   112,  -509,  -509,    19,  -509,
+     467,    58,  -509,   468,    73,  -509,   469,   -44,  -509,  -509,
+     -30,  -509,    36,  -509,   -27,  -509,   471,   436,   438,   439,
+     445,   446,   453,    98,  -509,   534,   535,   454,   456,   458,
+      24,  -509,   536,   538,    74,  -509,  -509,  -509,   540,   544,
+    -509,    -2,  -509,   473,    32,  -509,   474,    86,  -509,   476,
+     545,  -509,   491,  -509,   272,   460,   463,   470,  -509,  -509,
+    -509,  -509,  -509,   472,   477,  -509,   265,  -509,   542,  -509,
+     543,  -509,  -509,  -509,  -509,   266,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,   229,   479,  -509,  -509,  -509,  -509,
+     480,   489,  -509,  -509,   494,   267,  -509,   268,  -509,   546,
+    -509,   496,   541,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+     307,  -509,    62,   541,  -509,  -509,   548,  -509,  -509,  -509,
+     274,  -509,  -509,  -509,  -509,  -509,   549,   506,   551,    62,
+    -509,   552,  -509,   498,  -509,   554,  -509,  -509,   313,  -509,
+     -60,   554,  -509,  -509,   558,   559,   560,   277,  -509,  -509,
+    -509,  -509,  -509,  -509,   561,   510,   508,   513,   -60,  -509,
+     504,  -509,  -509,  -509,  -509,  -509
   };
 
   const unsigned short int
   Dhcp6Parser::yydefact_[] =
   {
        0,     2,     4,     6,     8,    10,    12,    14,    16,    18,
-      20,    22,    24,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     1,    41,    34,    30,
-      29,    26,    27,    28,    33,     3,    31,    32,    54,     5,
-      66,     7,    99,     9,   212,    11,   319,    13,   339,    15,
-     366,    17,   256,    19,   291,    21,   177,    23,   450,    25,
-      43,    37,     0,     0,     0,     0,     0,     0,   368,   258,
-     293,     0,     0,    45,     0,    44,     0,     0,    38,    64,
-     503,   497,   499,   501,     0,    63,     0,    56,    58,    60,
-      61,    62,    59,    97,   108,   110,     0,     0,     0,     0,
-       0,   204,   248,   283,   150,   167,   158,   399,   169,   188,
-     416,     0,   438,   448,    91,     0,    68,    70,    71,    72,
-      73,    74,    76,    77,    78,    79,    81,    80,    85,    86,
-      75,    83,    84,    82,    87,    88,    89,    90,   105,     0,
-       0,   101,   103,   104,   403,   311,   331,   233,   235,   237,
-       0,     0,   241,   239,   358,   395,   232,   216,   217,   218,
-     219,     0,   214,   223,   224,   225,   228,   230,   226,   227,
-     220,   221,   222,   229,   231,   327,   329,   326,   324,     0,
-     321,   323,   325,   351,     0,   354,     0,     0,   350,   346,
-     349,     0,   341,   343,   344,   347,   348,   345,   393,   381,
-     383,   385,   387,   389,   391,   380,   379,     0,   369,   370,
-     374,   375,   372,   376,   377,   378,   373,   273,   140,     0,
-     277,   275,   280,     0,   269,   270,     0,   259,   260,   262,
-     272,   263,   264,   265,   279,   266,   267,   268,   305,     0,
-       0,   303,   304,   307,   308,     0,   294,   295,   297,   298,
-     299,   300,   301,   302,   184,   186,   181,     0,   179,   182,
-     183,     0,   470,   472,     0,   475,     0,     0,   479,   483,
-       0,     0,     0,   488,   495,   468,     0,   452,   454,   455,
-     456,   457,   458,   459,   460,   461,   462,   463,   464,   465,
-     466,   467,    42,     0,     0,    35,     0,     0,     0,     0,
-       0,     0,    53,     0,    55,     0,     0,     0,     0,     0,
+      20,    22,    24,    26,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     1,    43,
+      36,    32,    31,    28,    29,    30,    35,     3,    33,    34,
+      56,     5,    68,     7,   101,     9,   214,    11,   323,    13,
+     343,    15,   370,    17,   252,    19,   260,    21,   295,    23,
+     179,    25,   454,    27,    45,    39,     0,     0,     0,     0,
+       0,     0,   372,     0,   262,   297,     0,     0,    47,     0,
+      46,     0,     0,    40,    66,   507,   501,   503,   505,     0,
+      65,     0,    58,    60,    62,    63,    64,    61,    99,   110,
+     112,     0,     0,     0,     0,     0,   206,   250,   287,   152,
+     169,   160,   403,   171,   190,   420,     0,   442,   452,    93,
+       0,    70,    72,    73,    74,    75,    76,    78,    79,    80,
+      81,    83,    82,    87,    88,    77,    85,    86,    84,    89,
+      90,    91,    92,   107,     0,     0,   103,   105,   106,   407,
+     315,   335,   235,   237,   239,     0,     0,   243,   241,   362,
+     399,   234,   218,   219,   220,   221,     0,   216,   225,   226,
+     227,   230,   232,   228,   229,   222,   223,   224,   231,   233,
+     331,   333,   330,   328,     0,   325,   327,   329,   355,     0,
+     358,     0,     0,   354,   350,   353,     0,   345,   347,   348,
+     351,   352,   349,   397,   385,   387,   389,   391,   393,   395,
+     384,   383,     0,   373,   374,   378,   379,   376,   380,   381,
+     382,   377,     0,   277,   142,     0,   281,   279,   284,     0,
+     273,   274,     0,   263,   264,   266,   276,   267,   268,   269,
+     283,   270,   271,   272,   309,     0,     0,   307,   308,   311,
+     312,     0,   298,   299,   301,   302,   303,   304,   305,   306,
+     186,   188,   183,     0,   181,   184,   185,     0,   474,   476,
+       0,   479,     0,     0,   483,   487,     0,     0,     0,   492,
+     499,   472,     0,   456,   458,   459,   460,   461,   462,   463,
+     464,   465,   466,   467,   468,   469,   470,   471,    44,     0,
+       0,    37,     0,     0,     0,     0,     0,     0,    55,     0,
+      57,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    67,     0,     0,
-       0,   100,   405,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   213,     0,     0,     0,   320,
-       0,     0,     0,     0,     0,     0,   340,     0,     0,     0,
-       0,     0,     0,     0,   367,     0,     0,     0,     0,     0,
-       0,     0,     0,   257,     0,     0,     0,     0,   292,     0,
-       0,     0,     0,   178,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   451,
-      46,    39,     0,     0,     0,     0,     0,     0,    57,     0,
-       0,     0,    92,    93,    94,    95,    96,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   437,     0,     0,
-      69,     0,   107,   102,   414,   412,   413,   411,     0,   406,
-     407,   409,   410,     0,     0,     0,     0,     0,   246,   247,
-       0,     0,     0,     0,   215,     0,     0,   322,     0,   353,
-       0,   356,   357,   342,     0,     0,     0,     0,     0,     0,
-       0,   371,     0,     0,   271,     0,     0,     0,   282,   261,
-       0,   309,   310,   296,     0,     0,   180,   469,     0,     0,
-     474,     0,   477,   478,     0,     0,   485,   486,   487,     0,
-       0,   453,     0,     0,     0,   498,   500,   502,     0,     0,
-       0,   206,   250,   285,     0,    43,     0,     0,   171,     0,
-       0,     0,     0,    47,   106,     0,   404,     0,   313,   333,
-     234,   236,   238,   243,   244,   245,   242,   240,   360,     0,
-     328,    36,   330,   352,   355,   394,   382,   384,   386,   388,
-     390,   392,   274,   141,   278,   276,   281,   306,   185,   187,
-     471,   473,   476,   481,   482,   480,   484,   490,   491,   492,
-     493,   494,   489,   496,    40,     0,   508,     0,   505,   507,
-       0,   127,   133,   135,   137,     0,     0,     0,     0,     0,
-     146,   148,   126,     0,   112,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,     0,   210,     0,
-     207,   208,   254,     0,   251,   252,   289,     0,   286,   287,
-     156,   157,     0,   152,   154,   155,     0,   165,   166,   162,
-       0,   160,   163,   164,   401,     0,   175,     0,   172,   173,
-       0,     0,     0,     0,     0,     0,     0,   190,   192,   193,
-     194,   195,   196,   197,   427,   433,     0,     0,     0,   426,
-     425,     0,   418,   420,   423,   421,   422,   424,   444,   446,
-       0,   440,   442,   443,     0,    49,     0,   408,   317,     0,
-     314,   315,   337,     0,   334,   335,   364,     0,   361,   362,
-     397,     0,    65,     0,     0,   504,    98,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   109,
-     111,     0,   205,     0,   258,   249,     0,   293,   284,     0,
-       0,   151,   168,     0,   159,     0,   400,     0,   170,     0,
-       0,     0,     0,     0,     0,     0,     0,   189,     0,     0,
-       0,     0,     0,     0,   417,     0,     0,     0,   439,   449,
-      51,     0,    50,   415,     0,   312,     0,     0,   332,     0,
-     368,   359,     0,     0,   396,     0,   506,     0,     0,     0,
-       0,   139,   142,   143,   144,   145,     0,     0,   113,     0,
-     209,     0,   253,     0,   288,   153,   161,   402,     0,   174,
-     198,   199,   200,   201,   202,   203,   191,     0,     0,   432,
-     435,   436,   419,     0,     0,   441,    48,     0,     0,   316,
-       0,   336,     0,   363,     0,     0,   129,   130,   131,   132,
-     128,   134,   136,   138,   147,   149,   211,   255,   290,   176,
-     429,   430,   431,   428,   434,   445,   447,    52,   318,   338,
-     365,   398,   512,     0,   510,     0,     0,   509,   524,     0,
-     522,   520,   516,     0,   514,   518,   519,   517,   511,     0,
-       0,     0,     0,   513,     0,   521,     0,   515,     0,   523,
-     528,     0,   526,     0,     0,   525,   536,     0,     0,     0,
-       0,   530,   532,   533,   534,   535,   527,     0,     0,     0,
-       0,     0,   529,     0,   538,   539,   540,   531,   537
+       0,     0,     0,    69,     0,     0,     0,   102,   409,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   215,     0,     0,     0,   324,     0,     0,     0,     0,
+       0,     0,   344,     0,     0,     0,     0,     0,     0,     0,
+     371,     0,   253,     0,     0,     0,     0,     0,     0,     0,
+     261,     0,     0,     0,     0,   296,     0,     0,     0,     0,
+     180,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   455,    48,    41,     0,
+       0,     0,     0,     0,     0,    59,     0,     0,     0,    94,
+      95,    96,    97,    98,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   441,     0,     0,    71,     0,   109,
+     104,   418,   416,   417,   415,     0,   410,   411,   413,   414,
+       0,     0,     0,     0,     0,   248,   249,     0,     0,     0,
+       0,   217,     0,     0,   326,     0,   357,     0,   360,   361,
+     346,     0,     0,     0,     0,     0,     0,     0,   375,     0,
+       0,   275,     0,     0,     0,   286,   265,     0,   313,   314,
+     300,     0,     0,   182,   473,     0,     0,   478,     0,   481,
+     482,     0,     0,   489,   490,   491,     0,     0,   457,     0,
+       0,     0,   502,   504,   506,     0,     0,     0,   208,   254,
+     289,     0,    45,     0,     0,   173,     0,     0,     0,     0,
+      49,   108,     0,   408,     0,   317,   337,   236,   238,   240,
+     245,   246,   247,   244,   242,   364,     0,   332,    38,   334,
+     356,   359,   398,   386,   388,   390,   392,   394,   396,   278,
+     143,   282,   280,   285,   310,   187,   189,   475,   477,   480,
+     485,   486,   484,   488,   494,   495,   496,   497,   498,   493,
+     500,    42,     0,   512,     0,   509,   511,     0,   129,   135,
+     137,   139,     0,     0,     0,     0,     0,   148,   150,   128,
+       0,   114,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,     0,   212,     0,   209,   210,   258,
+       0,   255,   256,   293,     0,   290,   291,   158,   159,     0,
+     154,   156,   157,     0,   167,   168,   164,     0,   162,   165,
+     166,   405,     0,   177,     0,   174,   175,     0,     0,     0,
+       0,     0,     0,     0,   192,   194,   195,   196,   197,   198,
+     199,   431,   437,     0,     0,     0,   430,   429,     0,   422,
+     424,   427,   425,   426,   428,   448,   450,     0,   444,   446,
+     447,     0,    51,     0,   412,   321,     0,   318,   319,   341,
+       0,   338,   339,   368,     0,   365,   366,   401,     0,    67,
+       0,     0,   508,   100,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   111,   113,     0,   207,
+       0,   262,   251,     0,   297,   288,     0,     0,   153,   170,
+       0,   161,     0,   404,     0,   172,     0,     0,     0,     0,
+       0,     0,     0,     0,   191,     0,     0,     0,     0,     0,
+       0,   421,     0,     0,     0,   443,   453,    53,     0,    52,
+     419,     0,   316,     0,     0,   336,     0,   372,   363,     0,
+       0,   400,     0,   510,     0,     0,     0,     0,   141,   144,
+     145,   146,   147,     0,     0,   115,     0,   211,     0,   257,
+       0,   292,   155,   163,   406,     0,   176,   200,   201,   202,
+     203,   204,   205,   193,     0,     0,   436,   439,   440,   423,
+       0,     0,   445,    50,     0,     0,   320,     0,   340,     0,
+     367,     0,     0,   131,   132,   133,   134,   130,   136,   138,
+     140,   149,   151,   213,   259,   294,   178,   433,   434,   435,
+     432,   438,   449,   451,    54,   322,   342,   369,   402,   516,
+       0,   514,     0,     0,   513,   528,     0,   526,   524,   520,
+       0,   518,   522,   523,   521,   515,     0,     0,     0,     0,
+     517,     0,   525,     0,   519,     0,   527,   532,     0,   530,
+       0,     0,   529,   540,     0,     0,     0,     0,   534,   536,
+     537,   538,   539,   531,     0,     0,     0,     0,     0,   533,
+       0,   542,   543,   544,   535,   541
   };
 
   const short int
   Dhcp6Parser::yypgoto_[] =
   {
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,
-    -507,  -507,  -507,  -507,    11,  -507,    56,  -507,  -507,  -507,
-    -507,  -507,  -507,    18,  -507,  -189,  -507,  -507,  -507,   -62,
-    -507,  -507,  -507,   246,  -507,  -507,  -507,  -507,    49,   253,
-     -63,   -50,   -44,   -43,  -507,  -507,  -507,  -507,  -507,    75,
-     250,  -507,  -507,  -507,  -507,  -507,  -507,  -507,    74,  -123,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,
-     -58,  -507,  -506,  -507,  -507,  -507,  -507,  -507,  -507,  -507,
-    -507,  -507,  -507,  -134,  -493,  -507,  -507,  -507,  -507,  -136,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -141,  -507,
-    -507,  -507,  -138,   213,  -507,  -507,  -507,  -507,  -507,  -507,
-    -507,  -146,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,
-    -507,  -507,  -122,  -507,  -507,  -507,  -119,   252,  -507,  -507,
-    -507,  -507,  -507,  -507,  -497,  -507,  -507,  -507,  -507,  -507,
-    -507,  -507,  -507,  -507,  -507,  -117,  -507,  -507,  -507,  -113,
-    -507,   229,  -507,   -59,  -507,  -507,  -507,  -507,  -507,   -57,
-    -507,  -507,  -507,  -507,  -507,   -49,  -507,  -507,  -507,  -114,
-    -507,  -507,  -507,  -120,  -507,   227,  -507,  -507,  -507,  -507,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,  -149,  -507,  -507,
-    -507,  -144,   267,  -507,  -507,   -66,  -507,  -507,  -507,  -507,
-    -507,  -148,  -507,  -507,  -507,  -143,   264,  -507,  -507,  -507,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -145,  -507,
-    -507,  -507,  -147,  -507,   255,  -507,  -507,  -507,  -507,  -507,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,    91,
-    -507,  -507,  -507,  -507,  -507,  -507,  -116,  -507,  -507,  -507,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -126,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,   104,   235,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,
-    -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,
-    -507,  -507,   -65,  -507,  -507,  -507,  -218,  -507,  -507,  -232,
-    -507,  -507,  -507,  -507,  -507,  -507,  -243,  -507,  -507,  -259,
-    -507,  -507,  -507,  -507,  -507
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,     8,  -509,     9,  -509,  -509,
+    -509,  -509,  -509,  -509,     0,  -509,  -306,  -509,  -509,  -509,
+     -66,  -509,  -509,  -509,   249,  -509,  -509,  -509,  -509,    59,
+     239,   -67,   -52,   -51,   -49,  -509,  -509,  -509,  -509,  -509,
+      52,   237,  -509,  -509,  -509,  -509,  -509,  -509,  -509,    55,
+    -139,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,   -74,  -509,  -508,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,  -150,  -499,  -509,  -509,  -509,  -509,
+    -152,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -155,
+    -509,  -509,  -509,  -151,   193,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -159,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -135,  -509,  -509,  -509,  -132,   238,  -509,
+    -509,  -509,  -509,  -509,  -509,  -502,  -509,  -509,  -509,  -509,
+    -509,  -509,   521,  -509,  -509,  -509,  -509,  -509,  -131,  -509,
+    -509,  -509,  -130,  -509,   220,  -509,   -68,  -509,  -509,  -509,
+    -509,  -509,   -54,  -509,  -509,  -509,  -509,  -509,   -57,  -509,
+    -509,  -509,  -133,  -509,  -509,  -509,  -129,  -509,   222,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -165,  -509,  -509,  -509,  -162,   248,  -509,  -509,   -55,  -509,
+    -509,  -509,  -509,  -509,  -166,  -509,  -509,  -509,  -161,   245,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -158,  -509,  -509,  -509,  -153,  -509,   241,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,    81,  -509,  -509,  -509,  -509,  -509,  -509,  -134,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -137,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,    90,   221,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,   -83,  -509,  -509,  -509,  -232,
+    -509,  -509,  -246,  -509,  -509,  -509,  -509,  -509,  -509,  -257,
+    -509,  -509,  -273,  -509,  -509,  -509,  -509,  -509
   };
 
   const short int
   Dhcp6Parser::yydefgoto_[] =
   {
-      -1,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    73,    35,    36,    61,   542,    77,
-      78,    37,    60,    74,    75,   524,   675,   751,   752,   114,
-      39,    62,    86,    87,    88,   297,    41,    63,   115,   116,
-     117,   118,   119,   120,   121,   122,   305,    43,    64,   140,
-     141,   142,   328,   143,   123,   306,   124,   307,   593,   594,
-     595,   697,   820,   596,   698,   597,   699,   598,   700,   599,
-     225,   367,   601,   602,   603,   604,   605,   706,   606,   707,
-     125,   316,   622,   623,   624,   625,   126,   318,   630,   631,
-     632,   633,   127,   317,   128,   320,   637,   638,   639,   727,
-      57,    71,   257,   258,   259,   380,   260,   381,   129,   321,
-     646,   647,   648,   649,   650,   651,   652,   653,   130,   313,
-     609,   610,   611,   711,    45,    65,   161,   162,   163,   335,
-     164,   336,   165,   337,   166,   341,   167,   340,   536,   168,
-     169,   131,   314,   613,   614,   615,   714,    53,    69,   226,
-     227,   228,   229,   230,   231,   232,   366,   233,   370,   234,
-     369,   235,   236,   371,   237,   132,   315,   617,   618,   619,
-     717,    55,    70,   245,   246,   247,   248,   249,   375,   250,
-     251,   252,   253,   171,   333,   679,   680,   681,   754,    47,
-      66,   179,   180,   181,   346,   182,   347,   172,   334,   683,
-     684,   685,   757,    49,    67,   191,   192,   193,   350,   194,
-     195,   352,   196,   197,   173,   342,   687,   688,   689,   760,
-      51,    68,   207,   208,   209,   210,   358,   211,   359,   212,
-     360,   213,   361,   214,   362,   215,   363,   216,   357,   174,
-     343,   691,   763,   133,   319,   635,   332,   438,   439,   440,
-     441,   442,   525,   134,   322,   661,   662,   663,   738,   833,
-     664,   665,   739,   666,   667,   135,   136,   324,   670,   671,
-     672,   745,   673,   746,   137,   325,    59,    72,   276,   277,
-     278,   279,   385,   280,   386,   281,   282,   388,   283,   284,
-     285,   391,   565,   286,   392,   287,   288,   289,   290,   396,
-     572,   291,   397,    89,   299,    90,   300,    91,   301,    92,
-     298,   577,   578,   579,   693,   843,   844,   845,   853,   854,
-     855,   856,   861,   857,   859,   871,   872,   873,   880,   881,
-     882,   887,   883,   884,   885
+      -1,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    78,    37,    38,    65,   549,
+      82,    83,    39,    64,    79,    80,   531,   682,   758,   759,
+     119,    41,    66,    91,    92,    93,   303,    43,    67,   120,
+     121,   122,   123,   124,   125,   126,   127,   311,    45,    68,
+     145,   146,   147,   334,   148,   128,   312,   129,   313,   600,
+     601,   602,   704,   827,   603,   705,   604,   706,   605,   707,
+     606,   231,   374,   608,   609,   610,   611,   612,   713,   613,
+     714,   130,   322,   629,   630,   631,   632,   131,   324,   637,
+     638,   639,   640,   132,   323,   133,   326,   644,   645,   646,
+     734,    61,    76,   263,   264,   265,   387,   266,   388,   134,
+     327,   653,   654,   655,   656,   657,   658,   659,   660,   135,
+     319,   616,   617,   618,   718,    47,    69,   166,   167,   168,
+     341,   169,   342,   170,   343,   171,   347,   172,   346,   543,
+     173,   174,   136,   320,    55,    73,   620,   621,   622,   721,
+      57,    74,   232,   233,   234,   235,   236,   237,   238,   373,
+     239,   377,   240,   376,   241,   242,   378,   243,   137,   321,
+     624,   625,   626,   724,    59,    75,   251,   252,   253,   254,
+     255,   382,   256,   257,   258,   259,   176,   339,   686,   687,
+     688,   761,    49,    70,   184,   185,   186,   352,   187,   353,
+     177,   340,   690,   691,   692,   764,    51,    71,   196,   197,
+     198,   356,   199,   200,   358,   201,   202,   178,   348,   694,
+     695,   696,   767,    53,    72,   212,   213,   214,   215,   364,
+     216,   365,   217,   366,   218,   367,   219,   368,   220,   369,
+     221,   363,   179,   349,   698,   770,   138,   325,   642,   338,
+     445,   446,   447,   448,   449,   532,   139,   328,   668,   669,
+     670,   745,   840,   671,   672,   746,   673,   674,   140,   141,
+     330,   677,   678,   679,   752,   680,   753,   142,   331,    63,
+      77,   282,   283,   284,   285,   392,   286,   393,   287,   288,
+     395,   289,   290,   291,   398,   572,   292,   399,   293,   294,
+     295,   296,   403,   579,   297,   404,    94,   305,    95,   306,
+      96,   307,    97,   304,   584,   585,   586,   700,   850,   851,
+     852,   860,   861,   862,   863,   868,   864,   866,   878,   879,
+     880,   887,   888,   889,   894,   890,   891,   892
   };
 
   const unsigned short int
   Dhcp6Parser::yytable_[] =
   {
-      85,   190,   157,   156,   177,   188,   205,   224,   241,   256,
-     275,   243,   242,   244,   660,   158,   170,   178,   189,   206,
-     634,   159,   160,   629,    27,    34,    28,    79,    29,   103,
-     144,    38,   144,    26,   218,   238,   219,   220,   239,   240,
-     175,    40,    93,   620,   654,    94,    95,   176,   720,   254,
-     255,   721,    76,   586,    96,    97,    98,    99,   830,   831,
-     832,   103,    96,    97,    98,    99,   100,   101,   102,   103,
-      42,   145,   876,   146,   303,   877,   878,   879,   217,   304,
-     147,   148,   149,   150,   151,   152,   103,   218,   138,   139,
-     567,   568,   569,   570,   153,   154,   153,   104,   105,   106,
-     107,   218,   155,   219,   220,   218,   326,   221,   222,   223,
-     103,   327,   108,    44,   330,   109,    84,   621,   434,   331,
-      46,   571,   110,   655,   656,   657,   658,   344,   348,    48,
-     111,   112,   345,   349,   113,    50,   816,   817,   818,   819,
-      84,   198,    80,   103,    84,   199,   200,   201,   202,   203,
-     204,    81,    82,    83,   563,   564,   183,   184,   185,   186,
-     187,   176,   355,   533,   534,   535,    84,   356,    30,    31,
-      32,    33,    84,   382,   398,    52,   581,    84,   383,   399,
-      84,   582,   583,   584,   585,   586,   587,   588,   589,   590,
-     591,   620,   627,   848,   628,   849,   850,    84,    54,   218,
-     640,   641,   642,   643,   644,   645,    56,   326,   694,   330,
-      58,    84,   692,   695,   696,    84,   292,   708,   708,   736,
-     743,    84,   709,   710,   737,   744,   747,   398,   787,   344,
-     629,   748,   749,   382,   826,   348,   295,   660,   829,   355,
-     838,    85,   862,   891,   839,   293,   723,   863,   892,   724,
-     725,   254,   255,   726,    84,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,   294,   846,   874,
-     435,   847,   875,   296,   436,   545,   546,   547,   668,   669,
-     302,   157,   156,   437,   308,   309,   177,   310,   311,   190,
-     312,   323,   329,   188,   158,   170,   338,   339,   351,   178,
-     159,   160,   353,   205,   400,   401,   189,   354,   364,    84,
-     365,   374,   224,   368,   372,   379,   206,   241,   376,   373,
-     243,   242,   244,   377,   378,   384,   387,   389,   390,   393,
-     394,   395,   402,   403,   404,   405,   275,   261,   262,   263,
-     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
-     274,   406,   407,   409,   410,   411,   417,   412,   413,   414,
-     418,   415,   416,   419,   420,   421,   422,   423,   424,   425,
-     426,   427,   428,   429,   431,   443,   444,   432,   445,   446,
-     447,   448,    84,   450,   451,   452,   449,   453,   455,   456,
-     458,   459,   460,   464,   461,   462,   465,   466,   467,   468,
-     469,   470,   472,   473,   474,   475,   476,   477,   478,   480,
-     481,   482,   484,   485,   487,   488,   505,   506,   507,   489,
-     491,   490,   492,   493,   494,   495,   496,   497,   499,   498,
-     500,   502,   503,   566,   530,   504,   508,   509,   510,   511,
-     512,   513,   514,   515,   516,   517,   518,   592,   592,   519,
-     520,   600,   600,   521,   522,   523,   526,   527,   659,   539,
-     275,   528,   529,   538,   531,   435,   532,   537,    28,   436,
-     608,   612,   616,   636,   676,   678,   682,   540,   437,   686,
-     690,   543,   544,   548,   549,   550,   551,   552,   553,   554,
-     555,   556,   557,   558,   560,   561,   559,   701,   702,   576,
-     703,   704,   562,   573,   705,   712,   713,   715,   716,   719,
-     718,   730,   541,   574,   722,   728,   729,   755,   731,   732,
-     733,   734,   735,   740,   741,   742,   750,   753,   756,   758,
-     759,   762,   761,   626,   765,   767,   768,   764,   769,   770,
-     771,   776,   777,   772,   797,   798,   803,   804,   807,   408,
-     806,   814,   575,   815,   773,   868,   842,   775,   774,   827,
-     790,   828,   791,   792,   793,   840,   860,   794,   795,   799,
-     864,   866,   800,   801,   888,   870,   889,   890,   893,   430,
-     433,   821,   822,   580,   607,   778,   785,   786,   789,   788,
-     796,   780,   779,   823,   824,   486,   454,   783,   825,   782,
-     834,   781,   835,   479,   836,   784,   483,   809,   837,   841,
-     808,   811,   865,   812,   810,   457,   869,   813,   677,   463,
-     471,   805,   898,   894,   895,   896,   674,   802,   858,   766,
-     867,   886,   897,   501,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   592,     0,   157,   156,
-     600,     0,   224,     0,     0,   241,     0,     0,   243,   242,
-     244,   158,   170,     0,     0,   256,     0,   159,   160,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   659,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   190,   177,     0,     0,   188,     0,     0,   205,     0,
-       0,     0,     0,     0,     0,   178,     0,     0,   189,     0,
-       0,   206,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      90,   248,   162,   161,   182,   193,   210,   249,   230,   247,
+     262,   281,   175,   183,   194,   211,   195,   163,   164,   667,
+     165,   250,   641,    36,   636,    29,   149,    30,    84,    31,
+      28,   627,   309,    40,   108,   224,   108,   310,    98,    81,
+     661,    99,   100,   149,    42,   627,   634,   180,   635,   593,
+     101,   102,   103,   104,   181,   260,   261,   108,   101,   102,
+     103,   104,   105,   106,   107,   108,   441,   150,   883,   151,
+     108,   884,   885,   886,   223,    44,   152,   153,   154,   155,
+     156,   157,    46,   188,   189,   190,   191,   192,   181,    48,
+     158,   159,    50,   109,   110,   111,   112,   224,   160,   225,
+     226,   224,    52,   227,   228,   229,   628,   158,   113,   143,
+     144,   114,   224,   244,   225,   226,   245,   246,   115,   662,
+     663,   664,   665,    89,   108,    54,   116,   117,   588,   727,
+     118,    56,   728,   589,   590,   591,   592,   593,   594,   595,
+     596,   597,   598,    85,   332,   336,    89,    58,    89,   333,
+     337,   224,    86,    87,    88,   203,   540,   541,   542,   204,
+     205,   206,   207,   208,   209,   552,   553,   554,    89,    89,
+      32,    33,    34,    35,    89,   675,   676,    89,   574,   575,
+     576,   577,    89,   647,   648,   649,   650,   651,   652,   855,
+      60,   856,   857,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,    62,    89,   350,
+     578,   354,    89,   361,   351,   389,   355,   405,   362,   332,
+     390,   701,   406,    89,   699,   107,   702,   336,   715,   715,
+     794,   636,   703,   716,   717,   743,    89,   298,   730,    89,
+     744,   731,   667,    90,     1,     2,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,   299,   750,   301,
+     754,   405,    89,   751,   443,   755,   756,   300,   350,   389,
+     354,   361,   442,   833,   836,   845,   846,   869,   260,   261,
+     898,   444,   870,   162,   161,   899,   570,   571,   182,   823,
+     824,   825,   826,   175,   302,   193,   308,   183,   163,   164,
+     732,   165,   314,   733,   194,   210,   195,   407,   408,   315,
+     853,   370,   248,   854,   211,   230,   881,   371,   249,   882,
+     247,   837,   838,   839,   316,   317,   318,   329,   335,   344,
+     345,   357,   250,   359,   360,   375,   372,   379,   381,   281,
+     380,   383,   384,   386,   385,   391,   394,   396,   397,   400,
+     401,   402,   409,   410,   411,   412,   413,   414,   416,   417,
+     418,   424,   419,   425,   420,   426,   421,   427,   422,   428,
+     423,   429,   430,   431,   432,   433,   435,   436,   434,   438,
+     450,   439,   451,   452,   453,   454,   456,   455,   457,   458,
+     459,   460,   462,   463,   465,   466,   467,   468,   469,   471,
+     472,   473,   474,   475,   476,   477,   479,   480,   482,   483,
+     481,   484,   487,   485,   488,   489,   491,   492,   495,   496,
+     512,   513,   514,   494,   497,   498,   499,   500,   501,   502,
+     506,   503,   504,   505,   507,   509,   510,   537,   534,   511,
+     515,   516,   607,   607,   517,   518,   519,   520,   521,   522,
+     599,   599,   523,   524,   525,   778,   538,   526,   527,   528,
+     443,   666,   529,   281,   530,   533,   535,   536,   442,   539,
+     545,   546,   548,    30,   615,   619,   623,   444,   643,   683,
+     685,   689,   708,   693,   544,   709,   710,   711,   712,   547,
+     720,   719,   722,   723,   725,   726,   822,   697,   550,   729,
+     566,   735,   736,   762,   737,   738,   739,   740,   551,   741,
+     555,   742,   556,   747,   557,   748,   558,   581,   749,   763,
+     766,   765,   633,   769,   559,   768,   771,   560,   772,   774,
+     775,   573,   561,   562,   776,   777,   783,   784,   804,   805,
+     810,   563,   811,   564,   565,   583,   813,   814,   849,   821,
+     834,   835,   867,   871,   847,   873,   567,   875,   415,   568,
+     569,   877,   895,   896,   897,   900,   580,   587,   757,   582,
+     760,   437,   614,   440,   780,   779,   785,   792,   793,   782,
+     781,   796,   493,   795,   803,   787,   786,   797,   461,   798,
+     799,   788,   789,   791,   222,   790,   800,   801,   816,   815,
+     818,   486,   464,   817,   802,   806,   470,   807,   490,   808,
+     828,   820,   478,   829,   819,   684,   809,   812,   773,   681,
+     830,   865,   831,   874,   893,   904,   508,   832,     0,   841,
+     842,     0,     0,     0,     0,     0,     0,     0,     0,   843,
+       0,   607,     0,     0,   844,     0,   848,     0,   876,   599,
+     248,   162,   161,     0,   905,   230,   249,   872,   247,   902,
+       0,   175,     0,   901,   903,     0,   163,   164,   262,   165,
+     250,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   666,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   182,     0,     0,   193,     0,
+       0,   210,     0,     0,   183,     0,     0,   194,     0,   195,
+     211,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   851,     0,     0,     0,   852,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     851,     0,     0,     0,   852
+       0,     0,     0,     0,     0,     0,     0,     0,   859,     0,
+       0,     0,     0,     0,     0,     0,   858,     0,     0,     0,
+       0,     0,     0,     0,     0,   859,     0,     0,     0,     0,
+       0,     0,     0,   858
   };
 
   const short int
   Dhcp6Parser::yycheck_[] =
   {
-      62,    67,    65,    65,    66,    67,    68,    69,    70,    71,
-      72,    70,    70,    70,   520,    65,    65,    66,    67,    68,
-     517,    65,    65,   516,     5,    14,     7,    10,     9,    38,
-       7,     7,     7,     0,    39,    40,    41,    42,    43,    44,
-      49,     7,    11,    75,    16,    14,    15,    56,     3,    82,
-      83,     6,   149,    25,    31,    32,    33,    34,    92,    93,
-      94,    38,    31,    32,    33,    34,    35,    36,    37,    38,
-       7,    48,   128,    50,     3,   131,   132,   133,    16,     8,
-      57,    58,    59,    60,    61,    62,    38,    39,    12,    13,
-     121,   122,   123,   124,    71,    72,    71,    66,    67,    68,
-      69,    39,    79,    41,    42,    39,     3,    45,    46,    47,
-      38,     8,    81,     7,     3,    84,   149,   149,    70,     8,
-       7,   152,    91,    95,    96,    97,    98,     3,     3,     7,
-      99,   100,     8,     8,   103,     7,    17,    18,    19,    20,
-     149,    69,   125,    38,   149,    73,    74,    75,    76,    77,
-      78,   134,   135,   136,   118,   119,    51,    52,    53,    54,
-      55,    56,     3,    63,    64,    65,   149,     8,   149,   150,
-     151,   152,   149,     3,     3,     7,    16,   149,     8,     8,
-     149,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    75,    76,   127,    78,   129,   130,   149,     7,    39,
-      85,    86,    87,    88,    89,    90,     7,     3,     3,     3,
-       7,   149,     8,     8,     8,   149,     6,     3,     3,     3,
-       3,   149,     8,     8,     8,     8,     3,     3,   725,     3,
-     723,     8,     8,     3,     8,     3,     8,   743,     8,     3,
-       8,   303,     3,     3,     8,     3,     3,     8,     8,     6,
-       3,    82,    83,     6,   149,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,     4,     3,     3,
-     332,     6,     6,     3,   332,   464,   465,   466,   101,   102,
-       4,   344,   344,   332,     4,     4,   348,     4,     4,   355,
-       4,     4,     4,   355,   344,   344,     4,     4,     4,   348,
-     344,   344,     4,   365,   293,   294,   355,     4,     8,   149,
-       3,     3,   374,     4,     4,     3,   365,   379,     4,     8,
-     379,   379,   379,     4,     8,     4,     4,     4,     4,     4,
-       4,     4,   149,     4,     4,     4,   398,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,     4,     4,     4,     4,     4,     4,   150,   150,   150,
-       4,   150,   150,     4,     4,     4,     4,     4,     4,     4,
-       4,   150,     4,     4,     4,     4,     4,   152,     4,     4,
-       4,   150,   149,     4,     4,     4,   152,     4,     4,     4,
-       4,   150,     4,     4,   150,   150,     4,     4,     4,     4,
-       4,     4,     4,     4,   150,     4,     4,     4,   152,     4,
-     152,   152,     4,     4,   152,     4,   405,   406,   407,     4,
-       4,   150,   150,   150,     4,     4,   152,   152,     4,   152,
-       4,     4,     7,   120,   149,     7,     7,     7,     7,     5,
-       5,     5,     5,     5,     5,     5,     5,   509,   510,     7,
-       7,   509,   510,     7,     7,     5,     8,     3,   520,     7,
-     522,     5,     5,     5,   149,   527,   149,   149,     7,   527,
-       7,     7,     7,     7,     4,     7,     7,   149,   527,     7,
-      80,   149,   149,   149,   149,   149,   149,   149,   149,   149,
-     149,   149,   149,   149,   149,   149,   485,     4,     4,   126,
-       4,     4,   149,   149,     4,     6,     3,     6,     3,     3,
-       6,     4,   456,   502,     6,     6,     3,     6,     4,     4,
-       4,     4,     4,     4,     4,     4,   149,   149,     3,     6,
-       3,     3,     6,   515,     4,     4,     4,     8,     4,     4,
-     150,     4,     4,   152,     4,     4,     4,     4,     3,   303,
-       6,     4,   503,     5,   150,     5,     7,   150,   152,     8,
-     150,     8,   150,   150,   150,     8,     4,   150,   150,   150,
-       4,     4,   150,   150,     4,     7,     4,     4,     4,   326,
-     330,   149,   149,   508,   510,   708,   720,   723,   729,   727,
-     736,   713,   711,   149,   149,   382,   344,   717,   149,   716,
-     149,   714,   149,   374,   149,   719,   379,   756,   149,   149,
-     754,   759,   150,   760,   757,   348,   149,   762,   527,   355,
-     365,   747,   149,   152,   150,   150,   522,   743,   846,   694,
-     862,   874,   891,   398,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   708,    -1,   711,   711,
-     708,    -1,   714,    -1,    -1,   717,    -1,    -1,   717,   717,
-     717,   711,   711,    -1,    -1,   727,    -1,   711,   711,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   743,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   757,   754,    -1,    -1,   757,    -1,    -1,   760,    -1,
-      -1,    -1,    -1,    -1,    -1,   754,    -1,    -1,   757,    -1,
-      -1,   760,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      66,    75,    69,    69,    70,    71,    72,    75,    74,    75,
+      76,    77,    69,    70,    71,    72,    71,    69,    69,   527,
+      69,    75,   524,    15,   523,     5,     7,     7,    10,     9,
+       0,    75,     3,     7,    38,    39,    38,     8,    11,   150,
+      16,    14,    15,     7,     7,    75,    76,    49,    78,    25,
+      31,    32,    33,    34,    56,    82,    83,    38,    31,    32,
+      33,    34,    35,    36,    37,    38,    70,    48,   128,    50,
+      38,   131,   132,   133,    16,     7,    57,    58,    59,    60,
+      61,    62,     7,    51,    52,    53,    54,    55,    56,     7,
+      71,    72,     7,    66,    67,    68,    69,    39,    79,    41,
+      42,    39,     7,    45,    46,    47,   150,    71,    81,    12,
+      13,    84,    39,    40,    41,    42,    43,    44,    91,    95,
+      96,    97,    98,   150,    38,     7,    99,   100,    16,     3,
+     103,     7,     6,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,   125,     3,     3,   150,     7,   150,     8,
+       8,    39,   134,   135,   136,    69,    63,    64,    65,    73,
+      74,    75,    76,    77,    78,   471,   472,   473,   150,   150,
+     150,   151,   152,   153,   150,   101,   102,   150,   121,   122,
+     123,   124,   150,    85,    86,    87,    88,    89,    90,   127,
+       7,   129,   130,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   113,   114,   115,   116,   117,     7,   150,     3,
+     153,     3,   150,     3,     8,     3,     8,     3,     8,     3,
+       8,     3,     8,   150,     8,    37,     8,     3,     3,     3,
+     732,   730,     8,     8,     8,     3,   150,     6,     3,   150,
+       8,     6,   750,   309,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,     3,     3,     8,
+       3,     3,   150,     8,   338,     8,     8,     4,     3,     3,
+       3,     3,   338,     8,     8,     8,     8,     3,    82,    83,
+       3,   338,     8,   350,   350,     8,   118,   119,   354,    17,
+      18,    19,    20,   350,     3,   361,     4,   354,   350,   350,
+       3,   350,     4,     6,   361,   371,   361,   299,   300,     4,
+       3,     8,   386,     6,   371,   381,     3,     3,   386,     6,
+     386,    92,    93,    94,     4,     4,     4,     4,     4,     4,
+       4,     4,   386,     4,     4,     4,     8,     4,     3,   405,
+       8,     4,     4,     3,     8,     4,     4,     4,     4,     4,
+       4,     4,   150,     4,     4,     4,     4,     4,     4,     4,
+       4,     4,   151,     4,   151,     4,   151,     4,   151,     4,
+     151,     4,     4,     4,     4,     4,     4,     4,   151,     4,
+       4,   153,     4,     4,     4,     4,   153,   151,     4,     4,
+       4,     4,     4,     4,     4,   151,     4,   151,   151,     4,
+       4,     4,     4,     4,     4,     4,     4,     4,     4,     4,
+     151,     4,     4,   153,   153,   153,     4,     4,     4,     4,
+     412,   413,   414,   153,   151,     4,   151,   151,     4,     4,
+       4,   153,   153,   153,     4,     4,     7,   150,     3,     7,
+       7,     7,   516,   517,     7,     5,     5,     5,     5,     5,
+     516,   517,     5,     5,     5,   151,   150,     7,     7,     7,
+     534,   527,     7,   529,     5,     8,     5,     5,   534,   150,
+       5,     7,   463,     7,     7,     7,     7,   534,     7,     4,
+       7,     7,     4,     7,   150,     4,     4,     4,     4,   150,
+       3,     6,     6,     3,     6,     3,     5,    80,   150,     6,
+     492,     6,     3,     6,     4,     4,     4,     4,   150,     4,
+     150,     4,   150,     4,   150,     4,   150,   509,     4,     3,
+       3,     6,   522,     3,   150,     6,     8,   150,     4,     4,
+       4,   120,   150,   150,     4,     4,     4,     4,     4,     4,
+       4,   150,     4,   150,   150,   126,     6,     3,     7,     4,
+       8,     8,     4,     4,     8,     4,   150,     5,   309,   150,
+     150,     7,     4,     4,     4,     4,   150,   515,   150,   510,
+     150,   332,   517,   336,   151,   153,   715,   727,   730,   151,
+     153,   736,   389,   734,   743,   720,   718,   151,   350,   151,
+     151,   721,   723,   726,    73,   724,   151,   151,   763,   761,
+     766,   381,   354,   764,   151,   151,   361,   151,   386,   151,
+     150,   769,   371,   150,   767,   534,   750,   754,   701,   529,
+     150,   853,   150,   869,   881,   898,   405,   150,    -1,   150,
+     150,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   150,
+      -1,   715,    -1,    -1,   150,    -1,   150,    -1,   150,   715,
+     724,   718,   718,    -1,   150,   721,   724,   151,   724,   151,
+      -1,   718,    -1,   153,   151,    -1,   718,   718,   734,   718,
+     724,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   750,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   761,    -1,    -1,   764,    -1,
+      -1,   767,    -1,    -1,   761,    -1,    -1,   764,    -1,   764,
+     767,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   845,    -1,    -1,    -1,   845,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     862,    -1,    -1,    -1,   862
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   852,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   852,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   869,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   869
   };
 
   const unsigned short int
   Dhcp6Parser::yystos_[] =
   {
        0,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,     0,     5,     7,     9,
-     149,   150,   151,   152,   167,   168,   169,   174,     7,   183,
-       7,   189,     7,   200,     7,   277,     7,   342,     7,   356,
-       7,   373,     7,   300,     7,   324,     7,   253,     7,   429,
-     175,   170,   184,   190,   201,   278,   343,   357,   374,   301,
-     325,   254,   430,   167,   176,   177,   149,   172,   173,    10,
-     125,   134,   135,   136,   149,   182,   185,   186,   187,   456,
-     458,   460,   462,    11,    14,    15,    31,    32,    33,    34,
-      35,    36,    37,    38,    66,    67,    68,    69,    81,    84,
-      91,    99,   100,   103,   182,   191,   192,   193,   194,   195,
-     196,   197,   198,   207,   209,   233,   239,   245,   247,   261,
-     271,   294,   318,   396,   406,   418,   419,   427,    12,    13,
-     202,   203,   204,   206,     7,    48,    50,    57,    58,    59,
-      60,    61,    62,    71,    72,    79,   182,   193,   194,   195,
-     196,   279,   280,   281,   283,   285,   287,   289,   292,   293,
-     318,   336,   350,   367,   392,    49,    56,   182,   318,   344,
-     345,   346,   348,    51,    52,    53,    54,    55,   182,   318,
-     348,   358,   359,   360,   362,   363,   365,   366,    69,    73,
-      74,    75,    76,    77,    78,   182,   318,   375,   376,   377,
-     378,   380,   382,   384,   386,   388,   390,    16,    39,    41,
-      42,    45,    46,    47,   182,   223,   302,   303,   304,   305,
-     306,   307,   308,   310,   312,   314,   315,   317,    40,    43,
-      44,   182,   223,   306,   312,   326,   327,   328,   329,   330,
-     332,   333,   334,   335,    82,    83,   182,   255,   256,   257,
-     259,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   182,   431,   432,   433,   434,
-     436,   438,   439,   441,   442,   443,   446,   448,   449,   450,
-     451,   454,     6,     3,     4,     8,     3,   188,   463,   457,
-     459,   461,     4,     3,     8,   199,   208,   210,     4,     4,
-       4,     4,     4,   272,   295,   319,   234,   246,   240,   397,
-     248,   262,   407,     4,   420,   428,     3,     8,   205,     4,
-       3,     8,   399,   337,   351,   282,   284,   286,     4,     4,
-     290,   288,   368,   393,     3,     8,   347,   349,     3,     8,
-     361,     4,   364,     4,     4,     3,     8,   391,   379,   381,
-     383,   385,   387,   389,     8,     3,   309,   224,     4,   313,
-     311,   316,     4,     8,     3,   331,     4,     4,     8,     3,
-     258,   260,     3,     8,     4,   435,   437,     4,   440,     4,
-       4,   444,   447,     4,     4,     4,   452,   455,     3,     8,
-     167,   167,   149,     4,     4,     4,     4,     4,   186,     4,
-       4,     4,   150,   150,   150,   150,   150,     4,     4,     4,
-       4,     4,     4,     4,     4,     4,     4,   150,     4,     4,
-     192,     4,   152,   203,    70,   182,   223,   318,   400,   401,
-     402,   403,   404,     4,     4,     4,     4,     4,   150,   152,
-       4,     4,     4,     4,   280,     4,     4,   345,     4,   150,
-       4,   150,   150,   359,     4,     4,     4,     4,     4,     4,
-       4,   377,     4,     4,   150,     4,     4,     4,   152,   304,
-       4,   152,   152,   328,     4,     4,   256,   152,     4,     4,
-     150,     4,   150,   150,     4,     4,   152,   152,   152,     4,
-       4,   432,     4,     7,     7,   167,   167,   167,     7,     7,
-       7,     5,     5,     5,     5,     5,     5,     5,     5,     7,
-       7,     7,     7,     5,   178,   405,     8,     3,     5,     5,
-     149,   149,   149,    63,    64,    65,   291,   149,     5,     7,
-     149,   169,   171,   149,   149,   178,   178,   178,   149,   149,
-     149,   149,   149,   149,   149,   149,   149,   149,   149,   167,
-     149,   149,   149,   118,   119,   445,   120,   121,   122,   123,
-     124,   152,   453,   149,   167,   191,   126,   464,   465,   466,
-     202,    16,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,   182,   211,   212,   213,   216,   218,   220,   222,
-     223,   225,   226,   227,   228,   229,   231,   211,     7,   273,
-     274,   275,     7,   296,   297,   298,     7,   320,   321,   322,
-      75,   149,   235,   236,   237,   238,   176,    76,    78,   237,
-     241,   242,   243,   244,   287,   398,     7,   249,   250,   251,
-      85,    86,    87,    88,    89,    90,   263,   264,   265,   266,
-     267,   268,   269,   270,    16,    95,    96,    97,    98,   182,
-     225,   408,   409,   410,   413,   414,   416,   417,   101,   102,
-     421,   422,   423,   425,   431,   179,     4,   402,     7,   338,
-     339,   340,     7,   352,   353,   354,     7,   369,   370,   371,
-      80,   394,     8,   467,     3,     8,     8,   214,   217,   219,
-     221,     4,     4,     4,     4,     4,   230,   232,     3,     8,
-       8,   276,     6,     3,   299,     6,     3,   323,     6,     3,
-       3,     6,     6,     3,     6,     3,     6,   252,     6,     3,
-       4,     4,     4,     4,     4,     4,     3,     8,   411,   415,
-       4,     4,     4,     3,     8,   424,   426,     3,     8,     8,
-     149,   180,   181,   149,   341,     6,     3,   355,     6,     3,
-     372,     6,     3,   395,     8,     4,   465,     4,     4,     4,
-       4,   150,   152,   150,   152,   150,     4,     4,   212,   279,
-     275,   302,   298,   326,   322,   236,   242,   287,   255,   251,
-     150,   150,   150,   150,   150,   150,   264,     4,     4,   150,
-     150,   150,   409,     4,     4,   422,     6,     3,   344,   340,
-     358,   354,   375,   371,     4,     5,    17,    18,    19,    20,
-     215,   149,   149,   149,   149,   149,     8,     8,     8,     8,
-      92,    93,    94,   412,   149,   149,   149,   149,     8,     8,
-       8,   149,     7,   468,   469,   470,     3,     6,   127,   129,
-     130,   182,   223,   471,   472,   473,   474,   476,   469,   477,
-       4,   475,     3,     8,     4,   150,     4,   472,     5,   149,
-       7,   478,   479,   480,     3,     6,   128,   131,   132,   133,
-     481,   482,   483,   485,   486,   487,   479,   484,     4,     4,
-       4,     3,     8,     4,   152,   150,   150,   482,   149
+     146,   147,   148,   149,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,     0,     5,
+       7,     9,   150,   151,   152,   153,   169,   170,   171,   176,
+       7,   185,     7,   191,     7,   202,     7,   279,     7,   346,
+       7,   360,     7,   377,     7,   298,     7,   304,     7,   328,
+       7,   255,     7,   433,   177,   172,   186,   192,   203,   280,
+     347,   361,   378,   299,   305,   329,   256,   434,   169,   178,
+     179,   150,   174,   175,    10,   125,   134,   135,   136,   150,
+     184,   187,   188,   189,   460,   462,   464,   466,    11,    14,
+      15,    31,    32,    33,    34,    35,    36,    37,    38,    66,
+      67,    68,    69,    81,    84,    91,    99,   100,   103,   184,
+     193,   194,   195,   196,   197,   198,   199,   200,   209,   211,
+     235,   241,   247,   249,   263,   273,   296,   322,   400,   410,
+     422,   423,   431,    12,    13,   204,   205,   206,   208,     7,
+      48,    50,    57,    58,    59,    60,    61,    62,    71,    72,
+      79,   184,   195,   196,   197,   198,   281,   282,   283,   285,
+     287,   289,   291,   294,   295,   322,   340,   354,   371,   396,
+      49,    56,   184,   322,   348,   349,   350,   352,    51,    52,
+      53,    54,    55,   184,   322,   352,   362,   363,   364,   366,
+     367,   369,   370,    69,    73,    74,    75,    76,    77,    78,
+     184,   322,   379,   380,   381,   382,   384,   386,   388,   390,
+     392,   394,   296,    16,    39,    41,    42,    45,    46,    47,
+     184,   225,   306,   307,   308,   309,   310,   311,   312,   314,
+     316,   318,   319,   321,    40,    43,    44,   184,   225,   310,
+     316,   330,   331,   332,   333,   334,   336,   337,   338,   339,
+      82,    83,   184,   257,   258,   259,   261,   104,   105,   106,
+     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+     117,   184,   435,   436,   437,   438,   440,   442,   443,   445,
+     446,   447,   450,   452,   453,   454,   455,   458,     6,     3,
+       4,     8,     3,   190,   467,   461,   463,   465,     4,     3,
+       8,   201,   210,   212,     4,     4,     4,     4,     4,   274,
+     297,   323,   236,   248,   242,   401,   250,   264,   411,     4,
+     424,   432,     3,     8,   207,     4,     3,     8,   403,   341,
+     355,   284,   286,   288,     4,     4,   292,   290,   372,   397,
+       3,     8,   351,   353,     3,     8,   365,     4,   368,     4,
+       4,     3,     8,   395,   383,   385,   387,   389,   391,   393,
+       8,     3,     8,   313,   226,     4,   317,   315,   320,     4,
+       8,     3,   335,     4,     4,     8,     3,   260,   262,     3,
+       8,     4,   439,   441,     4,   444,     4,     4,   448,   451,
+       4,     4,     4,   456,   459,     3,     8,   169,   169,   150,
+       4,     4,     4,     4,     4,   188,     4,     4,     4,   151,
+     151,   151,   151,   151,     4,     4,     4,     4,     4,     4,
+       4,     4,     4,     4,   151,     4,     4,   194,     4,   153,
+     205,    70,   184,   225,   322,   404,   405,   406,   407,   408,
+       4,     4,     4,     4,     4,   151,   153,     4,     4,     4,
+       4,   282,     4,     4,   349,     4,   151,     4,   151,   151,
+     363,     4,     4,     4,     4,     4,     4,     4,   381,     4,
+       4,   151,     4,     4,     4,   153,   308,     4,   153,   153,
+     332,     4,     4,   258,   153,     4,     4,   151,     4,   151,
+     151,     4,     4,   153,   153,   153,     4,     4,   436,     4,
+       7,     7,   169,   169,   169,     7,     7,     7,     5,     5,
+       5,     5,     5,     5,     5,     5,     7,     7,     7,     7,
+       5,   180,   409,     8,     3,     5,     5,   150,   150,   150,
+      63,    64,    65,   293,   150,     5,     7,   150,   171,   173,
+     150,   150,   180,   180,   180,   150,   150,   150,   150,   150,
+     150,   150,   150,   150,   150,   150,   169,   150,   150,   150,
+     118,   119,   449,   120,   121,   122,   123,   124,   153,   457,
+     150,   169,   193,   126,   468,   469,   470,   204,    16,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,   184,
+     213,   214,   215,   218,   220,   222,   224,   225,   227,   228,
+     229,   230,   231,   233,   213,     7,   275,   276,   277,     7,
+     300,   301,   302,     7,   324,   325,   326,    75,   150,   237,
+     238,   239,   240,   178,    76,    78,   239,   243,   244,   245,
+     246,   289,   402,     7,   251,   252,   253,    85,    86,    87,
+      88,    89,    90,   265,   266,   267,   268,   269,   270,   271,
+     272,    16,    95,    96,    97,    98,   184,   227,   412,   413,
+     414,   417,   418,   420,   421,   101,   102,   425,   426,   427,
+     429,   435,   181,     4,   406,     7,   342,   343,   344,     7,
+     356,   357,   358,     7,   373,   374,   375,    80,   398,     8,
+     471,     3,     8,     8,   216,   219,   221,   223,     4,     4,
+       4,     4,     4,   232,   234,     3,     8,     8,   278,     6,
+       3,   303,     6,     3,   327,     6,     3,     3,     6,     6,
+       3,     6,     3,     6,   254,     6,     3,     4,     4,     4,
+       4,     4,     4,     3,     8,   415,   419,     4,     4,     4,
+       3,     8,   428,   430,     3,     8,     8,   150,   182,   183,
+     150,   345,     6,     3,   359,     6,     3,   376,     6,     3,
+     399,     8,     4,   469,     4,     4,     4,     4,   151,   153,
+     151,   153,   151,     4,     4,   214,   281,   277,   306,   302,
+     330,   326,   238,   244,   289,   257,   253,   151,   151,   151,
+     151,   151,   151,   266,     4,     4,   151,   151,   151,   413,
+       4,     4,   426,     6,     3,   348,   344,   362,   358,   379,
+     375,     4,     5,    17,    18,    19,    20,   217,   150,   150,
+     150,   150,   150,     8,     8,     8,     8,    92,    93,    94,
+     416,   150,   150,   150,   150,     8,     8,     8,   150,     7,
+     472,   473,   474,     3,     6,   127,   129,   130,   184,   225,
+     475,   476,   477,   478,   480,   473,   481,     4,   479,     3,
+       8,     4,   151,     4,   476,     5,   150,     7,   482,   483,
+     484,     3,     6,   128,   131,   132,   133,   485,   486,   487,
+     489,   490,   491,   483,   488,     4,     4,     4,     3,     8,
+       4,   153,   151,   151,   486,   150
   };
 
   const unsigned short int
   Dhcp6Parser::yyr1_[] =
   {
-       0,   153,   155,   154,   156,   154,   157,   154,   158,   154,
-     159,   154,   160,   154,   161,   154,   162,   154,   163,   154,
-     164,   154,   165,   154,   166,   154,   167,   167,   167,   167,
-     167,   167,   167,   168,   170,   169,   171,   172,   172,   173,
-     173,   175,   174,   176,   176,   177,   177,   179,   178,   180,
-     180,   181,   181,   182,   184,   183,   185,   185,   186,   186,
-     186,   186,   186,   186,   188,   187,   190,   189,   191,   191,
-     192,   192,   192,   192,   192,   192,   192,   192,   192,   192,
-     192,   192,   192,   192,   192,   192,   192,   192,   192,   192,
-     192,   192,   193,   194,   195,   196,   197,   199,   198,   201,
-     200,   202,   202,   203,   203,   205,   204,   206,   208,   207,
-     210,   209,   211,   211,   212,   212,   212,   212,   212,   212,
-     212,   212,   212,   212,   212,   212,   212,   214,   213,   215,
-     215,   215,   215,   217,   216,   219,   218,   221,   220,   222,
-     224,   223,   225,   226,   227,   228,   230,   229,   232,   231,
-     234,   233,   235,   235,   236,   236,   237,   238,   240,   239,
-     241,   241,   242,   242,   242,   243,   244,   246,   245,   248,
-     247,   249,   249,   250,   250,   252,   251,   254,   253,   255,
-     255,   255,   256,   256,   258,   257,   260,   259,   262,   261,
-     263,   263,   264,   264,   264,   264,   264,   264,   265,   266,
-     267,   268,   269,   270,   272,   271,   273,   273,   274,   274,
-     276,   275,   278,   277,   279,   279,   280,   280,   280,   280,
-     280,   280,   280,   280,   280,   280,   280,   280,   280,   280,
-     280,   280,   280,   282,   281,   284,   283,   286,   285,   288,
-     287,   290,   289,   291,   291,   291,   292,   293,   295,   294,
-     296,   296,   297,   297,   299,   298,   301,   300,   302,   302,
-     303,   303,   304,   304,   304,   304,   304,   304,   304,   304,
-     305,   306,   307,   309,   308,   311,   310,   313,   312,   314,
-     316,   315,   317,   319,   318,   320,   320,   321,   321,   323,
-     322,   325,   324,   326,   326,   327,   327,   328,   328,   328,
-     328,   328,   328,   328,   329,   331,   330,   332,   333,   334,
-     335,   337,   336,   338,   338,   339,   339,   341,   340,   343,
-     342,   344,   344,   345,   345,   345,   345,   347,   346,   349,
-     348,   351,   350,   352,   352,   353,   353,   355,   354,   357,
-     356,   358,   358,   359,   359,   359,   359,   359,   359,   359,
-     359,   361,   360,   362,   364,   363,   365,   366,   368,   367,
-     369,   369,   370,   370,   372,   371,   374,   373,   375,   375,
-     376,   376,   377,   377,   377,   377,   377,   377,   377,   377,
-     377,   379,   378,   381,   380,   383,   382,   385,   384,   387,
+       0,   154,   156,   155,   157,   155,   158,   155,   159,   155,
+     160,   155,   161,   155,   162,   155,   163,   155,   164,   155,
+     165,   155,   166,   155,   167,   155,   168,   155,   169,   169,
+     169,   169,   169,   169,   169,   170,   172,   171,   173,   174,
+     174,   175,   175,   177,   176,   178,   178,   179,   179,   181,
+     180,   182,   182,   183,   183,   184,   186,   185,   187,   187,
+     188,   188,   188,   188,   188,   188,   190,   189,   192,   191,
+     193,   193,   194,   194,   194,   194,   194,   194,   194,   194,
+     194,   194,   194,   194,   194,   194,   194,   194,   194,   194,
+     194,   194,   194,   194,   195,   196,   197,   198,   199,   201,
+     200,   203,   202,   204,   204,   205,   205,   207,   206,   208,
+     210,   209,   212,   211,   213,   213,   214,   214,   214,   214,
+     214,   214,   214,   214,   214,   214,   214,   214,   214,   216,
+     215,   217,   217,   217,   217,   219,   218,   221,   220,   223,
+     222,   224,   226,   225,   227,   228,   229,   230,   232,   231,
+     234,   233,   236,   235,   237,   237,   238,   238,   239,   240,
+     242,   241,   243,   243,   244,   244,   244,   245,   246,   248,
+     247,   250,   249,   251,   251,   252,   252,   254,   253,   256,
+     255,   257,   257,   257,   258,   258,   260,   259,   262,   261,
+     264,   263,   265,   265,   266,   266,   266,   266,   266,   266,
+     267,   268,   269,   270,   271,   272,   274,   273,   275,   275,
+     276,   276,   278,   277,   280,   279,   281,   281,   282,   282,
+     282,   282,   282,   282,   282,   282,   282,   282,   282,   282,
+     282,   282,   282,   282,   282,   284,   283,   286,   285,   288,
+     287,   290,   289,   292,   291,   293,   293,   293,   294,   295,
+     297,   296,   299,   298,   300,   300,   301,   301,   303,   302,
+     305,   304,   306,   306,   307,   307,   308,   308,   308,   308,
+     308,   308,   308,   308,   309,   310,   311,   313,   312,   315,
+     314,   317,   316,   318,   320,   319,   321,   323,   322,   324,
+     324,   325,   325,   327,   326,   329,   328,   330,   330,   331,
+     331,   332,   332,   332,   332,   332,   332,   332,   333,   335,
+     334,   336,   337,   338,   339,   341,   340,   342,   342,   343,
+     343,   345,   344,   347,   346,   348,   348,   349,   349,   349,
+     349,   351,   350,   353,   352,   355,   354,   356,   356,   357,
+     357,   359,   358,   361,   360,   362,   362,   363,   363,   363,
+     363,   363,   363,   363,   363,   365,   364,   366,   368,   367,
+     369,   370,   372,   371,   373,   373,   374,   374,   376,   375,
+     378,   377,   379,   379,   380,   380,   381,   381,   381,   381,
+     381,   381,   381,   381,   381,   383,   382,   385,   384,   387,
      386,   389,   388,   391,   390,   393,   392,   395,   394,   397,
-     396,   398,   398,   399,   287,   400,   400,   401,   401,   402,
-     402,   402,   402,   403,   405,   404,   407,   406,   408,   408,
-     409,   409,   409,   409,   409,   409,   409,   411,   410,   412,
-     412,   412,   413,   415,   414,   416,   417,   418,   420,   419,
-     421,   421,   422,   422,   424,   423,   426,   425,   428,   427,
-     430,   429,   431,   431,   432,   432,   432,   432,   432,   432,
-     432,   432,   432,   432,   432,   432,   432,   432,   432,   433,
-     435,   434,   437,   436,   438,   440,   439,   441,   442,   444,
-     443,   445,   445,   447,   446,   448,   449,   450,   452,   451,
-     453,   453,   453,   453,   453,   455,   454,   457,   456,   459,
-     458,   461,   460,   463,   462,   464,   464,   465,   467,   466,
-     468,   468,   470,   469,   471,   471,   472,   472,   472,   472,
-     472,   473,   475,   474,   477,   476,   478,   478,   480,   479,
-     481,   481,   482,   482,   482,   482,   484,   483,   485,   486,
-     487
+     396,   399,   398,   401,   400,   402,   402,   403,   289,   404,
+     404,   405,   405,   406,   406,   406,   406,   407,   409,   408,
+     411,   410,   412,   412,   413,   413,   413,   413,   413,   413,
+     413,   415,   414,   416,   416,   416,   417,   419,   418,   420,
+     421,   422,   424,   423,   425,   425,   426,   426,   428,   427,
+     430,   429,   432,   431,   434,   433,   435,   435,   436,   436,
+     436,   436,   436,   436,   436,   436,   436,   436,   436,   436,
+     436,   436,   436,   437,   439,   438,   441,   440,   442,   444,
+     443,   445,   446,   448,   447,   449,   449,   451,   450,   452,
+     453,   454,   456,   455,   457,   457,   457,   457,   457,   459,
+     458,   461,   460,   463,   462,   465,   464,   467,   466,   468,
+     468,   469,   471,   470,   472,   472,   474,   473,   475,   475,
+     476,   476,   476,   476,   476,   477,   479,   478,   481,   480,
+     482,   482,   484,   483,   485,   485,   486,   486,   486,   486,
+     488,   487,   489,   490,   491
   };
 
   const unsigned char
@@ -4042,59 +4117,59 @@ namespace isc { namespace dhcp {
   {
        0,     2,     0,     3,     0,     3,     0,     3,     0,     3,
        0,     3,     0,     3,     0,     3,     0,     3,     0,     3,
-       0,     3,     0,     3,     0,     3,     1,     1,     1,     1,
-       1,     1,     1,     1,     0,     4,     1,     0,     1,     3,
-       5,     0,     4,     0,     1,     1,     3,     0,     4,     0,
-       1,     1,     3,     2,     0,     4,     1,     3,     1,     1,
-       1,     1,     1,     1,     0,     6,     0,     4,     1,     3,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       0,     3,     0,     3,     0,     3,     0,     3,     1,     1,
+       1,     1,     1,     1,     1,     1,     0,     4,     1,     0,
+       1,     3,     5,     0,     4,     0,     1,     1,     3,     0,
+       4,     0,     1,     1,     3,     2,     0,     4,     1,     3,
+       1,     1,     1,     1,     1,     1,     0,     6,     0,     4,
+       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     3,     3,     3,     3,     3,     0,     6,     0,
-       4,     1,     3,     1,     1,     0,     4,     3,     0,     6,
+       1,     1,     1,     1,     3,     3,     3,     3,     3,     0,
+       6,     0,     4,     1,     3,     1,     1,     0,     4,     3,
+       0,     6,     0,     6,     1,     3,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
+       4,     1,     1,     1,     1,     0,     4,     0,     4,     0,
+       4,     3,     0,     4,     3,     3,     3,     3,     0,     4,
+       0,     4,     0,     6,     1,     3,     1,     1,     1,     1,
+       0,     6,     1,     3,     1,     1,     1,     1,     1,     0,
+       6,     0,     6,     0,     1,     1,     3,     0,     4,     0,
+       4,     1,     3,     1,     1,     1,     0,     4,     0,     4,
        0,     6,     1,     3,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     0,     4,     1,
-       1,     1,     1,     0,     4,     0,     4,     0,     4,     3,
-       0,     4,     3,     3,     3,     3,     0,     4,     0,     4,
-       0,     6,     1,     3,     1,     1,     1,     1,     0,     6,
-       1,     3,     1,     1,     1,     1,     1,     0,     6,     0,
-       6,     0,     1,     1,     3,     0,     4,     0,     4,     1,
-       3,     1,     1,     1,     0,     4,     0,     4,     0,     6,
-       1,     3,     1,     1,     1,     1,     1,     1,     3,     3,
-       3,     3,     3,     3,     0,     6,     0,     1,     1,     3,
-       0,     4,     0,     4,     1,     3,     1,     1,     1,     1,
+       3,     3,     3,     3,     3,     3,     0,     6,     0,     1,
+       1,     3,     0,     4,     0,     4,     1,     3,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     0,     4,     0,     4,     0,     4,     0,
-       4,     0,     4,     1,     1,     1,     3,     3,     0,     6,
-       0,     1,     1,     3,     0,     4,     0,     4,     0,     1,
-       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     3,     1,     0,     4,     0,     4,     0,     4,     1,
-       0,     4,     3,     0,     6,     0,     1,     1,     3,     0,
-       4,     0,     4,     0,     1,     1,     3,     1,     1,     1,
-       1,     1,     1,     1,     1,     0,     4,     1,     1,     3,
-       3,     0,     6,     0,     1,     1,     3,     0,     4,     0,
-       4,     1,     3,     1,     1,     1,     1,     0,     4,     0,
-       4,     0,     6,     0,     1,     1,     3,     0,     4,     0,
-       4,     1,     3,     1,     1,     1,     1,     1,     1,     1,
-       1,     0,     4,     3,     0,     4,     3,     3,     0,     6,
-       0,     1,     1,     3,     0,     4,     0,     4,     0,     1,
-       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     0,     4,     0,     4,     0,     4,     0,     4,     0,
-       4,     0,     4,     0,     4,     0,     6,     0,     4,     0,
-       6,     1,     3,     0,     4,     0,     1,     1,     3,     1,
-       1,     1,     1,     1,     0,     4,     0,     6,     1,     3,
-       1,     1,     1,     1,     1,     1,     1,     0,     4,     1,
-       1,     1,     3,     0,     4,     3,     3,     3,     0,     6,
-       1,     3,     1,     1,     0,     4,     0,     4,     0,     6,
-       0,     4,     1,     3,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
-       0,     4,     0,     4,     3,     0,     4,     3,     3,     0,
-       4,     1,     1,     0,     4,     3,     3,     3,     0,     4,
        1,     1,     1,     1,     1,     0,     4,     0,     4,     0,
-       4,     0,     4,     0,     6,     1,     3,     1,     0,     6,
+       4,     0,     4,     0,     4,     1,     1,     1,     3,     3,
+       0,     6,     0,     4,     0,     1,     1,     3,     0,     4,
+       0,     4,     0,     1,     1,     3,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     3,     1,     0,     4,     0,
+       4,     0,     4,     1,     0,     4,     3,     0,     6,     0,
+       1,     1,     3,     0,     4,     0,     4,     0,     1,     1,
+       3,     1,     1,     1,     1,     1,     1,     1,     1,     0,
+       4,     1,     1,     3,     3,     0,     6,     0,     1,     1,
+       3,     0,     4,     0,     4,     1,     3,     1,     1,     1,
+       1,     0,     4,     0,     4,     0,     6,     0,     1,     1,
+       3,     0,     4,     0,     4,     1,     3,     1,     1,     1,
+       1,     1,     1,     1,     1,     0,     4,     3,     0,     4,
+       3,     3,     0,     6,     0,     1,     1,     3,     0,     4,
+       0,     4,     0,     1,     1,     3,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     0,     4,     0,     4,     0,
+       4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
+       6,     0,     4,     0,     6,     1,     3,     0,     4,     0,
+       1,     1,     3,     1,     1,     1,     1,     1,     0,     4,
+       0,     6,     1,     3,     1,     1,     1,     1,     1,     1,
+       1,     0,     4,     1,     1,     1,     3,     0,     4,     3,
+       3,     3,     0,     6,     1,     3,     1,     1,     0,     4,
+       0,     4,     0,     6,     0,     4,     1,     3,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     3,     0,     4,     0,     4,     3,     0,
+       4,     3,     3,     0,     4,     1,     1,     0,     4,     3,
+       3,     3,     0,     4,     1,     1,     1,     1,     1,     0,
+       4,     0,     4,     0,     4,     0,     4,     0,     6,     1,
+       3,     1,     0,     6,     1,     3,     0,     4,     1,     3,
+       1,     1,     1,     1,     1,     3,     0,     4,     0,     6,
        1,     3,     0,     4,     1,     3,     1,     1,     1,     1,
-       1,     3,     0,     4,     0,     6,     1,     3,     0,     4,
-       1,     3,     1,     1,     1,     1,     0,     4,     3,     3,
-       3
+       0,     4,     3,     3,     3
   };
 
 
@@ -4144,87 +4219,87 @@ namespace isc { namespace dhcp {
   "\"flush\"", "\"maxsize\"", "\"maxver\"", "\"Dhcp4\"", "\"DhcpDdns\"",
   "\"Control-agent\"", "TOPLEVEL_JSON", "TOPLEVEL_DHCP6", "SUB_DHCP6",
   "SUB_INTERFACES6", "SUB_SUBNET6", "SUB_POOL6", "SUB_PD_POOL",
-  "SUB_RESERVATION", "SUB_OPTION_DEF", "SUB_OPTION_DATA",
-  "SUB_HOOKS_LIBRARY", "SUB_DHCP_DDNS", "\"constant string\"",
-  "\"integer\"", "\"floating point\"", "\"boolean\"", "$accept", "start",
-  "$@1", "$@2", "$@3", "$@4", "$@5", "$@6", "$@7", "$@8", "$@9", "$@10",
-  "$@11", "$@12", "value", "sub_json", "map2", "$@13", "map_value",
-  "map_content", "not_empty_map", "list_generic", "$@14", "list_content",
-  "not_empty_list", "list_strings", "$@15", "list_strings_content",
-  "not_empty_list_strings", "unknown_map_entry", "syntax_map", "$@16",
-  "global_objects", "global_object", "dhcp6_object", "$@17", "sub_dhcp6",
-  "$@18", "global_params", "global_param", "preferred_lifetime",
-  "valid_lifetime", "renew_timer", "rebind_timer",
-  "decline_probation_period", "interfaces_config", "$@19",
-  "sub_interfaces6", "$@20", "interfaces_config_params",
-  "interfaces_config_param", "interfaces_list", "$@21", "re_detect",
-  "lease_database", "$@22", "hosts_database", "$@23",
-  "database_map_params", "database_map_param", "database_type", "$@24",
-  "db_type", "user", "$@25", "password", "$@26", "host", "$@27", "port",
-  "name", "$@28", "persist", "lfc_interval", "readonly", "connect_timeout",
-  "contact_points", "$@29", "keyspace", "$@30", "mac_sources", "$@31",
+  "SUB_RESERVATION", "SUB_OPTION_DEFS", "SUB_OPTION_DEF",
+  "SUB_OPTION_DATA", "SUB_HOOKS_LIBRARY", "SUB_DHCP_DDNS",
+  "\"constant string\"", "\"integer\"", "\"floating point\"",
+  "\"boolean\"", "$accept", "start", "$@1", "$@2", "$@3", "$@4", "$@5",
+  "$@6", "$@7", "$@8", "$@9", "$@10", "$@11", "$@12", "$@13", "value",
+  "sub_json", "map2", "$@14", "map_value", "map_content", "not_empty_map",
+  "list_generic", "$@15", "list_content", "not_empty_list", "list_strings",
+  "$@16", "list_strings_content", "not_empty_list_strings",
+  "unknown_map_entry", "syntax_map", "$@17", "global_objects",
+  "global_object", "dhcp6_object", "$@18", "sub_dhcp6", "$@19",
+  "global_params", "global_param", "preferred_lifetime", "valid_lifetime",
+  "renew_timer", "rebind_timer", "decline_probation_period",
+  "interfaces_config", "$@20", "sub_interfaces6", "$@21",
+  "interfaces_config_params", "interfaces_config_param", "interfaces_list",
+  "$@22", "re_detect", "lease_database", "$@23", "hosts_database", "$@24",
+  "database_map_params", "database_map_param", "database_type", "$@25",
+  "db_type", "user", "$@26", "password", "$@27", "host", "$@28", "port",
+  "name", "$@29", "persist", "lfc_interval", "readonly", "connect_timeout",
+  "contact_points", "$@30", "keyspace", "$@31", "mac_sources", "$@32",
   "mac_sources_list", "mac_sources_value", "duid_id", "string_id",
-  "host_reservation_identifiers", "$@32",
+  "host_reservation_identifiers", "$@33",
   "host_reservation_identifiers_list", "host_reservation_identifier",
-  "hw_address_id", "flex_id", "relay_supplied_options", "$@33",
-  "hooks_libraries", "$@34", "hooks_libraries_list",
-  "not_empty_hooks_libraries_list", "hooks_library", "$@35",
-  "sub_hooks_library", "$@36", "hooks_params", "hooks_param", "library",
-  "$@37", "parameters", "$@38", "expired_leases_processing", "$@39",
+  "hw_address_id", "flex_id", "relay_supplied_options", "$@34",
+  "hooks_libraries", "$@35", "hooks_libraries_list",
+  "not_empty_hooks_libraries_list", "hooks_library", "$@36",
+  "sub_hooks_library", "$@37", "hooks_params", "hooks_param", "library",
+  "$@38", "parameters", "$@39", "expired_leases_processing", "$@40",
   "expired_leases_params", "expired_leases_param",
   "reclaim_timer_wait_time", "flush_reclaimed_timer_wait_time",
   "hold_reclaimed_time", "max_reclaim_leases", "max_reclaim_time",
-  "unwarned_reclaim_cycles", "subnet6_list", "$@40",
-  "subnet6_list_content", "not_empty_subnet6_list", "subnet6", "$@41",
-  "sub_subnet6", "$@42", "subnet6_params", "subnet6_param", "subnet",
-  "$@43", "interface", "$@44", "interface_id", "$@45", "client_class",
-  "$@46", "reservation_mode", "$@47", "hr_mode", "id", "rapid_commit",
-  "option_def_list", "$@48", "option_def_list_content",
-  "not_empty_option_def_list", "option_def_entry", "$@49",
-  "sub_option_def", "$@50", "option_def_params",
-  "not_empty_option_def_params", "option_def_param", "option_def_name",
-  "code", "option_def_code", "option_def_type", "$@51",
-  "option_def_record_types", "$@52", "space", "$@53", "option_def_space",
-  "option_def_encapsulate", "$@54", "option_def_array", "option_data_list",
-  "$@55", "option_data_list_content", "not_empty_option_data_list",
-  "option_data_entry", "$@56", "sub_option_data", "$@57",
+  "unwarned_reclaim_cycles", "subnet6_list", "$@41",
+  "subnet6_list_content", "not_empty_subnet6_list", "subnet6", "$@42",
+  "sub_subnet6", "$@43", "subnet6_params", "subnet6_param", "subnet",
+  "$@44", "interface", "$@45", "interface_id", "$@46", "client_class",
+  "$@47", "reservation_mode", "$@48", "hr_mode", "id", "rapid_commit",
+  "option_def_list", "$@49", "sub_option_def_list", "$@50",
+  "option_def_list_content", "not_empty_option_def_list",
+  "option_def_entry", "$@51", "sub_option_def", "$@52",
+  "option_def_params", "not_empty_option_def_params", "option_def_param",
+  "option_def_name", "code", "option_def_code", "option_def_type", "$@53",
+  "option_def_record_types", "$@54", "space", "$@55", "option_def_space",
+  "option_def_encapsulate", "$@56", "option_def_array", "option_data_list",
+  "$@57", "option_data_list_content", "not_empty_option_data_list",
+  "option_data_entry", "$@58", "sub_option_data", "$@59",
   "option_data_params", "not_empty_option_data_params",
-  "option_data_param", "option_data_name", "option_data_data", "$@58",
+  "option_data_param", "option_data_name", "option_data_data", "$@60",
   "option_data_code", "option_data_space", "option_data_csv_format",
-  "option_data_always_send", "pools_list", "$@59", "pools_list_content",
-  "not_empty_pools_list", "pool_list_entry", "$@60", "sub_pool6", "$@61",
-  "pool_params", "pool_param", "pool_entry", "$@62", "user_context",
-  "$@63", "pd_pools_list", "$@64", "pd_pools_list_content",
-  "not_empty_pd_pools_list", "pd_pool_entry", "$@65", "sub_pd_pool",
-  "$@66", "pd_pool_params", "pd_pool_param", "pd_prefix", "$@67",
-  "pd_prefix_len", "excluded_prefix", "$@68", "excluded_prefix_len",
-  "pd_delegated_len", "reservations", "$@69", "reservations_list",
-  "not_empty_reservations_list", "reservation", "$@70", "sub_reservation",
-  "$@71", "reservation_params", "not_empty_reservation_params",
-  "reservation_param", "ip_addresses", "$@72", "prefixes", "$@73", "duid",
-  "$@74", "hw_address", "$@75", "hostname", "$@76", "flex_id_value",
-  "$@77", "reservation_client_classes", "$@78", "relay", "$@79",
-  "relay_map", "$@80", "client_classes", "$@81", "client_classes_list",
-  "$@82", "client_class_params", "not_empty_client_class_params",
-  "client_class_param", "client_class_name", "client_class_test", "$@83",
-  "server_id", "$@84", "server_id_params", "server_id_param",
-  "server_id_type", "$@85", "duid_type", "htype", "identifier", "$@86",
-  "time", "enterprise_id", "dhcp4o6_port", "control_socket", "$@87",
-  "control_socket_params", "control_socket_param", "socket_type", "$@88",
-  "socket_name", "$@89", "dhcp_ddns", "$@90", "sub_dhcp_ddns", "$@91",
+  "option_data_always_send", "pools_list", "$@61", "pools_list_content",
+  "not_empty_pools_list", "pool_list_entry", "$@62", "sub_pool6", "$@63",
+  "pool_params", "pool_param", "pool_entry", "$@64", "user_context",
+  "$@65", "pd_pools_list", "$@66", "pd_pools_list_content",
+  "not_empty_pd_pools_list", "pd_pool_entry", "$@67", "sub_pd_pool",
+  "$@68", "pd_pool_params", "pd_pool_param", "pd_prefix", "$@69",
+  "pd_prefix_len", "excluded_prefix", "$@70", "excluded_prefix_len",
+  "pd_delegated_len", "reservations", "$@71", "reservations_list",
+  "not_empty_reservations_list", "reservation", "$@72", "sub_reservation",
+  "$@73", "reservation_params", "not_empty_reservation_params",
+  "reservation_param", "ip_addresses", "$@74", "prefixes", "$@75", "duid",
+  "$@76", "hw_address", "$@77", "hostname", "$@78", "flex_id_value",
+  "$@79", "reservation_client_classes", "$@80", "relay", "$@81",
+  "relay_map", "$@82", "client_classes", "$@83", "client_classes_list",
+  "$@84", "client_class_params", "not_empty_client_class_params",
+  "client_class_param", "client_class_name", "client_class_test", "$@85",
+  "server_id", "$@86", "server_id_params", "server_id_param",
+  "server_id_type", "$@87", "duid_type", "htype", "identifier", "$@88",
+  "time", "enterprise_id", "dhcp4o6_port", "control_socket", "$@89",
+  "control_socket_params", "control_socket_param", "socket_type", "$@90",
+  "socket_name", "$@91", "dhcp_ddns", "$@92", "sub_dhcp_ddns", "$@93",
   "dhcp_ddns_params", "dhcp_ddns_param", "enable_updates",
-  "qualifying_suffix", "$@92", "server_ip", "$@93", "server_port",
-  "sender_ip", "$@94", "sender_port", "max_queue_size", "ncr_protocol",
-  "$@95", "ncr_protocol_value", "ncr_format", "$@96",
+  "qualifying_suffix", "$@94", "server_ip", "$@95", "server_port",
+  "sender_ip", "$@96", "sender_port", "max_queue_size", "ncr_protocol",
+  "$@97", "ncr_protocol_value", "ncr_format", "$@98",
   "always_include_fqdn", "override_no_update", "override_client_update",
-  "replace_client_name", "$@97", "replace_client_name_value",
-  "generated_prefix", "$@98", "dhcp4_json_object", "$@99",
-  "dhcpddns_json_object", "$@100", "control_agent_json_object", "$@101",
-  "logging_object", "$@102", "logging_params", "logging_param", "loggers",
-  "$@103", "loggers_entries", "logger_entry", "$@104", "logger_params",
-  "logger_param", "debuglevel", "severity", "$@105", "output_options_list",
-  "$@106", "output_options_list_content", "output_entry", "$@107",
-  "output_params_list", "output_params", "output", "$@108", "flush",
+  "replace_client_name", "$@99", "replace_client_name_value",
+  "generated_prefix", "$@100", "dhcp4_json_object", "$@101",
+  "dhcpddns_json_object", "$@102", "control_agent_json_object", "$@103",
+  "logging_object", "$@104", "logging_params", "logging_param", "loggers",
+  "$@105", "loggers_entries", "logger_entry", "$@106", "logger_params",
+  "logger_param", "debuglevel", "severity", "$@107", "output_options_list",
+  "$@108", "output_options_list_content", "output_entry", "$@109",
+  "output_params_list", "output_params", "output", "$@110", "flush",
   "maxsize", "maxver", YY_NULLPTR
   };
 
@@ -4232,61 +4307,61 @@ namespace isc { namespace dhcp {
   const unsigned short int
   Dhcp6Parser::yyrline_[] =
   {
-       0,   234,   234,   234,   235,   235,   236,   236,   237,   237,
-     238,   238,   239,   239,   240,   240,   241,   241,   242,   242,
-     243,   243,   244,   244,   245,   245,   253,   254,   255,   256,
-     257,   258,   259,   262,   267,   267,   278,   281,   282,   285,
-     289,   296,   296,   303,   304,   307,   311,   318,   318,   325,
-     326,   329,   333,   344,   354,   354,   366,   367,   371,   372,
-     373,   374,   375,   376,   379,   379,   396,   396,   404,   405,
-     410,   411,   412,   413,   414,   415,   416,   417,   418,   419,
-     420,   421,   422,   423,   424,   425,   426,   427,   428,   429,
-     430,   431,   434,   439,   444,   449,   454,   459,   459,   469,
-     469,   477,   478,   481,   482,   485,   485,   495,   501,   501,
-     511,   511,   521,   522,   525,   526,   527,   528,   529,   530,
-     531,   532,   533,   534,   535,   536,   537,   540,   540,   547,
-     548,   549,   550,   553,   553,   561,   561,   569,   569,   577,
-     582,   582,   590,   595,   600,   605,   610,   610,   618,   618,
-     627,   627,   637,   638,   641,   642,   645,   650,   655,   655,
-     665,   666,   669,   670,   671,   674,   679,   686,   686,   696,
-     696,   706,   707,   710,   711,   714,   714,   722,   722,   730,
-     731,   732,   735,   736,   739,   739,   747,   747,   755,   755,
-     765,   766,   769,   770,   771,   772,   773,   774,   777,   782,
-     787,   792,   797,   802,   810,   810,   823,   824,   827,   828,
-     835,   835,   858,   858,   867,   868,   872,   873,   874,   875,
-     876,   877,   878,   879,   880,   881,   882,   883,   884,   885,
-     886,   887,   888,   891,   891,   899,   899,   907,   907,   915,
-     915,   923,   923,   930,   931,   932,   935,   940,   949,   949,
-     961,   962,   965,   966,   971,   971,   982,   982,   992,   993,
-     996,   997,  1000,  1001,  1002,  1003,  1004,  1005,  1006,  1007,
-    1010,  1012,  1017,  1019,  1019,  1027,  1027,  1035,  1035,  1043,
-    1045,  1045,  1053,  1062,  1062,  1074,  1075,  1080,  1081,  1086,
-    1086,  1097,  1097,  1108,  1109,  1114,  1115,  1120,  1121,  1122,
-    1123,  1124,  1125,  1126,  1129,  1131,  1131,  1139,  1141,  1143,
-    1148,  1156,  1156,  1168,  1169,  1172,  1173,  1176,  1176,  1184,
-    1184,  1192,  1193,  1196,  1197,  1198,  1199,  1202,  1202,  1210,
-    1210,  1220,  1220,  1232,  1233,  1236,  1237,  1240,  1240,  1248,
-    1248,  1256,  1257,  1260,  1261,  1262,  1263,  1264,  1265,  1266,
-    1267,  1270,  1270,  1278,  1283,  1283,  1291,  1296,  1304,  1304,
-    1314,  1315,  1318,  1319,  1322,  1322,  1330,  1330,  1338,  1339,
-    1342,  1343,  1347,  1348,  1349,  1350,  1351,  1352,  1353,  1354,
-    1355,  1358,  1358,  1368,  1368,  1378,  1378,  1386,  1386,  1394,
-    1394,  1402,  1402,  1410,  1410,  1423,  1423,  1433,  1433,  1444,
-    1444,  1454,  1455,  1458,  1458,  1466,  1467,  1470,  1471,  1474,
-    1475,  1476,  1477,  1480,  1482,  1482,  1493,  1493,  1503,  1504,
-    1507,  1508,  1509,  1510,  1511,  1512,  1513,  1516,  1516,  1523,
-    1524,  1525,  1528,  1533,  1533,  1541,  1546,  1553,  1560,  1560,
-    1570,  1571,  1574,  1575,  1578,  1578,  1586,  1586,  1596,  1596,
-    1606,  1606,  1614,  1615,  1618,  1619,  1620,  1621,  1622,  1623,
-    1624,  1625,  1626,  1627,  1628,  1629,  1630,  1631,  1632,  1635,
-    1640,  1640,  1648,  1648,  1656,  1661,  1661,  1669,  1674,  1679,
-    1679,  1687,  1688,  1691,  1691,  1699,  1704,  1709,  1714,  1714,
-    1722,  1725,  1728,  1731,  1734,  1740,  1740,  1750,  1750,  1757,
-    1757,  1764,  1764,  1777,  1777,  1790,  1791,  1795,  1799,  1799,
-    1811,  1812,  1816,  1816,  1824,  1825,  1828,  1829,  1830,  1831,
-    1832,  1835,  1840,  1840,  1848,  1848,  1858,  1859,  1862,  1862,
-    1870,  1871,  1874,  1875,  1876,  1877,  1880,  1880,  1888,  1893,
-    1898
+       0,   235,   235,   235,   236,   236,   237,   237,   238,   238,
+     239,   239,   240,   240,   241,   241,   242,   242,   243,   243,
+     244,   244,   245,   245,   246,   246,   247,   247,   255,   256,
+     257,   258,   259,   260,   261,   264,   269,   269,   280,   283,
+     284,   287,   291,   298,   298,   305,   306,   309,   313,   320,
+     320,   327,   328,   331,   335,   346,   356,   356,   371,   372,
+     376,   377,   378,   379,   380,   381,   384,   384,   399,   399,
+     408,   409,   414,   415,   416,   417,   418,   419,   420,   421,
+     422,   423,   424,   425,   426,   427,   428,   429,   430,   431,
+     432,   433,   434,   435,   438,   443,   448,   453,   458,   463,
+     463,   474,   474,   483,   484,   487,   488,   491,   491,   501,
+     507,   507,   519,   519,   531,   532,   535,   536,   537,   538,
+     539,   540,   541,   542,   543,   544,   545,   546,   547,   550,
+     550,   557,   558,   559,   560,   563,   563,   571,   571,   579,
+     579,   587,   592,   592,   600,   605,   610,   615,   620,   620,
+     628,   628,   637,   637,   647,   648,   651,   652,   655,   660,
+     665,   665,   675,   676,   679,   680,   681,   684,   689,   696,
+     696,   706,   706,   716,   717,   720,   721,   724,   724,   734,
+     734,   744,   745,   746,   749,   750,   753,   753,   761,   761,
+     769,   769,   780,   781,   784,   785,   786,   787,   788,   789,
+     792,   797,   802,   807,   812,   817,   825,   825,   838,   839,
+     842,   843,   850,   850,   876,   876,   887,   888,   892,   893,
+     894,   895,   896,   897,   898,   899,   900,   901,   902,   903,
+     904,   905,   906,   907,   908,   911,   911,   919,   919,   927,
+     927,   935,   935,   943,   943,   950,   951,   952,   955,   960,
+     969,   969,   982,   982,   991,   992,   995,   996,  1001,  1001,
+    1016,  1016,  1030,  1031,  1034,  1035,  1038,  1039,  1040,  1041,
+    1042,  1043,  1044,  1045,  1048,  1050,  1055,  1057,  1057,  1065,
+    1065,  1073,  1073,  1081,  1083,  1083,  1091,  1100,  1100,  1112,
+    1113,  1118,  1119,  1124,  1124,  1136,  1136,  1148,  1149,  1154,
+    1155,  1160,  1161,  1162,  1163,  1164,  1165,  1166,  1169,  1171,
+    1171,  1179,  1181,  1183,  1188,  1196,  1196,  1208,  1209,  1212,
+    1213,  1216,  1216,  1226,  1226,  1235,  1236,  1239,  1240,  1241,
+    1242,  1245,  1245,  1253,  1253,  1263,  1263,  1275,  1276,  1279,
+    1280,  1283,  1283,  1295,  1295,  1307,  1308,  1311,  1312,  1313,
+    1314,  1315,  1316,  1317,  1318,  1321,  1321,  1329,  1334,  1334,
+    1342,  1347,  1355,  1355,  1365,  1366,  1369,  1370,  1373,  1373,
+    1382,  1382,  1391,  1392,  1395,  1396,  1400,  1401,  1402,  1403,
+    1404,  1405,  1406,  1407,  1408,  1411,  1411,  1421,  1421,  1431,
+    1431,  1439,  1439,  1447,  1447,  1455,  1455,  1463,  1463,  1476,
+    1476,  1486,  1486,  1497,  1497,  1507,  1508,  1511,  1511,  1521,
+    1522,  1525,  1526,  1529,  1530,  1531,  1532,  1535,  1537,  1537,
+    1548,  1548,  1560,  1561,  1564,  1565,  1566,  1567,  1568,  1569,
+    1570,  1573,  1573,  1580,  1581,  1582,  1585,  1590,  1590,  1598,
+    1603,  1610,  1617,  1617,  1627,  1628,  1631,  1632,  1635,  1635,
+    1643,  1643,  1653,  1653,  1665,  1665,  1675,  1676,  1679,  1680,
+    1681,  1682,  1683,  1684,  1685,  1686,  1687,  1688,  1689,  1690,
+    1691,  1692,  1693,  1696,  1701,  1701,  1709,  1709,  1717,  1722,
+    1722,  1730,  1735,  1740,  1740,  1748,  1749,  1752,  1752,  1760,
+    1765,  1770,  1775,  1775,  1783,  1786,  1789,  1792,  1795,  1801,
+    1801,  1811,  1811,  1818,  1818,  1825,  1825,  1838,  1838,  1851,
+    1852,  1856,  1860,  1860,  1872,  1873,  1877,  1877,  1885,  1886,
+    1889,  1890,  1891,  1892,  1893,  1896,  1901,  1901,  1909,  1909,
+    1919,  1920,  1923,  1923,  1931,  1932,  1935,  1936,  1937,  1938,
+    1941,  1941,  1949,  1954,  1959
   };
 
   // Print the state stack on the debug stream.
@@ -4321,8 +4396,8 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp6_parser.yy" // lalr1.cc:1167
 } } // isc::dhcp
-#line 4325 "dhcp6_parser.cc" // lalr1.cc:1167
-#line 1903 "dhcp6_parser.yy" // lalr1.cc:1168
+#line 4400 "dhcp6_parser.cc" // lalr1.cc:1167
+#line 1964 "dhcp6_parser.yy" // lalr1.cc:1168
 
 
 void
index f1c4d26b6bcd5d29c77953b4aa9c2aaa349cecc6..0484482f99065e953627f8dda1dfaa4ab05b40b5 100644 (file)
@@ -489,14 +489,15 @@ namespace isc { namespace dhcp {
         TOKEN_SUB_POOL6 = 397,
         TOKEN_SUB_PD_POOL = 398,
         TOKEN_SUB_RESERVATION = 399,
-        TOKEN_SUB_OPTION_DEF = 400,
-        TOKEN_SUB_OPTION_DATA = 401,
-        TOKEN_SUB_HOOKS_LIBRARY = 402,
-        TOKEN_SUB_DHCP_DDNS = 403,
-        TOKEN_STRING = 404,
-        TOKEN_INTEGER = 405,
-        TOKEN_FLOAT = 406,
-        TOKEN_BOOLEAN = 407
+        TOKEN_SUB_OPTION_DEFS = 400,
+        TOKEN_SUB_OPTION_DEF = 401,
+        TOKEN_SUB_OPTION_DATA = 402,
+        TOKEN_SUB_HOOKS_LIBRARY = 403,
+        TOKEN_SUB_DHCP_DDNS = 404,
+        TOKEN_STRING = 405,
+        TOKEN_INTEGER = 406,
+        TOKEN_FLOAT = 407,
+        TOKEN_BOOLEAN = 408
       };
     };
 
@@ -1183,6 +1184,10 @@ namespace isc { namespace dhcp {
     symbol_type
     make_SUB_RESERVATION (const location_type& l);
 
+    static inline
+    symbol_type
+    make_SUB_OPTION_DEFS (const location_type& l);
+
     static inline
     symbol_type
     make_SUB_OPTION_DEF (const location_type& l);
@@ -1420,12 +1425,12 @@ namespace isc { namespace dhcp {
     enum
     {
       yyeof_ = 0,
-      yylast_ = 804,     ///< Last index in yytable_.
-      yynnts_ = 335,  ///< Number of nonterminal symbols.
-      yyfinal_ = 26, ///< Termination state number.
+      yylast_ = 803,     ///< Last index in yytable_.
+      yynnts_ = 338,  ///< Number of nonterminal symbols.
+      yyfinal_ = 28, ///< Termination state number.
       yyterror_ = 1,
       yyerrcode_ = 256,
-      yyntokens_ = 153  ///< Number of tokens.
+      yyntokens_ = 154  ///< Number of tokens.
     };
 
 
@@ -1482,9 +1487,9 @@ namespace isc { namespace dhcp {
      115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
      135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152
+     145,   146,   147,   148,   149,   150,   151,   152,   153
     };
-    const unsigned int user_token_number_max_ = 407;
+    const unsigned int user_token_number_max_ = 408;
     const token_number_type undef_token_ = 2;
 
     if (static_cast<int>(t) <= yyeof_)
@@ -1517,29 +1522,29 @@ namespace isc { namespace dhcp {
   {
       switch (other.type_get ())
     {
-      case 167: // value
-      case 171: // map_value
-      case 215: // db_type
-      case 291: // hr_mode
-      case 412: // duid_type
-      case 445: // ncr_protocol_value
-      case 453: // replace_client_name_value
+      case 169: // value
+      case 173: // map_value
+      case 217: // db_type
+      case 293: // hr_mode
+      case 416: // duid_type
+      case 449: // ncr_protocol_value
+      case 457: // replace_client_name_value
         value.copy< ElementPtr > (other.value);
         break;
 
-      case 152: // "boolean"
+      case 153: // "boolean"
         value.copy< bool > (other.value);
         break;
 
-      case 151: // "floating point"
+      case 152: // "floating point"
         value.copy< double > (other.value);
         break;
 
-      case 150: // "integer"
+      case 151: // "integer"
         value.copy< int64_t > (other.value);
         break;
 
-      case 149: // "constant string"
+      case 150: // "constant string"
         value.copy< std::string > (other.value);
         break;
 
@@ -1560,29 +1565,29 @@ namespace isc { namespace dhcp {
     (void) v;
       switch (this->type_get ())
     {
-      case 167: // value
-      case 171: // map_value
-      case 215: // db_type
-      case 291: // hr_mode
-      case 412: // duid_type
-      case 445: // ncr_protocol_value
-      case 453: // replace_client_name_value
+      case 169: // value
+      case 173: // map_value
+      case 217: // db_type
+      case 293: // hr_mode
+      case 416: // duid_type
+      case 449: // ncr_protocol_value
+      case 457: // replace_client_name_value
         value.copy< ElementPtr > (v);
         break;
 
-      case 152: // "boolean"
+      case 153: // "boolean"
         value.copy< bool > (v);
         break;
 
-      case 151: // "floating point"
+      case 152: // "floating point"
         value.copy< double > (v);
         break;
 
-      case 150: // "integer"
+      case 151: // "integer"
         value.copy< int64_t > (v);
         break;
 
-      case 149: // "constant string"
+      case 150: // "constant string"
         value.copy< std::string > (v);
         break;
 
@@ -1662,29 +1667,29 @@ namespace isc { namespace dhcp {
     // Type destructor.
     switch (yytype)
     {
-      case 167: // value
-      case 171: // map_value
-      case 215: // db_type
-      case 291: // hr_mode
-      case 412: // duid_type
-      case 445: // ncr_protocol_value
-      case 453: // replace_client_name_value
+      case 169: // value
+      case 173: // map_value
+      case 217: // db_type
+      case 293: // hr_mode
+      case 416: // duid_type
+      case 449: // ncr_protocol_value
+      case 457: // replace_client_name_value
         value.template destroy< ElementPtr > ();
         break;
 
-      case 152: // "boolean"
+      case 153: // "boolean"
         value.template destroy< bool > ();
         break;
 
-      case 151: // "floating point"
+      case 152: // "floating point"
         value.template destroy< double > ();
         break;
 
-      case 150: // "integer"
+      case 151: // "integer"
         value.template destroy< int64_t > ();
         break;
 
-      case 149: // "constant string"
+      case 150: // "constant string"
         value.template destroy< std::string > ();
         break;
 
@@ -1711,29 +1716,29 @@ namespace isc { namespace dhcp {
     super_type::move(s);
       switch (this->type_get ())
     {
-      case 167: // value
-      case 171: // map_value
-      case 215: // db_type
-      case 291: // hr_mode
-      case 412: // duid_type
-      case 445: // ncr_protocol_value
-      case 453: // replace_client_name_value
+      case 169: // value
+      case 173: // map_value
+      case 217: // db_type
+      case 293: // hr_mode
+      case 416: // duid_type
+      case 449: // ncr_protocol_value
+      case 457: // replace_client_name_value
         value.move< ElementPtr > (s.value);
         break;
 
-      case 152: // "boolean"
+      case 153: // "boolean"
         value.move< bool > (s.value);
         break;
 
-      case 151: // "floating point"
+      case 152: // "floating point"
         value.move< double > (s.value);
         break;
 
-      case 150: // "integer"
+      case 151: // "integer"
         value.move< int64_t > (s.value);
         break;
 
-      case 149: // "constant string"
+      case 150: // "constant string"
         value.move< std::string > (s.value);
         break;
 
@@ -1807,7 +1812,7 @@ namespace isc { namespace dhcp {
      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
      385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
      395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
-     405,   406,   407
+     405,   406,   407,   408
     };
     return static_cast<token_type> (yytoken_number_[type]);
   }
@@ -2670,6 +2675,12 @@ namespace isc { namespace dhcp {
     return symbol_type (token::TOKEN_SUB_RESERVATION, l);
   }
 
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SUB_OPTION_DEFS (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_SUB_OPTION_DEFS, l);
+  }
+
   Dhcp6Parser::symbol_type
   Dhcp6Parser::make_SUB_OPTION_DEF (const location_type& l)
   {
@@ -2721,7 +2732,7 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp6_parser.yy" // lalr1.cc:377
 } } // isc::dhcp
-#line 2725 "dhcp6_parser.h" // lalr1.cc:377
+#line 2736 "dhcp6_parser.h" // lalr1.cc:377
 
 
 
index 75d2f585535046163e52dd905827fc0d1293febf..51dab9c85b4cc141ab9b3e0a8f760ac086363f67 100644 (file)
@@ -1,4 +1,4 @@
-// Generated 201708070754
+// Generated 201709021237
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Locations for Bison parsers in C++
index f0bbb814c545a0ea082e1e53d9fb9dee9585d944..2cfd3e9df1bc36bf716669b21655df18669c943a 100644 (file)
@@ -1,4 +1,4 @@
-// Generated 201708070754
+// Generated 201709021237
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Positions for Bison parsers in C++
index c204b235e08a2bbea3ea1173ddd7e2d47a777a1f..77aa9a76c2e7e46ef76022b9567e2b1c0f05fdad 100644 (file)
@@ -1,4 +1,4 @@
-// Generated 201708070754
+// Generated 201709021237
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Stack handling for Bison parsers in C++