]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[trac5351] regen bison
authorFrancis Dupont <fdupont@isc.org>
Sun, 17 Dec 2017 15:40:14 +0000 (15:40 +0000)
committerFrancis Dupont <fdupont@isc.org>
Sun, 17 Dec 2017 15:40:14 +0000 (15:40 +0000)
src/bin/dhcp4/dhcp4_parser.cc
src/bin/dhcp4/location.hh
src/bin/dhcp4/position.hh
src/bin/dhcp4/stack.hh
src/bin/dhcp6/dhcp6_parser.cc
src/bin/dhcp6/location.hh
src/bin/dhcp6/position.hh
src/bin/dhcp6/stack.hh

index c6d3d3cd447a0ab70a65de8a55210a2e6ae0029f..8116508bf2f7c126df9abc7f97154f9c139a6334 100644 (file)
@@ -2313,988 +2313,999 @@ namespace isc { namespace dhcp {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context = yystack_[0].value.as< ElementPtr > ();
     ConstElementPtr old = parent->get("user-context");
+
+    // Handle already existing user context
     if (old) {
+        // Check if it was a comment or a duplicate
         if ((old->size() != 1) || !old->contains("comment")) {
             std::stringstream msg;
             msg << "duplicate user-context entries (previous at "
                 << old->getPosition().str() << ")";
             error(yystack_[3].location, msg.str());
         }
+        // Merge the comment
         user_context->set("comment", old->get("comment"));
     }
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 2329 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2333 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 393:
-#line 1379 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1383 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2337 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2341 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 394:
-#line 1381 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1385 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr parent = ctx.stack_.back();
-    ElementPtr s(new StringElement(yystack_[0].value.as< std::string > ()));
+    ElementPtr e(new MapElement(ctx.loc2pos(yystack_[3].location)));
+    ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
+    e->set("comment", s);
+
+    // Handle already existing user context
     ConstElementPtr old = parent->get("user-context");
     if (old) {
-      ElementPtr mutable_old = boost::const_pointer_cast<Element>(old);
-      mutable_old->set("comment", s);
-    } else {
-        ElementPtr e(new MapElement(ctx.loc2pos(yystack_[3].location)));
-        e->set("comment", s);
-        parent->set("user-context", e);
+        // Check for duplicate comment
+        if (old->contains("comment") {
+            std::stringstream msg;
+            msg << "duplicate user-context/comment entries (previous at "
+                << old->getPosition().str() << ")";
+            error(yystack_[3].location, msg.str());
+        }
+        // Merge the user context in the comment
+        merge(e, old);
     }
     ctx.leave();
 }
-#line 2354 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2367 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 395:
-#line 1397 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1410 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.RESERVATIONS);
 }
-#line 2365 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2378 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 396:
-#line 1402 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1415 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2374 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2387 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 401:
-#line 1415 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1428 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2384 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2397 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 402:
-#line 1419 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1432 "dhcp4_parser.yy" // lalr1.cc:859
     {
     /// @todo: an identifier parameter is required.
     ctx.stack_.pop_back();
 }
-#line 2393 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2406 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 403:
-#line 1424 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1437 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the reservations list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2403 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2416 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 404:
-#line 1428 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1441 "dhcp4_parser.yy" // lalr1.cc:859
     {
     /// @todo: an identifier parameter is required.
     // parsing completed
 }
-#line 2412 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2425 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 424:
-#line 1459 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1472 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2420 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2433 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 425:
-#line 1461 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1474 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr next_server(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("next-server", next_server);
     ctx.leave();
 }
-#line 2430 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2443 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 426:
-#line 1467 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1480 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2438 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2451 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 427:
-#line 1469 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1482 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr srv(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-hostname", srv);
     ctx.leave();
 }
-#line 2448 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2461 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 428:
-#line 1475 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1488 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2456 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2469 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 429:
-#line 1477 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1490 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr bootfile(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("boot-file-name", bootfile);
     ctx.leave();
 }
-#line 2466 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2479 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 430:
-#line 1483 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1496 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2474 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2487 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 431:
-#line 1485 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1498 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr addr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-address", addr);
     ctx.leave();
 }
-#line 2484 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2497 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 432:
-#line 1491 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1504 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2492 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2505 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 433:
-#line 1493 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1506 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("duid", d);
     ctx.leave();
 }
-#line 2502 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2515 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 434:
-#line 1499 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1512 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2510 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2523 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 435:
-#line 1501 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1514 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hw-address", hw);
     ctx.leave();
 }
-#line 2520 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2533 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 436:
-#line 1507 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1520 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2528 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2541 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 437:
-#line 1509 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1522 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-id", hw);
     ctx.leave();
 }
-#line 2538 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2551 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 438:
-#line 1515 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1528 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2546 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2559 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 439:
-#line 1517 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1530 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("circuit-id", hw);
     ctx.leave();
 }
