]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#3927] Indented SSL_MODE
authorFrancis Dupont <fdupont@isc.org>
Wed, 9 Jul 2025 12:51:09 +0000 (14:51 +0200)
committerRazvan Becheriu <razvan@isc.org>
Wed, 9 Jul 2025 13:03:46 +0000 (16:03 +0300)
src/bin/dhcp4/dhcp4_parser.cc
src/bin/dhcp4/dhcp4_parser.yy
src/bin/dhcp6/dhcp6_parser.cc
src/bin/dhcp6/dhcp6_parser.yy

index 76fbf579a861505b1e4ebec0df92f01a00e56817..84f8221b8841ed37a1dcde9cdd514e11f3157dba 100644 (file)
@@ -2385,55 +2385,65 @@ namespace isc { namespace dhcp {
 
   case 316: // ssl_mode: "disable"
 #line 1316 "dhcp4_parser.yy"
-                  { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("disable", ctx.loc2pos(yystack_[0].location))); }
-#line 2390 "dhcp4_parser.cc"
+                  {
+            yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("disable", ctx.loc2pos(yystack_[0].location)));
+            }
+#line 2392 "dhcp4_parser.cc"
     break;
 
   case 317: // ssl_mode: "prefer"
-#line 1317 "dhcp4_parser.yy"
-                 { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("prefer", ctx.loc2pos(yystack_[0].location))); }
-#line 2396 "dhcp4_parser.cc"
+#line 1319 "dhcp4_parser.yy"
+                 {
+            yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("prefer", ctx.loc2pos(yystack_[0].location)));
+            }
+#line 2400 "dhcp4_parser.cc"
     break;
 
   case 318: // ssl_mode: "require"
-#line 1318 "dhcp4_parser.yy"
-                  { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("require", ctx.loc2pos(yystack_[0].location))); }
-#line 2402 "dhcp4_parser.cc"
+#line 1322 "dhcp4_parser.yy"
+                  {
+            yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("require", ctx.loc2pos(yystack_[0].location)));
+            }
+#line 2408 "dhcp4_parser.cc"
     break;
 
   case 319: // ssl_mode: "verify-ca"
-#line 1319 "dhcp4_parser.yy"
-                    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("verify-ca", ctx.loc2pos(yystack_[0].location))); }
-#line 2408 "dhcp4_parser.cc"
+#line 1325 "dhcp4_parser.yy"
+                    {
+            yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("verify-ca", ctx.loc2pos(yystack_[0].location)));
+            }
+#line 2416 "dhcp4_parser.cc"
     break;
 
   case 320: // ssl_mode: "verify-full"
-#line 1320 "dhcp4_parser.yy"
-                      { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("verify-full", ctx.loc2pos(yystack_[0].location))); }
-#line 2414 "dhcp4_parser.cc"
+#line 1328 "dhcp4_parser.yy"
+                      {
+            yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("verify-full", ctx.loc2pos(yystack_[0].location)));
+            }
+#line 2424 "dhcp4_parser.cc"
     break;
 
   case 321: // $@50: %empty