-#line 2556 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2569 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 440:
-#line 1523 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1536 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2564 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2577 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 441:
-#line 1525 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1538 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flex-id", hw);
     ctx.leave();
 }
-#line 2574 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2587 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 442:
-#line 1531 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1544 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2582 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2595 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 443:
-#line 1533 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1546 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname", host);
     ctx.leave();
 }
-#line 2592 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2605 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 444:
-#line 1539 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1552 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", c);
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2603 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2616 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 445:
-#line 1544 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1557 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2612 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2625 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 446:
-#line 1552 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1565 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("relay", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.RELAY);
 }
-#line 2623 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2636 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 447:
-#line 1557 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1570 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2632 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2645 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 448:
-#line 1562 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1575 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2640 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2653 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 449:
-#line 1564 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1577 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr ip(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-address", ip);
     ctx.leave();
 }
-#line 2650 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2663 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 450:
-#line 1573 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1586 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CLIENT_CLASSES);
 }
-#line 2661 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2674 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 451:
-#line 1578 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1591 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2670 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2683 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 454:
-#line 1587 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1600 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2680 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2693 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 455:
-#line 1591 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1604 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The name client class parameter is required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2690 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2703 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 471:
-#line 1619 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1632 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2698 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2711 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 472:
-#line 1621 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1634 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr test(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("test", test);
     ctx.leave();
 }
-#line 2708 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2721 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 473:
-#line 1631 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1644 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp4o6-port", time);
 }
-#line 2717 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2730 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 474:
-#line 1638 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1651 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("control-socket", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.CONTROL_SOCKET);
 }
-#line 2728 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2741 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 475:
-#line 1643 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1656 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2737 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2750 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 483:
-#line 1659 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1672 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2745 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2758 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 484:
-#line 1661 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1674 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr stype(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-type", stype);
     ctx.leave();
 }
-#line 2755 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2768 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 485:
-#line 1667 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1680 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2763 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2776 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 486:
-#line 1669 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1682 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-name", name);
     ctx.leave();
 }
-#line 2773 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2786 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 487:
-#line 1677 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1690 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp-ddns", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.DHCP_DDNS);
 }
-#line 2784 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2797 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 488:
-#line 1682 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1695 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The enable updates DHCP DDNS parameter is required.
     ctx.require("enable-updates", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2795 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2808 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 489:
-#line 1689 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1702 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the dhcp-ddns map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2805 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2818 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 490:
-#line 1693 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1706 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The enable updates DHCP DDNS parameter is required.
     ctx.require("enable-updates", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2815 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2828 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 510:
-#line 1722 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1735 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enable-updates", b);
 }
-#line 2824 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2837 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 511:
-#line 1727 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1740 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2832 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2845 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 512:
-#line 1729 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1742 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("qualifying-suffix", s);
     ctx.leave();
 }
-#line 2842 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2855 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 513:
-#line 1735 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1748 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2850 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2863 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 514:
-#line 1737 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1750 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-ip", s);
     ctx.leave();
 }
-#line 2860 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2873 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 515:
-#line 1743 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1756 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-port", i);
 }
-#line 2869 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2882 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 516:
-#line 1748 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1761 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2877 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2890 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 517:
-#line 1750 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1763 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-ip", s);
     ctx.leave();
 }
-#line 2887 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2900 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 518:
-#line 1756 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1769 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-port", i);
 }
-#line 2896 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2909 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 519:
-#line 1761 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1774 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-queue-size", i);
 }
-#line 2905 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2918 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 520:
-#line 1766 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1779 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NCR_PROTOCOL);
 }
-#line 2913 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2926 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 521:
-#line 1768 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1781 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2922 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2935 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 522:
-#line 1774 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1787 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
-#line 2928 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2941 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 523:
-#line 1775 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1788 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
-#line 2934 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2947 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 524:
-#line 1778 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1791 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NCR_FORMAT);
 }
-#line 2942 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2955 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 525:
-#line 1780 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1793 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ncr-format", json);
     ctx.leave();
 }
-#line 2952 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2965 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 526:
-#line 1786 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1799 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("always-include-fqdn", b);
 }
-#line 2961 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2974 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 527:
-#line 1791 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1804 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-no-update", b);
 }
-#line 2970 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2983 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 528:
-#line 1796 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1809 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-client-update", b);
 }
-#line 2979 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2992 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 529:
-#line 1801 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1814 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.REPLACE_CLIENT_NAME);
 }
-#line 2987 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3000 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 530:
-#line 1803 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1816 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2996 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3009 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 531:
-#line 1809 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1822 "dhcp4_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location))); 
       }
-#line 3004 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3017 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 532:
-#line 1812 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1825 "dhcp4_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
       }
-#line 3012 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3025 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 533:
-#line 1815 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1828 "dhcp4_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
       }
-#line 3020 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3033 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 534:
-#line 1818 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1831 "dhcp4_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
       }
-#line 3028 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3041 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 535:
-#line 1821 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1834 "dhcp4_parser.yy" // lalr1.cc:859
     {
       error(yystack_[0].location, "boolean values for the replace-client-name are "
                 "no longer supported");
       }
-#line 3037 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3050 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 536:
-#line 1827 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1840 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3045 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3058 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 537:
-#line 1829 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1842 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("generated-prefix", s);
     ctx.leave();
 }
-#line 3055 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3068 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 538:
-#line 1837 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1850 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3063 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3076 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 539:
-#line 1839 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1852 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Dhcp6", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3072 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3085 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 540:
-#line 1844 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1857 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3080 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3093 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 541:
-#line 1846 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1859 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3089 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3102 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 542:
-#line 1851 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1864 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3097 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3110 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 543:
-#line 1853 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1866 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Control-agent", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3106 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3119 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 544:
-#line 1863 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1876 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("Logging", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.LOGGING);
 }
-#line 3117 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3130 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 545:
-#line 1868 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1881 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3126 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3139 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 546:
-#line 1873 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1886 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the Logging map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3136 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3149 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 547:
-#line 1877 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1890 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 3144 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3157 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 551:
-#line 1893 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1906 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("loggers", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.LOGGERS);
 }
-#line 3155 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3168 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 552:
-#line 1898 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1911 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3164 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3177 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 555:
-#line 1910 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1923 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 3174 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3187 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 556:
-#line 1914 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1927 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 3182 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3195 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 566:
-#line 1931 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1944 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("debuglevel", dl);
 }
-#line 3191 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3204 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 567:
-#line 1936 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1949 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3199 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3212 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 568:
-#line 1938 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1951 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("severity", sev);
     ctx.leave();
 }
-#line 3209 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3222 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 569:
-#line 1944 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1957 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output_options", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OUTPUT_OPTIONS);
 }
-#line 3220 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3233 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 570:
-#line 1949 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1962 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3229 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3242 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 573:
-#line 1958 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1971 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3239 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3252 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 574:
-#line 1962 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1975 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 3247 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3260 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 581:
-#line 1976 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1989 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3255 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3268 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 582:
-#line 1978 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1991 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output", sev);
     ctx.leave();
 }
-#line 3265 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3278 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 583:
-#line 1984 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1997 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr flush(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush", flush);
 }
-#line 3274 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3287 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 584:
-#line 1989 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2002 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr maxsize(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxsize", maxsize);
 }
-#line 3283 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3296 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 585:
-#line 1994 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2007 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr maxver(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxver", maxver);
 }
-#line 3292 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3305 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
 
-#line 3296 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3309 "dhcp4_parser.cc" // lalr1.cc:859
             default:
               break;
             }