-#line 1323 "dhcp4_parser.yy"
+#line 1333 "dhcp4_parser.yy"
                          {
     ctx.unique("cipher-list", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2423 "dhcp4_parser.cc"
+#line 2433 "dhcp4_parser.cc"
     break;
 
   case 322: // cipher_list: "cipher-list" $@50 ":" "constant string"
-#line 1326 "dhcp4_parser.yy"
+#line 1336 "dhcp4_parser.yy"
                {
     ElementPtr cl(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("cipher-list", cl);
     ctx.leave();
 }
-#line 2433 "dhcp4_parser.cc"
+#line 2443 "dhcp4_parser.cc"
     break;
 
   case 323: // $@51: %empty
-#line 1332 "dhcp4_parser.yy"
+#line 1342 "dhcp4_parser.yy"
                                                            {
     ctx.unique("host-reservation-identifiers", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2441,73 +2451,73 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS);
 }
-#line 2445 "dhcp4_parser.cc"
+#line 2455 "dhcp4_parser.cc"
     break;
 
   case 324: // host_reservation_identifiers: "host-reservation-identifiers" $@51 ":" "[" host_reservation_identifiers_list "]"
-#line 1338 "dhcp4_parser.yy"
+#line 1348 "dhcp4_parser.yy"
                                                                           {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2454 "dhcp4_parser.cc"
+#line 2464 "dhcp4_parser.cc"
     break;
 
   case 327: // host_reservation_identifiers_list: host_reservation_identifiers_list ","
-#line 1345 "dhcp4_parser.yy"
+#line 1355 "dhcp4_parser.yy"
                                               {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 2462 "dhcp4_parser.cc"
+#line 2472 "dhcp4_parser.cc"
     break;
 
   case 333: // duid_id: "duid"
-#line 1357 "dhcp4_parser.yy"
+#line 1367 "dhcp4_parser.yy"
               {
     ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
 }
-#line 2471 "dhcp4_parser.cc"
+#line 2481 "dhcp4_parser.cc"
     break;
 
   case 334: // hw_address_id: "hw-address"
-#line 1362 "dhcp4_parser.yy"
+#line 1372 "dhcp4_parser.yy"
                           {
     ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(hwaddr);
 }
-#line 2480 "dhcp4_parser.cc"
+#line 2490 "dhcp4_parser.cc"
     break;
 
   case 335: // circuit_id: "circuit-id"
-#line 1367 "dhcp4_parser.yy"
+#line 1377 "dhcp4_parser.yy"
                        {
     ElementPtr circuit(new StringElement("circuit-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(circuit);
 }
-#line 2489 "dhcp4_parser.cc"
+#line 2499 "dhcp4_parser.cc"
     break;
 
   case 336: // client_id: "client-id"
-#line 1372 "dhcp4_parser.yy"
+#line 1382 "dhcp4_parser.yy"
                      {
     ElementPtr client(new StringElement("client-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(client);
 }
-#line 2498 "dhcp4_parser.cc"
+#line 2508 "dhcp4_parser.cc"
     break;
 
   case 337: // flex_id: "flex-id"
-#line 1377 "dhcp4_parser.yy"
+#line 1387 "dhcp4_parser.yy"
                  {
     ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(flex_id);
 }
-#line 2507 "dhcp4_parser.cc"
+#line 2517 "dhcp4_parser.cc"
     break;
 
   case 338: // $@52: %empty
-#line 1384 "dhcp4_parser.yy"
+#line 1394 "dhcp4_parser.yy"
                                            {
     ctx.unique("multi-threading", ctx.loc2pos(yystack_[0].location));
     ElementPtr mt(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2515,60 +2525,60 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(mt);
     ctx.enter(ctx.DHCP_MULTI_THREADING);
 }
-#line 2519 "dhcp4_parser.cc"
+#line 2529 "dhcp4_parser.cc"
     break;
 
   case 339: // dhcp_multi_threading: "multi-threading" $@52 ":" "{" multi_threading_params "}"
-#line 1390 "dhcp4_parser.yy"
+#line 1400 "dhcp4_parser.yy"
                                                              {
     // The enable parameter is required.
     ctx.require("enable-multi-threading", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2530 "dhcp4_parser.cc"
+#line 2540 "dhcp4_parser.cc"
     break;
 
   case 342: // multi_threading_params: multi_threading_params ","
-#line 1399 "dhcp4_parser.yy"
+#line 1409 "dhcp4_parser.yy"
                                                      {
                           ctx.warnAboutExtraCommas(yystack_[0].location);
                           }
-#line 2538 "dhcp4_parser.cc"
+#line 2548 "dhcp4_parser.cc"
     break;
 
   case 349: // enable_multi_threading: "enable-multi-threading" ":" "boolean"
-#line 1412 "dhcp4_parser.yy"
+#line 1422 "dhcp4_parser.yy"
                                                              {
     ctx.unique("enable-multi-threading", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enable-multi-threading", b);
 }
-#line 2548 "dhcp4_parser.cc"
+#line 2558 "dhcp4_parser.cc"
     break;
 
   case 350: // thread_pool_size: "thread-pool-size" ":" "integer"
-#line 1418 "dhcp4_parser.yy"
+#line 1428 "dhcp4_parser.yy"
                                                  {
     ctx.unique("thread-pool-size", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("thread-pool-size", prf);
 }
-#line 2558 "dhcp4_parser.cc"
+#line 2568 "dhcp4_parser.cc"
     break;
 
   case 351: // packet_queue_size: "packet-queue-size" ":" "integer"
-#line 1424 "dhcp4_parser.yy"
+#line 1434 "dhcp4_parser.yy"
                                                    {
     ctx.unique("packet-queue-size", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("packet-queue-size", prf);
 }
-#line 2568 "dhcp4_parser.cc"
+#line 2578 "dhcp4_parser.cc"
     break;
 
   case 352: // $@53: %empty
-#line 1430 "dhcp4_parser.yy"
+#line 1440 "dhcp4_parser.yy"
                                  {
     ctx.unique("hooks-libraries", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2576,113 +2586,113 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOOKS_LIBRARIES);
 }
-#line 2580 "dhcp4_parser.cc"
+#line 2590 "dhcp4_parser.cc"
     break;
 
   case 353: // hooks_libraries: "hooks-libraries" $@53 ":" "[" hooks_libraries_list "]"
-#line 1436 "dhcp4_parser.yy"
+#line 1446 "dhcp4_parser.yy"
                                                              {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2589 "dhcp4_parser.cc"
+#line 2599 "dhcp4_parser.cc"
     break;
 
   case 358: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list ","
-#line 1447 "dhcp4_parser.yy"
+#line 1457 "dhcp4_parser.yy"
                                            {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 2597 "dhcp4_parser.cc"
+#line 2607 "dhcp4_parser.cc"
     break;
 
   case 359: // $@54: %empty
-#line 1452 "dhcp4_parser.yy"
+#line 1462 "dhcp4_parser.yy"
                               {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2607 "dhcp4_parser.cc"
+#line 2617 "dhcp4_parser.cc"
     break;
 
   case 360: // hooks_library: "{" $@54 hooks_params "}"
-#line 1456 "dhcp4_parser.yy"
+#line 1466 "dhcp4_parser.yy"
                               {
     // The library hooks parameter is required
     ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2617 "dhcp4_parser.cc"
+#line 2627 "dhcp4_parser.cc"
     break;
 
   case 361: // $@55: %empty
-#line 1462 "dhcp4_parser.yy"
+#line 1472 "dhcp4_parser.yy"
                                   {
     // Parse the hooks-libraries list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2627 "dhcp4_parser.cc"
+#line 2637 "dhcp4_parser.cc"
     break;
 
   case 362: // sub_hooks_library: "{" $@55 hooks_params "}"
-#line 1466 "dhcp4_parser.yy"
+#line 1476 "dhcp4_parser.yy"
                               {
     // The library hooks parameter is required
     ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2637 "dhcp4_parser.cc"
+#line 2647 "dhcp4_parser.cc"
     break;
 
   case 365: // hooks_params: hooks_params ","
-#line 1474 "dhcp4_parser.yy"
+#line 1484 "dhcp4_parser.yy"
                                  {
                 ctx.warnAboutExtraCommas(yystack_[0].location);
                 }
-#line 2645 "dhcp4_parser.cc"
+#line 2655 "dhcp4_parser.cc"
     break;
 
   case 369: // $@56: %empty
-#line 1484 "dhcp4_parser.yy"
+#line 1494 "dhcp4_parser.yy"
                  {
     ctx.unique("library", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2654 "dhcp4_parser.cc"
+#line 2664 "dhcp4_parser.cc"
     break;
 
   case 370: // library: "library" $@56 ":" "constant string"
-#line 1487 "dhcp4_parser.yy"
+#line 1497 "dhcp4_parser.yy"
                {
     ElementPtr lib(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("library", lib);
     ctx.leave();
 }
-#line 2664 "dhcp4_parser.cc"
+#line 2674 "dhcp4_parser.cc"
     break;
 
   case 371: // $@57: %empty
-#line 1493 "dhcp4_parser.yy"
+#line 1503 "dhcp4_parser.yy"
                        {
     ctx.unique("parameters", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2673 "dhcp4_parser.cc"
+#line 2683 "dhcp4_parser.cc"
     break;
 
   case 372: // parameters: "parameters" $@57 ":" map_value
-#line 1496 "dhcp4_parser.yy"
+#line 1506 "dhcp4_parser.yy"
                   {
     ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 2682 "dhcp4_parser.cc"
+#line 2692 "dhcp4_parser.cc"
     break;
 
   case 373: // $@58: %empty
-#line 1502 "dhcp4_parser.yy"
+#line 1512 "dhcp4_parser.yy"
                                                      {
     ctx.unique("expired-leases-processing", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2690,89 +2700,89 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.EXPIRED_LEASES_PROCESSING);
 }
-#line 2694 "dhcp4_parser.cc"
+#line 2704 "dhcp4_parser.cc"
     break;
 
   case 374: // expired_leases_processing: "expired-leases-processing" $@58 ":" "{" expired_leases_params "}"
-#line 1508 "dhcp4_parser.yy"
+#line 1518 "dhcp4_parser.yy"
                                                             {
     // No expired lease parameter is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2704 "dhcp4_parser.cc"
+#line 2714 "dhcp4_parser.cc"
     break;
 
   case 377: // expired_leases_params: expired_leases_params ","
-#line 1516 "dhcp4_parser.yy"
+#line 1526 "dhcp4_parser.yy"
                                                    {
                          ctx.warnAboutExtraCommas(yystack_[0].location);
                          }
-#line 2712 "dhcp4_parser.cc"
+#line 2722 "dhcp4_parser.cc"
     break;
 
   case 384: // reclaim_timer_wait_time: "reclaim-timer-wait-time" ":" "integer"
-#line 1529 "dhcp4_parser.yy"
+#line 1539 "dhcp4_parser.yy"
                                                                {
     ctx.unique("reclaim-timer-wait-time", ctx.loc2pos(yystack_[2].location));
     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 2722 "dhcp4_parser.cc"
+#line 2732 "dhcp4_parser.cc"
     break;
 
   case 385: // flush_reclaimed_timer_wait_time: "flush-reclaimed-timer-wait-time" ":" "integer"
-#line 1535 "dhcp4_parser.yy"
+#line 1545 "dhcp4_parser.yy"
                                                                                {
     ctx.unique("flush-reclaimed-timer-wait-time", ctx.loc2pos(yystack_[2].location));
     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 2732 "dhcp4_parser.cc"
+#line 2742 "dhcp4_parser.cc"
     break;
 
   case 386: // hold_reclaimed_time: "hold-reclaimed-time" ":" "integer"
-#line 1541 "dhcp4_parser.yy"
+#line 1551 "dhcp4_parser.yy"
                                                        {
     ctx.unique("hold-reclaimed-time", ctx.loc2pos(yystack_[2].location));
     ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hold-reclaimed-time", value);
 }
-#line 2742 "dhcp4_parser.cc"
+#line 2752 "dhcp4_parser.cc"
     break;
 
   case 387: // max_reclaim_leases: "max-reclaim-leases" ":" "integer"
-#line 1547 "dhcp4_parser.yy"
+#line 1557 "dhcp4_parser.yy"
                                                      {
     ctx.unique("max-reclaim-leases", ctx.loc2pos(yystack_[2].location));
     ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reclaim-leases", value);
 }
-#line 2752 "dhcp4_parser.cc"
+#line 2762 "dhcp4_parser.cc"
     break;
 
   case 388: // max_reclaim_time: "max-reclaim-time" ":" "integer"
-#line 1553 "dhcp4_parser.yy"
+#line 1563 "dhcp4_parser.yy"
                                                  {
     ctx.unique("max-reclaim-time", ctx.loc2pos(yystack_[2].location));
     ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reclaim-time", value);
 }
-#line 2762 "dhcp4_parser.cc"
+#line 2772 "dhcp4_parser.cc"
     break;
 
   case 389: // unwarned_reclaim_cycles: "unwarned-reclaim-cycles" ":" "integer"
-#line 1559 "dhcp4_parser.yy"
+#line 1569 "dhcp4_parser.yy"
                                                                {
     ctx.unique("unwarned-reclaim-cycles", ctx.loc2pos(yystack_[2].location));
     ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("unwarned-reclaim-cycles", value);
 }
-#line 2772 "dhcp4_parser.cc"
+#line 2782 "dhcp4_parser.cc"
     break;
 
   case 390: // $@59: %empty
-#line 1568 "dhcp4_parser.yy"
+#line 1578 "dhcp4_parser.yy"
                       {
     ctx.unique("subnet4", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2780,38 +2790,38 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.SUBNET4);
 }
-#line 2784 "dhcp4_parser.cc"
+#line 2794 "dhcp4_parser.cc"
     break;
 
   case 391: // subnet4_list: "subnet4" $@59 ":" "[" subnet4_list_content "]"
-#line 1574 "dhcp4_parser.yy"
+#line 1584 "dhcp4_parser.yy"
                                                              {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2793 "dhcp4_parser.cc"
+#line 2803 "dhcp4_parser.cc"
     break;
 
   case 396: // not_empty_subnet4_list: not_empty_subnet4_list ","
-#line 1588 "dhcp4_parser.yy"
+#line 1598 "dhcp4_parser.yy"
                                                      {
                           ctx.warnAboutExtraCommas(yystack_[0].location);
                           }
-#line 2801 "dhcp4_parser.cc"
+#line 2811 "dhcp4_parser.cc"
     break;
 
   case 397: // $@60: %empty
-#line 1597 "dhcp4_parser.yy"
+#line 1607 "dhcp4_parser.yy"
                         {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2811 "dhcp4_parser.cc"
+#line 2821 "dhcp4_parser.cc"
     break;
 
   case 398: // subnet4: "{" $@60 subnet4_params "}"
-#line 1601 "dhcp4_parser.yy"
+#line 1611 "dhcp4_parser.yy"
                                 {
     // Once we reached this place, the subnet parsing is now complete.
     // If we want to, we can implement default values here.
@@ -2833,153 +2843,153 @@ namespace isc { namespace dhcp {
     ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2837 "dhcp4_parser.cc"
+#line 2847 "dhcp4_parser.cc"
     break;
 
   case 399: // $@61: %empty
-#line 1623 "dhcp4_parser.yy"
+#line 1633 "dhcp4_parser.yy"
                             {
     // Parse the subnet4 list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2847 "dhcp4_parser.cc"
+#line 2857 "dhcp4_parser.cc"
     break;
 
   case 400: // sub_subnet4: "{" $@61 subnet4_params "}"
-#line 1627 "dhcp4_parser.yy"
+#line 1637 "dhcp4_parser.yy"
                                 {
     // The subnet subnet4 parameter is required
     ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2857 "dhcp4_parser.cc"
+#line 2867 "dhcp4_parser.cc"
     break;
 
   case 403: // subnet4_params: subnet4_params ","
-#line 1636 "dhcp4_parser.yy"
+#line 1646 "dhcp4_parser.yy"
                                      {
                   ctx.warnAboutExtraCommas(yystack_[0].location);
                   }
-#line 2865 "dhcp4_parser.cc"
+#line 2875 "dhcp4_parser.cc"
     break;
 
   case 457: // $@62: %empty
-#line 1697 "dhcp4_parser.yy"
+#line 1707 "dhcp4_parser.yy"
                {
     ctx.unique("subnet", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2874 "dhcp4_parser.cc"
+#line 2884 "dhcp4_parser.cc"
     break;
 
   case 458: // subnet: "subnet" $@62 ":" "constant string"
-#line 1700 "dhcp4_parser.yy"
+#line 1710 "dhcp4_parser.yy"
                {
     ElementPtr subnet(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet", subnet);
     ctx.leave();
 }
-#line 2884 "dhcp4_parser.cc"
+#line 2894 "dhcp4_parser.cc"
     break;
 
   case 459: // $@63: %empty
-#line 1706 "dhcp4_parser.yy"
+#line 1716 "dhcp4_parser.yy"
                                            {
     ctx.unique("4o6-interface", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2893 "dhcp4_parser.cc"
+#line 2903 "dhcp4_parser.cc"
     break;
 
   case 460: // subnet_4o6_interface: "4o6-interface" $@63 ":" "constant string"
-#line 1709 "dhcp4_parser.yy"
+#line 1719 "dhcp4_parser.yy"
                {
     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 2903 "dhcp4_parser.cc"
+#line 2913 "dhcp4_parser.cc"
     break;
 
   case 461: // $@64: %empty
-#line 1715 "dhcp4_parser.yy"
+#line 1725 "dhcp4_parser.yy"
                                                  {
     ctx.unique("4o6-interface-id", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2912 "dhcp4_parser.cc"
+#line 2922 "dhcp4_parser.cc"
     break;
 
   case 462: // subnet_4o6_interface_id: "4o6-interface-id" $@64 ":" "constant string"
-#line 1718 "dhcp4_parser.yy"
+#line 1728 "dhcp4_parser.yy"
                {
     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 2922 "dhcp4_parser.cc"
+#line 2932 "dhcp4_parser.cc"
     break;
 
   case 463: // $@65: %empty
-#line 1724 "dhcp4_parser.yy"
+#line 1734 "dhcp4_parser.yy"
                                      {
     ctx.unique("4o6-subnet", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2931 "dhcp4_parser.cc"
+#line 2941 "dhcp4_parser.cc"
     break;
 
   case 464: // subnet_4o6_subnet: "4o6-subnet" $@65 ":" "constant string"
-#line 1727 "dhcp4_parser.yy"
+#line 1737 "dhcp4_parser.yy"
                {
     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 2941 "dhcp4_parser.cc"
+#line 2951 "dhcp4_parser.cc"
     break;
 
   case 465: // $@66: %empty
-#line 1733 "dhcp4_parser.yy"
+#line 1743 "dhcp4_parser.yy"
                      {
     ctx.unique("interface", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2950 "dhcp4_parser.cc"
+#line 2960 "dhcp4_parser.cc"
     break;
 
   case 466: // interface: "interface" $@66 ":" "constant string"
-#line 1736 "dhcp4_parser.yy"
+#line 1746 "dhcp4_parser.yy"
                {
     ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface", iface);
     ctx.leave();
 }
-#line 2960 "dhcp4_parser.cc"
+#line 2970 "dhcp4_parser.cc"
     break;
 
   case 467: // $@67: %empty
-#line 1742 "dhcp4_parser.yy"
+#line 1752 "dhcp4_parser.yy"
                            {
     ctx.unique("client-class", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2969 "dhcp4_parser.cc"
+#line 2979 "dhcp4_parser.cc"
     break;
 
   case 468: // client_class: "client-class" $@67 ":" "constant string"
-#line 1745 "dhcp4_parser.yy"
+#line 1755 "dhcp4_parser.yy"
                {
     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 2979 "dhcp4_parser.cc"
+#line 2989 "dhcp4_parser.cc"
     break;
 
   case 469: // $@68: %empty
-#line 1752 "dhcp4_parser.yy"
+#line 1762 "dhcp4_parser.yy"
                                        {
     ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location));
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2987,20 +2997,20 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2991 "dhcp4_parser.cc"
+#line 3001 "dhcp4_parser.cc"
     break;
 
   case 470: // network_client_classes: "client-classes" $@68 ":" list_strings
-#line 1758 "dhcp4_parser.yy"
+#line 1768 "dhcp4_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3000 "dhcp4_parser.cc"
+#line 3010 "dhcp4_parser.cc"
     break;
 
   case 471: // $@69: %empty
-#line 1764 "dhcp4_parser.yy"
+#line 1774 "dhcp4_parser.yy"
                                                {
     ctx.unique("require-client-classes", ctx.loc2pos(yystack_[0].location));
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3008,20 +3018,20 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3012 "dhcp4_parser.cc"
+#line 3022 "dhcp4_parser.cc"
     break;
 
   case 472: // require_client_classes: "require-client-classes" $@69 ":" list_strings
-#line 1770 "dhcp4_parser.yy"
+#line 1780 "dhcp4_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3021 "dhcp4_parser.cc"
+#line 3031 "dhcp4_parser.cc"
     break;
 
   case 473: // $@70: %empty
-#line 1775 "dhcp4_parser.yy"
+#line 1785 "dhcp4_parser.yy"
                                                          {
     ctx.unique("evaluate-additional-classes", ctx.loc2pos(yystack_[0].location));
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3029,60 +3039,60 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3033 "dhcp4_parser.cc"
+#line 3043 "dhcp4_parser.cc"
     break;
 
   case 474: // evaluate_additional_classes: "evaluate-additional-classes" $@70 ":" list_strings
-#line 1781 "dhcp4_parser.yy"
+#line 1791 "dhcp4_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3042 "dhcp4_parser.cc"
+#line 3052 "dhcp4_parser.cc"
     break;
 
   case 475: // reservations_global: "reservations-global" ":" "boolean"
-#line 1786 "dhcp4_parser.yy"
+#line 1796 "dhcp4_parser.yy"
                                                        {
     ctx.unique("reservations-global", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations-global", b);
 }
-#line 3052 "dhcp4_parser.cc"
+#line 3062 "dhcp4_parser.cc"
     break;
 
   case 476: // reservations_in_subnet: "reservations-in-subnet" ":" "boolean"
-#line 1792 "dhcp4_parser.yy"
+#line 1802 "dhcp4_parser.yy"
                                                              {
     ctx.unique("reservations-in-subnet", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations-in-subnet", b);
 }
-#line 3062 "dhcp4_parser.cc"
+#line 3072 "dhcp4_parser.cc"
     break;
 
   case 477: // reservations_out_of_pool: "reservations-out-of-pool" ":" "boolean"
-#line 1798 "dhcp4_parser.yy"
+#line 1808 "dhcp4_parser.yy"
                                                                  {
     ctx.unique("reservations-out-of-pool", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations-out-of-pool", b);
 }
-#line 3072 "dhcp4_parser.cc"
+#line 3082 "dhcp4_parser.cc"
     break;
 
   case 478: // id: "id" ":" "integer"
-#line 1804 "dhcp4_parser.yy"
+#line 1814 "dhcp4_parser.yy"
                      {
     ctx.unique("id", ctx.loc2pos(yystack_[2].location));
     ElementPtr id(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("id", id);
 }
-#line 3082 "dhcp4_parser.cc"
+#line 3092 "dhcp4_parser.cc"
     break;
 
   case 479: // $@71: %empty
-#line 1812 "dhcp4_parser.yy"
+#line 1822 "dhcp4_parser.yy"
                                  {
     ctx.unique("shared-networks", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3090,54 +3100,54 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.SHARED_NETWORK);
 }
-#line 3094 "dhcp4_parser.cc"
+#line 3104 "dhcp4_parser.cc"
     break;
 
   case 480: // shared_networks: "shared-networks" $@71 ":" "[" shared_networks_content "]"
-#line 1818 "dhcp4_parser.yy"
+#line 1828 "dhcp4_parser.yy"
                                                                 {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3103 "dhcp4_parser.cc"
+#line 3113 "dhcp4_parser.cc"
     break;
 
   case 485: // shared_networks_list: shared_networks_list ","
-#line 1831 "dhcp4_parser.yy"
+#line 1841 "dhcp4_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 3111 "dhcp4_parser.cc"
+#line 3121 "dhcp4_parser.cc"
     break;
 
   case 486: // $@72: %empty
-#line 1836 "dhcp4_parser.yy"
+#line 1846 "dhcp4_parser.yy"
                                {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3121 "dhcp4_parser.cc"
+#line 3131 "dhcp4_parser.cc"
     break;
 
   case 487: // shared_network: "{" $@72 shared_network_params "}"
-#line 1840 "dhcp4_parser.yy"
+#line 1850 "dhcp4_parser.yy"
                                        {
     ctx.stack_.pop_back();
 }
-#line 3129 "dhcp4_parser.cc"
+#line 3139 "dhcp4_parser.cc"
     break;
 
   case 490: // shared_network_params: shared_network_params ","
-#line 1846 "dhcp4_parser.yy"
+#line 1856 "dhcp4_parser.yy"
                                                    {
                          ctx.warnAboutExtraCommas(yystack_[0].location);
                          }
-#line 3137 "dhcp4_parser.cc"
+#line 3147 "dhcp4_parser.cc"
     break;
 
   case 539: // $@73: %empty
-#line 1905 "dhcp4_parser.yy"
+#line 1915 "dhcp4_parser.yy"
                             {
     ctx.unique("option-def", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3145,55 +3155,55 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DEF);
 }
-#line 3149 "dhcp4_parser.cc"
+#line 3159 "dhcp4_parser.cc"
     break;
 
   case 540: // option_def_list: "option-def" $@73 ":" "[" option_def_list_content "]"
-#line 1911 "dhcp4_parser.yy"
+#line 1921 "dhcp4_parser.yy"
                                                                 {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3158 "dhcp4_parser.cc"
+#line 3168 "dhcp4_parser.cc"
     break;
 
   case 541: // $@74: %empty
-#line 1919 "dhcp4_parser.yy"
+#line 1929 "dhcp4_parser.yy"
                                     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3167 "dhcp4_parser.cc"
+#line 3177 "dhcp4_parser.cc"
     break;
 
   case 542: // sub_option_def_list: "{" $@74 option_def_list "}"
-#line 1922 "dhcp4_parser.yy"
+#line 1932 "dhcp4_parser.yy"
                                  {
     // parsing completed
 }
-#line 3175 "dhcp4_parser.cc"
+#line 3185 "dhcp4_parser.cc"
     break;
 
   case 547: // not_empty_option_def_list: not_empty_option_def_list ","
-#line 1934 "dhcp4_parser.yy"
+#line 1944 "dhcp4_parser.yy"
                                                            {
                              ctx.warnAboutExtraCommas(yystack_[0].location);
                              }
-#line 3183 "dhcp4_parser.cc"
+#line 3193 "dhcp4_parser.cc"
     break;
 
   case 548: // $@75: %empty
-#line 1941 "dhcp4_parser.yy"
+#line 1951 "dhcp4_parser.yy"
                                  {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3193 "dhcp4_parser.cc"
+#line 3203 "dhcp4_parser.cc"
     break;
 
   case 549: // option_def_entry: "{" $@75 option_def_params "}"
-#line 1945 "dhcp4_parser.yy"
+#line 1955 "dhcp4_parser.yy"
                                    {
     // The name, code and type option def parameters are required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -3201,21 +3211,21 @@ namespace isc { namespace dhcp {
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 3205 "dhcp4_parser.cc"
+#line 3215 "dhcp4_parser.cc"
     break;
 
   case 550: // $@76: %empty
-#line 1956 "dhcp4_parser.yy"
+#line 1966 "dhcp4_parser.yy"
                                {
     // Parse the option-def list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3215 "dhcp4_parser.cc"
+#line 3225 "dhcp4_parser.cc"
     break;
 
   case 551: // sub_option_def: "{" $@76 option_def_params "}"
-#line 1960 "dhcp4_parser.yy"
+#line 1970 "dhcp4_parser.yy"
                                    {
     // The name, code and type option def parameters are required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -3223,115 +3233,115 @@ namespace isc { namespace dhcp {
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 3227 "dhcp4_parser.cc"
+#line 3237 "dhcp4_parser.cc"
     break;
 
   case 556: // not_empty_option_def_params: not_empty_option_def_params ","
-#line 1976 "dhcp4_parser.yy"
+#line 1986 "dhcp4_parser.yy"
                                                                {
                                ctx.warnAboutExtraCommas(yystack_[0].location);
                                }
-#line 3235 "dhcp4_parser.cc"
+#line 3245 "dhcp4_parser.cc"
     break;
 
   case 568: // code: "code" ":" "integer"
-#line 1995 "dhcp4_parser.yy"
+#line 2005 "dhcp4_parser.yy"
                          {
     ctx.unique("code", ctx.loc2pos(yystack_[2].location));
     ElementPtr code(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("code", code);
 }
-#line 3245 "dhcp4_parser.cc"
+#line 3255 "dhcp4_parser.cc"
     break;
 
   case 570: // $@77: %empty
-#line 2003 "dhcp4_parser.yy"
+#line 2013 "dhcp4_parser.yy"
                       {
     ctx.unique("type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3254 "dhcp4_parser.cc"
+#line 3264 "dhcp4_parser.cc"
     break;
 
   case 571: // option_def_type: "type" $@77 ":" "constant string"
-#line 2006 "dhcp4_parser.yy"
+#line 2016 "dhcp4_parser.yy"
                {
     ElementPtr prf(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("type", prf);
     ctx.leave();
 }
-#line 3264 "dhcp4_parser.cc"
+#line 3274 "dhcp4_parser.cc"
     break;
 
   case 572: // $@78: %empty
-#line 2012 "dhcp4_parser.yy"
+#line 2022 "dhcp4_parser.yy"
                                       {
     ctx.unique("record-types", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3273 "dhcp4_parser.cc"
+#line 3283 "dhcp4_parser.cc"
     break;
 
   case 573: // option_def_record_types: "record-types" $@78 ":" "constant string"
-#line 2015 "dhcp4_parser.yy"
+#line 2025 "dhcp4_parser.yy"
                {
     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 3283 "dhcp4_parser.cc"
+#line 3293 "dhcp4_parser.cc"
     break;
 
   case 574: // $@79: %empty
-#line 2021 "dhcp4_parser.yy"
+#line 2031 "dhcp4_parser.yy"
              {
     ctx.unique("space", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3292 "dhcp4_parser.cc"
+#line 3302 "dhcp4_parser.cc"
     break;
 
   case 575: // space: "space" $@79 ":" "constant string"
-#line 2024 "dhcp4_parser.yy"
+#line 2034 "dhcp4_parser.yy"
                {
     ElementPtr space(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("space", space);
     ctx.leave();
 }
-#line 3302 "dhcp4_parser.cc"
+#line 3312 "dhcp4_parser.cc"
     break;
 
   case 577: // $@80: %empty
-#line 2032 "dhcp4_parser.yy"
+#line 2042 "dhcp4_parser.yy"
                                     {
     ctx.unique("encapsulate", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3311 "dhcp4_parser.cc"
+#line 3321 "dhcp4_parser.cc"
     break;
 
   case 578: // option_def_encapsulate: "encapsulate" $@80 ":" "constant string"
-#line 2035 "dhcp4_parser.yy"
+#line 2045 "dhcp4_parser.yy"
                {
     ElementPtr encap(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("encapsulate", encap);
     ctx.leave();
 }
-#line 3321 "dhcp4_parser.cc"
+#line 3331 "dhcp4_parser.cc"
     break;
 
   case 579: // option_def_array: "array" ":" "boolean"
-#line 2041 "dhcp4_parser.yy"
+#line 2051 "dhcp4_parser.yy"
                                       {
     ctx.unique("array", ctx.loc2pos(yystack_[2].location));
     ElementPtr array(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("array", array);
 }
-#line 3331 "dhcp4_parser.cc"
+#line 3341 "dhcp4_parser.cc"
     break;
 
   case 580: // $@81: %empty
-#line 2051 "dhcp4_parser.yy"
+#line 2061 "dhcp4_parser.yy"
                               {
     ctx.unique("option-data", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3339,123 +3349,123 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DATA);
 }
-#line 3343 "dhcp4_parser.cc"
+#line 3353 "dhcp4_parser.cc"
     break;
 
   case 581: // option_data_list: "option-data" $@81 ":" "[" option_data_list_content "]"
-#line 2057 "dhcp4_parser.yy"
+#line 2067 "dhcp4_parser.yy"
                                                                  {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3352 "dhcp4_parser.cc"
+#line 3362 "dhcp4_parser.cc"
     break;
 
   case 586: // not_empty_option_data_list: not_empty_option_data_list ","
-#line 2072 "dhcp4_parser.yy"
+#line 2082 "dhcp4_parser.yy"
                                                              {
                               ctx.warnAboutExtraCommas(yystack_[0].location);
                               }
-#line 3360 "dhcp4_parser.cc"
+#line 3370 "dhcp4_parser.cc"
     break;
 
   case 587: // $@82: %empty
-#line 2079 "dhcp4_parser.yy"
+#line 2089 "dhcp4_parser.yy"
                                   {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3370 "dhcp4_parser.cc"
+#line 3380 "dhcp4_parser.cc"
     break;
 
   case 588: // option_data_entry: "{" $@82 option_data_params "}"
-#line 2083 "dhcp4_parser.yy"
+#line 2093 "dhcp4_parser.yy"
                                     {
     /// @todo: the code or name parameters are required.
     ctx.stack_.pop_back();
 }
-#line 3379 "dhcp4_parser.cc"
+#line 3389 "dhcp4_parser.cc"
     break;
 
   case 589: // $@83: %empty
-#line 2091 "dhcp4_parser.yy"
+#line 2101 "dhcp4_parser.yy"
                                 {
     // Parse the option-data list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3389 "dhcp4_parser.cc"
+#line 3399 "dhcp4_parser.cc"
     break;
 
   case 590: // sub_option_data: "{" $@83 option_data_params "}"
-#line 2095 "dhcp4_parser.yy"
+#line 2105 "dhcp4_parser.yy"
                                     {
     /// @todo: the code or name parameters are required.
     // parsing completed
 }
-#line 3398 "dhcp4_parser.cc"
+#line 3408 "dhcp4_parser.cc"
     break;
 
   case 595: // not_empty_option_data_params: not_empty_option_data_params ","
-#line 2111 "dhcp4_parser.yy"
+#line 2121 "dhcp4_parser.yy"
                                          {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 3406 "dhcp4_parser.cc"
+#line 3416 "dhcp4_parser.cc"
     break;
 
   case 608: // $@84: %empty
-#line 2133 "dhcp4_parser.yy"
+#line 2143 "dhcp4_parser.yy"
                        {
     ctx.unique("data", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3415 "dhcp4_parser.cc"
+#line 3425 "dhcp4_parser.cc"
     break;
 
   case 609: // option_data_data: "data" $@84 ":" "constant string"
-#line 2136 "dhcp4_parser.yy"
+#line 2146 "dhcp4_parser.yy"
                {
     ElementPtr data(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("data", data);
     ctx.leave();
 }
-#line 3425 "dhcp4_parser.cc"
+#line 3435 "dhcp4_parser.cc"
     break;
 
   case 612: // option_data_csv_format: "csv-format" ":" "boolean"
-#line 2146 "dhcp4_parser.yy"
+#line 2156 "dhcp4_parser.yy"
                                                  {
     ctx.unique("csv-format", ctx.loc2pos(yystack_[2].location));
     ElementPtr csv(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("csv-format", csv);
 }
-#line 3435 "dhcp4_parser.cc"
+#line 3445 "dhcp4_parser.cc"
     break;
 
   case 613: // option_data_always_send: "always-send" ":" "boolean"
-#line 2152 "dhcp4_parser.yy"
+#line 2162 "dhcp4_parser.yy"
                                                    {
     ctx.unique("always-send", ctx.loc2pos(yystack_[2].location));
     ElementPtr persist(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("always-send", persist);
 }
-#line 3445 "dhcp4_parser.cc"
+#line 3455 "dhcp4_parser.cc"
     break;
 
   case 614: // option_data_never_send: "never-send" ":" "boolean"
-#line 2158 "dhcp4_parser.yy"
+#line 2168 "dhcp4_parser.yy"
                                                  {
     ctx.unique("never-send", ctx.loc2pos(yystack_[2].location));
     ElementPtr cancel(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("never-send", cancel);
 }
-#line 3455 "dhcp4_parser.cc"
+#line 3465 "dhcp4_parser.cc"
     break;
 
   case 615: // $@85: %empty
-#line 2164 "dhcp4_parser.yy"
+#line 2174 "dhcp4_parser.yy"
                                            {
     ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location));
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3463,20 +3473,20 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3467 "dhcp4_parser.cc"
+#line 3477 "dhcp4_parser.cc"
     break;
 
   case 616: // option_data_client_classes: "client-classes" $@85 ":" list_strings
-#line 2170 "dhcp4_parser.yy"
+#line 2180 "dhcp4_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3476 "dhcp4_parser.cc"
+#line 3486 "dhcp4_parser.cc"
     break;
 
   case 617: // $@86: %empty
-#line 2178 "dhcp4_parser.yy"
+#line 2188 "dhcp4_parser.yy"
                   {
     ctx.unique("pools", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3484,113 +3494,113 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.POOLS);
 }
-#line 3488 "dhcp4_parser.cc"
+#line 3498 "dhcp4_parser.cc"
     break;
 
   case 618: // pools_list: "pools" $@86 ":" "[" pools_list_content "]"
-#line 2184 "dhcp4_parser.yy"
+#line 2194 "dhcp4_parser.yy"
                                                            {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3497 "dhcp4_parser.cc"
+#line 3507 "dhcp4_parser.cc"
     break;
 
   case 623: // not_empty_pools_list: not_empty_pools_list ","
-#line 2197 "dhcp4_parser.yy"
+#line 2207 "dhcp4_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 3505 "dhcp4_parser.cc"
+#line 3515 "dhcp4_parser.cc"
     break;
 
   case 624: // $@87: %empty
-#line 2202 "dhcp4_parser.yy"
+#line 2212 "dhcp4_parser.yy"
                                 {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3515 "dhcp4_parser.cc"
+#line 3525 "dhcp4_parser.cc"
     break;
 
   case 625: // pool_list_entry: "{" $@87 pool_params "}"
-#line 2206 "dhcp4_parser.yy"
+#line 2216 "dhcp4_parser.yy"
                              {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 3525 "dhcp4_parser.cc"
+#line 3535 "dhcp4_parser.cc"
     break;
 
   case 626: // $@88: %empty
-#line 2212 "dhcp4_parser.yy"
+#line 2222 "dhcp4_parser.yy"
                           {
     // Parse the pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3535 "dhcp4_parser.cc"
+#line 3545 "dhcp4_parser.cc"
     break;
 
   case 627: // sub_pool4: "{" $@88 pool_params "}"
-#line 2216 "dhcp4_parser.yy"
+#line 2226 "dhcp4_parser.yy"
                              {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 3545 "dhcp4_parser.cc"
+#line 3555 "dhcp4_parser.cc"
     break;
 
   case 630: // pool_params: pool_params ","
-#line 2224 "dhcp4_parser.yy"
+#line 2234 "dhcp4_parser.yy"
                                {
                ctx.warnAboutExtraCommas(yystack_[0].location);
                }
-#line 3553 "dhcp4_parser.cc"
+#line 3563 "dhcp4_parser.cc"
     break;
 
   case 655: // $@89: %empty
-#line 2255 "dhcp4_parser.yy"
+#line 2265 "dhcp4_parser.yy"
                  {
     ctx.unique("pool", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3562 "dhcp4_parser.cc"
+#line 3572 "dhcp4_parser.cc"
     break;
 
   case 656: // pool_entry: "pool" $@89 ":" "constant string"
-#line 2258 "dhcp4_parser.yy"
+#line 2268 "dhcp4_parser.yy"
                {
     ElementPtr pool(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pool", pool);
     ctx.leave();
 }
-#line 3572 "dhcp4_parser.cc"
+#line 3582 "dhcp4_parser.cc"
     break;
 
   case 657: // pool_id: "pool-id" ":" "integer"
-#line 2264 "dhcp4_parser.yy"
+#line 2274 "dhcp4_parser.yy"
                                {
     ctx.unique("pool-id", ctx.loc2pos(yystack_[2].location));
     ElementPtr id(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pool-id", id);
 }
-#line 3582 "dhcp4_parser.cc"
+#line 3592 "dhcp4_parser.cc"
     break;
 
   case 658: // $@90: %empty
-#line 2270 "dhcp4_parser.yy"
+#line 2280 "dhcp4_parser.yy"
                            {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3590 "dhcp4_parser.cc"
+#line 3600 "dhcp4_parser.cc"
     break;
 
   case 659: // user_context: "user-context" $@90 ":" map_value
-#line 2272 "dhcp4_parser.yy"
+#line 2282 "dhcp4_parser.yy"
                   {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context = yystack_[0].value.as < ElementPtr > ();
@@ -3613,19 +3623,19 @@ namespace isc { namespace dhcp {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 3617 "dhcp4_parser.cc"
+#line 3627 "dhcp4_parser.cc"
     break;
 
   case 660: // $@91: %empty
-#line 2295 "dhcp4_parser.yy"
+#line 2305 "dhcp4_parser.yy"
                  {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3625 "dhcp4_parser.cc"
+#line 3635 "dhcp4_parser.cc"
     break;
 
   case 661: // comment: "comment" $@91 ":" "constant string"
-#line 2297 "dhcp4_parser.yy"
+#line 2307 "dhcp4_parser.yy"
                {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location)));
@@ -3650,11 +3660,11 @@ namespace isc { namespace dhcp {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 3654 "dhcp4_parser.cc"
+#line 3664 "dhcp4_parser.cc"
     break;
 
   case 662: // $@92: %empty
-#line 2325 "dhcp4_parser.yy"
+#line 2335 "dhcp4_parser.yy"
                            {
     ctx.unique("reservations", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3662,264 +3672,264 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.RESERVATIONS);
 }
-#line 3666 "dhcp4_parser.cc"
+#line 3676 "dhcp4_parser.cc"
     break;
 
   case 663: // reservations: "reservations" $@92 ":" "[" reservations_list "]"
-#line 2331 "dhcp4_parser.yy"
+#line 2341 "dhcp4_parser.yy"
                                                           {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3675 "dhcp4_parser.cc"
+#line 3685 "dhcp4_parser.cc"
     break;
 
   case 668: // not_empty_reservations_list: not_empty_reservations_list ","
-#line 2342 "dhcp4_parser.yy"
+#line 2352 "dhcp4_parser.yy"
                                                                {
                                ctx.warnAboutExtraCommas(yystack_[0].location);
                                }
-#line 3683 "dhcp4_parser.cc"
+#line 3693 "dhcp4_parser.cc"
     break;
 
   case 669: // $@93: %empty
-#line 2347 "dhcp4_parser.yy"
+#line 2357 "dhcp4_parser.yy"
                             {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3693 "dhcp4_parser.cc"
+#line 3703 "dhcp4_parser.cc"
     break;
 
   case 670: // reservation: "{" $@93 reservation_params "}"
-#line 2351 "dhcp4_parser.yy"
+#line 2361 "dhcp4_parser.yy"
                                     {
     /// @todo: an identifier parameter is required.
     ctx.stack_.pop_back();
 }
-#line 3702 "dhcp4_parser.cc"
+#line 3712 "dhcp4_parser.cc"
     break;
 
   case 671: // $@94: %empty
-#line 2356 "dhcp4_parser.yy"
+#line 2366 "dhcp4_parser.yy"
                                 {
     // Parse the reservations list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3712 "dhcp4_parser.cc"
+#line 3722 "dhcp4_parser.cc"
     break;
 
   case 672: // sub_reservation: "{" $@94 reservation_params "}"
-#line 2360 "dhcp4_parser.yy"
+#line 2370 "dhcp4_parser.yy"
                                     {
     /// @todo: an identifier parameter is required.
     // parsing completed
 }
-#line 3721 "dhcp4_parser.cc"
+#line 3731 "dhcp4_parser.cc"
     break;
 
   case 677: // not_empty_reservation_params: not_empty_reservation_params ","
-#line 2371 "dhcp4_parser.yy"
+#line 2381 "dhcp4_parser.yy"
                                          {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 3729 "dhcp4_parser.cc"
+#line 3739 "dhcp4_parser.cc"
     break;
 
   case 693: // $@95: %empty
-#line 2394 "dhcp4_parser.yy"
+#line 2404 "dhcp4_parser.yy"
                          {
     ctx.unique("next-server", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3738 "dhcp4_parser.cc"
+#line 3748 "dhcp4_parser.cc"
     break;
 
   case 694: // next_server: "next-server" $@95 ":" "constant string"
-#line 2397 "dhcp4_parser.yy"
+#line 2407 "dhcp4_parser.yy"
                {
     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 3748 "dhcp4_parser.cc"
+#line 3758 "dhcp4_parser.cc"
     break;
 
   case 695: // $@96: %empty
-#line 2403 "dhcp4_parser.yy"
+#line 2413 "dhcp4_parser.yy"
                                  {
     ctx.unique("server-hostname", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3757 "dhcp4_parser.cc"
+#line 3767 "dhcp4_parser.cc"
     break;
 
   case 696: // server_hostname: "server-hostname" $@96 ":" "constant string"
-#line 2406 "dhcp4_parser.yy"
+#line 2416 "dhcp4_parser.yy"
                {
     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 3767 "dhcp4_parser.cc"
+#line 3777 "dhcp4_parser.cc"
     break;
 
   case 697: // $@97: %empty
-#line 2412 "dhcp4_parser.yy"
+#line 2422 "dhcp4_parser.yy"
                                {
     ctx.unique("boot-file-name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3776 "dhcp4_parser.cc"
+#line 3786 "dhcp4_parser.cc"
     break;
 
   case 698: // boot_file_name: "boot-file-name" $@97 ":" "constant string"
-#line 2415 "dhcp4_parser.yy"
+#line 2425 "dhcp4_parser.yy"
                {
     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 3786 "dhcp4_parser.cc"
+#line 3796 "dhcp4_parser.cc"
     break;
 
   case 699: // $@98: %empty
-#line 2421 "dhcp4_parser.yy"
+#line 2431 "dhcp4_parser.yy"
                        {
     ctx.unique("ip-address", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3795 "dhcp4_parser.cc"
+#line 3805 "dhcp4_parser.cc"
     break;
 
   case 700: // ip_address: "ip-address" $@98 ":" "constant string"
-#line 2424 "dhcp4_parser.yy"
+#line 2434 "dhcp4_parser.yy"
                {
     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 3805 "dhcp4_parser.cc"
+#line 3815 "dhcp4_parser.cc"
     break;
 
   case 701: // $@99: %empty
-#line 2430 "dhcp4_parser.yy"
+#line 2440 "dhcp4_parser.yy"
            {
     ctx.unique("duid", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3814 "dhcp4_parser.cc"
+#line 3824 "dhcp4_parser.cc"
     break;
 
   case 702: // duid: "duid" $@99 ":" "constant string"
-#line 2433 "dhcp4_parser.yy"
+#line 2443 "dhcp4_parser.yy"
                {
     ElementPtr d(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("duid", d);
     ctx.leave();
 }
-#line 3824 "dhcp4_parser.cc"
+#line 3834 "dhcp4_parser.cc"
     break;
 
   case 703: // $@100: %empty
-#line 2439 "dhcp4_parser.yy"
+#line 2449 "dhcp4_parser.yy"
                        {
     ctx.unique("hw-address", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3833 "dhcp4_parser.cc"
+#line 3843 "dhcp4_parser.cc"
     break;
 
   case 704: // hw_address: "hw-address" $@100 ":" "constant string"
-#line 2442 "dhcp4_parser.yy"
+#line 2452 "dhcp4_parser.yy"
                {
     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 3843 "dhcp4_parser.cc"
+#line 3853 "dhcp4_parser.cc"
     break;
 
   case 705: // $@101: %empty
-#line 2448 "dhcp4_parser.yy"
+#line 2458 "dhcp4_parser.yy"
                            {
     ctx.unique("client-id", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3852 "dhcp4_parser.cc"
+#line 3862 "dhcp4_parser.cc"
     break;
 
   case 706: // client_id_value: "client-id" $@101 ":" "constant string"
-#line 2451 "dhcp4_parser.yy"
+#line 2461 "dhcp4_parser.yy"
                {
     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 3862 "dhcp4_parser.cc"
+#line 3872 "dhcp4_parser.cc"
     break;
 
   case 707: // $@102: %empty
-#line 2457 "dhcp4_parser.yy"
+#line 2467 "dhcp4_parser.yy"
                              {
     ctx.unique("circuit-id", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3871 "dhcp4_parser.cc"
+#line 3881 "dhcp4_parser.cc"
     break;
 
   case 708: // circuit_id_value: "circuit-id" $@102 ":" "constant string"
-#line 2460 "dhcp4_parser.yy"
+#line 2470 "dhcp4_parser.yy"
                {
     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 3881 "dhcp4_parser.cc"
+#line 3891 "dhcp4_parser.cc"
     break;
 
   case 709: // $@103: %empty
-#line 2466 "dhcp4_parser.yy"
+#line 2476 "dhcp4_parser.yy"
                        {
     ctx.unique("flex-id", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3890 "dhcp4_parser.cc"
+#line 3900 "dhcp4_parser.cc"
     break;
 
   case 710: // flex_id_value: "flex-id" $@103 ":" "constant string"
-#line 2469 "dhcp4_parser.yy"
+#line 2479 "dhcp4_parser.yy"
                {
     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 3900 "dhcp4_parser.cc"
+#line 3910 "dhcp4_parser.cc"
     break;
 
   case 711: // $@104: %empty
-#line 2475 "dhcp4_parser.yy"
+#line 2485 "dhcp4_parser.yy"
                    {
     ctx.unique("hostname", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3909 "dhcp4_parser.cc"
+#line 3919 "dhcp4_parser.cc"
     break;
 
   case 712: // hostname: "hostname" $@104 ":" "constant string"
-#line 2478 "dhcp4_parser.yy"
+#line 2488 "dhcp4_parser.yy"
                {
     ElementPtr host(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname", host);
     ctx.leave();
 }
-#line 3919 "dhcp4_parser.cc"
+#line 3929 "dhcp4_parser.cc"
     break;
 
   case 713: // $@105: %empty
-#line 2484 "dhcp4_parser.yy"
+#line 2494 "dhcp4_parser.yy"
                                            {
     ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location));
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3927,20 +3937,20 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3931 "dhcp4_parser.cc"
+#line 3941 "dhcp4_parser.cc"
     break;
 
   case 714: // reservation_client_classes: "client-classes" $@105 ":" list_strings
-#line 2490 "dhcp4_parser.yy"
+#line 2500 "dhcp4_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3940 "dhcp4_parser.cc"
+#line 3950 "dhcp4_parser.cc"
     break;
 
   case 715: // $@106: %empty
-#line 2498 "dhcp4_parser.yy"
+#line 2508 "dhcp4_parser.yy"
              {
     ctx.unique("relay", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -3948,20 +3958,20 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.RELAY);
 }
-#line 3952 "dhcp4_parser.cc"
+#line 3962 "dhcp4_parser.cc"
     break;
 
   case 716: // relay: "relay" $@106 ":" "{" relay_map "}"
-#line 2504 "dhcp4_parser.yy"
+#line 2514 "dhcp4_parser.yy"
                                                 {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3961 "dhcp4_parser.cc"
+#line 3971 "dhcp4_parser.cc"
     break;
 
   case 718: // $@107: %empty
-#line 2512 "dhcp4_parser.yy"
+#line 2522 "dhcp4_parser.yy"
                            {
     ctx.unique("ip-addresses", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3969,20 +3979,20 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3973 "dhcp4_parser.cc"
+#line 3983 "dhcp4_parser.cc"
     break;
 
   case 719: // ip_addresses: "ip-addresses" $@107 ":" list_strings
-#line 2518 "dhcp4_parser.yy"
+#line 2528 "dhcp4_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3982 "dhcp4_parser.cc"
+#line 3992 "dhcp4_parser.cc"
     break;
 
   case 720: // $@108: %empty
-#line 2526 "dhcp4_parser.yy"
+#line 2536 "dhcp4_parser.yy"
                                {
     ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3990,124 +4000,124 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CLIENT_CLASSES);
 }
-#line 3994 "dhcp4_parser.cc"
+#line 4004 "dhcp4_parser.cc"
     break;
 
   case 721: // client_classes: "client-classes" $@108 ":" "[" client_classes_list "]"
-#line 2532 "dhcp4_parser.yy"
+#line 2542 "dhcp4_parser.yy"
                                                             {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4003 "dhcp4_parser.cc"
+#line 4013 "dhcp4_parser.cc"
     break;
 
   case 724: // client_classes_list: client_classes_list ","
-#line 2539 "dhcp4_parser.yy"
+#line 2549 "dhcp4_parser.yy"
                                                {
                        ctx.warnAboutExtraCommas(yystack_[0].location);
                        }
-#line 4011 "dhcp4_parser.cc"
+#line 4021 "dhcp4_parser.cc"
     break;
 
   case 725: // $@109: %empty
-#line 2544 "dhcp4_parser.yy"
+#line 2554 "dhcp4_parser.yy"
                                    {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 4021 "dhcp4_parser.cc"
+#line 4031 "dhcp4_parser.cc"
     break;
 
   case 726: // client_class_entry: "{" $@109 client_class_params "}"
-#line 2548 "dhcp4_parser.yy"
+#line 2558 "dhcp4_parser.yy"
                                      {
     // 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 4031 "dhcp4_parser.cc"
+#line 4041 "dhcp4_parser.cc"
     break;
 
   case 731: // not_empty_client_class_params: not_empty_client_class_params ","
-#line 2560 "dhcp4_parser.yy"
+#line 2570 "dhcp4_parser.yy"
                                           {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 4039 "dhcp4_parser.cc"
+#line 4049 "dhcp4_parser.cc"
     break;
 
   case 750: // $@110: %empty
-#line 2586 "dhcp4_parser.yy"
+#line 2596 "dhcp4_parser.yy"
                         {
     ctx.unique("test", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4048 "dhcp4_parser.cc"
+#line 4058 "dhcp4_parser.cc"
     break;
 
   case 751: // client_class_test: "test" $@110 ":" "constant string"
-#line 2589 "dhcp4_parser.yy"
+#line 2599 "dhcp4_parser.yy"
                {
     ElementPtr test(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("test", test);
     ctx.leave();
 }
-#line 4058 "dhcp4_parser.cc"
+#line 4068 "dhcp4_parser.cc"
     break;
 
   case 752: // $@111: %empty
-#line 2595 "dhcp4_parser.yy"
+#line 2605 "dhcp4_parser.yy"
                                           {
     ctx.unique("template-test", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4067 "dhcp4_parser.cc"
+#line 4077 "dhcp4_parser.cc"
     break;
 
   case 753: // client_class_template_test: "template-test" $@111 ":" "constant string"
-#line 2598 "dhcp4_parser.yy"
+#line 2608 "dhcp4_parser.yy"
                {
     ElementPtr template_test(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("template-test", template_test);
     ctx.leave();
 }
-#line 4077 "dhcp4_parser.cc"
+#line 4087 "dhcp4_parser.cc"
     break;
 
   case 754: // only_if_required: "only-if-required" ":" "boolean"
-#line 2605 "dhcp4_parser.yy"
+#line 2615 "dhcp4_parser.yy"
                                                  {
     ctx.unique("only-if-required", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("only-if-required", b);
 }
-#line 4087 "dhcp4_parser.cc"
+#line 4097 "dhcp4_parser.cc"
     break;
 
   case 755: // only_in_additional_list: "only-in-additional-list" ":" "boolean"
-#line 2611 "dhcp4_parser.yy"
+#line 2621 "dhcp4_parser.yy"
                                                                {
     ctx.unique("only-in-additional-list", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("only-in-additional-list", b);
 }
-#line 4097 "dhcp4_parser.cc"
+#line 4107 "dhcp4_parser.cc"
     break;
 
   case 756: // dhcp4o6_port: "dhcp4o6-port" ":" "integer"
-#line 2619 "dhcp4_parser.yy"
+#line 2629 "dhcp4_parser.yy"
                                          {
     ctx.unique("dhcp4o6-port", ctx.loc2pos(yystack_[2].location));
     ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp4o6-port", time);
 }
-#line 4107 "dhcp4_parser.cc"
+#line 4117 "dhcp4_parser.cc"
     break;
 
   case 757: // $@112: %empty
-#line 2627 "dhcp4_parser.yy"
+#line 2637 "dhcp4_parser.yy"
                                {
     ctx.unique("control-socket", ctx.loc2pos(yystack_[0].location));
     ctx.unique("control-sockets", ctx.loc2pos(yystack_[0].location));
@@ -4116,20 +4126,20 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.CONTROL_SOCKET);
 }
-#line 4120 "dhcp4_parser.cc"
+#line 4130 "dhcp4_parser.cc"
     break;
 
   case 758: // control_socket: "control-socket" $@112 ":" "{" control_socket_params "}"
-#line 2634 "dhcp4_parser.yy"
+#line 2644 "dhcp4_parser.yy"
                                                             {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4129 "dhcp4_parser.cc"
+#line 4139 "dhcp4_parser.cc"
     break;
 
   case 759: // $@113: %empty
-#line 2639 "dhcp4_parser.yy"
+#line 2649 "dhcp4_parser.yy"
                                  {
     ctx.unique("control-sockets", ctx.loc2pos(yystack_[0].location));
     ctx.unique("control-socket", ctx.loc2pos(yystack_[0].location));
@@ -4138,150 +4148,150 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CONTROL_SOCKET);
 }
-#line 4142 "dhcp4_parser.cc"
+#line 4152 "dhcp4_parser.cc"
     break;
 
   case 760: // control_sockets: "control-sockets" $@113 ":" "[" control_socket_list "]"
-#line 2646 "dhcp4_parser.yy"
+#line 2656 "dhcp4_parser.yy"
                                                             {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4151 "dhcp4_parser.cc"
+#line 4161 "dhcp4_parser.cc"
     break;
 
   case 765: // not_empty_control_socket_list: not_empty_control_socket_list ","
-#line 2657 "dhcp4_parser.yy"
+#line 2667 "dhcp4_parser.yy"
                                                                    {
                                  ctx.warnAboutExtraCommas(yystack_[0].location);
                                  }
-#line 4159 "dhcp4_parser.cc"
+#line 4169 "dhcp4_parser.cc"
     break;
 
   case 766: // $@114: %empty
-#line 2662 "dhcp4_parser.yy"
+#line 2672 "dhcp4_parser.yy"
                                      {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 4169 "dhcp4_parser.cc"
+#line 4179 "dhcp4_parser.cc"
     break;
 
   case 767: // control_socket_entry: "{" $@114 control_socket_params "}"
-#line 2666 "dhcp4_parser.yy"
+#line 2676 "dhcp4_parser.yy"
                                        {
     ctx.stack_.pop_back();
 }
-#line 4177 "dhcp4_parser.cc"
+#line 4187 "dhcp4_parser.cc"
     break;
 
   case 770: // control_socket_params: control_socket_params ","
-#line 2672 "dhcp4_parser.yy"
+#line 2682 "dhcp4_parser.yy"
                                                    {
                           ctx.warnAboutExtraCommas(yystack_[0].location);
                           }
-#line 4185 "dhcp4_parser.cc"
+#line 4195 "dhcp4_parser.cc"
     break;
 
   case 784: // $@115: %empty
-#line 2692 "dhcp4_parser.yy"
+#line 2702 "dhcp4_parser.yy"
                                  {
     ctx.unique("socket-type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.CONTROL_SOCKET_TYPE);
 }
-#line 4194 "dhcp4_parser.cc"
+#line 4204 "dhcp4_parser.cc"
     break;
 
   case 785: // control_socket_type: "socket-type" $@115 ":" control_socket_type_value
-#line 2695 "dhcp4_parser.yy"
+#line 2705 "dhcp4_parser.yy"
                                   {
     ctx.stack_.back()->set("socket-type", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 4203 "dhcp4_parser.cc"
+#line 4213 "dhcp4_parser.cc"
     break;
 
   case 786: // control_socket_type_value: "unix"
-#line 2701 "dhcp4_parser.yy"
+#line 2711 "dhcp4_parser.yy"
          { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("unix", ctx.loc2pos(yystack_[0].location))); }
-#line 4209 "dhcp4_parser.cc"
+#line 4219 "dhcp4_parser.cc"
     break;
 
   case 787: // control_socket_type_value: "http"
-#line 2702 "dhcp4_parser.yy"
+#line 2712 "dhcp4_parser.yy"
          { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("http", ctx.loc2pos(yystack_[0].location))); }
-#line 4215 "dhcp4_parser.cc"
+#line 4225 "dhcp4_parser.cc"
     break;
 
   case 788: // control_socket_type_value: "https"
-#line 2703 "dhcp4_parser.yy"
+#line 2713 "dhcp4_parser.yy"
           { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("https", ctx.loc2pos(yystack_[0].location))); }
-#line 4221 "dhcp4_parser.cc"
+#line 4231 "dhcp4_parser.cc"
     break;
 
   case 789: // $@116: %empty
-#line 2706 "dhcp4_parser.yy"
+#line 2716 "dhcp4_parser.yy"
                                  {
     ctx.unique("socket-name", ctx.loc2pos(yystack_[0].location));
     ctx.unique("socket-address", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4231 "dhcp4_parser.cc"
+#line 4241 "dhcp4_parser.cc"
     break;
 
   case 790: // control_socket_name: "socket-name" $@116 ":" "constant string"
-#line 2710 "dhcp4_parser.yy"
+#line 2720 "dhcp4_parser.yy"
                {
     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 4241 "dhcp4_parser.cc"
+#line 4251 "dhcp4_parser.cc"
     break;
 
   case 791: // $@117: %empty
-#line 2716 "dhcp4_parser.yy"
+#line 2726 "dhcp4_parser.yy"
                                        {
     ctx.unique("socket-address", ctx.loc2pos(yystack_[0].location));
     ctx.unique("socket-name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4251 "dhcp4_parser.cc"
+#line 4261 "dhcp4_parser.cc"
     break;
 
   case 792: // control_socket_address: "socket-address" $@117 ":" "constant string"
-#line 2720 "dhcp4_parser.yy"
+#line 2730 "dhcp4_parser.yy"
                {
     ElementPtr address(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-address", address);
     ctx.leave();
 }
-#line 4261 "dhcp4_parser.cc"
+#line 4271 "dhcp4_parser.cc"
     break;
 
   case 793: // control_socket_port: "socket-port" ":" "integer"
-#line 2726 "dhcp4_parser.yy"
+#line 2736 "dhcp4_parser.yy"
                                                {
     ctx.unique("socket-port", ctx.loc2pos(yystack_[2].location));
     ElementPtr port(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-port", port);
 }
-#line 4271 "dhcp4_parser.cc"
+#line 4281 "dhcp4_parser.cc"
     break;
 
   case 794: // cert_required: "cert-required" ":" "boolean"
-#line 2732 "dhcp4_parser.yy"
+#line 2742 "dhcp4_parser.yy"
                                            {
     ctx.unique("cert-required", ctx.loc2pos(yystack_[2].location));
     ElementPtr req(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("cert-required", req);
 }
-#line 4281 "dhcp4_parser.cc"
+#line 4291 "dhcp4_parser.cc"
     break;
 
   case 795: // $@118: %empty
-#line 2738 "dhcp4_parser.yy"
+#line 2748 "dhcp4_parser.yy"
                            {
     ctx.unique("http-headers", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -4289,73 +4299,73 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HTTP_HEADERS);
 }
-#line 4293 "dhcp4_parser.cc"
+#line 4303 "dhcp4_parser.cc"
     break;
 
   case 796: // http_headers: "http-headers" $@118 ":" "[" http_header_list "]"
-#line 2744 "dhcp4_parser.yy"
+#line 2754 "dhcp4_parser.yy"
                                                          {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4302 "dhcp4_parser.cc"
+#line 4312 "dhcp4_parser.cc"
     break;
 
   case 801: // not_empty_http_header_list: not_empty_http_header_list ","
-#line 2755 "dhcp4_parser.yy"
+#line 2765 "dhcp4_parser.yy"
                                                              {
                               ctx.warnAboutExtraCommas(yystack_[0].location);
                               }
-#line 4310 "dhcp4_parser.cc"
+#line 4320 "dhcp4_parser.cc"
     break;
 
   case 802: // $@119: %empty
-#line 2760 "dhcp4_parser.yy"
+#line 2770 "dhcp4_parser.yy"
                             {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 4320 "dhcp4_parser.cc"
+#line 4330 "dhcp4_parser.cc"
     break;
 
   case 803: // http_header: "{" $@119 http_header_params "}"
-#line 2764 "dhcp4_parser.yy"
+#line 2774 "dhcp4_parser.yy"
                                     {
     ctx.stack_.pop_back();
 }
-#line 4328 "dhcp4_parser.cc"
+#line 4338 "dhcp4_parser.cc"
     break;
 
   case 806: // http_header_params: http_header_params ","
-#line 2770 "dhcp4_parser.yy"
+#line 2780 "dhcp4_parser.yy"
                                              {
                       ctx.warnAboutExtraCommas(yystack_[0].location);
                       }
-#line 4336 "dhcp4_parser.cc"
+#line 4346 "dhcp4_parser.cc"
     break;
 
   case 812: // $@120: %empty
-#line 2782 "dhcp4_parser.yy"
+#line 2792 "dhcp4_parser.yy"
                     {
     ctx.unique("value", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4345 "dhcp4_parser.cc"
+#line 4355 "dhcp4_parser.cc"
     break;
 
   case 813: // header_value: "value" $@120 ":" "constant string"
-#line 2785 "dhcp4_parser.yy"
+#line 2795 "dhcp4_parser.yy"
                {
     ElementPtr value(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("value", value);
     ctx.leave();
 }
-#line 4355 "dhcp4_parser.cc"
+#line 4365 "dhcp4_parser.cc"
     break;
 
   case 814: // $@121: %empty
-#line 2793 "dhcp4_parser.yy"
+#line 2803 "dhcp4_parser.yy"
                                {
     ctx.unique("authentication", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4363,92 +4373,92 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.AUTHENTICATION);
 }
-#line 4367 "dhcp4_parser.cc"
+#line 4377 "dhcp4_parser.cc"
     break;
 
   case 815: // authentication: "authentication" $@121 ":" "{" auth_params "}"
-#line 2799 "dhcp4_parser.yy"
+#line 2809 "dhcp4_parser.yy"
                                                   {
     // 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 4378 "dhcp4_parser.cc"
+#line 4388 "dhcp4_parser.cc"
     break;
 
   case 818: // auth_params: auth_params ","
-#line 2808 "dhcp4_parser.yy"
+#line 2818 "dhcp4_parser.yy"
                                {
                ctx.warnAboutExtraCommas(yystack_[0].location);
                }
-#line 4386 "dhcp4_parser.cc"
+#line 4396 "dhcp4_parser.cc"
     break;
 
   case 826: // $@122: %empty
-#line 2822 "dhcp4_parser.yy"
+#line 2832 "dhcp4_parser.yy"
                 {
     ctx.unique("type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.AUTH_TYPE);
 }
-#line 4395 "dhcp4_parser.cc"
+#line 4405 "dhcp4_parser.cc"
     break;
 
   case 827: // auth_type: "type" $@122 ":" auth_type_value
-#line 2825 "dhcp4_parser.yy"
+#line 2835 "dhcp4_parser.yy"
                         {
     ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 4404 "dhcp4_parser.cc"
+#line 4414 "dhcp4_parser.cc"
     break;
 
   case 828: // auth_type_value: "basic"
-#line 2830 "dhcp4_parser.yy"
+#line 2840 "dhcp4_parser.yy"
                        { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("basic", ctx.loc2pos(yystack_[0].location))); }
-#line 4410 "dhcp4_parser.cc"
+#line 4420 "dhcp4_parser.cc"
     break;
 
   case 829: // $@123: %empty
-#line 2833 "dhcp4_parser.yy"
+#line 2843 "dhcp4_parser.yy"
              {
     ctx.unique("realm", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4419 "dhcp4_parser.cc"
+#line 4429 "dhcp4_parser.cc"
     break;
 
   case 830: // realm: "realm" $@123 ":" "constant string"
-#line 2836 "dhcp4_parser.yy"
+#line 2846 "dhcp4_parser.yy"
                {
     ElementPtr realm(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("realm", realm);
     ctx.leave();
 }
-#line 4429 "dhcp4_parser.cc"
+#line 4439 "dhcp4_parser.cc"
     break;
 
   case 831: // $@124: %empty
-#line 2842 "dhcp4_parser.yy"
+#line 2852 "dhcp4_parser.yy"
                      {
     ctx.unique("directory", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4438 "dhcp4_parser.cc"
+#line 4448 "dhcp4_parser.cc"
     break;
 
   case 832: // directory: "directory" $@124 ":" "constant string"
-#line 2845 "dhcp4_parser.yy"
+#line 2855 "dhcp4_parser.yy"
                {
     ElementPtr directory(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("directory", directory);
     ctx.leave();
 }
-#line 4448 "dhcp4_parser.cc"
+#line 4458 "dhcp4_parser.cc"
     break;
 
   case 833: // $@125: %empty
-#line 2851 "dhcp4_parser.yy"
+#line 2861 "dhcp4_parser.yy"
                  {
     ctx.unique("clients", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -4456,92 +4466,92 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CLIENTS);
 }
-#line 4460 "dhcp4_parser.cc"
+#line 4470 "dhcp4_parser.cc"
     break;
 
   case 834: // clients: "clients" $@125 ":" "[" clients_list "]"
-#line 2857 "dhcp4_parser.yy"
+#line 2867 "dhcp4_parser.yy"
                                                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4469 "dhcp4_parser.cc"
+#line 4479 "dhcp4_parser.cc"
     break;
 
   case 839: // not_empty_clients_list: not_empty_clients_list ","
-#line 2868 "dhcp4_parser.yy"
+#line 2878 "dhcp4_parser.yy"
                                                      {
                           ctx.warnAboutExtraCommas(yystack_[0].location);
                           }
-#line 4477 "dhcp4_parser.cc"
+#line 4487 "dhcp4_parser.cc"
     break;
 
   case 840: // $@126: %empty
-#line 2873 "dhcp4_parser.yy"
+#line 2883 "dhcp4_parser.yy"
                            {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 4487 "dhcp4_parser.cc"
+#line 4497 "dhcp4_parser.cc"
     break;
 
   case 841: // basic_auth: "{" $@126 clients_params "}"
-#line 2877 "dhcp4_parser.yy"
+#line 2887 "dhcp4_parser.yy"
                                 {
     ctx.stack_.pop_back();
 }
-#line 4495 "dhcp4_parser.cc"
+#line 4505 "dhcp4_parser.cc"
     break;
 
   case 844: // clients_params: clients_params ","
-#line 2883 "dhcp4_parser.yy"
+#line 2893 "dhcp4_parser.yy"
                                      {
                   ctx.warnAboutExtraCommas(yystack_[0].location);
                   }
-#line 4503 "dhcp4_parser.cc"
+#line 4513 "dhcp4_parser.cc"
     break;
 
   case 852: // $@127: %empty
-#line 2897 "dhcp4_parser.yy"
+#line 2907 "dhcp4_parser.yy"
                      {
     ctx.unique("user-file", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4512 "dhcp4_parser.cc"
+#line 4522 "dhcp4_parser.cc"
     break;
 
   case 853: // user_file: "user-file" $@127 ":" "constant string"
-#line 2900 "dhcp4_parser.yy"
+#line 2910 "dhcp4_parser.yy"
                {
     ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("user-file", user);
     ctx.leave();
 }
-#line 4522 "dhcp4_parser.cc"
+#line 4532 "dhcp4_parser.cc"
     break;
 
   case 854: // $@128: %empty
-#line 2906 "dhcp4_parser.yy"
+#line 2916 "dhcp4_parser.yy"
                              {
     ctx.unique("password-file", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4531 "dhcp4_parser.cc"
+#line 4541 "dhcp4_parser.cc"
     break;
 
   case 855: // password_file: "password-file" $@128 ":" "constant string"
-#line 2909 "dhcp4_parser.yy"
+#line 2919 "dhcp4_parser.yy"
                {
     ElementPtr password(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("password-file", password);
     ctx.leave();
 }
-#line 4541 "dhcp4_parser.cc"
+#line 4551 "dhcp4_parser.cc"
     break;
 
   case 856: // $@129: %empty
-#line 2917 "dhcp4_parser.yy"
+#line 2927 "dhcp4_parser.yy"
                                        {
     ctx.unique("dhcp-queue-control", ctx.loc2pos(yystack_[0].location));
     ElementPtr qc(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4549,87 +4559,87 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(qc);
     ctx.enter(ctx.DHCP_QUEUE_CONTROL);
 }
-#line 4553 "dhcp4_parser.cc"
+#line 4563 "dhcp4_parser.cc"
     break;
 
   case 857: // dhcp_queue_control: "dhcp-queue-control" $@129 ":" "{" queue_control_params "}"
-#line 2923 "dhcp4_parser.yy"
+#line 2933 "dhcp4_parser.yy"
                                                            {
     // The enable queue parameter is required.
     ctx.require("enable-queue", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4564 "dhcp4_parser.cc"
+#line 4574 "dhcp4_parser.cc"
     break;
 
   case 860: // queue_control_params: queue_control_params ","
-#line 2932 "dhcp4_parser.yy"
+#line 2942 "dhcp4_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 4572 "dhcp4_parser.cc"
+#line 4582 "dhcp4_parser.cc"
     break;
 
   case 867: // enable_queue: "enable-queue" ":" "boolean"
-#line 2945 "dhcp4_parser.yy"
+#line 2955 "dhcp4_parser.yy"
                                          {
     ctx.unique("enable-queue", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enable-queue", b);
 }
-#line 4582 "dhcp4_parser.cc"
+#line 4592 "dhcp4_parser.cc"
     break;
 
   case 868: // $@130: %empty
-#line 2951 "dhcp4_parser.yy"
+#line 2961 "dhcp4_parser.yy"
                        {
     ctx.unique("queue-type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4591 "dhcp4_parser.cc"
+#line 4601 "dhcp4_parser.cc"
     break;
 
   case 869: // queue_type: "queue-type" $@130 ":" "constant string"
-#line 2954 "dhcp4_parser.yy"
+#line 2964 "dhcp4_parser.yy"
                {
     ElementPtr qt(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("queue-type", qt);
     ctx.leave();
 }
-#line 4601 "dhcp4_parser.cc"
+#line 4611 "dhcp4_parser.cc"
     break;
 
   case 870: // capacity: "capacity" ":" "integer"
-#line 2960 "dhcp4_parser.yy"
+#line 2970 "dhcp4_parser.yy"
                                  {
     ctx.unique("capacity", ctx.loc2pos(yystack_[2].location));
     ElementPtr c(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("capacity", c);
 }
-#line 4611 "dhcp4_parser.cc"
+#line 4621 "dhcp4_parser.cc"
     break;
 
   case 871: // $@131: %empty
-#line 2966 "dhcp4_parser.yy"
+#line 2976 "dhcp4_parser.yy"
                             {
     ctx.unique(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4620 "dhcp4_parser.cc"
+#line 4630 "dhcp4_parser.cc"
     break;
 
   case 872: // arbitrary_map_entry: "constant string" $@131 ":" value
-#line 2969 "dhcp4_parser.yy"
+#line 2979 "dhcp4_parser.yy"
               {
     ctx.stack_.back()->set(yystack_[3].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 4629 "dhcp4_parser.cc"
+#line 4639 "dhcp4_parser.cc"
     break;
 
   case 873: // $@132: %empty
-#line 2976 "dhcp4_parser.yy"
+#line 2986 "dhcp4_parser.yy"
                      {
     ctx.unique("dhcp-ddns", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4637,177 +4647,177 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.DHCP_DDNS);
 }
-#line 4641 "dhcp4_parser.cc"
+#line 4651 "dhcp4_parser.cc"
     break;
 
   case 874: // dhcp_ddns: "dhcp-ddns" $@132 ":" "{" dhcp_ddns_params "}"
-#line 2982 "dhcp4_parser.yy"
+#line 2992 "dhcp4_parser.yy"
                                                        {
     // 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 4652 "dhcp4_parser.cc"
+#line 4662 "dhcp4_parser.cc"
     break;
 
   case 875: // $@133: %empty
-#line 2989 "dhcp4_parser.yy"
+#line 2999 "dhcp4_parser.yy"
                               {
     // Parse the dhcp-ddns map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 4662 "dhcp4_parser.cc"
+#line 4672 "dhcp4_parser.cc"
     break;
 
   case 876: // sub_dhcp_ddns: "{" $@133 dhcp_ddns_params "}"
-#line 2993 "dhcp4_parser.yy"
+#line 3003 "dhcp4_parser.yy"
                                   {
     // 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 4672 "dhcp4_parser.cc"
+#line 4682 "dhcp4_parser.cc"
     break;
 
   case 879: // dhcp_ddns_params: dhcp_ddns_params ","
-#line 3001 "dhcp4_parser.yy"
+#line 3011 "dhcp4_parser.yy"
                                          {
                     ctx.warnAboutExtraCommas(yystack_[0].location);
                     }
-#line 4680 "dhcp4_parser.cc"
+#line 4690 "dhcp4_parser.cc"
     break;
 
   case 891: // enable_updates: "enable-updates" ":" "boolean"
-#line 3019 "dhcp4_parser.yy"
+#line 3029 "dhcp4_parser.yy"
                                              {
     ctx.unique("enable-updates", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enable-updates", b);
 }
-#line 4690 "dhcp4_parser.cc"
+#line 4700 "dhcp4_parser.cc"
     break;
 
   case 892: // $@134: %empty
-#line 3025 "dhcp4_parser.yy"
+#line 3035 "dhcp4_parser.yy"
                      {
     ctx.unique("server-ip", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4699 "dhcp4_parser.cc"
+#line 4709 "dhcp4_parser.cc"
     break;
 
   case 893: // server_ip: "server-ip" $@134 ":" "constant string"
-#line 3028 "dhcp4_parser.yy"
+#line 3038 "dhcp4_parser.yy"
                {
     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 4709 "dhcp4_parser.cc"
+#line 4719 "dhcp4_parser.cc"
     break;
 
   case 894: // server_port: "server-port" ":" "integer"
-#line 3034 "dhcp4_parser.yy"
+#line 3044 "dhcp4_parser.yy"
                                        {
     ctx.unique("server-port", ctx.loc2pos(yystack_[2].location));
     ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-port", i);
 }
-#line 4719 "dhcp4_parser.cc"
+#line 4729 "dhcp4_parser.cc"
     break;
 
   case 895: // $@135: %empty
-#line 3040 "dhcp4_parser.yy"
+#line 3050 "dhcp4_parser.yy"
                      {
     ctx.unique("sender-ip", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4728 "dhcp4_parser.cc"
+#line 4738 "dhcp4_parser.cc"
     break;
 
   case 896: // sender_ip: "sender-ip" $@135 ":" "constant string"
-#line 3043 "dhcp4_parser.yy"
+#line 3053 "dhcp4_parser.yy"
                {
     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 4738 "dhcp4_parser.cc"
+#line 4748 "dhcp4_parser.cc"
     break;
 
   case 897: // sender_port: "sender-port" ":" "integer"
-#line 3049 "dhcp4_parser.yy"
+#line 3059 "dhcp4_parser.yy"
                                        {
     ctx.unique("sender-port", ctx.loc2pos(yystack_[2].location));
     ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-port", i);
 }
-#line 4748 "dhcp4_parser.cc"
+#line 4758 "dhcp4_parser.cc"
     break;
 
   case 898: // max_queue_size: "max-queue-size" ":" "integer"
-#line 3055 "dhcp4_parser.yy"
+#line 3065 "dhcp4_parser.yy"
                                              {
     ctx.unique("max-queue-size", ctx.loc2pos(yystack_[2].location));
     ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-queue-size", i);
 }
-#line 4758 "dhcp4_parser.cc"
+#line 4768 "dhcp4_parser.cc"
     break;
 
   case 899: // $@136: %empty
-#line 3061 "dhcp4_parser.yy"
+#line 3071 "dhcp4_parser.yy"
                            {
     ctx.unique("ncr-protocol", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NCR_PROTOCOL);
 }
-#line 4767 "dhcp4_parser.cc"
+#line 4777 "dhcp4_parser.cc"
     break;
 
   case 900: // ncr_protocol: "ncr-protocol" $@136 ":" ncr_protocol_value
-#line 3064 "dhcp4_parser.yy"
+#line 3074 "dhcp4_parser.yy"
                            {
     ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 4776 "dhcp4_parser.cc"
+#line 4786 "dhcp4_parser.cc"
     break;
 
   case 901: // ncr_protocol_value: "udp"
-#line 3070 "dhcp4_parser.yy"
+#line 3080 "dhcp4_parser.yy"
         { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
-#line 4782 "dhcp4_parser.cc"
+#line 4792 "dhcp4_parser.cc"
     break;
 
   case 902: // ncr_protocol_value: "tcp"
-#line 3071 "dhcp4_parser.yy"
+#line 3081 "dhcp4_parser.yy"
         { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
-#line 4788 "dhcp4_parser.cc"
+#line 4798 "dhcp4_parser.cc"
     break;
 
   case 903: // $@137: %empty
-#line 3074 "dhcp4_parser.yy"
+#line 3084 "dhcp4_parser.yy"
                        {
     ctx.unique("ncr-format", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NCR_FORMAT);
 }
-#line 4797 "dhcp4_parser.cc"
+#line 4807 "dhcp4_parser.cc"
     break;
 
   case 904: // ncr_format: "ncr-format" $@137 ":" "JSON"
-#line 3077 "dhcp4_parser.yy"
+#line 3087 "dhcp4_parser.yy"
              {
     ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ncr-format", json);
     ctx.leave();
 }
-#line 4807 "dhcp4_parser.cc"
+#line 4817 "dhcp4_parser.cc"
     break;
 
   case 905: // $@138: %empty
-#line 3085 "dhcp4_parser.yy"
+#line 3095 "dhcp4_parser.yy"
                                {
     ctx.unique("config-control", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4815,48 +4825,48 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(i);
     ctx.enter(ctx.CONFIG_CONTROL);
 }
-#line 4819 "dhcp4_parser.cc"
+#line 4829 "dhcp4_parser.cc"
     break;
 
   case 906: // config_control: "config-control" $@138 ":" "{" config_control_params "}"
-#line 3091 "dhcp4_parser.yy"
+#line 3101 "dhcp4_parser.yy"
                                                             {
     // No config control params are required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4829 "dhcp4_parser.cc"
+#line 4839 "dhcp4_parser.cc"
     break;
 
   case 907: // $@139: %empty
-#line 3097 "dhcp4_parser.yy"
+#line 3107 "dhcp4_parser.yy"
                                    {
     // Parse the config-control map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 4839 "dhcp4_parser.cc"
+#line 4849 "dhcp4_parser.cc"
     break;
 
   case 908: // sub_config_control: "{" $@139 config_control_params "}"
-#line 3101 "dhcp4_parser.yy"
+#line 3111 "dhcp4_parser.yy"
                                        {
     // No config_control params are required
     // parsing completed
 }
-#line 4848 "dhcp4_parser.cc"
+#line 4858 "dhcp4_parser.cc"
     break;
 
   case 911: // config_control_params: config_control_params ","
-#line 3109 "dhcp4_parser.yy"
+#line 3119 "dhcp4_parser.yy"
                                                    {
                          ctx.warnAboutExtraCommas(yystack_[0].location);
                          }
-#line 4856 "dhcp4_parser.cc"
+#line 4866 "dhcp4_parser.cc"
     break;
 
   case 914: // $@140: %empty
-#line 3119 "dhcp4_parser.yy"
+#line 3129 "dhcp4_parser.yy"
                                    {
     ctx.unique("config-databases", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -4864,30 +4874,30 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CONFIG_DATABASE);
 }
-#line 4868 "dhcp4_parser.cc"
+#line 4878 "dhcp4_parser.cc"
     break;
 
   case 915: // config_databases: "config-databases" $@140 ":" "[" database_list "]"
-#line 3125 "dhcp4_parser.yy"
+#line 3135 "dhcp4_parser.yy"
                                                       {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4877 "dhcp4_parser.cc"
+#line 4887 "dhcp4_parser.cc"
     break;
 
   case 916: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer"
-#line 3130 "dhcp4_parser.yy"
+#line 3140 "dhcp4_parser.yy"
                                                              {
     ctx.unique("config-fetch-wait-time", ctx.loc2pos(yystack_[2].location));
     ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("config-fetch-wait-time", value);
 }
-#line 4887 "dhcp4_parser.cc"
+#line 4897 "dhcp4_parser.cc"
     break;
 
   case 917: // $@141: %empty
-#line 3138 "dhcp4_parser.yy"
+#line 3148 "dhcp4_parser.yy"
                  {
     ctx.unique("loggers", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -4895,83 +4905,83 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.LOGGERS);
 }
-#line 4899 "dhcp4_parser.cc"
+#line 4909 "dhcp4_parser.cc"
     break;
 
   case 918: // loggers: "loggers" $@141 ":" "[" loggers_entries "]"
-#line 3144 "dhcp4_parser.yy"
+#line 3154 "dhcp4_parser.yy"
                                                          {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4908 "dhcp4_parser.cc"
+#line 4918 "dhcp4_parser.cc"
     break;
 
   case 921: // loggers_entries: loggers_entries ","
-#line 3153 "dhcp4_parser.yy"
+#line 3163 "dhcp4_parser.yy"
                                        {
                    ctx.warnAboutExtraCommas(yystack_[0].location);
                    }
-#line 4916 "dhcp4_parser.cc"
+#line 4926 "dhcp4_parser.cc"
     break;
 
   case 922: // $@142: %empty
-#line 3159 "dhcp4_parser.yy"
+#line 3169 "dhcp4_parser.yy"
                              {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 4926 "dhcp4_parser.cc"
+#line 4936 "dhcp4_parser.cc"
     break;
 
   case 923: // logger_entry: "{" $@142 logger_params "}"
-#line 3163 "dhcp4_parser.yy"
+#line 3173 "dhcp4_parser.yy"
                                {
     ctx.stack_.pop_back();
 }
-#line 4934 "dhcp4_parser.cc"
+#line 4944 "dhcp4_parser.cc"
     break;
 
   case 926: // logger_params: logger_params ","
-#line 3169 "dhcp4_parser.yy"
+#line 3179 "dhcp4_parser.yy"
                                    {
                  ctx.warnAboutExtraCommas(yystack_[0].location);
                  }
-#line 4942 "dhcp4_parser.cc"
+#line 4952 "dhcp4_parser.cc"
     break;
 
   case 934: // debuglevel: "debuglevel" ":" "integer"
-#line 3183 "dhcp4_parser.yy"
+#line 3193 "dhcp4_parser.yy"
                                      {
     ctx.unique("debuglevel", ctx.loc2pos(yystack_[2].location));
     ElementPtr dl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("debuglevel", dl);
 }
-#line 4952 "dhcp4_parser.cc"
+#line 4962 "dhcp4_parser.cc"
     break;
 
   case 935: // $@143: %empty
-#line 3189 "dhcp4_parser.yy"
+#line 3199 "dhcp4_parser.yy"
                    {
     ctx.unique("severity", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4961 "dhcp4_parser.cc"
+#line 4971 "dhcp4_parser.cc"
     break;
 
   case 936: // severity: "severity" $@143 ":" "constant string"
-#line 3192 "dhcp4_parser.yy"
+#line 3202 "dhcp4_parser.yy"
                {
     ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("severity", sev);
     ctx.leave();
 }
-#line 4971 "dhcp4_parser.cc"
+#line 4981 "dhcp4_parser.cc"
     break;
 
   case 937: // $@144: %empty
-#line 3198 "dhcp4_parser.yy"
+#line 3208 "dhcp4_parser.yy"
                                     {
     ctx.unique("output-options", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -4979,122 +4989,122 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OUTPUT_OPTIONS);
 }
-#line 4983 "dhcp4_parser.cc"
+#line 4993 "dhcp4_parser.cc"
     break;
 
   case 938: // output_options_list: "output-options" $@144 ":" "[" output_options_list_content "]"
-#line 3204 "dhcp4_parser.yy"
+#line 3214 "dhcp4_parser.yy"
                                                                     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4992 "dhcp4_parser.cc"
+#line 5002 "dhcp4_parser.cc"
     break;
 
   case 941: // output_options_list_content: output_options_list_content ","
-#line 3211 "dhcp4_parser.yy"
+#line 3221 "dhcp4_parser.yy"
                                                                {
                                ctx.warnAboutExtraCommas(yystack_[0].location);
                                }
-#line 5000 "dhcp4_parser.cc"
+#line 5010 "dhcp4_parser.cc"
     break;
 
   case 942: // $@145: %empty
-#line 3216 "dhcp4_parser.yy"
+#line 3226 "dhcp4_parser.yy"
                              {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 5010 "dhcp4_parser.cc"
+#line 5020 "dhcp4_parser.cc"
     break;
 
   case 943: // output_entry: "{" $@145 output_params_list "}"
-#line 3220 "dhcp4_parser.yy"
+#line 3230 "dhcp4_parser.yy"
                                     {
     ctx.stack_.pop_back();
 }
-#line 5018 "dhcp4_parser.cc"
+#line 5028 "dhcp4_parser.cc"
     break;
 
   case 946: // output_params_list: output_params_list ","
-#line 3226 "dhcp4_parser.yy"
+#line 3236 "dhcp4_parser.yy"
                                              {
                       ctx.warnAboutExtraCommas(yystack_[0].location);
                       }
-#line 5026 "dhcp4_parser.cc"
+#line 5036 "dhcp4_parser.cc"
     break;
 
   case 952: // $@146: %empty
-#line 3238 "dhcp4_parser.yy"
+#line 3248 "dhcp4_parser.yy"
                {
     ctx.unique("output", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 5035 "dhcp4_parser.cc"
+#line 5045 "dhcp4_parser.cc"
     break;
 
   case 953: // output: "output" $@146 ":" "constant string"
-#line 3241 "dhcp4_parser.yy"
+#line 3251 "dhcp4_parser.yy"
                {
     ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output", sev);
     ctx.leave();
 }
-#line 5045 "dhcp4_parser.cc"
+#line 5055 "dhcp4_parser.cc"
     break;
 
   case 954: // flush: "flush" ":" "boolean"
-#line 3247 "dhcp4_parser.yy"
+#line 3257 "dhcp4_parser.yy"
                            {
     ctx.unique("flush", ctx.loc2pos(yystack_[2].location));
     ElementPtr flush(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush", flush);
 }
-#line 5055 "dhcp4_parser.cc"
+#line 5065 "dhcp4_parser.cc"
     break;
 
   case 955: // maxsize: "maxsize" ":" "integer"
-#line 3253 "dhcp4_parser.yy"
+#line 3263 "dhcp4_parser.yy"
                                {
     ctx.unique("maxsize", ctx.loc2pos(yystack_[2].location));
     ElementPtr maxsize(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxsize", maxsize);
 }
-#line 5065 "dhcp4_parser.cc"
+#line 5075 "dhcp4_parser.cc"
     break;
 
   case 956: // maxver: "maxver" ":" "integer"
-#line 3259 "dhcp4_parser.yy"
+#line 3269 "dhcp4_parser.yy"
                              {
     ctx.unique("maxver", ctx.loc2pos(yystack_[2].location));
     ElementPtr maxver(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxver", maxver);
 }
-#line 5075 "dhcp4_parser.cc"
+#line 5085 "dhcp4_parser.cc"
     break;
 
   case 957: // $@147: %empty
-#line 3265 "dhcp4_parser.yy"
+#line 3275 "dhcp4_parser.yy"
                  {
     ctx.unique("pattern", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 5084 "dhcp4_parser.cc"
+#line 5094 "dhcp4_parser.cc"
     break;
 
   case 958: // pattern: "pattern" $@147 ":" "constant string"
-#line 3268 "dhcp4_parser.yy"
+#line 3278 "dhcp4_parser.yy"
                {
     ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pattern", sev);
     ctx.leave();
 }
-#line 5094 "dhcp4_parser.cc"
+#line 5104 "dhcp4_parser.cc"
     break;
 
   case 959: // $@148: %empty
-#line 3274 "dhcp4_parser.yy"
+#line 3284 "dhcp4_parser.yy"
                              {
     ctx.unique("compatibility", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -5102,68 +5112,68 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(i);
     ctx.enter(ctx.COMPATIBILITY);
 }
-#line 5106 "dhcp4_parser.cc"
+#line 5116 "dhcp4_parser.cc"
     break;
 
   case 960: // compatibility: "compatibility" $@148 ":" "{" compatibility_params "}"
-#line 3280 "dhcp4_parser.yy"
+#line 3290 "dhcp4_parser.yy"
                                                            {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 5115 "dhcp4_parser.cc"
+#line 5125 "dhcp4_parser.cc"
     break;
 
   case 963: // compatibility_params: compatibility_params ","
-#line 3287 "dhcp4_parser.yy"
+#line 3297 "dhcp4_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 5123 "dhcp4_parser.cc"
+#line 5133 "dhcp4_parser.cc"
     break;
 
   case 969: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean"
-#line 3299 "dhcp4_parser.yy"
+#line 3309 "dhcp4_parser.yy"
                                                              {
     ctx.unique("lenient-option-parsing", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lenient-option-parsing", b);
 }
-#line 5133 "dhcp4_parser.cc"
+#line 5143 "dhcp4_parser.cc"
     break;
 
   case 970: // ignore_dhcp_server_identifier: "ignore-dhcp-server-identifier" ":" "boolean"
-#line 3305 "dhcp4_parser.yy"
+#line 3315 "dhcp4_parser.yy"
                                                                    {
     ctx.unique("ignore-dhcp-server-identifier", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ignore-dhcp-server-identifier", b);
 }
-#line 5143 "dhcp4_parser.cc"
+#line 5153 "dhcp4_parser.cc"
     break;
 
   case 971: // ignore_rai_link_selection: "ignore-rai-link-selection" ":" "boolean"
-#line 3311 "dhcp4_parser.yy"
+#line 3321 "dhcp4_parser.yy"
                                                              {
     ctx.unique("ignore-rai-link-selection", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ignore-rai-link-selection", b);
 }
-#line 5153 "dhcp4_parser.cc"
+#line 5163 "dhcp4_parser.cc"
     break;
 
   case 972: // exclude_first_last_24: "exclude-first-last-24" ":" "boolean"
-#line 3317 "dhcp4_parser.yy"
+#line 3327 "dhcp4_parser.yy"
                                                            {
     ctx.unique("exclude-first-last-24", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("exclude-first-last-24", b);
 }
-#line 5163 "dhcp4_parser.cc"
+#line 5173 "dhcp4_parser.cc"
     break;
 
 
-#line 5167 "dhcp4_parser.cc"
+#line 5177 "dhcp4_parser.cc"
 
             default:
               break;
@@ -6889,73 +6899,73 @@ namespace isc { namespace dhcp {
     1148,  1151,  1151,  1160,  1160,  1169,  1169,  1178,  1178,  1187,
     1193,  1193,  1202,  1208,  1214,  1220,  1226,  1232,  1238,  1244,
     1250,  1256,  1256,  1264,  1265,  1266,  1269,  1275,  1281,  1281,
-    1290,  1290,  1299,  1299,  1308,  1308,  1316,  1317,  1318,  1319,
-    1320,  1323,  1323,  1332,  1332,  1343,  1344,  1345,  1350,  1351,
-    1352,  1353,  1354,  1357,  1362,  1367,  1372,  1377,  1384,  1384,
-    1397,  1398,  1399,  1404,  1405,  1406,  1407,  1408,  1409,  1412,
-    1418,  1424,  1430,  1430,  1441,  1442,  1445,  1446,  1447,  1452,
-    1452,  1462,  1462,  1472,  1473,  1474,  1477,  1480,  1481,  1484,
-    1484,  1493,  1493,  1502,  1502,  1514,  1515,  1516,  1521,  1522,
-    1523,  1524,  1525,  1526,  1529,  1535,  1541,  1547,  1553,  1559,
-    1568,  1568,  1582,  1583,  1586,  1587,  1588,  1597,  1597,  1623,
-    1623,  1634,  1635,  1636,  1642,  1643,  1644,  1645,  1646,  1647,
-    1648,  1649,  1650,  1651,  1652,  1653,  1654,  1655,  1656,  1657,
+    1290,  1290,  1299,  1299,  1308,  1308,  1316,  1319,  1322,  1325,
+    1328,  1333,  1333,  1342,  1342,  1353,  1354,  1355,  1360,  1361,
+    1362,  1363,  1364,  1367,  1372,  1377,  1382,  1387,  1394,  1394,
+    1407,  1408,  1409,  1414,  1415,  1416,  1417,  1418,  1419,  1422,
+    1428,  1434,  1440,  1440,  1451,  1452,  1455,  1456,  1457,  1462,
+    1462,  1472,  1472,  1482,  1483,  1484,  1487,  1490,  1491,  1494,
+    1494,  1503,  1503,  1512,  1512,  1524,  1525,  1526,  1531,  1532,
+    1533,  1534,  1535,  1536,  1539,  1545,  1551,  1557,  1563,  1569,
+    1578,  1578,  1592,  1593,  1596,  1597,  1598,  1607,  1607,  1633,
+    1633,  1644,  1645,  1646,  1652,  1653,  1654,  1655,  1656,  1657,
     1658,  1659,  1660,  1661,  1662,  1663,  1664,  1665,  1666,  1667,
     1668,  1669,  1670,  1671,  1672,  1673,  1674,  1675,  1676,  1677,
     1678,  1679,  1680,  1681,  1682,  1683,  1684,  1685,  1686,  1687,
-    1688,  1689,  1690,  1691,  1692,  1693,  1694,  1697,  1697,  1706,
-    1706,  1715,  1715,  1724,  1724,  1733,  1733,  1742,  1742,  1752,
-    1752,  1764,  1764,  1775,  1775,  1786,  1792,  1798,  1804,  1812,
-    1812,  1824,  1825,  1829,  1830,  1831,  1836,  1836,  1844,  1845,
-    1846,  1851,  1852,  1853,  1854,  1855,  1856,  1857,  1858,  1859,
-    1860,  1861,  1862,  1863,  1864,  1865,  1866,  1867,  1868,  1869,
+    1688,  1689,  1690,  1691,  1692,  1693,  1694,  1695,  1696,  1697,
+    1698,  1699,  1700,  1701,  1702,  1703,  1704,  1707,  1707,  1716,
+    1716,  1725,  1725,  1734,  1734,  1743,  1743,  1752,  1752,  1762,
+    1762,  1774,  1774,  1785,  1785,  1796,  1802,  1808,  1814,  1822,
+    1822,  1834,  1835,  1839,  1840,  1841,  1846,  1846,  1854,  1855,
+    1856,  1861,  1862,  1863,  1864,  1865,  1866,  1867,  1868,  1869,
     1870,  1871,  1872,  1873,  1874,  1875,  1876,  1877,  1878,  1879,
     1880,  1881,  1882,  1883,  1884,  1885,  1886,  1887,  1888,  1889,
-    1890,  1891,  1892,  1893,  1894,  1895,  1896,  1897,  1898,  1905,
-    1905,  1919,  1919,  1928,  1929,  1932,  1933,  1934,  1941,  1941,
-    1956,  1956,  1970,  1971,  1974,  1975,  1976,  1981,  1982,  1983,
-    1984,  1985,  1986,  1987,  1988,  1989,  1990,  1993,  1995,  2001,
-    2003,  2003,  2012,  2012,  2021,  2021,  2030,  2032,  2032,  2041,
-    2051,  2051,  2064,  2065,  2070,  2071,  2072,  2079,  2079,  2091,
-    2091,  2103,  2104,  2109,  2110,  2111,  2118,  2119,  2120,  2121,
-    2122,  2123,  2124,  2125,  2126,  2127,  2128,  2131,  2133,  2133,
-    2142,  2144,  2146,  2152,  2158,  2164,  2164,  2178,  2178,  2191,
-    2192,  2195,  2196,  2197,  2202,  2202,  2212,  2212,  2222,  2223,
-    2224,  2229,  2230,  2231,  2232,  2233,  2234,  2235,  2236,  2237,
-    2238,  2239,  2240,  2241,  2242,  2243,  2244,  2245,  2246,  2247,
-    2248,  2249,  2250,  2251,  2252,  2255,  2255,  2264,  2270,  2270,
-    2295,  2295,  2325,  2325,  2336,  2337,  2340,  2341,  2342,  2347,
-    2347,  2356,  2356,  2365,  2366,  2369,  2370,  2371,  2377,  2378,
-    2379,  2380,  2381,  2382,  2383,  2384,  2385,  2386,  2387,  2388,
-    2389,  2390,  2391,  2394,  2394,  2403,  2403,  2412,  2412,  2421,
-    2421,  2430,  2430,  2439,  2439,  2448,  2448,  2457,  2457,  2466,
-    2466,  2475,  2475,  2484,  2484,  2498,  2498,  2509,  2512,  2512,
-    2526,  2526,  2537,  2538,  2539,  2544,  2544,  2554,  2555,  2558,
-    2559,  2560,  2565,  2566,  2567,  2568,  2569,  2570,  2571,  2572,
-    2573,  2574,  2575,  2576,  2577,  2578,  2579,  2580,  2581,  2584,
-    2586,  2586,  2595,  2595,  2605,  2611,  2619,  2627,  2627,  2639,
-    2639,  2651,  2652,  2655,  2656,  2657,  2662,  2662,  2670,  2671,
-    2672,  2677,  2678,  2679,  2680,  2681,  2682,  2683,  2684,  2685,
-    2686,  2687,  2688,  2689,  2692,  2692,  2701,  2702,  2703,  2706,
-    2706,  2716,  2716,  2726,  2732,  2738,  2738,  2749,  2750,  2753,
-    2754,  2755,  2760,  2760,  2768,  2769,  2770,  2775,  2776,  2777,
-    2778,  2779,  2782,  2782,  2793,  2793,  2806,  2807,  2808,  2813,
-    2814,  2815,  2816,  2817,  2818,  2819,  2822,  2822,  2830,  2833,
-    2833,  2842,  2842,  2851,  2851,  2862,  2863,  2866,  2867,  2868,
-    2873,  2873,  2881,  2882,  2883,  2888,  2889,  2890,  2891,  2892,
-    2893,  2894,  2897,  2897,  2906,  2906,  2917,  2917,  2930,  2931,
-    2932,  2937,  2938,  2939,  2940,  2941,  2942,  2945,  2951,  2951,
-    2960,  2966,  2966,  2976,  2976,  2989,  2989,  2999,  3000,  3001,
-    3006,  3007,  3008,  3009,  3010,  3011,  3012,  3013,  3014,  3015,
-    3016,  3019,  3025,  3025,  3034,  3040,  3040,  3049,  3055,  3061,
-    3061,  3070,  3071,  3074,  3074,  3085,  3085,  3097,  3097,  3107,
-    3108,  3109,  3115,  3116,  3119,  3119,  3130,  3138,  3138,  3151,
-    3152,  3153,  3159,  3159,  3167,  3168,  3169,  3174,  3175,  3176,
-    3177,  3178,  3179,  3180,  3183,  3189,  3189,  3198,  3198,  3209,
-    3210,  3211,  3216,  3216,  3224,  3225,  3226,  3231,  3232,  3233,
-    3234,  3235,  3238,  3238,  3247,  3253,  3259,  3265,  3265,  3274,
-    3274,  3285,  3286,  3287,  3292,  3293,  3294,  3295,  3296,  3299,
-    3305,  3311,  3317
+    1890,  1891,  1892,  1893,  1894,  1895,  1896,  1897,  1898,  1899,
+    1900,  1901,  1902,  1903,  1904,  1905,  1906,  1907,  1908,  1915,
+    1915,  1929,  1929,  1938,  1939,  1942,  1943,  1944,  1951,  1951,
+    1966,  1966,  1980,  1981,  1984,  1985,  1986,  1991,  1992,  1993,
+    1994,  1995,  1996,  1997,  1998,  1999,  2000,  2003,  2005,  2011,
+    2013,  2013,  2022,  2022,  2031,  2031,  2040,  2042,  2042,  2051,
+    2061,  2061,  2074,  2075,  2080,  2081,  2082,  2089,  2089,  2101,
+    2101,  2113,  2114,  2119,  2120,  2121,  2128,  2129,  2130,  2131,
+    2132,  2133,  2134,  2135,  2136,  2137,  2138,  2141,  2143,  2143,
+    2152,  2154,  2156,  2162,  2168,  2174,  2174,  2188,  2188,  2201,
+    2202,  2205,  2206,  2207,  2212,  2212,  2222,  2222,  2232,  2233,
+    2234,  2239,  2240,  2241,  2242,  2243,  2244,  2245,  2246,  2247,
+    2248,  2249,  2250,  2251,  2252,  2253,  2254,  2255,  2256,  2257,
+    2258,  2259,  2260,  2261,  2262,  2265,  2265,  2274,  2280,  2280,
+    2305,  2305,  2335,  2335,  2346,  2347,  2350,  2351,  2352,  2357,
+    2357,  2366,  2366,  2375,  2376,  2379,  2380,  2381,  2387,  2388,
+    2389,  2390,  2391,  2392,  2393,  2394,  2395,  2396,  2397,  2398,
+    2399,  2400,  2401,  2404,  2404,  2413,  2413,  2422,  2422,  2431,
+    2431,  2440,  2440,  2449,  2449,  2458,  2458,  2467,  2467,  2476,
+    2476,  2485,  2485,  2494,  2494,  2508,  2508,  2519,  2522,  2522,
+    2536,  2536,  2547,  2548,  2549,  2554,  2554,  2564,  2565,  2568,
+    2569,  2570,  2575,  2576,  2577,  2578,  2579,  2580,  2581,  2582,
+    2583,  2584,  2585,  2586,  2587,  2588,  2589,  2590,  2591,  2594,
+    2596,  2596,  2605,  2605,  2615,  2621,  2629,  2637,  2637,  2649,
+    2649,  2661,  2662,  2665,  2666,  2667,  2672,  2672,  2680,  2681,
+    2682,  2687,  2688,  2689,  2690,  2691,  2692,  2693,  2694,  2695,
+    2696,  2697,  2698,  2699,  2702,  2702,  2711,  2712,  2713,  2716,
+    2716,  2726,  2726,  2736,  2742,  2748,  2748,  2759,  2760,  2763,
+    2764,  2765,  2770,  2770,  2778,  2779,  2780,  2785,  2786,  2787,
+    2788,  2789,  2792,  2792,  2803,  2803,  2816,  2817,  2818,  2823,
+    2824,  2825,  2826,  2827,  2828,  2829,  2832,  2832,  2840,  2843,
+    2843,  2852,  2852,  2861,  2861,  2872,  2873,  2876,  2877,  2878,
+    2883,  2883,  2891,  2892,  2893,  2898,  2899,  2900,  2901,  2902,
+    2903,  2904,  2907,  2907,  2916,  2916,  2927,  2927,  2940,  2941,
+    2942,  2947,  2948,  2949,  2950,  2951,  2952,  2955,  2961,  2961,
+    2970,  2976,  2976,  2986,  2986,  2999,  2999,  3009,  3010,  3011,
+    3016,  3017,  3018,  3019,  3020,  3021,  3022,  3023,  3024,  3025,
+    3026,  3029,  3035,  3035,  3044,  3050,  3050,  3059,  3065,  3071,
+    3071,  3080,  3081,  3084,  3084,  3095,  3095,  3107,  3107,  3117,
+    3118,  3119,  3125,  3126,  3129,  3129,  3140,  3148,  3148,  3161,
+    3162,  3163,  3169,  3169,  3177,  3178,  3179,  3184,  3185,  3186,
+    3187,  3188,  3189,  3190,  3193,  3199,  3199,  3208,  3208,  3219,
+    3220,  3221,  3226,  3226,  3234,  3235,  3236,  3241,  3242,  3243,
+    3244,  3245,  3248,  3248,  3257,  3263,  3269,  3275,  3275,  3284,
+    3284,  3295,  3296,  3297,  3302,  3303,  3304,  3305,  3306,  3309,
+    3315,  3321,  3327
   };
 
   void
@@ -6988,9 +6998,9 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp4_parser.yy"
 } } // isc::dhcp
-#line 6992 "dhcp4_parser.cc"
+#line 7002 "dhcp4_parser.cc"
 
-#line 3323 "dhcp4_parser.yy"
+#line 3333 "dhcp4_parser.yy"
 
 
 void
index cbba2dc935028e7af5a75cd63be8cf101cf6fadb..f9eebd517d71ddb68b905f861c466762107a0840 100644 (file)
@@ -1313,11 +1313,21 @@ ssl_mode: SSL_MODE {
     ctx.leave();
 };
 
-ssl_mode: DISABLE { $$ = ElementPtr(new StringElement("disable", ctx.loc2pos(@1))); }
-        | PREFER { $$ = ElementPtr(new StringElement("prefer", ctx.loc2pos(@1))); }
-        | REQUIRE { $$ = ElementPtr(new StringElement("require", ctx.loc2pos(@1))); }
-        | VERIFY_CA { $$ = ElementPtr(new StringElement("verify-ca", ctx.loc2pos(@1))); }
-        | VERIFY_FULL { $$ = ElementPtr(new StringElement("verify-full", ctx.loc2pos(@1))); }
+ssl_mode: DISABLE {
+            $$ = ElementPtr(new StringElement("disable", ctx.loc2pos(@1)));
+            }
+        | PREFER {
+            $$ = ElementPtr(new StringElement("prefer", ctx.loc2pos(@1)));
+            }
+        | REQUIRE {
+            $$ = ElementPtr(new StringElement("require", ctx.loc2pos(@1)));
+            }
+        | VERIFY_CA {
+            $$ = ElementPtr(new StringElement("verify-ca", ctx.loc2pos(@1)));
+            }
+        | VERIFY_FULL {
+            $$ = ElementPtr(new StringElement("verify-full", ctx.loc2pos(@1)));
+            }
         ;
 
 cipher_list: CIPHER_LIST {
index c74e1e372c108241e7f913330c4f4e49adc6454d..cbf450bb4878e25ce0361ab74a681a3a9c90f37b 100644 (file)
@@ -2249,55 +2249,65 @@ namespace isc { namespace dhcp {
 
   case 299: // ssl_mode: "disable"
 #line 1240 "dhcp6_parser.yy"
-                  { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("disable", ctx.loc2pos(yystack_[0].location))); }
-#line 2254 "dhcp6_parser.cc"
+                  {
+            yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("disable", ctx.loc2pos(yystack_[0].location)));
+            }
+#line 2256 "dhcp6_parser.cc"
     break;
 
   case 300: // ssl_mode: "prefer"
-#line 1241 "dhcp6_parser.yy"
-                 { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("prefer", ctx.loc2pos(yystack_[0].location))); }
-#line 2260 "dhcp6_parser.cc"
+#line 1243 "dhcp6_parser.yy"
+                 {
+            yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("prefer", ctx.loc2pos(yystack_[0].location)));
+            }
+#line 2264 "dhcp6_parser.cc"
     break;
 
   case 301: // ssl_mode: "require"
-#line 1242 "dhcp6_parser.yy"
-                  { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("require", ctx.loc2pos(yystack_[0].location))); }
-#line 2266 "dhcp6_parser.cc"
+#line 1246 "dhcp6_parser.yy"
+                  {
+            yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("require", ctx.loc2pos(yystack_[0].location)));
+            }
+#line 2272 "dhcp6_parser.cc"
     break;
 
   case 302: // ssl_mode: "verify-ca"
-#line 1243 "dhcp6_parser.yy"
-                    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("verify-ca", ctx.loc2pos(yystack_[0].location))); }
-#line 2272 "dhcp6_parser.cc"
+#line 1249 "dhcp6_parser.yy"
+                    {
+            yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("verify-ca", ctx.loc2pos(yystack_[0].location)));
+            }
+#line 2280 "dhcp6_parser.cc"
     break;
 
   case 303: // ssl_mode: "verify-full"
-#line 1244 "dhcp6_parser.yy"
-                      { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("verify-full", ctx.loc2pos(yystack_[0].location))); }
-#line 2278 "dhcp6_parser.cc"
+#line 1252 "dhcp6_parser.yy"
+                      {
+            yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("verify-full", ctx.loc2pos(yystack_[0].location)));
+            }
+#line 2288 "dhcp6_parser.cc"
     break;
 
   case 304: // $@48: %empty
-#line 1247 "dhcp6_parser.yy"
+#line 1257 "dhcp6_parser.yy"
                          {
     ctx.unique("cipher-list", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2287 "dhcp6_parser.cc"
+#line 2297 "dhcp6_parser.cc"
     break;
 
   case 305: // cipher_list: "cipher-list" $@48 ":" "constant string"
-#line 1250 "dhcp6_parser.yy"
+#line 1260 "dhcp6_parser.yy"
                {
     ElementPtr cl(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("cipher-list", cl);
     ctx.leave();
 }
-#line 2297 "dhcp6_parser.cc"
+#line 2307 "dhcp6_parser.cc"
     break;
 
   case 306: // $@49: %empty
-#line 1256 "dhcp6_parser.yy"
+#line 1266 "dhcp6_parser.yy"
                              {
     ctx.unique("sanity-checks", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2305,37 +2315,37 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SANITY_CHECKS);
 }
-#line 2309 "dhcp6_parser.cc"
+#line 2319 "dhcp6_parser.cc"
     break;
 
   case 307: // sanity_checks: "sanity-checks" $@49 ":" "{" sanity_checks_params "}"
-#line 1262 "dhcp6_parser.yy"
+#line 1272 "dhcp6_parser.yy"
                                                            {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2318 "dhcp6_parser.cc"
+#line 2328 "dhcp6_parser.cc"
     break;
 
   case 310: // sanity_checks_params: sanity_checks_params ","
-#line 1269 "dhcp6_parser.yy"
+#line 1279 "dhcp6_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 2326 "dhcp6_parser.cc"
+#line 2336 "dhcp6_parser.cc"
     break;
 
   case 313: // $@50: %empty
-#line 1278 "dhcp6_parser.yy"
+#line 1288 "dhcp6_parser.yy"
                            {
     ctx.unique("lease-checks", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2335 "dhcp6_parser.cc"
+#line 2345 "dhcp6_parser.cc"
     break;
 
   case 314: // lease_checks: "lease-checks" $@50 ":" "constant string"
-#line 1281 "dhcp6_parser.yy"
+#line 1291 "dhcp6_parser.yy"
                {
 
     if ( (string(yystack_[0].value.as < std::string > ()) == "none") ||
@@ -2351,20 +2361,20 @@ namespace isc { namespace dhcp {
               ", supported values are: none, warn, fix, fix-del, del");
     }
 }
-#line 2355 "dhcp6_parser.cc"
+#line 2365 "dhcp6_parser.cc"
     break;
 
   case 315: // $@51: %empty
-#line 1297 "dhcp6_parser.yy"
+#line 1307 "dhcp6_parser.yy"
                                            {
     ctx.unique("extended-info-checks", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2364 "dhcp6_parser.cc"
+#line 2374 "dhcp6_parser.cc"
     break;
 
   case 316: // extended_info_checks: "extended-info-checks" $@51 ":" "constant string"
-#line 1300 "dhcp6_parser.yy"
+#line 1310 "dhcp6_parser.yy"
                {
 
     if ( (string(yystack_[0].value.as < std::string > ()) == "none") ||
@@ -2379,11 +2389,11 @@ namespace isc { namespace dhcp {
               ", supported values are: none, fix, strict, pedantic");
     }
 }
-#line 2383 "dhcp6_parser.cc"
+#line 2393 "dhcp6_parser.cc"
     break;
 
   case 317: // $@52: %empty
-#line 1315 "dhcp6_parser.yy"
+#line 1325 "dhcp6_parser.yy"
                          {
     ctx.unique("mac-sources", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2391,46 +2401,46 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.MAC_SOURCES);
 }
-#line 2395 "dhcp6_parser.cc"
+#line 2405 "dhcp6_parser.cc"
     break;
 
   case 318: // mac_sources: "mac-sources" $@52 ":" "[" mac_sources_list "]"
-#line 1321 "dhcp6_parser.yy"
+#line 1331 "dhcp6_parser.yy"
                                                          {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2404 "dhcp6_parser.cc"
+#line 2414 "dhcp6_parser.cc"
     break;
 
   case 321: // mac_sources_list: mac_sources_list ","
-#line 1328 "dhcp6_parser.yy"
+#line 1338 "dhcp6_parser.yy"
                                          {
                     ctx.warnAboutExtraCommas(yystack_[0].location);
                     }
-#line 2412 "dhcp6_parser.cc"
+#line 2422 "dhcp6_parser.cc"
     break;
 
   case 324: // duid_id: "duid"
-#line 1337 "dhcp6_parser.yy"
+#line 1347 "dhcp6_parser.yy"
               {
     ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
 }
-#line 2421 "dhcp6_parser.cc"
+#line 2431 "dhcp6_parser.cc"
     break;
 
   case 325: // string_id: "constant string"
-#line 1342 "dhcp6_parser.yy"
+#line 1352 "dhcp6_parser.yy"
                   {
     ElementPtr duid(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
 }
-#line 2430 "dhcp6_parser.cc"
+#line 2440 "dhcp6_parser.cc"
     break;
 
   case 326: // $@53: %empty
-#line 1347 "dhcp6_parser.yy"
+#line 1357 "dhcp6_parser.yy"
                                                            {
     ctx.unique("host-reservation-identifiers", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2438,46 +2448,46 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS);
 }
-#line 2442 "dhcp6_parser.cc"
+#line 2452 "dhcp6_parser.cc"
     break;
 
   case 327: // host_reservation_identifiers: "host-reservation-identifiers" $@53 ":" "[" host_reservation_identifiers_list "]"
-#line 1353 "dhcp6_parser.yy"
+#line 1363 "dhcp6_parser.yy"
                                                                           {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2451 "dhcp6_parser.cc"
+#line 2461 "dhcp6_parser.cc"
     break;
 
   case 330: // host_reservation_identifiers_list: host_reservation_identifiers_list ","
-#line 1360 "dhcp6_parser.yy"
+#line 1370 "dhcp6_parser.yy"
                                               {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 2459 "dhcp6_parser.cc"
+#line 2469 "dhcp6_parser.cc"
     break;
 
   case 334: // hw_address_id: "hw-address"
-#line 1370 "dhcp6_parser.yy"
+#line 1380 "dhcp6_parser.yy"
                           {
     ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(hwaddr);
 }
-#line 2468 "dhcp6_parser.cc"
+#line 2478 "dhcp6_parser.cc"
     break;
 
   case 335: // flex_id: "flex-id"
-#line 1375 "dhcp6_parser.yy"
+#line 1385 "dhcp6_parser.yy"
                  {
     ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(flex_id);
 }
-#line 2477 "dhcp6_parser.cc"
+#line 2487 "dhcp6_parser.cc"
     break;
 
   case 336: // $@54: %empty
-#line 1382 "dhcp6_parser.yy"
+#line 1392 "dhcp6_parser.yy"
                                                {
     ctx.unique("relay-supplied-options", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2485,20 +2495,20 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2489 "dhcp6_parser.cc"
+#line 2499 "dhcp6_parser.cc"
     break;
 
   case 337: // relay_supplied_options: "relay-supplied-options" $@54 ":" "[" list_content "]"
-#line 1388 "dhcp6_parser.yy"
+#line 1398 "dhcp6_parser.yy"
                                                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2498 "dhcp6_parser.cc"
+#line 2508 "dhcp6_parser.cc"
     break;
 
   case 338: // $@55: %empty
-#line 1395 "dhcp6_parser.yy"
+#line 1405 "dhcp6_parser.yy"
                                            {
     ctx.unique("multi-threading", ctx.loc2pos(yystack_[0].location));
     ElementPtr mt(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2506,60 +2516,60 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(mt);
     ctx.enter(ctx.DHCP_MULTI_THREADING);
 }
-#line 2510 "dhcp6_parser.cc"
+#line 2520 "dhcp6_parser.cc"
     break;
 
   case 339: // dhcp_multi_threading: "multi-threading" $@55 ":" "{" multi_threading_params "}"
-#line 1401 "dhcp6_parser.yy"
+#line 1411 "dhcp6_parser.yy"
                                                              {
     // The enable parameter is required.
     ctx.require("enable-multi-threading", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2521 "dhcp6_parser.cc"
+#line 2531 "dhcp6_parser.cc"
     break;
 
   case 342: // multi_threading_params: multi_threading_params ","
-#line 1410 "dhcp6_parser.yy"
+#line 1420 "dhcp6_parser.yy"
                                                      {
                           ctx.warnAboutExtraCommas(yystack_[0].location);
                           }
-#line 2529 "dhcp6_parser.cc"
+#line 2539 "dhcp6_parser.cc"
     break;
 
   case 349: // enable_multi_threading: "enable-multi-threading" ":" "boolean"
-#line 1423 "dhcp6_parser.yy"
+#line 1433 "dhcp6_parser.yy"
                                                              {
     ctx.unique("enable-multi-threading", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enable-multi-threading", b);
 }
-#line 2539 "dhcp6_parser.cc"
+#line 2549 "dhcp6_parser.cc"
     break;
 
   case 350: // thread_pool_size: "thread-pool-size" ":" "integer"
-#line 1429 "dhcp6_parser.yy"
+#line 1439 "dhcp6_parser.yy"
                                                  {
     ctx.unique("thread-pool-size", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("thread-pool-size", prf);
 }
-#line 2549 "dhcp6_parser.cc"
+#line 2559 "dhcp6_parser.cc"
     break;
 
   case 351: // packet_queue_size: "packet-queue-size" ":" "integer"
-#line 1435 "dhcp6_parser.yy"
+#line 1445 "dhcp6_parser.yy"
                                                    {
     ctx.unique("packet-queue-size", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("packet-queue-size", prf);
 }
-#line 2559 "dhcp6_parser.cc"
+#line 2569 "dhcp6_parser.cc"
     break;
 
   case 352: // $@56: %empty
-#line 1441 "dhcp6_parser.yy"
+#line 1451 "dhcp6_parser.yy"
                                  {
     ctx.unique("hooks-libraries", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2567,113 +2577,113 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOOKS_LIBRARIES);
 }
-#line 2571 "dhcp6_parser.cc"
+#line 2581 "dhcp6_parser.cc"
     break;
 
   case 353: // hooks_libraries: "hooks-libraries" $@56 ":" "[" hooks_libraries_list "]"
-#line 1447 "dhcp6_parser.yy"
+#line 1457 "dhcp6_parser.yy"
                                                              {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2580 "dhcp6_parser.cc"
+#line 2590 "dhcp6_parser.cc"
     break;
 
   case 358: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list ","
-#line 1458 "dhcp6_parser.yy"
+#line 1468 "dhcp6_parser.yy"
                                            {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 2588 "dhcp6_parser.cc"
+#line 2598 "dhcp6_parser.cc"
     break;
 
   case 359: // $@57: %empty
-#line 1463 "dhcp6_parser.yy"
+#line 1473 "dhcp6_parser.yy"
                               {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2598 "dhcp6_parser.cc"
+#line 2608 "dhcp6_parser.cc"
     break;
 
   case 360: // hooks_library: "{" $@57 hooks_params "}"
-#line 1467 "dhcp6_parser.yy"
+#line 1477 "dhcp6_parser.yy"
                               {
     // The library hooks parameter is required
     ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2608 "dhcp6_parser.cc"
+#line 2618 "dhcp6_parser.cc"
     break;
 
   case 361: // $@58: %empty
-#line 1473 "dhcp6_parser.yy"
+#line 1483 "dhcp6_parser.yy"
                                   {
     // Parse the hooks-libraries list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2618 "dhcp6_parser.cc"
+#line 2628 "dhcp6_parser.cc"
     break;
 
   case 362: // sub_hooks_library: "{" $@58 hooks_params "}"
-#line 1477 "dhcp6_parser.yy"
+#line 1487 "dhcp6_parser.yy"
                               {
     // The library hooks parameter is required
     ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2628 "dhcp6_parser.cc"
+#line 2638 "dhcp6_parser.cc"
     break;
 
   case 365: // hooks_params: hooks_params ","
-#line 1485 "dhcp6_parser.yy"
+#line 1495 "dhcp6_parser.yy"
                                  {
                 ctx.warnAboutExtraCommas(yystack_[0].location);
                 }
-#line 2636 "dhcp6_parser.cc"
+#line 2646 "dhcp6_parser.cc"
     break;
 
   case 369: // $@59: %empty
-#line 1495 "dhcp6_parser.yy"
+#line 1505 "dhcp6_parser.yy"
                  {
     ctx.unique("library", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2645 "dhcp6_parser.cc"
+#line 2655 "dhcp6_parser.cc"
     break;
 
   case 370: // library: "library" $@59 ":" "constant string"
-#line 1498 "dhcp6_parser.yy"
+#line 1508 "dhcp6_parser.yy"
                {
     ElementPtr lib(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("library", lib);
     ctx.leave();
 }
-#line 2655 "dhcp6_parser.cc"
+#line 2665 "dhcp6_parser.cc"
     break;
 
   case 371: // $@60: %empty
-#line 1504 "dhcp6_parser.yy"
+#line 1514 "dhcp6_parser.yy"
                        {
     ctx.unique("parameters", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2664 "dhcp6_parser.cc"
+#line 2674 "dhcp6_parser.cc"
     break;
 
   case 372: // parameters: "parameters" $@60 ":" map_value
-#line 1507 "dhcp6_parser.yy"
+#line 1517 "dhcp6_parser.yy"
                   {
     ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 2673 "dhcp6_parser.cc"
+#line 2683 "dhcp6_parser.cc"
     break;
 
   case 373: // $@61: %empty
-#line 1513 "dhcp6_parser.yy"
+#line 1523 "dhcp6_parser.yy"
                                                      {
     ctx.unique("expired-leases-processing", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2681,89 +2691,89 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.EXPIRED_LEASES_PROCESSING);
 }
-#line 2685 "dhcp6_parser.cc"
+#line 2695 "dhcp6_parser.cc"
     break;
 
   case 374: // expired_leases_processing: "expired-leases-processing" $@61 ":" "{" expired_leases_params "}"
-#line 1519 "dhcp6_parser.yy"
+#line 1529 "dhcp6_parser.yy"
                                                             {
     // No expired lease parameter is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2695 "dhcp6_parser.cc"
+#line 2705 "dhcp6_parser.cc"
     break;
 
   case 377: // expired_leases_params: expired_leases_params ","
-#line 1527 "dhcp6_parser.yy"
+#line 1537 "dhcp6_parser.yy"
                                                    {
                          ctx.warnAboutExtraCommas(yystack_[0].location);
                          }
-#line 2703 "dhcp6_parser.cc"
+#line 2713 "dhcp6_parser.cc"
     break;
 
   case 384: // reclaim_timer_wait_time: "reclaim-timer-wait-time" ":" "integer"
-#line 1540 "dhcp6_parser.yy"
+#line 1550 "dhcp6_parser.yy"
                                                                {
     ctx.unique("reclaim-timer-wait-time", ctx.loc2pos(yystack_[2].location));
     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 2713 "dhcp6_parser.cc"
+#line 2723 "dhcp6_parser.cc"
     break;
 
   case 385: // flush_reclaimed_timer_wait_time: "flush-reclaimed-timer-wait-time" ":" "integer"
-#line 1546 "dhcp6_parser.yy"
+#line 1556 "dhcp6_parser.yy"
                                                                                {
     ctx.unique("flush-reclaimed-timer-wait-time", ctx.loc2pos(yystack_[2].location));
     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 2723 "dhcp6_parser.cc"
+#line 2733 "dhcp6_parser.cc"
     break;
 
   case 386: // hold_reclaimed_time: "hold-reclaimed-time" ":" "integer"
-#line 1552 "dhcp6_parser.yy"
+#line 1562 "dhcp6_parser.yy"
                                                        {
     ctx.unique("hold-reclaimed-time", ctx.loc2pos(yystack_[2].location));
     ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hold-reclaimed-time", value);
 }
-#line 2733 "dhcp6_parser.cc"
+#line 2743 "dhcp6_parser.cc"
     break;
 
   case 387: // max_reclaim_leases: "max-reclaim-leases" ":" "integer"
-#line 1558 "dhcp6_parser.yy"
+#line 1568 "dhcp6_parser.yy"
                                                      {
     ctx.unique("max-reclaim-leases", ctx.loc2pos(yystack_[2].location));
     ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reclaim-leases", value);
 }
-#line 2743 "dhcp6_parser.cc"
+#line 2753 "dhcp6_parser.cc"
     break;
 
   case 388: // max_reclaim_time: "max-reclaim-time" ":" "integer"
-#line 1564 "dhcp6_parser.yy"
+#line 1574 "dhcp6_parser.yy"
                                                  {
     ctx.unique("max-reclaim-time", ctx.loc2pos(yystack_[2].location));
     ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reclaim-time", value);
 }
-#line 2753 "dhcp6_parser.cc"
+#line 2763 "dhcp6_parser.cc"
     break;
 
   case 389: // unwarned_reclaim_cycles: "unwarned-reclaim-cycles" ":" "integer"
-#line 1570 "dhcp6_parser.yy"
+#line 1580 "dhcp6_parser.yy"
                                                                {
     ctx.unique("unwarned-reclaim-cycles", ctx.loc2pos(yystack_[2].location));
     ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("unwarned-reclaim-cycles", value);
 }
-#line 2763 "dhcp6_parser.cc"
+#line 2773 "dhcp6_parser.cc"
     break;
 
   case 390: // $@62: %empty
-#line 1579 "dhcp6_parser.yy"
+#line 1589 "dhcp6_parser.yy"
                       {
     ctx.unique("subnet6", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2771,38 +2781,38 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.SUBNET6);
 }
-#line 2775 "dhcp6_parser.cc"
+#line 2785 "dhcp6_parser.cc"
     break;
 
   case 391: // subnet6_list: "subnet6" $@62 ":" "[" subnet6_list_content "]"
-#line 1585 "dhcp6_parser.yy"
+#line 1595 "dhcp6_parser.yy"
                                                              {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2784 "dhcp6_parser.cc"
+#line 2794 "dhcp6_parser.cc"
     break;
 
   case 396: // not_empty_subnet6_list: not_empty_subnet6_list ","
-#line 1599 "dhcp6_parser.yy"
+#line 1609 "dhcp6_parser.yy"
                                                      {
                           ctx.warnAboutExtraCommas(yystack_[0].location);
                           }
-#line 2792 "dhcp6_parser.cc"
+#line 2802 "dhcp6_parser.cc"
     break;
 
   case 397: // $@63: %empty
-#line 1608 "dhcp6_parser.yy"
+#line 1618 "dhcp6_parser.yy"
                         {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2802 "dhcp6_parser.cc"
+#line 2812 "dhcp6_parser.cc"
     break;
 
   case 398: // subnet6: "{" $@63 subnet6_params "}"
-#line 1612 "dhcp6_parser.yy"
+#line 1622 "dhcp6_parser.yy"
                                 {
     // Once we reached this place, the subnet parsing is now complete.
     // If we want to, we can implement default values here.
@@ -2824,115 +2834,115 @@ namespace isc { namespace dhcp {
     ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2828 "dhcp6_parser.cc"
+#line 2838 "dhcp6_parser.cc"
     break;
 
   case 399: // $@64: %empty
-#line 1634 "dhcp6_parser.yy"
+#line 1644 "dhcp6_parser.yy"
                             {
     // Parse the subnet6 list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2838 "dhcp6_parser.cc"
+#line 2848 "dhcp6_parser.cc"
     break;
 
   case 400: // sub_subnet6: "{" $@64 subnet6_params "}"
-#line 1638 "dhcp6_parser.yy"
+#line 1648 "dhcp6_parser.yy"
                                 {
     // The subnet subnet6 parameter is required
     ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2848 "dhcp6_parser.cc"
+#line 2858 "dhcp6_parser.cc"
     break;
 
   case 403: // subnet6_params: subnet6_params ","
-#line 1647 "dhcp6_parser.yy"
+#line 1657 "dhcp6_parser.yy"
                                      {
                   ctx.warnAboutExtraCommas(yystack_[0].location);
                   }
-#line 2856 "dhcp6_parser.cc"
+#line 2866 "dhcp6_parser.cc"
     break;
 
   case 455: // $@65: %empty
-#line 1706 "dhcp6_parser.yy"
+#line 1716 "dhcp6_parser.yy"
                {
     ctx.unique("subnet", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2865 "dhcp6_parser.cc"
+#line 2875 "dhcp6_parser.cc"
     break;
 
   case 456: // subnet: "subnet" $@65 ":" "constant string"
-#line 1709 "dhcp6_parser.yy"
+#line 1719 "dhcp6_parser.yy"
                {
     ElementPtr subnet(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet", subnet);
     ctx.leave();
 }
-#line 2875 "dhcp6_parser.cc"
+#line 2885 "dhcp6_parser.cc"
     break;
 
   case 457: // $@66: %empty
-#line 1715 "dhcp6_parser.yy"
+#line 1725 "dhcp6_parser.yy"
                      {
     ctx.unique("interface", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2884 "dhcp6_parser.cc"
+#line 2894 "dhcp6_parser.cc"
     break;
 
   case 458: // interface: "interface" $@66 ":" "constant string"
-#line 1718 "dhcp6_parser.yy"
+#line 1728 "dhcp6_parser.yy"
                {
     ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface", iface);
     ctx.leave();
 }
-#line 2894 "dhcp6_parser.cc"
+#line 2904 "dhcp6_parser.cc"
     break;
 
   case 459: // $@67: %empty
-#line 1724 "dhcp6_parser.yy"
+#line 1734 "dhcp6_parser.yy"
                            {
     ctx.unique("interface-id", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2903 "dhcp6_parser.cc"
+#line 2913 "dhcp6_parser.cc"
     break;
 
   case 460: // interface_id: "interface-id" $@67 ":" "constant string"
-#line 1727 "dhcp6_parser.yy"
+#line 1737 "dhcp6_parser.yy"
                {
     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 2913 "dhcp6_parser.cc"
+#line 2923 "dhcp6_parser.cc"
     break;
 
   case 461: // $@68: %empty
-#line 1733 "dhcp6_parser.yy"
+#line 1743 "dhcp6_parser.yy"
                            {
     ctx.unique("client-class", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2922 "dhcp6_parser.cc"
+#line 2932 "dhcp6_parser.cc"
     break;
 
   case 462: // client_class: "client-class" $@68 ":" "constant string"
-#line 1736 "dhcp6_parser.yy"
+#line 1746 "dhcp6_parser.yy"
                {
     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 2932 "dhcp6_parser.cc"
+#line 2942 "dhcp6_parser.cc"
     break;
 
   case 463: // $@69: %empty
-#line 1743 "dhcp6_parser.yy"
+#line 1753 "dhcp6_parser.yy"
                                        {
     ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location));
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2940,20 +2950,20 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2944 "dhcp6_parser.cc"
+#line 2954 "dhcp6_parser.cc"
     break;
 
   case 464: // network_client_classes: "client-classes" $@69 ":" list_strings
-#line 1749 "dhcp6_parser.yy"
+#line 1759 "dhcp6_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2953 "dhcp6_parser.cc"
+#line 2963 "dhcp6_parser.cc"
     break;
 
   case 465: // $@70: %empty
-#line 1755 "dhcp6_parser.yy"
+#line 1765 "dhcp6_parser.yy"
                                                {
     ctx.unique("require-client-classes", ctx.loc2pos(yystack_[0].location));
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2961,20 +2971,20 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2965 "dhcp6_parser.cc"
+#line 2975 "dhcp6_parser.cc"
     break;
 
   case 466: // require_client_classes: "require-client-classes" $@70 ":" list_strings
-#line 1761 "dhcp6_parser.yy"
+#line 1771 "dhcp6_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2974 "dhcp6_parser.cc"
+#line 2984 "dhcp6_parser.cc"
     break;
 
   case 467: // $@71: %empty
-#line 1766 "dhcp6_parser.yy"
+#line 1776 "dhcp6_parser.yy"
                                                          {
     ctx.unique("evaluate-additional-classes", ctx.loc2pos(yystack_[0].location));
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2982,70 +2992,70 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2986 "dhcp6_parser.cc"
+#line 2996 "dhcp6_parser.cc"
     break;
 
   case 468: // evaluate_additional_classes: "evaluate-additional-classes" $@71 ":" list_strings
-#line 1772 "dhcp6_parser.yy"
+#line 1782 "dhcp6_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2995 "dhcp6_parser.cc"
+#line 3005 "dhcp6_parser.cc"
     break;
 
   case 469: // reservations_global: "reservations-global" ":" "boolean"
-#line 1777 "dhcp6_parser.yy"
+#line 1787 "dhcp6_parser.yy"
                                                        {
     ctx.unique("reservations-global", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations-global", b);
 }
-#line 3005 "dhcp6_parser.cc"
+#line 3015 "dhcp6_parser.cc"
     break;
 
   case 470: // reservations_in_subnet: "reservations-in-subnet" ":" "boolean"
-#line 1783 "dhcp6_parser.yy"
+#line 1793 "dhcp6_parser.yy"
                                                              {
     ctx.unique("reservations-in-subnet", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations-in-subnet", b);
 }
-#line 3015 "dhcp6_parser.cc"
+#line 3025 "dhcp6_parser.cc"
     break;
 
   case 471: // reservations_out_of_pool: "reservations-out-of-pool" ":" "boolean"
-#line 1789 "dhcp6_parser.yy"
+#line 1799 "dhcp6_parser.yy"
                                                                  {
     ctx.unique("reservations-out-of-pool", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations-out-of-pool", b);
 }
-#line 3025 "dhcp6_parser.cc"
+#line 3035 "dhcp6_parser.cc"
     break;
 
   case 472: // id: "id" ":" "integer"
-#line 1795 "dhcp6_parser.yy"
+#line 1805 "dhcp6_parser.yy"
                      {
     ctx.unique("id", ctx.loc2pos(yystack_[2].location));
     ElementPtr id(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("id", id);
 }
-#line 3035 "dhcp6_parser.cc"
+#line 3045 "dhcp6_parser.cc"
     break;
 
   case 473: // rapid_commit: "rapid-commit" ":" "boolean"
-#line 1801 "dhcp6_parser.yy"
+#line 1811 "dhcp6_parser.yy"
                                          {
     ctx.unique("rapid-commit", ctx.loc2pos(yystack_[2].location));
     ElementPtr rc(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rapid-commit", rc);
 }
-#line 3045 "dhcp6_parser.cc"
+#line 3055 "dhcp6_parser.cc"
     break;
 
   case 474: // $@72: %empty
-#line 1809 "dhcp6_parser.yy"
+#line 1819 "dhcp6_parser.yy"
                                  {
     ctx.unique("shared-networks", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3053,54 +3063,54 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.SHARED_NETWORK);
 }
-#line 3057 "dhcp6_parser.cc"
+#line 3067 "dhcp6_parser.cc"
     break;
 
   case 475: // shared_networks: "shared-networks" $@72 ":" "[" shared_networks_content "]"
-#line 1815 "dhcp6_parser.yy"
+#line 1825 "dhcp6_parser.yy"
                                                                 {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3066 "dhcp6_parser.cc"
+#line 3076 "dhcp6_parser.cc"
     break;
 
   case 480: // shared_networks_list: shared_networks_list ","
-#line 1828 "dhcp6_parser.yy"
+#line 1838 "dhcp6_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 3074 "dhcp6_parser.cc"
+#line 3084 "dhcp6_parser.cc"
     break;
 
   case 481: // $@73: %empty
-#line 1833 "dhcp6_parser.yy"
+#line 1843 "dhcp6_parser.yy"
                                {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3084 "dhcp6_parser.cc"
+#line 3094 "dhcp6_parser.cc"
     break;
 
   case 482: // shared_network: "{" $@73 shared_network_params "}"
-#line 1837 "dhcp6_parser.yy"
+#line 1847 "dhcp6_parser.yy"
                                        {
     ctx.stack_.pop_back();
 }
-#line 3092 "dhcp6_parser.cc"
+#line 3102 "dhcp6_parser.cc"
     break;
 
   case 485: // shared_network_params: shared_network_params ","
-#line 1843 "dhcp6_parser.yy"
+#line 1853 "dhcp6_parser.yy"
                                                    {
                          ctx.warnAboutExtraCommas(yystack_[0].location);
                          }
-#line 3100 "dhcp6_parser.cc"
+#line 3110 "dhcp6_parser.cc"
     break;
 
   case 534: // $@74: %empty
-#line 1902 "dhcp6_parser.yy"
+#line 1912 "dhcp6_parser.yy"
                             {
     ctx.unique("option-def", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3108,55 +3118,55 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DEF);
 }
-#line 3112 "dhcp6_parser.cc"
+#line 3122 "dhcp6_parser.cc"
     break;
 
   case 535: // option_def_list: "option-def" $@74 ":" "[" option_def_list_content "]"
-#line 1908 "dhcp6_parser.yy"
+#line 1918 "dhcp6_parser.yy"
                                                                 {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3121 "dhcp6_parser.cc"
+#line 3131 "dhcp6_parser.cc"
     break;
 
   case 536: // $@75: %empty
-#line 1916 "dhcp6_parser.yy"
+#line 1926 "dhcp6_parser.yy"
                                     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3130 "dhcp6_parser.cc"
+#line 3140 "dhcp6_parser.cc"
     break;
 
   case 537: // sub_option_def_list: "{" $@75 option_def_list "}"
-#line 1919 "dhcp6_parser.yy"
+#line 1929 "dhcp6_parser.yy"
                                  {
     // parsing completed
 }
-#line 3138 "dhcp6_parser.cc"
+#line 3148 "dhcp6_parser.cc"
     break;
 
   case 542: // not_empty_option_def_list: not_empty_option_def_list ","
-#line 1931 "dhcp6_parser.yy"
+#line 1941 "dhcp6_parser.yy"
                                                            {
                              ctx.warnAboutExtraCommas(yystack_[0].location);
                              }
-#line 3146 "dhcp6_parser.cc"
+#line 3156 "dhcp6_parser.cc"
     break;
 
   case 543: // $@76: %empty
-#line 1938 "dhcp6_parser.yy"
+#line 1948 "dhcp6_parser.yy"
                                  {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3156 "dhcp6_parser.cc"
+#line 3166 "dhcp6_parser.cc"
     break;
 
   case 544: // option_def_entry: "{" $@76 option_def_params "}"
-#line 1942 "dhcp6_parser.yy"
+#line 1952 "dhcp6_parser.yy"
                                    {
     // The name, code and type option def parameters are required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -3164,21 +3174,21 @@ namespace isc { namespace dhcp {
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 3168 "dhcp6_parser.cc"
+#line 3178 "dhcp6_parser.cc"
     break;
 
   case 545: // $@77: %empty
-#line 1953 "dhcp6_parser.yy"
+#line 1963 "dhcp6_parser.yy"
                                {
     // Parse the option-def list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3178 "dhcp6_parser.cc"
+#line 3188 "dhcp6_parser.cc"
     break;
 
   case 546: // sub_option_def: "{" $@77 option_def_params "}"
-#line 1957 "dhcp6_parser.yy"
+#line 1967 "dhcp6_parser.yy"
                                    {
     // The name, code and type option def parameters are required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -3186,115 +3196,115 @@ namespace isc { namespace dhcp {
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 3190 "dhcp6_parser.cc"
+#line 3200 "dhcp6_parser.cc"
     break;
 
   case 551: // not_empty_option_def_params: not_empty_option_def_params ","
-#line 1973 "dhcp6_parser.yy"
+#line 1983 "dhcp6_parser.yy"
                                                                {
                                ctx.warnAboutExtraCommas(yystack_[0].location);
                                }
-#line 3198 "dhcp6_parser.cc"
+#line 3208 "dhcp6_parser.cc"
     break;
 
   case 563: // code: "code" ":" "integer"
-#line 1992 "dhcp6_parser.yy"
+#line 2002 "dhcp6_parser.yy"
                          {
     ctx.unique("code", ctx.loc2pos(yystack_[2].location));
     ElementPtr code(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("code", code);
 }
-#line 3208 "dhcp6_parser.cc"
+#line 3218 "dhcp6_parser.cc"
     break;
 
   case 565: // $@78: %empty
-#line 2000 "dhcp6_parser.yy"
+#line 2010 "dhcp6_parser.yy"
                       {
     ctx.unique("type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3217 "dhcp6_parser.cc"
+#line 3227 "dhcp6_parser.cc"
     break;
 
   case 566: // option_def_type: "type" $@78 ":" "constant string"
-#line 2003 "dhcp6_parser.yy"
+#line 2013 "dhcp6_parser.yy"
                {
     ElementPtr prf(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("type", prf);
     ctx.leave();
 }
-#line 3227 "dhcp6_parser.cc"
+#line 3237 "dhcp6_parser.cc"
     break;
 
   case 567: // $@79: %empty
-#line 2009 "dhcp6_parser.yy"
+#line 2019 "dhcp6_parser.yy"
                                       {
     ctx.unique("record-types", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3236 "dhcp6_parser.cc"
+#line 3246 "dhcp6_parser.cc"
     break;
 
   case 568: // option_def_record_types: "record-types" $@79 ":" "constant string"
-#line 2012 "dhcp6_parser.yy"
+#line 2022 "dhcp6_parser.yy"
                {
     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 3246 "dhcp6_parser.cc"
+#line 3256 "dhcp6_parser.cc"
     break;
 
   case 569: // $@80: %empty
-#line 2018 "dhcp6_parser.yy"
+#line 2028 "dhcp6_parser.yy"
              {
     ctx.unique("space", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3255 "dhcp6_parser.cc"
+#line 3265 "dhcp6_parser.cc"
     break;
 
   case 570: // space: "space" $@80 ":" "constant string"
-#line 2021 "dhcp6_parser.yy"
+#line 2031 "dhcp6_parser.yy"
                {
     ElementPtr space(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("space", space);
     ctx.leave();
 }
-#line 3265 "dhcp6_parser.cc"
+#line 3275 "dhcp6_parser.cc"
     break;
 
   case 572: // $@81: %empty
-#line 2029 "dhcp6_parser.yy"
+#line 2039 "dhcp6_parser.yy"
                                     {
     ctx.unique("encapsulate", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3274 "dhcp6_parser.cc"
+#line 3284 "dhcp6_parser.cc"
     break;
 
   case 573: // option_def_encapsulate: "encapsulate" $@81 ":" "constant string"
-#line 2032 "dhcp6_parser.yy"
+#line 2042 "dhcp6_parser.yy"
                {
     ElementPtr encap(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("encapsulate", encap);
     ctx.leave();
 }
-#line 3284 "dhcp6_parser.cc"
+#line 3294 "dhcp6_parser.cc"
     break;
 
   case 574: // option_def_array: "array" ":" "boolean"
-#line 2038 "dhcp6_parser.yy"
+#line 2048 "dhcp6_parser.yy"
                                       {
     ctx.unique("array", ctx.loc2pos(yystack_[2].location));
     ElementPtr array(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("array", array);
 }
-#line 3294 "dhcp6_parser.cc"
+#line 3304 "dhcp6_parser.cc"
     break;
 
   case 575: // $@82: %empty
-#line 2048 "dhcp6_parser.yy"
+#line 2058 "dhcp6_parser.yy"
                               {
     ctx.unique("option-data", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3302,123 +3312,123 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DATA);
 }
-#line 3306 "dhcp6_parser.cc"
+#line 3316 "dhcp6_parser.cc"
     break;
 
   case 576: // option_data_list: "option-data" $@82 ":" "[" option_data_list_content "]"
-#line 2054 "dhcp6_parser.yy"
+#line 2064 "dhcp6_parser.yy"
                                                                  {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3315 "dhcp6_parser.cc"
+#line 3325 "dhcp6_parser.cc"
     break;
 
   case 581: // not_empty_option_data_list: not_empty_option_data_list ","
-#line 2069 "dhcp6_parser.yy"
+#line 2079 "dhcp6_parser.yy"
                                                              {
                               ctx.warnAboutExtraCommas(yystack_[0].location);
                               }
-#line 3323 "dhcp6_parser.cc"
+#line 3333 "dhcp6_parser.cc"
     break;
 
   case 582: // $@83: %empty
-#line 2076 "dhcp6_parser.yy"
+#line 2086 "dhcp6_parser.yy"
                                   {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3333 "dhcp6_parser.cc"
+#line 3343 "dhcp6_parser.cc"
     break;
 
   case 583: // option_data_entry: "{" $@83 option_data_params "}"
-#line 2080 "dhcp6_parser.yy"
+#line 2090 "dhcp6_parser.yy"
                                     {
     /// @todo: the code or name parameters are required.
     ctx.stack_.pop_back();
 }
-#line 3342 "dhcp6_parser.cc"
+#line 3352 "dhcp6_parser.cc"
     break;
 
   case 584: // $@84: %empty
-#line 2088 "dhcp6_parser.yy"
+#line 2098 "dhcp6_parser.yy"
                                 {
     // Parse the option-data list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3352 "dhcp6_parser.cc"
+#line 3362 "dhcp6_parser.cc"
     break;
 
   case 585: // sub_option_data: "{" $@84 option_data_params "}"
-#line 2092 "dhcp6_parser.yy"
+#line 2102 "dhcp6_parser.yy"
                                     {
     /// @todo: the code or name parameters are required.
     // parsing completed
 }
-#line 3361 "dhcp6_parser.cc"
+#line 3371 "dhcp6_parser.cc"
     break;
 
   case 590: // not_empty_option_data_params: not_empty_option_data_params ","
-#line 2108 "dhcp6_parser.yy"
+#line 2118 "dhcp6_parser.yy"
                                          {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 3369 "dhcp6_parser.cc"
+#line 3379 "dhcp6_parser.cc"
     break;
 
   case 603: // $@85: %empty
-#line 2130 "dhcp6_parser.yy"
+#line 2140 "dhcp6_parser.yy"
                        {
     ctx.unique("data", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3378 "dhcp6_parser.cc"
+#line 3388 "dhcp6_parser.cc"
     break;
 
   case 604: // option_data_data: "data" $@85 ":" "constant string"
-#line 2133 "dhcp6_parser.yy"
+#line 2143 "dhcp6_parser.yy"
                {
     ElementPtr data(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("data", data);
     ctx.leave();
 }
-#line 3388 "dhcp6_parser.cc"
+#line 3398 "dhcp6_parser.cc"
     break;
 
   case 607: // option_data_csv_format: "csv-format" ":" "boolean"
-#line 2143 "dhcp6_parser.yy"
+#line 2153 "dhcp6_parser.yy"
                                                  {
     ctx.unique("csv-format", ctx.loc2pos(yystack_[2].location));
     ElementPtr csv(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("csv-format", csv);
 }
-#line 3398 "dhcp6_parser.cc"
+#line 3408 "dhcp6_parser.cc"
     break;
 
   case 608: // option_data_always_send: "always-send" ":" "boolean"
-#line 2149 "dhcp6_parser.yy"
+#line 2159 "dhcp6_parser.yy"
                                                    {
     ctx.unique("always-send", ctx.loc2pos(yystack_[2].location));
     ElementPtr persist(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("always-send", persist);
 }
-#line 3408 "dhcp6_parser.cc"
+#line 3418 "dhcp6_parser.cc"
     break;
 
   case 609: // option_data_never_send: "never-send" ":" "boolean"
-#line 2155 "dhcp6_parser.yy"
+#line 2165 "dhcp6_parser.yy"
                                                  {
     ctx.unique("never-send", ctx.loc2pos(yystack_[2].location));
     ElementPtr cancel(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("never-send", cancel);
 }
-#line 3418 "dhcp6_parser.cc"
+#line 3428 "dhcp6_parser.cc"
     break;
 
   case 610: // $@86: %empty
-#line 2161 "dhcp6_parser.yy"
+#line 2171 "dhcp6_parser.yy"
                                            {
     ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location));
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3426,20 +3436,20 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3430 "dhcp6_parser.cc"
+#line 3440 "dhcp6_parser.cc"
     break;
 
   case 611: // option_data_client_classes: "client-classes" $@86 ":" list_strings
-#line 2167 "dhcp6_parser.yy"
+#line 2177 "dhcp6_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3439 "dhcp6_parser.cc"
+#line 3449 "dhcp6_parser.cc"
     break;
 
   case 612: // $@87: %empty
-#line 2175 "dhcp6_parser.yy"
+#line 2185 "dhcp6_parser.yy"
                   {
     ctx.unique("pools", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3447,113 +3457,113 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.POOLS);
 }
-#line 3451 "dhcp6_parser.cc"
+#line 3461 "dhcp6_parser.cc"
     break;
 
   case 613: // pools_list: "pools" $@87 ":" "[" pools_list_content "]"
-#line 2181 "dhcp6_parser.yy"
+#line 2191 "dhcp6_parser.yy"
                                                            {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3460 "dhcp6_parser.cc"
+#line 3470 "dhcp6_parser.cc"
     break;
 
   case 618: // not_empty_pools_list: not_empty_pools_list ","
-#line 2194 "dhcp6_parser.yy"
+#line 2204 "dhcp6_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 3468 "dhcp6_parser.cc"
+#line 3478 "dhcp6_parser.cc"
     break;
 
   case 619: // $@88: %empty
-#line 2199 "dhcp6_parser.yy"
+#line 2209 "dhcp6_parser.yy"
                                 {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3478 "dhcp6_parser.cc"
+#line 3488 "dhcp6_parser.cc"
     break;
 
   case 620: // pool_list_entry: "{" $@88 pool_params "}"
-#line 2203 "dhcp6_parser.yy"
+#line 2213 "dhcp6_parser.yy"
                              {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 3488 "dhcp6_parser.cc"
+#line 3498 "dhcp6_parser.cc"
     break;
 
   case 621: // $@89: %empty
-#line 2209 "dhcp6_parser.yy"
+#line 2219 "dhcp6_parser.yy"
                           {
     // Parse the pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3498 "dhcp6_parser.cc"
+#line 3508 "dhcp6_parser.cc"
     break;
 
   case 622: // sub_pool6: "{" $@89 pool_params "}"
-#line 2213 "dhcp6_parser.yy"
+#line 2223 "dhcp6_parser.yy"
                              {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 3508 "dhcp6_parser.cc"
+#line 3518 "dhcp6_parser.cc"
     break;
 
   case 625: // pool_params: pool_params ","
-#line 2221 "dhcp6_parser.yy"
+#line 2231 "dhcp6_parser.yy"
                                {
                ctx.warnAboutExtraCommas(yystack_[0].location);
                }
-#line 3516 "dhcp6_parser.cc"
+#line 3526 "dhcp6_parser.cc"
     break;
 
   case 650: // $@90: %empty
-#line 2252 "dhcp6_parser.yy"
+#line 2262 "dhcp6_parser.yy"
                  {
     ctx.unique("pool", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3525 "dhcp6_parser.cc"
+#line 3535 "dhcp6_parser.cc"
     break;
 
   case 651: // pool_entry: "pool" $@90 ":" "constant string"
-#line 2255 "dhcp6_parser.yy"
+#line 2265 "dhcp6_parser.yy"
                {
     ElementPtr pool(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pool", pool);
     ctx.leave();
 }
-#line 3535 "dhcp6_parser.cc"
+#line 3545 "dhcp6_parser.cc"
     break;
 
   case 652: // pool_id: "pool-id" ":" "integer"
-#line 2261 "dhcp6_parser.yy"
+#line 2271 "dhcp6_parser.yy"
                                {
     ctx.unique("pool-id", ctx.loc2pos(yystack_[2].location));
     ElementPtr id(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pool-id", id);
 }
-#line 3545 "dhcp6_parser.cc"
+#line 3555 "dhcp6_parser.cc"
     break;
 
   case 653: // $@91: %empty
-#line 2267 "dhcp6_parser.yy"
+#line 2277 "dhcp6_parser.yy"
                            {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3553 "dhcp6_parser.cc"
+#line 3563 "dhcp6_parser.cc"
     break;
 
   case 654: // user_context: "user-context" $@91 ":" map_value
-#line 2269 "dhcp6_parser.yy"
+#line 2279 "dhcp6_parser.yy"
                   {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context = yystack_[0].value.as < ElementPtr > ();
@@ -3576,19 +3586,19 @@ namespace isc { namespace dhcp {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 3580 "dhcp6_parser.cc"
+#line 3590 "dhcp6_parser.cc"
     break;
 
   case 655: // $@92: %empty
-#line 2292 "dhcp6_parser.yy"
+#line 2302 "dhcp6_parser.yy"
                  {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3588 "dhcp6_parser.cc"
+#line 3598 "dhcp6_parser.cc"
     break;
 
   case 656: // comment: "comment" $@92 ":" "constant string"
-#line 2294 "dhcp6_parser.yy"
+#line 2304 "dhcp6_parser.yy"
                {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location)));
@@ -3613,11 +3623,11 @@ namespace isc { namespace dhcp {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 3617 "dhcp6_parser.cc"
+#line 3627 "dhcp6_parser.cc"
     break;
 
   case 657: // $@93: %empty
-#line 2322 "dhcp6_parser.yy"
+#line 2332 "dhcp6_parser.yy"
                         {
     ctx.unique("pd-pools", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3625,38 +3635,38 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.PD_POOLS);
 }
-#line 3629 "dhcp6_parser.cc"
+#line 3639 "dhcp6_parser.cc"
     break;
 
   case 658: // pd_pools_list: "pd-pools" $@93 ":" "[" pd_pools_list_content "]"
-#line 2328 "dhcp6_parser.yy"
+#line 2338 "dhcp6_parser.yy"
                                                               {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3638 "dhcp6_parser.cc"
+#line 3648 "dhcp6_parser.cc"
     break;
 
   case 663: // not_empty_pd_pools_list: not_empty_pd_pools_list ","
-#line 2341 "dhcp6_parser.yy"
+#line 2351 "dhcp6_parser.yy"
                                                        {
                            ctx.warnAboutExtraCommas(yystack_[0].location);
                            }
-#line 3646 "dhcp6_parser.cc"
+#line 3656 "dhcp6_parser.cc"
     break;
 
   case 664: // $@94: %empty
-#line 2346 "dhcp6_parser.yy"
+#line 2356 "dhcp6_parser.yy"
                               {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3656 "dhcp6_parser.cc"
+#line 3666 "dhcp6_parser.cc"
     break;
 
   case 665: // pd_pool_entry: "{" $@94 pd_pool_params "}"
-#line 2350 "dhcp6_parser.yy"
+#line 2360 "dhcp6_parser.yy"
                                 {
     // The prefix, prefix len and delegated len parameters are required.
     ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -3664,21 +3674,21 @@ namespace isc { namespace dhcp {
     ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 3668 "dhcp6_parser.cc"
+#line 3678 "dhcp6_parser.cc"
     break;
 
   case 666: // $@95: %empty
-#line 2358 "dhcp6_parser.yy"
+#line 2368 "dhcp6_parser.yy"
                             {
     // Parse the pd-pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3678 "dhcp6_parser.cc"
+#line 3688 "dhcp6_parser.cc"
     break;
 
   case 667: // sub_pd_pool: "{" $@95 pd_pool_params "}"
-#line 2362 "dhcp6_parser.yy"
+#line 2372 "dhcp6_parser.yy"
                                 {
     // The prefix, prefix len and delegated len parameters are required.
     ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -3686,87 +3696,87 @@ namespace isc { namespace dhcp {
     ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 3690 "dhcp6_parser.cc"
+#line 3700 "dhcp6_parser.cc"
     break;
 
   case 670: // pd_pool_params: pd_pool_params ","
-#line 2372 "dhcp6_parser.yy"
+#line 2382 "dhcp6_parser.yy"
                                      {
                   ctx.warnAboutExtraCommas(yystack_[0].location);
                   }
-#line 3698 "dhcp6_parser.cc"
+#line 3708 "dhcp6_parser.cc"
     break;
 
   case 685: // $@96: %empty
-#line 2393 "dhcp6_parser.yy"
+#line 2403 "dhcp6_parser.yy"
                   {
     ctx.unique("prefix", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3707 "dhcp6_parser.cc"
+#line 3717 "dhcp6_parser.cc"
     break;
 
   case 686: // pd_prefix: "prefix" $@96 ":" "constant string"
-#line 2396 "dhcp6_parser.yy"
+#line 2406 "dhcp6_parser.yy"
                {
     ElementPtr prf(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("prefix", prf);
     ctx.leave();
 }
-#line 3717 "dhcp6_parser.cc"
+#line 3727 "dhcp6_parser.cc"
     break;
 
   case 687: // pd_prefix_len: "prefix-len" ":" "integer"
-#line 2402 "dhcp6_parser.yy"
+#line 2412 "dhcp6_parser.yy"
                                         {
     ctx.unique("prefix-len", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("prefix-len", prf);
 }
-#line 3727 "dhcp6_parser.cc"
+#line 3737 "dhcp6_parser.cc"
     break;
 
   case 688: // $@97: %empty
-#line 2408 "dhcp6_parser.yy"
+#line 2418 "dhcp6_parser.yy"
                                  {
     ctx.unique("excluded-prefix", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3736 "dhcp6_parser.cc"
+#line 3746 "dhcp6_parser.cc"
     break;
 
   case 689: // excluded_prefix: "excluded-prefix" $@97 ":" "constant string"
-#line 2411 "dhcp6_parser.yy"
+#line 2421 "dhcp6_parser.yy"
                {
     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 3746 "dhcp6_parser.cc"
+#line 3756 "dhcp6_parser.cc"
     break;
 
   case 690: // excluded_prefix_len: "excluded-prefix-len" ":" "integer"
-#line 2417 "dhcp6_parser.yy"
+#line 2427 "dhcp6_parser.yy"
                                                        {
     ctx.unique("excluded-prefix-len", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("excluded-prefix-len", prf);
 }
-#line 3756 "dhcp6_parser.cc"
+#line 3766 "dhcp6_parser.cc"
     break;
 
   case 691: // pd_delegated_len: "delegated-len" ":" "integer"
-#line 2423 "dhcp6_parser.yy"
+#line 2433 "dhcp6_parser.yy"
                                               {
     ctx.unique("delegated-len", ctx.loc2pos(yystack_[2].location));
     ElementPtr deleg(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("delegated-len", deleg);
 }
-#line 3766 "dhcp6_parser.cc"
+#line 3776 "dhcp6_parser.cc"
     break;
 
   case 692: // $@98: %empty
-#line 2432 "dhcp6_parser.yy"
+#line 2442 "dhcp6_parser.yy"
                            {
     ctx.unique("reservations", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3774,74 +3784,74 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.RESERVATIONS);
 }
-#line 3778 "dhcp6_parser.cc"
+#line 3788 "dhcp6_parser.cc"
     break;
 
   case 693: // reservations: "reservations" $@98 ":" "[" reservations_list "]"
-#line 2438 "dhcp6_parser.yy"
+#line 2448 "dhcp6_parser.yy"
                                                           {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3787 "dhcp6_parser.cc"
+#line 3797 "dhcp6_parser.cc"
     break;
 
   case 698: // not_empty_reservations_list: not_empty_reservations_list ","
-#line 2449 "dhcp6_parser.yy"
+#line 2459 "dhcp6_parser.yy"
                                                                {
                                ctx.warnAboutExtraCommas(yystack_[0].location);
                                }
-#line 3795 "dhcp6_parser.cc"
+#line 3805 "dhcp6_parser.cc"
     break;
 
   case 699: // $@99: %empty
-#line 2454 "dhcp6_parser.yy"
+#line 2464 "dhcp6_parser.yy"
                             {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3805 "dhcp6_parser.cc"
+#line 3815 "dhcp6_parser.cc"
     break;
 
   case 700: // reservation: "{" $@99 reservation_params "}"
-#line 2458 "dhcp6_parser.yy"
+#line 2468 "dhcp6_parser.yy"
                                     {
     /// @todo: an identifier parameter is required.
     ctx.stack_.pop_back();
 }
-#line 3814 "dhcp6_parser.cc"
+#line 3824 "dhcp6_parser.cc"
     break;
 
   case 701: // $@100: %empty
-#line 2463 "dhcp6_parser.yy"
+#line 2473 "dhcp6_parser.yy"
                                 {
     // Parse the reservations list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3824 "dhcp6_parser.cc"
+#line 3834 "dhcp6_parser.cc"
     break;
 
   case 702: // sub_reservation: "{" $@100 reservation_params "}"
-#line 2467 "dhcp6_parser.yy"
+#line 2477 "dhcp6_parser.yy"
                                     {
     /// @todo: an identifier parameter is required.
     // parsing completed
 }
-#line 3833 "dhcp6_parser.cc"
+#line 3843 "dhcp6_parser.cc"
     break;
 
   case 707: // not_empty_reservation_params: not_empty_reservation_params ","
-#line 2478 "dhcp6_parser.yy"
+#line 2488 "dhcp6_parser.yy"
                                          {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 3841 "dhcp6_parser.cc"
+#line 3851 "dhcp6_parser.cc"
     break;
 
   case 720: // $@101: %empty
-#line 2498 "dhcp6_parser.yy"
+#line 2508 "dhcp6_parser.yy"
                            {
     ctx.unique("ip-addresses", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3849,20 +3859,20 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3853 "dhcp6_parser.cc"
+#line 3863 "dhcp6_parser.cc"
     break;
 
   case 721: // ip_addresses: "ip-addresses" $@101 ":" list_strings
-#line 2504 "dhcp6_parser.yy"
+#line 2514 "dhcp6_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3862 "dhcp6_parser.cc"
+#line 3872 "dhcp6_parser.cc"
     break;
 
   case 722: // $@102: %empty
-#line 2509 "dhcp6_parser.yy"
+#line 2519 "dhcp6_parser.yy"
                    {
     ctx.unique("prefixes", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3870,20 +3880,20 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3874 "dhcp6_parser.cc"
+#line 3884 "dhcp6_parser.cc"
     break;
 
   case 723: // prefixes: "prefixes" $@102 ":" list_strings
-#line 2515 "dhcp6_parser.yy"
+#line 2525 "dhcp6_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3883 "dhcp6_parser.cc"
+#line 3893 "dhcp6_parser.cc"
     break;
 
   case 724: // $@103: %empty
-#line 2520 "dhcp6_parser.yy"
+#line 2530 "dhcp6_parser.yy"
                                      {
     ctx.unique("excluded-prefixes", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3891,96 +3901,96 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3895 "dhcp6_parser.cc"
+#line 3905 "dhcp6_parser.cc"
     break;
 
   case 725: // excluded_prefixes: "excluded-prefixes" $@103 ":" list_strings
-#line 2526 "dhcp6_parser.yy"
+#line 2536 "dhcp6_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3904 "dhcp6_parser.cc"
+#line 3914 "dhcp6_parser.cc"
     break;
 
   case 726: // $@104: %empty
-#line 2531 "dhcp6_parser.yy"
+#line 2541 "dhcp6_parser.yy"
            {
     ctx.unique("duid", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3913 "dhcp6_parser.cc"
+#line 3923 "dhcp6_parser.cc"
     break;
 
   case 727: // duid: "duid" $@104 ":" "constant string"
-#line 2534 "dhcp6_parser.yy"
+#line 2544 "dhcp6_parser.yy"
                {
     ElementPtr d(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("duid", d);
     ctx.leave();
 }
-#line 3923 "dhcp6_parser.cc"
+#line 3933 "dhcp6_parser.cc"
     break;
 
   case 728: // $@105: %empty
-#line 2540 "dhcp6_parser.yy"
+#line 2550 "dhcp6_parser.yy"
                        {
     ctx.unique("hw-address", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3932 "dhcp6_parser.cc"
+#line 3942 "dhcp6_parser.cc"
     break;
 
   case 729: // hw_address: "hw-address" $@105 ":" "constant string"
-#line 2543 "dhcp6_parser.yy"
+#line 2553 "dhcp6_parser.yy"
                {
     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 3942 "dhcp6_parser.cc"
+#line 3952 "dhcp6_parser.cc"
     break;
 
   case 730: // $@106: %empty
-#line 2549 "dhcp6_parser.yy"
+#line 2559 "dhcp6_parser.yy"
                    {
     ctx.unique("hostname", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3951 "dhcp6_parser.cc"
+#line 3961 "dhcp6_parser.cc"
     break;
 
   case 731: // hostname: "hostname" $@106 ":" "constant string"
-#line 2552 "dhcp6_parser.yy"
+#line 2562 "dhcp6_parser.yy"
                {
     ElementPtr host(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname", host);
     ctx.leave();
 }
-#line 3961 "dhcp6_parser.cc"
+#line 3971 "dhcp6_parser.cc"
     break;
 
   case 732: // $@107: %empty
-#line 2558 "dhcp6_parser.yy"
+#line 2568 "dhcp6_parser.yy"
                        {
     ctx.unique("flex-id", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3970 "dhcp6_parser.cc"
+#line 3980 "dhcp6_parser.cc"
     break;
 
   case 733: // flex_id_value: "flex-id" $@107 ":" "constant string"
-#line 2561 "dhcp6_parser.yy"
+#line 2571 "dhcp6_parser.yy"
                {
     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 3980 "dhcp6_parser.cc"
+#line 3990 "dhcp6_parser.cc"
     break;
 
   case 734: // $@108: %empty
-#line 2567 "dhcp6_parser.yy"
+#line 2577 "dhcp6_parser.yy"
                                            {
     ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location));
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3988,20 +3998,20 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3992 "dhcp6_parser.cc"
+#line 4002 "dhcp6_parser.cc"
     break;
 
   case 735: // reservation_client_classes: "client-classes" $@108 ":" list_strings
-#line 2573 "dhcp6_parser.yy"
+#line 2583 "dhcp6_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4001 "dhcp6_parser.cc"
+#line 4011 "dhcp6_parser.cc"
     break;
 
   case 736: // $@109: %empty
-#line 2581 "dhcp6_parser.yy"
+#line 2591 "dhcp6_parser.yy"
              {
     ctx.unique("relay", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4009,20 +4019,20 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.RELAY);
 }
-#line 4013 "dhcp6_parser.cc"
+#line 4023 "dhcp6_parser.cc"
     break;
 
   case 737: // relay: "relay" $@109 ":" "{" relay_map "}"
-#line 2587 "dhcp6_parser.yy"
+#line 2597 "dhcp6_parser.yy"
                                                 {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4022 "dhcp6_parser.cc"
+#line 4032 "dhcp6_parser.cc"
     break;
 
   case 739: // $@110: %empty
-#line 2598 "dhcp6_parser.yy"
+#line 2608 "dhcp6_parser.yy"
                                {
     ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -4030,114 +4040,114 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CLIENT_CLASSES);
 }
-#line 4034 "dhcp6_parser.cc"
+#line 4044 "dhcp6_parser.cc"
     break;
 
   case 740: // client_classes: "client-classes" $@110 ":" "[" client_classes_list "]"
-#line 2604 "dhcp6_parser.yy"
+#line 2614 "dhcp6_parser.yy"
                                                             {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4043 "dhcp6_parser.cc"
+#line 4053 "dhcp6_parser.cc"
     break;
 
   case 743: // client_classes_list: client_classes_list ","
-#line 2611 "dhcp6_parser.yy"
+#line 2621 "dhcp6_parser.yy"
                                                {
                        ctx.warnAboutExtraCommas(yystack_[0].location);
                        }
-#line 4051 "dhcp6_parser.cc"
+#line 4061 "dhcp6_parser.cc"
     break;
 
   case 744: // $@111: %empty
-#line 2616 "dhcp6_parser.yy"
+#line 2626 "dhcp6_parser.yy"
                                    {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 4061 "dhcp6_parser.cc"
+#line 4071 "dhcp6_parser.cc"
     break;
 
   case 745: // client_class_entry: "{" $@111 client_class_params "}"
-#line 2620 "dhcp6_parser.yy"
+#line 2630 "dhcp6_parser.yy"
                                      {
     // 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 4071 "dhcp6_parser.cc"
+#line 4081 "dhcp6_parser.cc"
     break;
 
   case 750: // not_empty_client_class_params: not_empty_client_class_params ","
-#line 2632 "dhcp6_parser.yy"
+#line 2642 "dhcp6_parser.yy"
                                           {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 4079 "dhcp6_parser.cc"
+#line 4089 "dhcp6_parser.cc"
     break;
 
   case 767: // $@112: %empty
-#line 2656 "dhcp6_parser.yy"
+#line 2666 "dhcp6_parser.yy"
                         {
     ctx.unique("test", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4088 "dhcp6_parser.cc"
+#line 4098 "dhcp6_parser.cc"
     break;
 
   case 768: // client_class_test: "test" $@112 ":" "constant string"
-#line 2659 "dhcp6_parser.yy"
+#line 2669 "dhcp6_parser.yy"
                {
     ElementPtr test(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("test", test);
     ctx.leave();
 }
-#line 4098 "dhcp6_parser.cc"
+#line 4108 "dhcp6_parser.cc"
     break;
 
   case 769: // $@113: %empty
-#line 2665 "dhcp6_parser.yy"
+#line 2675 "dhcp6_parser.yy"
                                           {
     ctx.unique("template-test", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4107 "dhcp6_parser.cc"
+#line 4117 "dhcp6_parser.cc"
     break;
 
   case 770: // client_class_template_test: "template-test" $@113 ":" "constant string"
-#line 2668 "dhcp6_parser.yy"
+#line 2678 "dhcp6_parser.yy"
                {
     ElementPtr template_test(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("template-test", template_test);
     ctx.leave();
 }
-#line 4117 "dhcp6_parser.cc"
+#line 4127 "dhcp6_parser.cc"
     break;
 
   case 771: // only_if_required: "only-if-required" ":" "boolean"
-#line 2675 "dhcp6_parser.yy"
+#line 2685 "dhcp6_parser.yy"
                                                  {
     ctx.unique("only-if-required", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("only-if-required", b);
 }
-#line 4127 "dhcp6_parser.cc"
+#line 4137 "dhcp6_parser.cc"
     break;
 
   case 772: // only_in_additional_list: "only-in-additional-list" ":" "boolean"
-#line 2681 "dhcp6_parser.yy"
+#line 2691 "dhcp6_parser.yy"
                                                                {
     ctx.unique("only-in-additional-list", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("only-in-additional-list", b);
 }
-#line 4137 "dhcp6_parser.cc"
+#line 4147 "dhcp6_parser.cc"
     break;
 
   case 773: // $@114: %empty
-#line 2690 "dhcp6_parser.yy"
+#line 2700 "dhcp6_parser.yy"
                      {
     ctx.unique("server-id", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4145,125 +4155,125 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SERVER_ID);
 }
-#line 4149 "dhcp6_parser.cc"
+#line 4159 "dhcp6_parser.cc"
     break;
 
   case 774: // server_id: "server-id" $@114 ":" "{" server_id_params "}"
-#line 2696 "dhcp6_parser.yy"
+#line 2706 "dhcp6_parser.yy"
                                                        {
     // 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 4160 "dhcp6_parser.cc"
+#line 4170 "dhcp6_parser.cc"
     break;
 
   case 777: // server_id_params: server_id_params ","
-#line 2705 "dhcp6_parser.yy"
+#line 2715 "dhcp6_parser.yy"
                                          {
                     ctx.warnAboutExtraCommas(yystack_[0].location);
                     }
-#line 4168 "dhcp6_parser.cc"
+#line 4178 "dhcp6_parser.cc"
     break;
 
   case 787: // $@115: %empty
-#line 2721 "dhcp6_parser.yy"
+#line 2731 "dhcp6_parser.yy"
                      {
     ctx.unique("type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.DUID_TYPE);
 }
-#line 4177 "dhcp6_parser.cc"
+#line 4187 "dhcp6_parser.cc"
     break;
 
   case 788: // server_id_type: "type" $@115 ":" duid_type
-#line 2724 "dhcp6_parser.yy"
+#line 2734 "dhcp6_parser.yy"
                   {
     ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 4186 "dhcp6_parser.cc"
+#line 4196 "dhcp6_parser.cc"
     break;
 
   case 789: // duid_type: "LLT"
-#line 2729 "dhcp6_parser.yy"
+#line 2739 "dhcp6_parser.yy"
                { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); }
-#line 4192 "dhcp6_parser.cc"
+#line 4202 "dhcp6_parser.cc"
     break;
 
   case 790: // duid_type: "EN"
-#line 2730 "dhcp6_parser.yy"
+#line 2740 "dhcp6_parser.yy"
               { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); }
-#line 4198 "dhcp6_parser.cc"
+#line 4208 "dhcp6_parser.cc"
     break;
 
   case 791: // duid_type: "LL"
-#line 2731 "dhcp6_parser.yy"
+#line 2741 "dhcp6_parser.yy"
               { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); }
-#line 4204 "dhcp6_parser.cc"
+#line 4214 "dhcp6_parser.cc"
     break;
 
   case 792: // htype: "htype" ":" "integer"
-#line 2734 "dhcp6_parser.yy"
+#line 2744 "dhcp6_parser.yy"
                            {
     ctx.unique("htype", ctx.loc2pos(yystack_[2].location));
     ElementPtr htype(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("htype", htype);
 }
-#line 4214 "dhcp6_parser.cc"
+#line 4224 "dhcp6_parser.cc"
     break;
 
   case 793: // $@116: %empty
-#line 2740 "dhcp6_parser.yy"
+#line 2750 "dhcp6_parser.yy"
                        {
     ctx.unique("identifier", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4223 "dhcp6_parser.cc"
+#line 4233 "dhcp6_parser.cc"
     break;
 
   case 794: // identifier: "identifier" $@116 ":" "constant string"
-#line 2743 "dhcp6_parser.yy"
+#line 2753 "dhcp6_parser.yy"
                {
     ElementPtr id(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("identifier", id);
     ctx.leave();
 }
-#line 4233 "dhcp6_parser.cc"
+#line 4243 "dhcp6_parser.cc"
     break;
 
   case 795: // time: "time" ":" "integer"
-#line 2749 "dhcp6_parser.yy"
+#line 2759 "dhcp6_parser.yy"
                          {
     ctx.unique("time", ctx.loc2pos(yystack_[2].location));
     ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("time", time);
 }
-#line 4243 "dhcp6_parser.cc"
+#line 4253 "dhcp6_parser.cc"
     break;
 
   case 796: // enterprise_id: "enterprise-id" ":" "integer"
-#line 2755 "dhcp6_parser.yy"
+#line 2765 "dhcp6_parser.yy"
                                            {
     ctx.unique("enterprise-id", ctx.loc2pos(yystack_[2].location));
     ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enterprise-id", time);
 }
-#line 4253 "dhcp6_parser.cc"
+#line 4263 "dhcp6_parser.cc"
     break;
 
   case 797: // dhcp4o6_port: "dhcp4o6-port" ":" "integer"
-#line 2763 "dhcp6_parser.yy"
+#line 2773 "dhcp6_parser.yy"
                                          {
     ctx.unique("dhcp4o6-port", ctx.loc2pos(yystack_[2].location));
     ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp4o6-port", time);
 }
-#line 4263 "dhcp6_parser.cc"
+#line 4273 "dhcp6_parser.cc"
     break;
 
   case 798: // $@117: %empty
-#line 2771 "dhcp6_parser.yy"
+#line 2781 "dhcp6_parser.yy"
                                {
     ctx.unique("control-socket", ctx.loc2pos(yystack_[0].location));
     ctx.unique("control-sockets", ctx.loc2pos(yystack_[0].location));
@@ -4272,20 +4282,20 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.CONTROL_SOCKET);
 }
-#line 4276 "dhcp6_parser.cc"
+#line 4286 "dhcp6_parser.cc"
     break;
 
   case 799: // control_socket: "control-socket" $@117 ":" "{" control_socket_params "}"
-#line 2778 "dhcp6_parser.yy"
+#line 2788 "dhcp6_parser.yy"
                                                             {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4285 "dhcp6_parser.cc"
+#line 4295 "dhcp6_parser.cc"
     break;
 
   case 800: // $@118: %empty
-#line 2783 "dhcp6_parser.yy"
+#line 2793 "dhcp6_parser.yy"
                                  {
     ctx.unique("control-sockets", ctx.loc2pos(yystack_[0].location));
     ctx.unique("control-socket", ctx.loc2pos(yystack_[0].location));
@@ -4294,150 +4304,150 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CONTROL_SOCKET);
 }
-#line 4298 "dhcp6_parser.cc"
+#line 4308 "dhcp6_parser.cc"
     break;
 
   case 801: // control_sockets: "control-sockets" $@118 ":" "[" control_socket_list "]"
-#line 2790 "dhcp6_parser.yy"
+#line 2800 "dhcp6_parser.yy"
                                                             {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4307 "dhcp6_parser.cc"
+#line 4317 "dhcp6_parser.cc"
     break;
 
   case 806: // not_empty_control_socket_list: not_empty_control_socket_list ","
-#line 2801 "dhcp6_parser.yy"
+#line 2811 "dhcp6_parser.yy"
                                                                    {
                                  ctx.warnAboutExtraCommas(yystack_[0].location);
                                  }
-#line 4315 "dhcp6_parser.cc"
+#line 4325 "dhcp6_parser.cc"
     break;
 
   case 807: // $@119: %empty
-#line 2806 "dhcp6_parser.yy"
+#line 2816 "dhcp6_parser.yy"
                                      {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 4325 "dhcp6_parser.cc"
+#line 4335 "dhcp6_parser.cc"
     break;
 
   case 808: // control_socket_entry: "{" $@119 control_socket_params "}"
-#line 2810 "dhcp6_parser.yy"
+#line 2820 "dhcp6_parser.yy"
                                        {
     ctx.stack_.pop_back();
 }
-#line 4333 "dhcp6_parser.cc"
+#line 4343 "dhcp6_parser.cc"
     break;
 
   case 811: // control_socket_params: control_socket_params ","
-#line 2816 "dhcp6_parser.yy"
+#line 2826 "dhcp6_parser.yy"
                                                    {
                          ctx.warnAboutExtraCommas(yystack_[0].location);
                          }
-#line 4341 "dhcp6_parser.cc"
+#line 4351 "dhcp6_parser.cc"
     break;
 
   case 825: // $@120: %empty
-#line 2836 "dhcp6_parser.yy"
+#line 2846 "dhcp6_parser.yy"
                                  {
     ctx.unique("socket-type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.CONTROL_SOCKET_TYPE);
 }
-#line 4350 "dhcp6_parser.cc"
+#line 4360 "dhcp6_parser.cc"
     break;
 
   case 826: // control_socket_type: "socket-type" $@120 ":" control_socket_type_value
-#line 2839 "dhcp6_parser.yy"
+#line 2849 "dhcp6_parser.yy"
                                   {
     ctx.stack_.back()->set("socket-type", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 4359 "dhcp6_parser.cc"
+#line 4369 "dhcp6_parser.cc"
     break;
 
   case 827: // control_socket_type_value: "unix"
-#line 2845 "dhcp6_parser.yy"
+#line 2855 "dhcp6_parser.yy"
          { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("unix", ctx.loc2pos(yystack_[0].location))); }
-#line 4365 "dhcp6_parser.cc"
+#line 4375 "dhcp6_parser.cc"
     break;
 
   case 828: // control_socket_type_value: "http"
-#line 2846 "dhcp6_parser.yy"
+#line 2856 "dhcp6_parser.yy"
          { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("http", ctx.loc2pos(yystack_[0].location))); }
-#line 4371 "dhcp6_parser.cc"
+#line 4381 "dhcp6_parser.cc"
     break;
 
   case 829: // control_socket_type_value: "https"
-#line 2847 "dhcp6_parser.yy"
+#line 2857 "dhcp6_parser.yy"
           { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("https", ctx.loc2pos(yystack_[0].location))); }
-#line 4377 "dhcp6_parser.cc"
+#line 4387 "dhcp6_parser.cc"
     break;
 
   case 830: // $@121: %empty
-#line 2850 "dhcp6_parser.yy"
+#line 2860 "dhcp6_parser.yy"
                                  {
     ctx.unique("socket-name", ctx.loc2pos(yystack_[0].location));
     ctx.unique("socket-address", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4387 "dhcp6_parser.cc"
+#line 4397 "dhcp6_parser.cc"
     break;
 
   case 831: // control_socket_name: "socket-name" $@121 ":" "constant string"
-#line 2854 "dhcp6_parser.yy"
+#line 2864 "dhcp6_parser.yy"
                {
     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 4397 "dhcp6_parser.cc"
+#line 4407 "dhcp6_parser.cc"
     break;
 
   case 832: // $@122: %empty
-#line 2860 "dhcp6_parser.yy"
+#line 2870 "dhcp6_parser.yy"
                                        {
     ctx.unique("socket-address", ctx.loc2pos(yystack_[0].location));
     ctx.unique("socket-name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4407 "dhcp6_parser.cc"
+#line 4417 "dhcp6_parser.cc"
     break;
 
   case 833: // control_socket_address: "socket-address" $@122 ":" "constant string"
-#line 2864 "dhcp6_parser.yy"
+#line 2874 "dhcp6_parser.yy"
                {
     ElementPtr address(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-address", address);
     ctx.leave();
 }
-#line 4417 "dhcp6_parser.cc"
+#line 4427 "dhcp6_parser.cc"
     break;
 
   case 834: // control_socket_port: "socket-port" ":" "integer"
-#line 2870 "dhcp6_parser.yy"
+#line 2880 "dhcp6_parser.yy"
                                                {
     ctx.unique("socket-port", ctx.loc2pos(yystack_[2].location));
     ElementPtr port(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-port", port);
 }
-#line 4427 "dhcp6_parser.cc"
+#line 4437 "dhcp6_parser.cc"
     break;
 
   case 835: // cert_required: "cert-required" ":" "boolean"
-#line 2876 "dhcp6_parser.yy"
+#line 2886 "dhcp6_parser.yy"
                                            {
     ctx.unique("cert-required", ctx.loc2pos(yystack_[2].location));
     ElementPtr req(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("cert-required", req);
 }
-#line 4437 "dhcp6_parser.cc"
+#line 4447 "dhcp6_parser.cc"
     break;
 
   case 836: // $@123: %empty
-#line 2882 "dhcp6_parser.yy"
+#line 2892 "dhcp6_parser.yy"
                            {
     ctx.unique("http-headers", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -4445,73 +4455,73 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HTTP_HEADERS);
 }
-#line 4449 "dhcp6_parser.cc"
+#line 4459 "dhcp6_parser.cc"
     break;
 
   case 837: // http_headers: "http-headers" $@123 ":" "[" http_header_list "]"
-#line 2888 "dhcp6_parser.yy"
+#line 2898 "dhcp6_parser.yy"
                                                          {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4458 "dhcp6_parser.cc"
+#line 4468 "dhcp6_parser.cc"
     break;
 
   case 842: // not_empty_http_header_list: not_empty_http_header_list ","
-#line 2899 "dhcp6_parser.yy"
+#line 2909 "dhcp6_parser.yy"
                                                              {
                               ctx.warnAboutExtraCommas(yystack_[0].location);
                               }
-#line 4466 "dhcp6_parser.cc"
+#line 4476 "dhcp6_parser.cc"
     break;
 
   case 843: // $@124: %empty
-#line 2904 "dhcp6_parser.yy"
+#line 2914 "dhcp6_parser.yy"
                             {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 4476 "dhcp6_parser.cc"
+#line 4486 "dhcp6_parser.cc"
     break;
 
   case 844: // http_header: "{" $@124 http_header_params "}"
-#line 2908 "dhcp6_parser.yy"
+#line 2918 "dhcp6_parser.yy"
                                     {
     ctx.stack_.pop_back();
 }
-#line 4484 "dhcp6_parser.cc"
+#line 4494 "dhcp6_parser.cc"
     break;
 
   case 847: // http_header_params: http_header_params ","
-#line 2914 "dhcp6_parser.yy"
+#line 2924 "dhcp6_parser.yy"
                                              {
                       ctx.warnAboutExtraCommas(yystack_[0].location);
                       }
-#line 4492 "dhcp6_parser.cc"
+#line 4502 "dhcp6_parser.cc"
     break;
 
   case 853: // $@125: %empty
-#line 2926 "dhcp6_parser.yy"
+#line 2936 "dhcp6_parser.yy"
                     {
     ctx.unique("value", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4501 "dhcp6_parser.cc"
+#line 4511 "dhcp6_parser.cc"
     break;
 
   case 854: // header_value: "value" $@125 ":" "constant string"
-#line 2929 "dhcp6_parser.yy"
+#line 2939 "dhcp6_parser.yy"
                {
     ElementPtr value(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("value", value);
     ctx.leave();
 }
-#line 4511 "dhcp6_parser.cc"
+#line 4521 "dhcp6_parser.cc"
     break;
 
   case 855: // $@126: %empty
-#line 2937 "dhcp6_parser.yy"
+#line 2947 "dhcp6_parser.yy"
                                {
     ctx.unique("authentication", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4519,92 +4529,92 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.AUTHENTICATION);
 }
-#line 4523 "dhcp6_parser.cc"
+#line 4533 "dhcp6_parser.cc"
     break;
 
   case 856: // authentication: "authentication" $@126 ":" "{" auth_params "}"
-#line 2943 "dhcp6_parser.yy"
+#line 2953 "dhcp6_parser.yy"
                                                   {
     // 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 4534 "dhcp6_parser.cc"
+#line 4544 "dhcp6_parser.cc"
     break;
 
   case 859: // auth_params: auth_params ","
-#line 2952 "dhcp6_parser.yy"
+#line 2962 "dhcp6_parser.yy"
                                {
                ctx.warnAboutExtraCommas(yystack_[0].location);
                }
-#line 4542 "dhcp6_parser.cc"
+#line 4552 "dhcp6_parser.cc"
     break;
 
   case 867: // $@127: %empty
-#line 2966 "dhcp6_parser.yy"
+#line 2976 "dhcp6_parser.yy"
                 {
     ctx.unique("type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.AUTH_TYPE);
 }
-#line 4551 "dhcp6_parser.cc"
+#line 4561 "dhcp6_parser.cc"
     break;
 
   case 868: // auth_type: "type" $@127 ":" auth_type_value
-#line 2969 "dhcp6_parser.yy"
+#line 2979 "dhcp6_parser.yy"
                         {
     ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 4560 "dhcp6_parser.cc"
+#line 4570 "dhcp6_parser.cc"
     break;
 
   case 869: // auth_type_value: "basic"
-#line 2974 "dhcp6_parser.yy"
+#line 2984 "dhcp6_parser.yy"
                        { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("basic", ctx.loc2pos(yystack_[0].location))); }
-#line 4566 "dhcp6_parser.cc"
+#line 4576 "dhcp6_parser.cc"
     break;
 
   case 870: // $@128: %empty
-#line 2977 "dhcp6_parser.yy"
+#line 2987 "dhcp6_parser.yy"
              {
     ctx.unique("realm", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4575 "dhcp6_parser.cc"
+#line 4585 "dhcp6_parser.cc"
     break;
 
   case 871: // realm: "realm" $@128 ":" "constant string"
-#line 2980 "dhcp6_parser.yy"
+#line 2990 "dhcp6_parser.yy"
                {
     ElementPtr realm(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("realm", realm);
     ctx.leave();
 }
-#line 4585 "dhcp6_parser.cc"
+#line 4595 "dhcp6_parser.cc"
     break;
 
   case 872: // $@129: %empty
-#line 2986 "dhcp6_parser.yy"
+#line 2996 "dhcp6_parser.yy"
                      {
     ctx.unique("directory", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4594 "dhcp6_parser.cc"
+#line 4604 "dhcp6_parser.cc"
     break;
 
   case 873: // directory: "directory" $@129 ":" "constant string"
-#line 2989 "dhcp6_parser.yy"
+#line 2999 "dhcp6_parser.yy"
                {
     ElementPtr directory(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("directory", directory);
     ctx.leave();
 }
-#line 4604 "dhcp6_parser.cc"
+#line 4614 "dhcp6_parser.cc"
     break;
 
   case 874: // $@130: %empty
-#line 2995 "dhcp6_parser.yy"
+#line 3005 "dhcp6_parser.yy"
                  {
     ctx.unique("clients", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -4612,92 +4622,92 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CLIENTS);
 }
-#line 4616 "dhcp6_parser.cc"
+#line 4626 "dhcp6_parser.cc"
     break;
 
   case 875: // clients: "clients" $@130 ":" "[" clients_list "]"
-#line 3001 "dhcp6_parser.yy"
+#line 3011 "dhcp6_parser.yy"
                                                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4625 "dhcp6_parser.cc"
+#line 4635 "dhcp6_parser.cc"
     break;
 
   case 880: // not_empty_clients_list: not_empty_clients_list ","
-#line 3012 "dhcp6_parser.yy"
+#line 3022 "dhcp6_parser.yy"
                                                      {
                           ctx.warnAboutExtraCommas(yystack_[0].location);
                           }
-#line 4633 "dhcp6_parser.cc"
+#line 4643 "dhcp6_parser.cc"
     break;
 
   case 881: // $@131: %empty
-#line 3017 "dhcp6_parser.yy"
+#line 3027 "dhcp6_parser.yy"
                            {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 4643 "dhcp6_parser.cc"
+#line 4653 "dhcp6_parser.cc"
     break;
 
   case 882: // basic_auth: "{" $@131 clients_params "}"
-#line 3021 "dhcp6_parser.yy"
+#line 3031 "dhcp6_parser.yy"
                                 {
     ctx.stack_.pop_back();
 }
-#line 4651 "dhcp6_parser.cc"
+#line 4661 "dhcp6_parser.cc"
     break;
 
   case 885: // clients_params: clients_params ","
-#line 3027 "dhcp6_parser.yy"
+#line 3037 "dhcp6_parser.yy"
                                      {
                   ctx.warnAboutExtraCommas(yystack_[0].location);
                   }
-#line 4659 "dhcp6_parser.cc"
+#line 4669 "dhcp6_parser.cc"
     break;
 
   case 893: // $@132: %empty
-#line 3041 "dhcp6_parser.yy"
+#line 3051 "dhcp6_parser.yy"
                      {
     ctx.unique("user-file", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4668 "dhcp6_parser.cc"
+#line 4678 "dhcp6_parser.cc"
     break;
 
   case 894: // user_file: "user-file" $@132 ":" "constant string"
-#line 3044 "dhcp6_parser.yy"
+#line 3054 "dhcp6_parser.yy"
                {
     ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("user-file", user);
     ctx.leave();
 }
-#line 4678 "dhcp6_parser.cc"
+#line 4688 "dhcp6_parser.cc"
     break;
 
   case 895: // $@133: %empty
-#line 3050 "dhcp6_parser.yy"
+#line 3060 "dhcp6_parser.yy"
                              {
     ctx.unique("password-file", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4687 "dhcp6_parser.cc"
+#line 4697 "dhcp6_parser.cc"
     break;
 
   case 896: // password_file: "password-file" $@133 ":" "constant string"
-#line 3053 "dhcp6_parser.yy"
+#line 3063 "dhcp6_parser.yy"
                {
     ElementPtr password(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("password-file", password);
     ctx.leave();
 }
-#line 4697 "dhcp6_parser.cc"
+#line 4707 "dhcp6_parser.cc"
     break;
 
   case 897: // $@134: %empty
-#line 3061 "dhcp6_parser.yy"
+#line 3071 "dhcp6_parser.yy"
                                        {
     ctx.unique("dhcp-queue-control", ctx.loc2pos(yystack_[0].location));
     ElementPtr qc(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4705,87 +4715,87 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(qc);
     ctx.enter(ctx.DHCP_QUEUE_CONTROL);
 }
-#line 4709 "dhcp6_parser.cc"
+#line 4719 "dhcp6_parser.cc"
     break;
 
   case 898: // dhcp_queue_control: "dhcp-queue-control" $@134 ":" "{" queue_control_params "}"
-#line 3067 "dhcp6_parser.yy"
+#line 3077 "dhcp6_parser.yy"
                                                            {
     // The enable queue parameter is required.
     ctx.require("enable-queue", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4720 "dhcp6_parser.cc"
+#line 4730 "dhcp6_parser.cc"
     break;
 
   case 901: // queue_control_params: queue_control_params ","
-#line 3076 "dhcp6_parser.yy"
+#line 3086 "dhcp6_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 4728 "dhcp6_parser.cc"
+#line 4738 "dhcp6_parser.cc"
     break;
 
   case 908: // enable_queue: "enable-queue" ":" "boolean"
-#line 3089 "dhcp6_parser.yy"
+#line 3099 "dhcp6_parser.yy"
                                          {
     ctx.unique("enable-queue", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enable-queue", b);
 }
-#line 4738 "dhcp6_parser.cc"
+#line 4748 "dhcp6_parser.cc"
     break;
 
   case 909: // $@135: %empty
-#line 3095 "dhcp6_parser.yy"
+#line 3105 "dhcp6_parser.yy"
                        {
     ctx.unique("queue-type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4747 "dhcp6_parser.cc"
+#line 4757 "dhcp6_parser.cc"
     break;
 
   case 910: // queue_type: "queue-type" $@135 ":" "constant string"
-#line 3098 "dhcp6_parser.yy"
+#line 3108 "dhcp6_parser.yy"
                {
     ElementPtr qt(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("queue-type", qt);
     ctx.leave();
 }
-#line 4757 "dhcp6_parser.cc"
+#line 4767 "dhcp6_parser.cc"
     break;
 
   case 911: // capacity: "capacity" ":" "integer"
-#line 3104 "dhcp6_parser.yy"
+#line 3114 "dhcp6_parser.yy"
                                  {
     ctx.unique("capacity", ctx.loc2pos(yystack_[2].location));
     ElementPtr c(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("capacity", c);
 }
-#line 4767 "dhcp6_parser.cc"
+#line 4777 "dhcp6_parser.cc"
     break;
 
   case 912: // $@136: %empty
-#line 3110 "dhcp6_parser.yy"
+#line 3120 "dhcp6_parser.yy"
                             {
     ctx.unique(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4776 "dhcp6_parser.cc"
+#line 4786 "dhcp6_parser.cc"
     break;
 
   case 913: // arbitrary_map_entry: "constant string" $@136 ":" value
-#line 3113 "dhcp6_parser.yy"
+#line 3123 "dhcp6_parser.yy"
               {
     ctx.stack_.back()->set(yystack_[3].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 4785 "dhcp6_parser.cc"
+#line 4795 "dhcp6_parser.cc"
     break;
 
   case 914: // $@137: %empty
-#line 3120 "dhcp6_parser.yy"
+#line 3130 "dhcp6_parser.yy"
                      {
     ctx.unique("dhcp-ddns", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4793,177 +4803,177 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.DHCP_DDNS);
 }
-#line 4797 "dhcp6_parser.cc"
+#line 4807 "dhcp6_parser.cc"
     break;
 
   case 915: // dhcp_ddns: "dhcp-ddns" $@137 ":" "{" dhcp_ddns_params "}"
-#line 3126 "dhcp6_parser.yy"
+#line 3136 "dhcp6_parser.yy"
                                                        {
     // 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 4808 "dhcp6_parser.cc"
+#line 4818 "dhcp6_parser.cc"
     break;
 
   case 916: // $@138: %empty
-#line 3133 "dhcp6_parser.yy"
+#line 3143 "dhcp6_parser.yy"
                               {
     // Parse the dhcp-ddns map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 4818 "dhcp6_parser.cc"
+#line 4828 "dhcp6_parser.cc"
     break;
 
   case 917: // sub_dhcp_ddns: "{" $@138 dhcp_ddns_params "}"
-#line 3137 "dhcp6_parser.yy"
+#line 3147 "dhcp6_parser.yy"
                                   {
     // 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 4828 "dhcp6_parser.cc"
+#line 4838 "dhcp6_parser.cc"
     break;
 
   case 920: // dhcp_ddns_params: dhcp_ddns_params ","
-#line 3145 "dhcp6_parser.yy"
+#line 3155 "dhcp6_parser.yy"
                                          {
                     ctx.warnAboutExtraCommas(yystack_[0].location);
                     }
-#line 4836 "dhcp6_parser.cc"
+#line 4846 "dhcp6_parser.cc"
     break;
 
   case 932: // enable_updates: "enable-updates" ":" "boolean"
-#line 3163 "dhcp6_parser.yy"
+#line 3173 "dhcp6_parser.yy"
                                              {
     ctx.unique("enable-updates", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enable-updates", b);
 }
-#line 4846 "dhcp6_parser.cc"
+#line 4856 "dhcp6_parser.cc"
     break;
 
   case 933: // $@139: %empty
-#line 3169 "dhcp6_parser.yy"
+#line 3179 "dhcp6_parser.yy"
                      {
     ctx.unique("server-ip", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4855 "dhcp6_parser.cc"
+#line 4865 "dhcp6_parser.cc"
     break;
 
   case 934: // server_ip: "server-ip" $@139 ":" "constant string"
-#line 3172 "dhcp6_parser.yy"
+#line 3182 "dhcp6_parser.yy"
                {
     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 4865 "dhcp6_parser.cc"
+#line 4875 "dhcp6_parser.cc"
     break;
 
   case 935: // server_port: "server-port" ":" "integer"
-#line 3178 "dhcp6_parser.yy"
+#line 3188 "dhcp6_parser.yy"
                                        {
     ctx.unique("server-port", ctx.loc2pos(yystack_[2].location));
     ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-port", i);
 }
-#line 4875 "dhcp6_parser.cc"
+#line 4885 "dhcp6_parser.cc"
     break;
 
   case 936: // $@140: %empty
-#line 3184 "dhcp6_parser.yy"
+#line 3194 "dhcp6_parser.yy"
                      {
     ctx.unique("sender-ip", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4884 "dhcp6_parser.cc"
+#line 4894 "dhcp6_parser.cc"
     break;
 
   case 937: // sender_ip: "sender-ip" $@140 ":" "constant string"
-#line 3187 "dhcp6_parser.yy"
+#line 3197 "dhcp6_parser.yy"
                {
     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 4894 "dhcp6_parser.cc"
+#line 4904 "dhcp6_parser.cc"
     break;
 
   case 938: // sender_port: "sender-port" ":" "integer"
-#line 3193 "dhcp6_parser.yy"
+#line 3203 "dhcp6_parser.yy"
                                        {
     ctx.unique("sender-port", ctx.loc2pos(yystack_[2].location));
     ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-port", i);
 }
-#line 4904 "dhcp6_parser.cc"
+#line 4914 "dhcp6_parser.cc"
     break;
 
   case 939: // max_queue_size: "max-queue-size" ":" "integer"
-#line 3199 "dhcp6_parser.yy"
+#line 3209 "dhcp6_parser.yy"
                                              {
     ctx.unique("max-queue-size", ctx.loc2pos(yystack_[2].location));
     ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-queue-size", i);
 }
-#line 4914 "dhcp6_parser.cc"
+#line 4924 "dhcp6_parser.cc"
     break;
 
   case 940: // $@141: %empty
-#line 3205 "dhcp6_parser.yy"
+#line 3215 "dhcp6_parser.yy"
                            {
     ctx.unique("ncr-protocol", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NCR_PROTOCOL);
 }
-#line 4923 "dhcp6_parser.cc"
+#line 4933 "dhcp6_parser.cc"
     break;
 
   case 941: // ncr_protocol: "ncr-protocol" $@141 ":" ncr_protocol_value
-#line 3208 "dhcp6_parser.yy"
+#line 3218 "dhcp6_parser.yy"
                            {
     ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 4932 "dhcp6_parser.cc"
+#line 4942 "dhcp6_parser.cc"
     break;
 
   case 942: // ncr_protocol_value: "UDP"
-#line 3214 "dhcp6_parser.yy"
+#line 3224 "dhcp6_parser.yy"
         { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
-#line 4938 "dhcp6_parser.cc"
+#line 4948 "dhcp6_parser.cc"
     break;
 
   case 943: // ncr_protocol_value: "TCP"
-#line 3215 "dhcp6_parser.yy"
+#line 3225 "dhcp6_parser.yy"
         { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
-#line 4944 "dhcp6_parser.cc"
+#line 4954 "dhcp6_parser.cc"
     break;
 
   case 944: // $@142: %empty
-#line 3218 "dhcp6_parser.yy"
+#line 3228 "dhcp6_parser.yy"
                        {
     ctx.unique("ncr-format", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NCR_FORMAT);
 }
-#line 4953 "dhcp6_parser.cc"
+#line 4963 "dhcp6_parser.cc"
     break;
 
   case 945: // ncr_format: "ncr-format" $@142 ":" "JSON"
-#line 3221 "dhcp6_parser.yy"
+#line 3231 "dhcp6_parser.yy"
              {
     ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ncr-format", json);
     ctx.leave();
 }
-#line 4963 "dhcp6_parser.cc"
+#line 4973 "dhcp6_parser.cc"
     break;
 
   case 946: // $@143: %empty
-#line 3229 "dhcp6_parser.yy"
+#line 3239 "dhcp6_parser.yy"
                                {
     ctx.unique("config-control", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4971,48 +4981,48 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(i);
     ctx.enter(ctx.CONFIG_CONTROL);
 }
-#line 4975 "dhcp6_parser.cc"
+#line 4985 "dhcp6_parser.cc"
     break;
 
   case 947: // config_control: "config-control" $@143 ":" "{" config_control_params "}"
-#line 3235 "dhcp6_parser.yy"
+#line 3245 "dhcp6_parser.yy"
                                                             {
     // No config control params are required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4985 "dhcp6_parser.cc"
+#line 4995 "dhcp6_parser.cc"
     break;
 
   case 948: // $@144: %empty
-#line 3241 "dhcp6_parser.yy"
+#line 3251 "dhcp6_parser.yy"
                                    {
     // Parse the config-control map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 4995 "dhcp6_parser.cc"
+#line 5005 "dhcp6_parser.cc"
     break;
 
   case 949: // sub_config_control: "{" $@144 config_control_params "}"
-#line 3245 "dhcp6_parser.yy"
+#line 3255 "dhcp6_parser.yy"
                                        {
     // No config_control params are required
     // parsing completed
 }
-#line 5004 "dhcp6_parser.cc"
+#line 5014 "dhcp6_parser.cc"
     break;
 
   case 952: // config_control_params: config_control_params ","
-#line 3253 "dhcp6_parser.yy"
+#line 3263 "dhcp6_parser.yy"
                                                    {
                          ctx.warnAboutExtraCommas(yystack_[0].location);
                          }
-#line 5012 "dhcp6_parser.cc"
+#line 5022 "dhcp6_parser.cc"
     break;
 
   case 955: // $@145: %empty
-#line 3263 "dhcp6_parser.yy"
+#line 3273 "dhcp6_parser.yy"
                                    {
     ctx.unique("config-databases", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -5020,30 +5030,30 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CONFIG_DATABASE);
 }
-#line 5024 "dhcp6_parser.cc"
+#line 5034 "dhcp6_parser.cc"
     break;
 
   case 956: // config_databases: "config-databases" $@145 ":" "[" database_list "]"
-#line 3269 "dhcp6_parser.yy"
+#line 3279 "dhcp6_parser.yy"
                                                       {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 5033 "dhcp6_parser.cc"
+#line 5043 "dhcp6_parser.cc"
     break;
 
   case 957: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer"
-#line 3274 "dhcp6_parser.yy"
+#line 3284 "dhcp6_parser.yy"
                                                              {
     ctx.unique("config-fetch-wait-time", ctx.loc2pos(yystack_[2].location));
     ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("config-fetch-wait-time", value);
 }
-#line 5043 "dhcp6_parser.cc"
+#line 5053 "dhcp6_parser.cc"
     break;
 
   case 958: // $@146: %empty
-#line 3282 "dhcp6_parser.yy"
+#line 3292 "dhcp6_parser.yy"
                  {
     ctx.unique("loggers", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -5051,83 +5061,83 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.LOGGERS);
 }
-#line 5055 "dhcp6_parser.cc"
+#line 5065 "dhcp6_parser.cc"
     break;
 
   case 959: // loggers: "loggers" $@146 ":" "[" loggers_entries "]"
-#line 3288 "dhcp6_parser.yy"
+#line 3298 "dhcp6_parser.yy"
                                                          {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 5064 "dhcp6_parser.cc"
+#line 5074 "dhcp6_parser.cc"
     break;
 
   case 962: // loggers_entries: loggers_entries ","
-#line 3297 "dhcp6_parser.yy"
+#line 3307 "dhcp6_parser.yy"
                                        {
                    ctx.warnAboutExtraCommas(yystack_[0].location);
                    }
-#line 5072 "dhcp6_parser.cc"
+#line 5082 "dhcp6_parser.cc"
     break;
 
   case 963: // $@147: %empty
-#line 3303 "dhcp6_parser.yy"
+#line 3313 "dhcp6_parser.yy"
                              {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 5082 "dhcp6_parser.cc"
+#line 5092 "dhcp6_parser.cc"
     break;
 
   case 964: // logger_entry: "{" $@147 logger_params "}"
-#line 3307 "dhcp6_parser.yy"
+#line 3317 "dhcp6_parser.yy"
                                {
     ctx.stack_.pop_back();
 }
-#line 5090 "dhcp6_parser.cc"
+#line 5100 "dhcp6_parser.cc"
     break;
 
   case 967: // logger_params: logger_params ","
-#line 3313 "dhcp6_parser.yy"
+#line 3323 "dhcp6_parser.yy"
                                    {
                  ctx.warnAboutExtraCommas(yystack_[0].location);
                  }
-#line 5098 "dhcp6_parser.cc"
+#line 5108 "dhcp6_parser.cc"
     break;
 
   case 975: // debuglevel: "debuglevel" ":" "integer"
-#line 3327 "dhcp6_parser.yy"
+#line 3337 "dhcp6_parser.yy"
                                      {
     ctx.unique("debuglevel", ctx.loc2pos(yystack_[2].location));
     ElementPtr dl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("debuglevel", dl);
 }
-#line 5108 "dhcp6_parser.cc"
+#line 5118 "dhcp6_parser.cc"
     break;
 
   case 976: // $@148: %empty
-#line 3333 "dhcp6_parser.yy"
+#line 3343 "dhcp6_parser.yy"
                    {
     ctx.unique("severity", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 5117 "dhcp6_parser.cc"
+#line 5127 "dhcp6_parser.cc"
     break;
 
   case 977: // severity: "severity" $@148 ":" "constant string"
-#line 3336 "dhcp6_parser.yy"
+#line 3346 "dhcp6_parser.yy"
                {
     ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("severity", sev);
     ctx.leave();
 }
-#line 5127 "dhcp6_parser.cc"
+#line 5137 "dhcp6_parser.cc"
     break;
 
   case 978: // $@149: %empty
-#line 3342 "dhcp6_parser.yy"
+#line 3352 "dhcp6_parser.yy"
                                     {
     ctx.unique("output-options", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -5135,122 +5145,122 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OUTPUT_OPTIONS);
 }
-#line 5139 "dhcp6_parser.cc"
+#line 5149 "dhcp6_parser.cc"
     break;
 
   case 979: // output_options_list: "output-options" $@149 ":" "[" output_options_list_content "]"
-#line 3348 "dhcp6_parser.yy"
+#line 3358 "dhcp6_parser.yy"
                                                                     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 5148 "dhcp6_parser.cc"
+#line 5158 "dhcp6_parser.cc"
     break;
 
   case 982: // output_options_list_content: output_options_list_content ","
-#line 3355 "dhcp6_parser.yy"
+#line 3365 "dhcp6_parser.yy"
                                                                {
                                ctx.warnAboutExtraCommas(yystack_[0].location);
                                }
-#line 5156 "dhcp6_parser.cc"
+#line 5166 "dhcp6_parser.cc"
     break;
 
   case 983: // $@150: %empty
-#line 3360 "dhcp6_parser.yy"
+#line 3370 "dhcp6_parser.yy"
                              {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 5166 "dhcp6_parser.cc"
+#line 5176 "dhcp6_parser.cc"
     break;
 
   case 984: // output_entry: "{" $@150 output_params_list "}"
-#line 3364 "dhcp6_parser.yy"
+#line 3374 "dhcp6_parser.yy"
                                     {
     ctx.stack_.pop_back();
 }
-#line 5174 "dhcp6_parser.cc"
+#line 5184 "dhcp6_parser.cc"
     break;
 
   case 987: // output_params_list: output_params_list ","
-#line 3370 "dhcp6_parser.yy"
+#line 3380 "dhcp6_parser.yy"
                                              {
                       ctx.warnAboutExtraCommas(yystack_[0].location);
                       }
-#line 5182 "dhcp6_parser.cc"
+#line 5192 "dhcp6_parser.cc"
     break;
 
   case 993: // $@151: %empty
-#line 3382 "dhcp6_parser.yy"
+#line 3392 "dhcp6_parser.yy"
                {
     ctx.unique("output", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 5191 "dhcp6_parser.cc"
+#line 5201 "dhcp6_parser.cc"
     break;
 
   case 994: // output: "output" $@151 ":" "constant string"
-#line 3385 "dhcp6_parser.yy"
+#line 3395 "dhcp6_parser.yy"
                {
     ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output", sev);
     ctx.leave();
 }
-#line 5201 "dhcp6_parser.cc"
+#line 5211 "dhcp6_parser.cc"
     break;
 
   case 995: // flush: "flush" ":" "boolean"
-#line 3391 "dhcp6_parser.yy"
+#line 3401 "dhcp6_parser.yy"
                            {
     ctx.unique("flush", ctx.loc2pos(yystack_[2].location));
     ElementPtr flush(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush", flush);
 }
-#line 5211 "dhcp6_parser.cc"
+#line 5221 "dhcp6_parser.cc"
     break;
 
   case 996: // maxsize: "maxsize" ":" "integer"
-#line 3397 "dhcp6_parser.yy"
+#line 3407 "dhcp6_parser.yy"
                                {
     ctx.unique("maxsize", ctx.loc2pos(yystack_[2].location));
     ElementPtr maxsize(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxsize", maxsize);
 }
-#line 5221 "dhcp6_parser.cc"
+#line 5231 "dhcp6_parser.cc"
     break;
 
   case 997: // maxver: "maxver" ":" "integer"
-#line 3403 "dhcp6_parser.yy"
+#line 3413 "dhcp6_parser.yy"
                              {
     ctx.unique("maxver", ctx.loc2pos(yystack_[2].location));
     ElementPtr maxver(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxver", maxver);
 }
-#line 5231 "dhcp6_parser.cc"
+#line 5241 "dhcp6_parser.cc"
     break;
 
   case 998: // $@152: %empty
-#line 3409 "dhcp6_parser.yy"
+#line 3419 "dhcp6_parser.yy"
                  {
     ctx.unique("pattern", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 5240 "dhcp6_parser.cc"
+#line 5250 "dhcp6_parser.cc"
     break;
 
   case 999: // pattern: "pattern" $@152 ":" "constant string"
-#line 3412 "dhcp6_parser.yy"
+#line 3422 "dhcp6_parser.yy"
                {
     ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pattern", sev);
     ctx.leave();
 }
-#line 5250 "dhcp6_parser.cc"
+#line 5260 "dhcp6_parser.cc"
     break;
 
   case 1000: // $@153: %empty
-#line 3418 "dhcp6_parser.yy"
+#line 3428 "dhcp6_parser.yy"
                              {
     ctx.unique("compatibility", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -5258,38 +5268,38 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(i);
     ctx.enter(ctx.COMPATIBILITY);
 }
-#line 5262 "dhcp6_parser.cc"
+#line 5272 "dhcp6_parser.cc"
     break;
 
   case 1001: // compatibility: "compatibility" $@153 ":" "{" compatibility_params "}"
-#line 3424 "dhcp6_parser.yy"
+#line 3434 "dhcp6_parser.yy"
                                                            {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 5271 "dhcp6_parser.cc"
+#line 5281 "dhcp6_parser.cc"
     break;
 
   case 1004: // compatibility_params: compatibility_params ","
-#line 3431 "dhcp6_parser.yy"
+#line 3441 "dhcp6_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 5279 "dhcp6_parser.cc"
+#line 5289 "dhcp6_parser.cc"
     break;
 
   case 1007: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean"
-#line 3440 "dhcp6_parser.yy"
+#line 3450 "dhcp6_parser.yy"
                                                              {
     ctx.unique("lenient-option-parsing", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lenient-option-parsing", b);
 }
-#line 5289 "dhcp6_parser.cc"
+#line 5299 "dhcp6_parser.cc"
     break;
 
 
-#line 5293 "dhcp6_parser.cc"
+#line 5303 "dhcp6_parser.cc"
 
             default:
               break;
@@ -7062,77 +7072,77 @@ namespace isc { namespace dhcp {
     1102,  1102,  1111,  1117,  1117,  1126,  1132,  1138,  1144,  1150,
     1156,  1162,  1168,  1174,  1174,  1182,  1183,  1184,  1187,  1193,
     1199,  1205,  1205,  1214,  1214,  1223,  1223,  1232,  1232,  1240,
-    1241,  1242,  1243,  1244,  1247,  1247,  1256,  1256,  1267,  1268,
-    1269,  1274,  1275,  1278,  1278,  1297,  1297,  1315,  1315,  1326,
-    1327,  1328,  1333,  1334,  1337,  1342,  1347,  1347,  1358,  1359,
-    1360,  1365,  1366,  1367,  1370,  1375,  1382,  1382,  1395,  1395,
-    1408,  1409,  1410,  1415,  1416,  1417,  1418,  1419,  1420,  1423,
-    1429,  1435,  1441,  1441,  1452,  1453,  1456,  1457,  1458,  1463,
-    1463,  1473,  1473,  1483,  1484,  1485,  1488,  1491,  1492,  1495,
-    1495,  1504,  1504,  1513,  1513,  1525,  1526,  1527,  1532,  1533,
-    1534,  1535,  1536,  1537,  1540,  1546,  1552,  1558,  1564,  1570,
-    1579,  1579,  1593,  1594,  1597,  1598,  1599,  1608,  1608,  1634,
-    1634,  1645,  1646,  1647,  1653,  1654,  1655,  1656,  1657,  1658,
-    1659,  1660,  1661,  1662,  1663,  1664,  1665,  1666,  1667,  1668,
+    1243,  1246,  1249,  1252,  1257,  1257,  1266,  1266,  1277,  1278,
+    1279,  1284,  1285,  1288,  1288,  1307,  1307,  1325,  1325,  1336,
+    1337,  1338,  1343,  1344,  1347,  1352,  1357,  1357,  1368,  1369,
+    1370,  1375,  1376,  1377,  1380,  1385,  1392,  1392,  1405,  1405,
+    1418,  1419,  1420,  1425,  1426,  1427,  1428,  1429,  1430,  1433,
+    1439,  1445,  1451,  1451,  1462,  1463,  1466,  1467,  1468,  1473,
+    1473,  1483,  1483,  1493,  1494,  1495,  1498,  1501,  1502,  1505,
+    1505,  1514,  1514,  1523,  1523,  1535,  1536,  1537,  1542,  1543,
+    1544,  1545,  1546,  1547,  1550,  1556,  1562,  1568,  1574,  1580,
+    1589,  1589,  1603,  1604,  1607,  1608,  1609,  1618,  1618,  1644,
+    1644,  1655,  1656,  1657,  1663,  1664,  1665,  1666,  1667,  1668,
     1669,  1670,  1671,  1672,  1673,  1674,  1675,  1676,  1677,  1678,
     1679,  1680,  1681,  1682,  1683,  1684,  1685,  1686,  1687,  1688,
     1689,  1690,  1691,  1692,  1693,  1694,  1695,  1696,  1697,  1698,
-    1699,  1700,  1701,  1702,  1703,  1706,  1706,  1715,  1715,  1724,
-    1724,  1733,  1733,  1743,  1743,  1755,  1755,  1766,  1766,  1777,
-    1783,  1789,  1795,  1801,  1809,  1809,  1821,  1822,  1826,  1827,
-    1828,  1833,  1833,  1841,  1842,  1843,  1848,  1849,  1850,  1851,
-    1852,  1853,  1854,  1855,  1856,  1857,  1858,  1859,  1860,  1861,
+    1699,  1700,  1701,  1702,  1703,  1704,  1705,  1706,  1707,  1708,
+    1709,  1710,  1711,  1712,  1713,  1716,  1716,  1725,  1725,  1734,
+    1734,  1743,  1743,  1753,  1753,  1765,  1765,  1776,  1776,  1787,
+    1793,  1799,  1805,  1811,  1819,  1819,  1831,  1832,  1836,  1837,
+    1838,  1843,  1843,  1851,  1852,  1853,  1858,  1859,  1860,  1861,
     1862,  1863,  1864,  1865,  1866,  1867,  1868,  1869,  1870,  1871,
     1872,  1873,  1874,  1875,  1876,  1877,  1878,  1879,  1880,  1881,
     1882,  1883,  1884,  1885,  1886,  1887,  1888,  1889,  1890,  1891,
-    1892,  1893,  1894,  1895,  1902,  1902,  1916,  1916,  1925,  1926,
-    1929,  1930,  1931,  1938,  1938,  1953,  1953,  1967,  1968,  1971,
-    1972,  1973,  1978,  1979,  1980,  1981,  1982,  1983,  1984,  1985,
-    1986,  1987,  1990,  1992,  1998,  2000,  2000,  2009,  2009,  2018,
-    2018,  2027,  2029,  2029,  2038,  2048,  2048,  2061,  2062,  2067,
-    2068,  2069,  2076,  2076,  2088,  2088,  2100,  2101,  2106,  2107,
-    2108,  2115,  2116,  2117,  2118,  2119,  2120,  2121,  2122,  2123,
-    2124,  2125,  2128,  2130,  2130,  2139,  2141,  2143,  2149,  2155,
-    2161,  2161,  2175,  2175,  2188,  2189,  2192,  2193,  2194,  2199,
-    2199,  2209,  2209,  2219,  2220,  2221,  2226,  2227,  2228,  2229,
-    2230,  2231,  2232,  2233,  2234,  2235,  2236,  2237,  2238,  2239,
+    1892,  1893,  1894,  1895,  1896,  1897,  1898,  1899,  1900,  1901,
+    1902,  1903,  1904,  1905,  1912,  1912,  1926,  1926,  1935,  1936,
+    1939,  1940,  1941,  1948,  1948,  1963,  1963,  1977,  1978,  1981,
+    1982,  1983,  1988,  1989,  1990,  1991,  1992,  1993,  1994,  1995,
+    1996,  1997,  2000,  2002,  2008,  2010,  2010,  2019,  2019,  2028,
+    2028,  2037,  2039,  2039,  2048,  2058,  2058,  2071,  2072,  2077,
+    2078,  2079,  2086,  2086,  2098,  2098,  2110,  2111,  2116,  2117,
+    2118,  2125,  2126,  2127,  2128,  2129,  2130,  2131,  2132,  2133,
+    2134,  2135,  2138,  2140,  2140,  2149,  2151,  2153,  2159,  2165,
+    2171,  2171,  2185,  2185,  2198,  2199,  2202,  2203,  2204,  2209,
+    2209,  2219,  2219,  2229,  2230,  2231,  2236,  2237,  2238,  2239,
     2240,  2241,  2242,  2243,  2244,  2245,  2246,  2247,  2248,  2249,
-    2252,  2252,  2261,  2267,  2267,  2292,  2292,  2322,  2322,  2335,
-    2336,  2339,  2340,  2341,  2346,  2346,  2358,  2358,  2370,  2371,
-    2372,  2377,  2378,  2379,  2380,  2381,  2382,  2383,  2384,  2385,
-    2386,  2387,  2388,  2389,  2390,  2393,  2393,  2402,  2408,  2408,
-    2417,  2423,  2432,  2432,  2443,  2444,  2447,  2448,  2449,  2454,
-    2454,  2463,  2463,  2472,  2473,  2476,  2477,  2478,  2484,  2485,
-    2486,  2487,  2488,  2489,  2490,  2491,  2492,  2493,  2494,  2495,
-    2498,  2498,  2509,  2509,  2520,  2520,  2531,  2531,  2540,  2540,
-    2549,  2549,  2558,  2558,  2567,  2567,  2581,  2581,  2592,  2598,
-    2598,  2609,  2610,  2611,  2616,  2616,  2626,  2627,  2630,  2631,
-    2632,  2637,  2638,  2639,  2640,  2641,  2642,  2643,  2644,  2645,
-    2646,  2647,  2648,  2649,  2650,  2651,  2654,  2656,  2656,  2665,
-    2665,  2675,  2681,  2690,  2690,  2703,  2704,  2705,  2710,  2711,
-    2712,  2713,  2714,  2715,  2716,  2717,  2718,  2721,  2721,  2729,
-    2730,  2731,  2734,  2740,  2740,  2749,  2755,  2763,  2771,  2771,
-    2783,  2783,  2795,  2796,  2799,  2800,  2801,  2806,  2806,  2814,
-    2815,  2816,  2821,  2822,  2823,  2824,  2825,  2826,  2827,  2828,
-    2829,  2830,  2831,  2832,  2833,  2836,  2836,  2845,  2846,  2847,
-    2850,  2850,  2860,  2860,  2870,  2876,  2882,  2882,  2893,  2894,
-    2897,  2898,  2899,  2904,  2904,  2912,  2913,  2914,  2919,  2920,
-    2921,  2922,  2923,  2926,  2926,  2937,  2937,  2950,  2951,  2952,
-    2957,  2958,  2959,  2960,  2961,  2962,  2963,  2966,  2966,  2974,
-    2977,  2977,  2986,  2986,  2995,  2995,  3006,  3007,  3010,  3011,
-    3012,  3017,  3017,  3025,  3026,  3027,  3032,  3033,  3034,  3035,
-    3036,  3037,  3038,  3041,  3041,  3050,  3050,  3061,  3061,  3074,
-    3075,  3076,  3081,  3082,  3083,  3084,  3085,  3086,  3089,  3095,
-    3095,  3104,  3110,  3110,  3120,  3120,  3133,  3133,  3143,  3144,
-    3145,  3150,  3151,  3152,  3153,  3154,  3155,  3156,  3157,  3158,
-    3159,  3160,  3163,  3169,  3169,  3178,  3184,  3184,  3193,  3199,
-    3205,  3205,  3214,  3215,  3218,  3218,  3229,  3229,  3241,  3241,
-    3251,  3252,  3253,  3259,  3260,  3263,  3263,  3274,  3282,  3282,
-    3295,  3296,  3297,  3303,  3303,  3311,  3312,  3313,  3318,  3319,
-    3320,  3321,  3322,  3323,  3324,  3327,  3333,  3333,  3342,  3342,
-    3353,  3354,  3355,  3360,  3360,  3368,  3369,  3370,  3375,  3376,
-    3377,  3378,  3379,  3382,  3382,  3391,  3397,  3403,  3409,  3409,
-    3418,  3418,  3429,  3430,  3431,  3436,  3437,  3440
+    2250,  2251,  2252,  2253,  2254,  2255,  2256,  2257,  2258,  2259,
+    2262,  2262,  2271,  2277,  2277,  2302,  2302,  2332,  2332,  2345,
+    2346,  2349,  2350,  2351,  2356,  2356,  2368,  2368,  2380,  2381,
+    2382,  2387,  2388,  2389,  2390,  2391,  2392,  2393,  2394,  2395,
+    2396,  2397,  2398,  2399,  2400,  2403,  2403,  2412,  2418,  2418,
+    2427,  2433,  2442,  2442,  2453,  2454,  2457,  2458,  2459,  2464,
+    2464,  2473,  2473,  2482,  2483,  2486,  2487,  2488,  2494,  2495,
+    2496,  2497,  2498,  2499,  2500,  2501,  2502,  2503,  2504,  2505,
+    2508,  2508,  2519,  2519,  2530,  2530,  2541,  2541,  2550,  2550,
+    2559,  2559,  2568,  2568,  2577,  2577,  2591,  2591,  2602,  2608,
+    2608,  2619,  2620,  2621,  2626,  2626,  2636,  2637,  2640,  2641,
+    2642,  2647,  2648,  2649,  2650,  2651,  2652,  2653,  2654,  2655,
+    2656,  2657,  2658,  2659,  2660,  2661,  2664,  2666,  2666,  2675,
+    2675,  2685,  2691,  2700,  2700,  2713,  2714,  2715,  2720,  2721,
+    2722,  2723,  2724,  2725,  2726,  2727,  2728,  2731,  2731,  2739,
+    2740,  2741,  2744,  2750,  2750,  2759,  2765,  2773,  2781,  2781,
+    2793,  2793,  2805,  2806,  2809,  2810,  2811,  2816,  2816,  2824,
+    2825,  2826,  2831,  2832,  2833,  2834,  2835,  2836,  2837,  2838,
+    2839,  2840,  2841,  2842,  2843,  2846,  2846,  2855,  2856,  2857,
+    2860,  2860,  2870,  2870,  2880,  2886,  2892,  2892,  2903,  2904,
+    2907,  2908,  2909,  2914,  2914,  2922,  2923,  2924,  2929,  2930,
+    2931,  2932,  2933,  2936,  2936,  2947,  2947,  2960,  2961,  2962,
+    2967,  2968,  2969,  2970,  2971,  2972,  2973,  2976,  2976,  2984,
+    2987,  2987,  2996,  2996,  3005,  3005,  3016,  3017,  3020,  3021,
+    3022,  3027,  3027,  3035,  3036,  3037,  3042,  3043,  3044,  3045,
+    3046,  3047,  3048,  3051,  3051,  3060,  3060,  3071,  3071,  3084,
+    3085,  3086,  3091,  3092,  3093,  3094,  3095,  3096,  3099,  3105,
+    3105,  3114,  3120,  3120,  3130,  3130,  3143,  3143,  3153,  3154,
+    3155,  3160,  3161,  3162,  3163,  3164,  3165,  3166,  3167,  3168,
+    3169,  3170,  3173,  3179,  3179,  3188,  3194,  3194,  3203,  3209,
+    3215,  3215,  3224,  3225,  3228,  3228,  3239,  3239,  3251,  3251,
+    3261,  3262,  3263,  3269,  3270,  3273,  3273,  3284,  3292,  3292,
+    3305,  3306,  3307,  3313,  3313,  3321,  3322,  3323,  3328,  3329,
+    3330,  3331,  3332,  3333,  3334,  3337,  3343,  3343,  3352,  3352,
+    3363,  3364,  3365,  3370,  3370,  3378,  3379,  3380,  3385,  3386,
+    3387,  3388,  3389,  3392,  3392,  3401,  3407,  3413,  3419,  3419,
+    3428,  3428,  3439,  3440,  3441,  3446,  3447,  3450
   };
 
   void
@@ -7165,9 +7175,9 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp6_parser.yy"
 } } // isc::dhcp
-#line 7169 "dhcp6_parser.cc"
+#line 7179 "dhcp6_parser.cc"
 
-#line 3446 "dhcp6_parser.yy"
+#line 3456 "dhcp6_parser.yy"
 
 
 void
index e9a9d8b20dd2d28c3a64a81abd79644b8aa06139..ba95ab79bb4b836c06f53393284c2bd4c52a4478 100644 (file)
@@ -1237,11 +1237,21 @@ ssl_mode: SSL_MODE {
     ctx.leave();
 };
 
-ssl_mode: DISABLE { $$ = ElementPtr(new StringElement("disable", ctx.loc2pos(@1))); }
-        | PREFER { $$ = ElementPtr(new StringElement("prefer", ctx.loc2pos(@1))); }
-        | REQUIRE { $$ = ElementPtr(new StringElement("require", ctx.loc2pos(@1))); }
-        | VERIFY_CA { $$ = ElementPtr(new StringElement("verify-ca", ctx.loc2pos(@1))); }
-        | VERIFY_FULL { $$ = ElementPtr(new StringElement("verify-full", ctx.loc2pos(@1))); }
+ssl_mode: DISABLE {
+            $$ = ElementPtr(new StringElement("disable", ctx.loc2pos(@1)));
+            }
+        | PREFER {
+            $$ = ElementPtr(new StringElement("prefer", ctx.loc2pos(@1)));
+            }
+        | REQUIRE {
+            $$ = ElementPtr(new StringElement("require", ctx.loc2pos(@1)));
+            }
+        | VERIFY_CA {
+            $$ = ElementPtr(new StringElement("verify-ca", ctx.loc2pos(@1)));
+            }
+        | VERIFY_FULL {
+            $$ = ElementPtr(new StringElement("verify-full", ctx.loc2pos(@1)));
+            }
         ;
 
 cipher_list: CIPHER_LIST {