@@ -4421,26 +4432,26 @@ namespace isc { namespace dhcp {
     1267,  1268,  1269,  1270,  1271,  1274,  1276,  1276,  1284,  1286,
     1288,  1293,  1301,  1301,  1313,  1314,  1317,  1318,  1321,  1321,
     1331,  1331,  1341,  1342,  1345,  1346,  1347,  1348,  1349,  1352,
-    1352,  1360,  1360,  1379,  1379,  1397,  1397,  1407,  1408,  1411,
-    1412,  1415,  1415,  1424,  1424,  1433,  1434,  1437,  1438,  1442,
-    1443,  1444,  1445,  1446,  1447,  1448,  1449,  1450,  1451,  1452,
-    1453,  1454,  1455,  1456,  1459,  1459,  1467,  1467,  1475,  1475,
-    1483,  1483,  1491,  1491,  1499,  1499,  1507,  1507,  1515,  1515,
-    1523,  1523,  1531,  1531,  1539,  1539,  1552,  1552,  1562,  1562,
-    1573,  1573,  1583,  1584,  1587,  1587,  1597,  1598,  1601,  1602,
-    1605,  1606,  1607,  1608,  1609,  1610,  1611,  1612,  1613,  1614,
-    1617,  1619,  1619,  1631,  1638,  1638,  1648,  1649,  1652,  1653,
-    1654,  1655,  1656,  1659,  1659,  1667,  1667,  1677,  1677,  1689,
-    1689,  1699,  1700,  1703,  1704,  1705,  1706,  1707,  1708,  1709,
-    1710,  1711,  1712,  1713,  1714,  1715,  1716,  1717,  1718,  1719,
-    1722,  1727,  1727,  1735,  1735,  1743,  1748,  1748,  1756,  1761,
-    1766,  1766,  1774,  1775,  1778,  1778,  1786,  1791,  1796,  1801,
-    1801,  1809,  1812,  1815,  1818,  1821,  1827,  1827,  1837,  1837,
-    1844,  1844,  1851,  1851,  1863,  1863,  1873,  1873,  1884,  1885,
-    1889,  1893,  1893,  1905,  1906,  1910,  1910,  1918,  1919,  1922,
-    1923,  1924,  1925,  1926,  1927,  1928,  1931,  1936,  1936,  1944,
-    1944,  1954,  1955,  1958,  1958,  1966,  1967,  1970,  1971,  1972,
-    1973,  1976,  1976,  1984,  1989,  1994
+    1352,  1360,  1360,  1383,  1383,  1410,  1410,  1420,  1421,  1424,
+    1425,  1428,  1428,  1437,  1437,  1446,  1447,  1450,  1451,  1455,
+    1456,  1457,  1458,  1459,  1460,  1461,  1462,  1463,  1464,  1465,
+    1466,  1467,  1468,  1469,  1472,  1472,  1480,  1480,  1488,  1488,
+    1496,  1496,  1504,  1504,  1512,  1512,  1520,  1520,  1528,  1528,
+    1536,  1536,  1544,  1544,  1552,  1552,  1565,  1565,  1575,  1575,
+    1586,  1586,  1596,  1597,  1600,  1600,  1610,  1611,  1614,  1615,
+    1618,  1619,  1620,  1621,  1622,  1623,  1624,  1625,  1626,  1627,
+    1630,  1632,  1632,  1644,  1651,  1651,  1661,  1662,  1665,  1666,
+    1667,  1668,  1669,  1672,  1672,  1680,  1680,  1690,  1690,  1702,
+    1702,  1712,  1713,  1716,  1717,  1718,  1719,  1720,  1721,  1722,
+    1723,  1724,  1725,  1726,  1727,  1728,  1729,  1730,  1731,  1732,
+    1735,  1740,  1740,  1748,  1748,  1756,  1761,  1761,  1769,  1774,
+    1779,  1779,  1787,  1788,  1791,  1791,  1799,  1804,  1809,  1814,
+    1814,  1822,  1825,  1828,  1831,  1834,  1840,  1840,  1850,  1850,
+    1857,  1857,  1864,  1864,  1876,  1876,  1886,  1886,  1897,  1898,
+    1902,  1906,  1906,  1918,  1919,  1923,  1923,  1931,  1932,  1935,
+    1936,  1937,  1938,  1939,  1940,  1941,  1944,  1949,  1949,  1957,
+    1957,  1967,  1968,  1971,  1971,  1979,  1980,  1983,  1984,  1985,
+    1986,  1989,  1989,  1997,  2002,  2007
   };
 
   // Print the state stack on the debug stream.
@@ -4475,8 +4486,8 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp4_parser.yy" // lalr1.cc:1167
 } } // isc::dhcp
-#line 4477 "dhcp4_parser.cc" // lalr1.cc:1167
-#line 1999 "dhcp4_parser.yy" // lalr1.cc:1168
+#line 4490 "dhcp4_parser.cc" // lalr1.cc:1167
+#line 2012 "dhcp4_parser.yy" // lalr1.cc:1168
 
 
 void
index 88fd38f3535527623fc9200fa28d72f1a7b72686..a3706d85261f9bf5fd99cb8b6c00e2e866161c07 100644 (file)
@@ -1,4 +1,4 @@
-// Generated 201712171507
+// Generated 201712171540
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Locations for Bison parsers in C++
index 568ef55033bd434dd0250b956c6db8180c11d5f9..f663096e85f894bd970587877074bb556d03d419 100644 (file)
@@ -1,4 +1,4 @@
-// Generated 201712171507
+// Generated 201712171540
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Positions for Bison parsers in C++
index da4bb37f115133724268cc7e9740340cbadb9051..33ace44de2f1389cd0a9901c1805737226afec57 100644 (file)
@@ -1,4 +1,4 @@
-// Generated 201712171507
+// Generated 201712171540
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Stack handling for Bison parsers in C++
index 87498397a2acbfa59fbb6654524a16e7b7aca665..7fab22349c05607c3d299c3397735a9d5bd135e6 100644 (file)
@@ -2214,80 +2214,91 @@ namespace isc { namespace dhcp {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context = yystack_[0].value.as< ElementPtr > ();
     ConstElementPtr old = parent->get("user-context");
+
+    // Handle already existing user context
     if (old) {
+        // Check if it was a comment or a duplicate
         if ((old->size() != 1) || !old->contains("comment")) {
             std::stringstream msg;
             msg << "duplicate user-context entries (previous at "
                 << old->getPosition().str() << ")";
             error(yystack_[3].location, msg.str());
         }
+        // Merge the comment
         user_context->set("comment", old->get("comment"));
     }
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 2230 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2234 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 376:
-#line 1342 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1346 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2238 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2242 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 377:
-#line 1344 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1348 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr parent = ctx.stack_.back();
-    ElementPtr s(new StringElement(yystack_[0].value.as< std::string > ()));
+    ElementPtr e(new MapElement(ctx.loc2pos(yystack_[3].location)));
+    ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
+    e->set("comment", s);
+
+    // Handle already existing user context
     ConstElementPtr old = parent->get("user-context");
     if (old) {
-      ElementPtr mutable_old = boost::const_pointer_cast<Element>(old);
-      mutable_old->set("comment", s);
-    } else {
-        ElementPtr e(new MapElement(ctx.loc2pos(yystack_[3].location)));
-       e->set("comment", s);
-        parent->set("user-context", e);
+        // Check for duplicate comment
+        if (old->contains("comment") {
+            std::stringstream msg;
+            msg << "duplicate user-context/comment entries (previous at "
+                << old->getPosition().str() << ")";
+            error(yystack_[3].location, msg.str());
+        }
+        // Merge the user context in the comment
+        merge(e, old);
     }
     ctx.leave();
 }
-#line 2255 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2268 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 378:
-#line 1360 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1373 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pd-pools", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.PD_POOLS);
 }
-#line 2266 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2279 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 379:
-#line 1365 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1378 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2275 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2288 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 384:
-#line 1380 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1393 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2285 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2298 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 385:
-#line 1384 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1397 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The prefix, prefix len and delegated len parameters are required.
     ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2295,21 +2306,21 @@ namespace isc { namespace dhcp {
     ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2297 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2310 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 386:
-#line 1392 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1405 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the pd-pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2307 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2320 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 387:
-#line 1396 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1409 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The prefix, prefix len and delegated len parameters are required.
     ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2317,1046 +2328,1046 @@ namespace isc { namespace dhcp {
     ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2319 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2332 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 399:
-#line 1419 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1432 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2327 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2340 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 400:
-#line 1421 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1434 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("prefix", prf);
     ctx.leave();
 }
-#line 2337 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2350 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 401:
-#line 1427 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1440 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("prefix-len", prf);
 }
-#line 2346 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2359 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 402:
-#line 1432 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1445 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2354 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2367 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 403:
-#line 1434 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1447 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("excluded-prefix", prf);
     ctx.leave();
 }
-#line 2364 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2377 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 404:
-#line 1440 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1453 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("excluded-prefix-len", prf);
 }
-#line 2373 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2386 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 405:
-#line 1445 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1458 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr deleg(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("delegated-len", deleg);
 }
-#line 2382 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2395 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 406:
-#line 1453 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1466 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.RESERVATIONS);
 }
-#line 2393 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2406 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 407:
-#line 1458 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1471 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2402 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2415 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 412:
-#line 1471 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1484 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2412 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2425 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 413:
-#line 1475 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1488 "dhcp6_parser.yy" // lalr1.cc:859
     {
     /// @todo: an identifier parameter is required.
     ctx.stack_.pop_back();
 }
-#line 2421 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2434 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 414:
-#line 1480 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1493 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the reservations list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2431 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2444 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 415:
-#line 1484 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1497 "dhcp6_parser.yy" // lalr1.cc:859
     {
     /// @todo: an identifier parameter is required.
     // parsing completed
 }
-#line 2440 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2453 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 431:
-#line 1511 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1524 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-addresses", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2451 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2464 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 432:
-#line 1516 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1529 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2460 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2473 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 433:
-#line 1521 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1534 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("prefixes", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2471 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2484 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 434:
-#line 1526 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1539 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2480 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2493 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 435:
-#line 1531 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1544 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2488 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2501 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 436:
-#line 1533 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1546 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("duid", d);
     ctx.leave();
 }
-#line 2498 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2511 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 437:
-#line 1539 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1552 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2506 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2519 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 438:
-#line 1541 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1554 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hw-address", hw);
     ctx.leave();
 }
-#line 2516 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2529 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 439:
-#line 1547 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1560 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2524 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2537 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 440:
-#line 1549 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1562 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname", host);
     ctx.leave();
 }
-#line 2534 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2547 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 441:
-#line 1555 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1568 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2542 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2555 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 442:
-#line 1557 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1570 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flex-id", hw);
     ctx.leave();
 }
-#line 2552 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2565 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 443:
-#line 1563 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1576 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", c);
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2563 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2576 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 444:
-#line 1568 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1581 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2572 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2585 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 445:
-#line 1576 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1589 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("relay", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.RELAY);
 }
-#line 2583 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2596 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 446:
-#line 1581 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1594 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2592 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2605 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 447:
-#line 1586 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1599 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2600 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2613 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 448:
-#line 1588 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1601 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr ip(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-address", ip);
     ctx.leave();
 }
-#line 2610 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2623 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 449:
-#line 1597 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1610 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CLIENT_CLASSES);
 }
-#line 2621 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2634 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 450:
-#line 1602 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1615 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2630 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2643 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 453:
-#line 1611 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1624 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2640 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2653 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 454:
-#line 1615 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1628 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The name client class parameter is required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2650 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2663 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 466:
-#line 1639 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1652 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2658 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2671 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 467:
-#line 1641 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1654 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr test(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("test", test);
     ctx.leave();
 }
-#line 2668 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2681 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 468:
-#line 1650 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1663 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-id", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SERVER_ID);
 }
-#line 2679 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2692 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 469:
-#line 1655 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1668 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The type parameter is required.
     ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2690 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2703 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 481:
-#line 1677 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1690 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.DUID_TYPE);
 }
-#line 2698 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2711 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 482:
-#line 1679 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1692 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2707 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2720 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 483:
-#line 1684 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1697 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); }
-#line 2713 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2726 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 484:
-#line 1685 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1698 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); }
-#line 2719 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2732 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 485:
-#line 1686 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1699 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); }
-#line 2725 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2738 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 486:
-#line 1689 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1702 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr htype(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("htype", htype);
 }
-#line 2734 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2747 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 487:
-#line 1694 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1707 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2742 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2755 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 488:
-#line 1696 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1709 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr id(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("identifier", id);
     ctx.leave();
 }
-#line 2752 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2765 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 489:
-#line 1702 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1715 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("time", time);
 }
-#line 2761 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2774 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 490:
-#line 1707 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1720 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enterprise-id", time);
 }
-#line 2770 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2783 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 491:
-#line 1714 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1727 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp4o6-port", time);
 }
-#line 2779 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2792 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 492:
-#line 1721 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1734 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("control-socket", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.CONTROL_SOCKET);
 }
-#line 2790 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2803 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 493:
-#line 1726 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1739 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2799 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2812 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 501:
-#line 1742 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1755 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2807 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2820 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 502:
-#line 1744 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1757 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr stype(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-type", stype);
     ctx.leave();
 }
-#line 2817 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2830 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 503:
-#line 1750 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1763 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2825 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2838 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 504:
-#line 1752 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1765 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-name", name);
     ctx.leave();
 }
-#line 2835 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2848 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 505:
-#line 1760 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1773 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp-ddns", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.DHCP_DDNS);
 }
-#line 2846 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2859 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 506:
-#line 1765 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1778 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The enable updates DHCP DDNS parameter is required.
     ctx.require("enable-updates", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2857 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2870 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 507:
-#line 1772 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1785 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the dhcp-ddns map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2867 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2880 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 508:
-#line 1776 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1789 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The enable updates DHCP DDNS parameter is required.
     ctx.require("enable-updates", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2877 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2890 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 528:
-#line 1805 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1818 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enable-updates", b);
 }
-#line 2886 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2899 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 529:
-#line 1810 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1823 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2894 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2907 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 530:
-#line 1812 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1825 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("qualifying-suffix", s);
     ctx.leave();
 }
-#line 2904 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2917 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 531:
-#line 1818 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1831 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2912 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2925 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 532:
-#line 1820 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1833 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-ip", s);
     ctx.leave();
 }
-#line 2922 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2935 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 533:
-#line 1826 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1839 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-port", i);
 }
-#line 2931 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2944 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 534:
-#line 1831 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1844 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2939 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2952 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 535:
-#line 1833 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1846 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-ip", s);
     ctx.leave();
 }
-#line 2949 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2962 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 536:
-#line 1839 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1852 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-port", i);
 }
-#line 2958 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2971 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 537:
-#line 1844 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1857 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-queue-size", i);
 }
-#line 2967 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2980 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 538:
-#line 1849 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1862 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NCR_PROTOCOL);
 }
-#line 2975 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2988 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 539:
-#line 1851 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1864 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2984 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2997 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 540:
-#line 1857 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1870 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
-#line 2990 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3003 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 541:
-#line 1858 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1871 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
-#line 2996 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3009 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 542:
-#line 1861 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1874 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NCR_FORMAT);
 }
-#line 3004 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3017 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 543:
-#line 1863 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1876 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ncr-format", json);
     ctx.leave();
 }
-#line 3014 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3027 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 544:
-#line 1869 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1882 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("always-include-fqdn", b);
 }
-#line 3023 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3036 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 545:
-#line 1874 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1887 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-no-update", b);
 }
-#line 3032 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3045 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 546:
-#line 1879 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1892 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-client-update", b);
 }
-#line 3041 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3054 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 547:
-#line 1884 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1897 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.REPLACE_CLIENT_NAME);
 }
-#line 3049 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3062 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 548:
-#line 1886 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1899 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3058 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3071 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 549:
-#line 1892 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1905 "dhcp6_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location))); 
       }
-#line 3066 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3079 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 550:
-#line 1895 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1908 "dhcp6_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
       }
-#line 3074 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3087 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 551:
-#line 1898 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1911 "dhcp6_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
       }
-#line 3082 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3095 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 552:
-#line 1901 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1914 "dhcp6_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
       }
-#line 3090 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3103 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 553:
-#line 1904 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1917 "dhcp6_parser.yy" // lalr1.cc:859
     {
       error(yystack_[0].location, "boolean values for the replace-client-name are "
                 "no longer supported");
       }
-#line 3099 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3112 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 554:
-#line 1910 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1923 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3107 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3120 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 555:
-#line 1912 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1925 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("generated-prefix", s);
     ctx.leave();
 }
-#line 3117 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3130 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 556:
-#line 1920 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1933 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3125 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3138 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 557:
-#line 1922 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1935 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Dhcp4", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3134 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3147 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 558:
-#line 1927 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1940 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3142 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3155 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 559:
-#line 1929 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1942 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3151 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3164 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 560:
-#line 1934 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1947 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3159 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3172 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 561:
-#line 1936 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1949 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Control-agent", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3168 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3181 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 562:
-#line 1947 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1960 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("Logging", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.LOGGING);
 }
-#line 3179 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3192 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 563:
-#line 1952 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1965 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3188 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3201 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 564:
-#line 1957 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1970 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the Logging map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3198 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3211 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 565:
-#line 1961 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1974 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 3206 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3219 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 569:
-#line 1977 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1990 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("loggers", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.LOGGERS);
 }
-#line 3217 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3230 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 570:
-#line 1982 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1995 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3226 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3239 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 573:
-#line 1994 "dhcp6_parser.yy" // lalr1.cc:859
+#line 2007 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 3236 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3249 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 574:
-#line 1998 "dhcp6_parser.yy" // lalr1.cc:859
+#line 2011 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 3244 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3257 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 584:
-#line 2015 "dhcp6_parser.yy" // lalr1.cc:859
+#line 2028 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("debuglevel", dl);
 }
-#line 3253 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3266 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 585:
-#line 2020 "dhcp6_parser.yy" // lalr1.cc:859
+#line 2033 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3261 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3274 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 586:
-#line 2022 "dhcp6_parser.yy" // lalr1.cc:859
+#line 2035 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("severity", sev);
     ctx.leave();
 }
-#line 3271 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3284 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 587:
-#line 2028 "dhcp6_parser.yy" // lalr1.cc:859
+#line 2041 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output_options", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OUTPUT_OPTIONS);
 }
-#line 3282 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3295 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 588:
-#line 2033 "dhcp6_parser.yy" // lalr1.cc:859
+#line 2046 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3291 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3304 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 591:
-#line 2042 "dhcp6_parser.yy" // lalr1.cc:859
+#line 2055 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3301 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3314 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 592:
-#line 2046 "dhcp6_parser.yy" // lalr1.cc:859
+#line 2059 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 3309 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3322 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 599:
-#line 2060 "dhcp6_parser.yy" // lalr1.cc:859
+#line 2073 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3317 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3330 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 600:
-#line 2062 "dhcp6_parser.yy" // lalr1.cc:859
+#line 2075 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output", sev);
     ctx.leave();
 }
-#line 3327 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3340 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 601:
-#line 2068 "dhcp6_parser.yy" // lalr1.cc:859
+#line 2081 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr flush(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush", flush);
 }
-#line 3336 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3349 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 602:
-#line 2073 "dhcp6_parser.yy" // lalr1.cc:859
+#line 2086 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr maxsize(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxsize", maxsize);
 }
-#line 3345 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3358 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 603:
-#line 2078 "dhcp6_parser.yy" // lalr1.cc:859
+#line 2091 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr maxver(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxver", maxver);
 }
-#line 3354 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3367 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
 
-#line 3358 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3371 "dhcp6_parser.cc" // lalr1.cc:859
             default:
               break;
             }
@@ -4514,30 +4525,30 @@ namespace isc { namespace dhcp {
     1228,  1229,  1230,  1231,  1232,  1233,  1234,  1235,  1238,  1240,
     1240,  1248,  1250,  1252,  1257,  1265,  1265,  1277,  1278,  1281,
     1282,  1285,  1285,  1295,  1295,  1304,  1305,  1308,  1309,  1310,
-    1311,  1312,  1315,  1315,  1323,  1323,  1342,  1342,  1360,  1360,
-    1372,  1373,  1376,  1377,  1380,  1380,  1392,  1392,  1404,  1405,
-    1408,  1409,  1410,  1411,  1412,  1413,  1414,  1415,  1416,  1419,
-    1419,  1427,  1432,  1432,  1440,  1445,  1453,  1453,  1463,  1464,
-    1467,  1468,  1471,  1471,  1480,  1480,  1489,  1490,  1493,  1494,
-    1498,  1499,  1500,  1501,  1502,  1503,  1504,  1505,  1506,  1507,
-    1508,  1511,  1511,  1521,  1521,  1531,  1531,  1539,  1539,  1547,
-    1547,  1555,  1555,  1563,  1563,  1576,  1576,  1586,  1586,  1597,
-    1597,  1607,  1608,  1611,  1611,  1621,  1622,  1625,  1626,  1629,
-    1630,  1631,  1632,  1633,  1634,  1637,  1639,  1639,  1650,  1650,
-    1662,  1663,  1666,  1667,  1668,  1669,  1670,  1671,  1672,  1673,
-    1674,  1677,  1677,  1684,  1685,  1686,  1689,  1694,  1694,  1702,
-    1707,  1714,  1721,  1721,  1731,  1732,  1735,  1736,  1737,  1738,
-    1739,  1742,  1742,  1750,  1750,  1760,  1760,  1772,  1772,  1782,
-    1783,  1786,  1787,  1788,  1789,  1790,  1791,  1792,  1793,  1794,
-    1795,  1796,  1797,  1798,  1799,  1800,  1801,  1802,  1805,  1810,
-    1810,  1818,  1818,  1826,  1831,  1831,  1839,  1844,  1849,  1849,
-    1857,  1858,  1861,  1861,  1869,  1874,  1879,  1884,  1884,  1892,
-    1895,  1898,  1901,  1904,  1910,  1910,  1920,  1920,  1927,  1927,
-    1934,  1934,  1947,  1947,  1957,  1957,  1968,  1969,  1973,  1977,
-    1977,  1989,  1990,  1994,  1994,  2002,  2003,  2006,  2007,  2008,
-    2009,  2010,  2011,  2012,  2015,  2020,  2020,  2028,  2028,  2038,
-    2039,  2042,  2042,  2050,  2051,  2054,  2055,  2056,  2057,  2060,
-    2060,  2068,  2073,  2078
+    1311,  1312,  1315,  1315,  1323,  1323,  1346,  1346,  1373,  1373,
+    1385,  1386,  1389,  1390,  1393,  1393,  1405,  1405,  1417,  1418,
+    1421,  1422,  1423,  1424,  1425,  1426,  1427,  1428,  1429,  1432,
+    1432,  1440,  1445,  1445,  1453,  1458,  1466,  1466,  1476,  1477,
+    1480,  1481,  1484,  1484,  1493,  1493,  1502,  1503,  1506,  1507,
+    1511,  1512,  1513,  1514,  1515,  1516,  1517,  1518,  1519,  1520,
+    1521,  1524,  1524,  1534,  1534,  1544,  1544,  1552,  1552,  1560,
+    1560,  1568,  1568,  1576,  1576,  1589,  1589,  1599,  1599,  1610,
+    1610,  1620,  1621,  1624,  1624,  1634,  1635,  1638,  1639,  1642,
+    1643,  1644,  1645,  1646,  1647,  1650,  1652,  1652,  1663,  1663,
+    1675,  1676,  1679,  1680,  1681,  1682,  1683,  1684,  1685,  1686,
+    1687,  1690,  1690,  1697,  1698,  1699,  1702,  1707,  1707,  1715,
+    1720,  1727,  1734,  1734,  1744,  1745,  1748,  1749,  1750,  1751,
+    1752,  1755,  1755,  1763,  1763,  1773,  1773,  1785,  1785,  1795,
+    1796,  1799,  1800,  1801,  1802,  1803,  1804,  1805,  1806,  1807,
+    1808,  1809,  1810,  1811,  1812,  1813,  1814,  1815,  1818,  1823,
+    1823,  1831,  1831,  1839,  1844,  1844,  1852,  1857,  1862,  1862,
+    1870,  1871,  1874,  1874,  1882,  1887,  1892,  1897,  1897,  1905,
+    1908,  1911,  1914,  1917,  1923,  1923,  1933,  1933,  1940,  1940,
+    1947,  1947,  1960,  1960,  1970,  1970,  1981,  1982,  1986,  1990,
+    1990,  2002,  2003,  2007,  2007,  2015,  2016,  2019,  2020,  2021,
+    2022,  2023,  2024,  2025,  2028,  2033,  2033,  2041,  2041,  2051,
+    2052,  2055,  2055,  2063,  2064,  2067,  2068,  2069,  2070,  2073,
+    2073,  2081,  2086,  2091
   };
 
   // Print the state stack on the debug stream.
@@ -4572,8 +4583,8 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp6_parser.yy" // lalr1.cc:1167
 } } // isc::dhcp
-#line 4574 "dhcp6_parser.cc" // lalr1.cc:1167
-#line 2083 "dhcp6_parser.yy" // lalr1.cc:1168
+#line 4587 "dhcp6_parser.cc" // lalr1.cc:1167
+#line 2096 "dhcp6_parser.yy" // lalr1.cc:1168
 
 
 void
index 3f98dea9304d2937265b032ca5b1943911ae0454..1082c61b603c4bda73a52505e661c5ba3275cb99 100644 (file)
@@ -1,4 +1,4 @@
-// Generated 201712171507
+// Generated 201712171540
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Locations for Bison parsers in C++
index d86beca2a36ee172bbaa4382d75f3acf1e028d2d..3a4baee41f7e44ff509724b47fa85e85f1045532 100644 (file)
@@ -1,4 +1,4 @@
-// Generated 201712171507
+// Generated 201712171540
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Positions for Bison parsers in C++
index 851c8b38ee15c6283f2ad1d7072e2f5b26ddd6ca..ae8771960de4a2e22980d65219b9d350119ff785 100644 (file)
@@ -1,4 +1,4 @@
-// Generated 201712171507
+// Generated 201712171540
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Stack handling for Bison parsers in C++