]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#2862] Regen bison files
authorFrancis Dupont <fdupont@isc.org>
Wed, 17 May 2023 12:53:19 +0000 (12:53 +0000)
committerFrancis Dupont <fdupont@isc.org>
Wed, 17 May 2023 17:04:26 +0000 (19:04 +0200)
12 files changed:
src/bin/agent/agent_parser.cc
src/bin/agent/location.hh
src/bin/d2/d2_parser.cc
src/bin/d2/location.hh
src/bin/dhcp4/dhcp4_parser.cc
src/bin/dhcp4/location.hh
src/bin/dhcp6/dhcp6_parser.cc
src/bin/dhcp6/location.hh
src/bin/netconf/location.hh
src/bin/netconf/netconf_parser.cc
src/lib/eval/location.hh
src/lib/eval/parser.cc

index 29b82be156b378bc3da50523a0dbd5c7a447f17b..9ec41583bfc824c66a6ca2b385718caad1599380 100644 (file)
 
 #include <agent/parser_context.h>
 
-#line 52 "agent_parser.cc"
+// Avoid warnings with the error counter.
+#if defined(__GNUC__) || defined(__clang__)
+#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
+#endif
+
+#line 57 "agent_parser.cc"
 
 
 #ifndef YY_
 
 #line 14 "agent_parser.yy"
 namespace isc { namespace agent {
-#line 145 "agent_parser.cc"
+#line 150 "agent_parser.cc"
 
   /// Build a parser object.
   AgentParser::AgentParser (isc::agent::ParserContext& ctx_yyarg)
@@ -382,51 +387,51 @@ namespace isc { namespace agent {
         switch (yykind)
     {
       case symbol_kind::S_STRING: // "constant string"
-#line 116 "agent_parser.yy"
+#line 121 "agent_parser.yy"
                  { yyoutput << yysym.value.template as < std::string > (); }
-#line 388 "agent_parser.cc"
+#line 393 "agent_parser.cc"
         break;
 
       case symbol_kind::S_INTEGER: // "integer"
-#line 116 "agent_parser.yy"
+#line 121 "agent_parser.yy"
                  { yyoutput << yysym.value.template as < int64_t > (); }
-#line 394 "agent_parser.cc"
+#line 399 "agent_parser.cc"
         break;
 
       case symbol_kind::S_FLOAT: // "floating point"
-#line 116 "agent_parser.yy"
+#line 121 "agent_parser.yy"
                  { yyoutput << yysym.value.template as < double > (); }
-#line 400 "agent_parser.cc"
+#line 405 "agent_parser.cc"
         break;
 
       case symbol_kind::S_BOOLEAN: // "boolean"
-#line 116 "agent_parser.yy"
+#line 121 "agent_parser.yy"
                  { yyoutput << yysym.value.template as < bool > (); }
-#line 406 "agent_parser.cc"
+#line 411 "agent_parser.cc"
         break;
 
       case symbol_kind::S_value: // value
-#line 116 "agent_parser.yy"
+#line 121 "agent_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 412 "agent_parser.cc"
+#line 417 "agent_parser.cc"
         break;
 
       case symbol_kind::S_map_value: // map_value
-#line 116 "agent_parser.yy"
+#line 121 "agent_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 418 "agent_parser.cc"
+#line 423 "agent_parser.cc"
         break;
 
       case symbol_kind::S_socket_type_value: // socket_type_value
-#line 116 "agent_parser.yy"
+#line 121 "agent_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 424 "agent_parser.cc"
+#line 429 "agent_parser.cc"
         break;
 
       case symbol_kind::S_auth_type_value: // auth_type_value
-#line 116 "agent_parser.yy"
+#line 121 "agent_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 430 "agent_parser.cc"
+#line 435 "agent_parser.cc"
         break;
 
       default:
@@ -700,224 +705,224 @@ namespace isc { namespace agent {
           switch (yyn)
             {
   case 2: // $@1: %empty
-#line 127 "agent_parser.yy"
+#line 132 "agent_parser.yy"
                        { ctx.ctx_ = ctx.NO_KEYWORDS; }
-#line 706 "agent_parser.cc"
+#line 711 "agent_parser.cc"
     break;
 
   case 4: // $@2: %empty
-#line 128 "agent_parser.yy"
+#line 133 "agent_parser.yy"
                        { ctx.ctx_ = ctx.CONFIG; }
-#line 712 "agent_parser.cc"
+#line 717 "agent_parser.cc"
     break;
 
   case 6: // $@3: %empty
-#line 129 "agent_parser.yy"
+#line 134 "agent_parser.yy"
                        { ctx.ctx_ = ctx.AGENT; }
-#line 718 "agent_parser.cc"
+#line 723 "agent_parser.cc"
     break;
 
   case 8: // $@4: %empty
-#line 137 "agent_parser.yy"
+#line 142 "agent_parser.yy"
                           {
     // Parse the Control-agent map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 728 "agent_parser.cc"
+#line 733 "agent_parser.cc"
     break;
 
   case 9: // sub_agent: "{" $@4 global_params "}"
-#line 141 "agent_parser.yy"
+#line 146 "agent_parser.yy"
                                {
     // parsing completed
 }
-#line 736 "agent_parser.cc"
+#line 741 "agent_parser.cc"
     break;
 
   case 10: // json: value
-#line 148 "agent_parser.yy"
+#line 153 "agent_parser.yy"
             {
     // Push back the JSON value on the stack
     ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ());
 }
-#line 745 "agent_parser.cc"
+#line 750 "agent_parser.cc"
     break;
 
   case 11: // value: "integer"
-#line 154 "agent_parser.yy"
+#line 159 "agent_parser.yy"
                { yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); }
-#line 751 "agent_parser.cc"
+#line 756 "agent_parser.cc"
     break;
 
   case 12: // value: "floating point"
-#line 155 "agent_parser.yy"
+#line 160 "agent_parser.yy"
              { yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); }
-#line 757 "agent_parser.cc"
+#line 762 "agent_parser.cc"
     break;
 
   case 13: // value: "boolean"
-#line 156 "agent_parser.yy"
+#line 161 "agent_parser.yy"
                { yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); }
-#line 763 "agent_parser.cc"
+#line 768 "agent_parser.cc"
     break;
 
   case 14: // value: "constant string"
-#line 157 "agent_parser.yy"
+#line 162 "agent_parser.yy"
               { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); }
-#line 769 "agent_parser.cc"
+#line 774 "agent_parser.cc"
     break;
 
   case 15: // value: "null"
-#line 158 "agent_parser.yy"
+#line 163 "agent_parser.yy"
                  { yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
-#line 775 "agent_parser.cc"
+#line 780 "agent_parser.cc"
     break;
 
   case 16: // value: map
-#line 159 "agent_parser.yy"
+#line 164 "agent_parser.yy"
            { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 781 "agent_parser.cc"
+#line 786 "agent_parser.cc"
     break;
 
   case 17: // value: list_generic
-#line 160 "agent_parser.yy"
+#line 165 "agent_parser.yy"
                     { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 787 "agent_parser.cc"
+#line 792 "agent_parser.cc"
     break;
 
   case 18: // $@5: %empty
-#line 164 "agent_parser.yy"
+#line 169 "agent_parser.yy"
                     {
     // This code is executed when we're about to start parsing
     // the content of the map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 798 "agent_parser.cc"
+#line 803 "agent_parser.cc"
     break;
 
   case 19: // map: "{" $@5 map_content "}"
-#line 169 "agent_parser.yy"
+#line 174 "agent_parser.yy"
                              {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
     // for it.
 }
-#line 808 "agent_parser.cc"
+#line 813 "agent_parser.cc"
     break;
 
   case 20: // map_value: map
-#line 175 "agent_parser.yy"
+#line 180 "agent_parser.yy"
                { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 814 "agent_parser.cc"
+#line 819 "agent_parser.cc"
     break;
 
   case 23: // not_empty_map: "constant string" ":" value
-#line 189 "agent_parser.yy"
+#line 194 "agent_parser.yy"
                                   {
                   // map containing a single entry
                   ctx.unique(yystack_[2].value.as < std::string > (), ctx.loc2pos(yystack_[2].location));
                   ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
                   }
-#line 824 "agent_parser.cc"
+#line 829 "agent_parser.cc"
     break;
 
   case 24: // not_empty_map: not_empty_map "," "constant string" ":" value
-#line 194 "agent_parser.yy"
+#line 199 "agent_parser.yy"
                                                       {
                   // map consisting of a shorter map followed by
                   // comma and string:value
                   ctx.unique(yystack_[2].value.as < std::string > (), ctx.loc2pos(yystack_[2].location));
                   ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
                   }
-#line 835 "agent_parser.cc"
+#line 840 "agent_parser.cc"
     break;
 
   case 25: // not_empty_map: not_empty_map ","
-#line 200 "agent_parser.yy"
+#line 205 "agent_parser.yy"
                                    {
                  ctx.warnAboutExtraCommas(yystack_[0].location);
                  }
-#line 843 "agent_parser.cc"
+#line 848 "agent_parser.cc"
     break;
 
   case 26: // $@6: %empty
-#line 205 "agent_parser.yy"
+#line 210 "agent_parser.yy"
                               {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
 }
-#line 852 "agent_parser.cc"
+#line 857 "agent_parser.cc"
     break;
 
   case 27: // list_generic: "[" $@6 list_content "]"
-#line 208 "agent_parser.yy"
+#line 213 "agent_parser.yy"
                                {
 }
-#line 859 "agent_parser.cc"
+#line 864 "agent_parser.cc"
     break;
 
   case 30: // not_empty_list: value
-#line 215 "agent_parser.yy"
+#line 220 "agent_parser.yy"
                       {
                   // List consisting of a single element.
                   ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
                   }
-#line 868 "agent_parser.cc"
+#line 873 "agent_parser.cc"
     break;
 
   case 31: // not_empty_list: not_empty_list "," value
-#line 219 "agent_parser.yy"
+#line 224 "agent_parser.yy"
                                            {
                   // List ending with , and a value.
                   ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
                   }
-#line 877 "agent_parser.cc"
+#line 882 "agent_parser.cc"
     break;
 
   case 32: // not_empty_list: not_empty_list ","
-#line 223 "agent_parser.yy"
+#line 228 "agent_parser.yy"
                                      {
                   ctx.warnAboutExtraCommas(yystack_[0].location);
                   }
-#line 885 "agent_parser.cc"
+#line 890 "agent_parser.cc"
     break;
 
   case 33: // unknown_map_entry: "constant string" ":"
-#line 235 "agent_parser.yy"
+#line 240 "agent_parser.yy"
                                 {
     const std::string& where = ctx.contextName();
     const std::string& keyword = yystack_[1].value.as < std::string > ();
     error(yystack_[1].location,
           "got unexpected keyword \"" + keyword + "\" in " + where + " map.");
 }
-#line 896 "agent_parser.cc"
+#line 901 "agent_parser.cc"
     break;
 
   case 34: // $@7: %empty
-#line 243 "agent_parser.yy"
+#line 248 "agent_parser.yy"
                                  {
     // This code is executed when we're about to start parsing
     // the content of the map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 907 "agent_parser.cc"
+#line 912 "agent_parser.cc"
     break;
 
   case 35: // agent_syntax_map: "{" $@7 global_object "}"
-#line 248 "agent_parser.yy"
+#line 253 "agent_parser.yy"
                                {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
     // for it.
 }
-#line 917 "agent_parser.cc"
+#line 922 "agent_parser.cc"
     break;
 
   case 36: // $@8: %empty
-#line 255 "agent_parser.yy"
+#line 260 "agent_parser.yy"
                              {
     // Let's create a MapElement that will represent it, add it to the
     // top level map (that's already on the stack) and put the new map
@@ -929,142 +934,142 @@ namespace isc { namespace agent {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.AGENT);
 }
-#line 933 "agent_parser.cc"
+#line 938 "agent_parser.cc"
     break;
 
   case 37: // global_object: "Control-agent" $@8 ":" "{" global_params "}"
-#line 265 "agent_parser.yy"
+#line 270 "agent_parser.yy"
                                                     {
     // Ok, we're done with parsing control-agent. Let's take the map
     // off the stack.
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 944 "agent_parser.cc"
+#line 949 "agent_parser.cc"
     break;
 
   case 39: // global_object_comma: global_object ","
-#line 274 "agent_parser.yy"
+#line 279 "agent_parser.yy"
                                          {
     ctx.warnAboutExtraCommas(yystack_[0].location);
 }
-#line 952 "agent_parser.cc"
+#line 957 "agent_parser.cc"
     break;
 
   case 42: // global_params: global_params ","
-#line 280 "agent_parser.yy"
+#line 285 "agent_parser.yy"
                                    {
                  ctx.warnAboutExtraCommas(yystack_[0].location);
                  }
-#line 960 "agent_parser.cc"
+#line 965 "agent_parser.cc"
     break;
 
   case 56: // $@9: %empty
-#line 302 "agent_parser.yy"
+#line 307 "agent_parser.yy"
                      {
     ctx.unique("http-host", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 969 "agent_parser.cc"
+#line 974 "agent_parser.cc"
     break;
 
   case 57: // http_host: "http-host" $@9 ":" "constant string"
-#line 305 "agent_parser.yy"
+#line 310 "agent_parser.yy"
                {
     ElementPtr host(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("http-host", host);
     ctx.leave();
 }
-#line 979 "agent_parser.cc"
+#line 984 "agent_parser.cc"
     break;
 
   case 58: // http_port: "http-port" ":" "integer"
-#line 311 "agent_parser.yy"
+#line 316 "agent_parser.yy"
                                    {
     ctx.unique("http-port", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("http-port", prf);
 }
-#line 989 "agent_parser.cc"
+#line 994 "agent_parser.cc"
     break;
 
   case 59: // $@10: %empty
-#line 317 "agent_parser.yy"
+#line 322 "agent_parser.yy"
                            {
     ctx.unique("trust-anchor", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 998 "agent_parser.cc"
+#line 1003 "agent_parser.cc"
     break;
 
   case 60: // trust_anchor: "trust-anchor" $@10 ":" "constant string"
-#line 320 "agent_parser.yy"
+#line 325 "agent_parser.yy"
                {
     ElementPtr ca(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("trust-anchor", ca);
     ctx.leave();
 }
-#line 1008 "agent_parser.cc"
+#line 1013 "agent_parser.cc"
     break;
 
   case 61: // $@11: %empty
-#line 326 "agent_parser.yy"
+#line 331 "agent_parser.yy"
                      {
     ctx.unique("cert-file", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1017 "agent_parser.cc"
+#line 1022 "agent_parser.cc"
     break;
 
   case 62: // cert_file: "cert-file" $@11 ":" "constant string"
-#line 329 "agent_parser.yy"
+#line 334 "agent_parser.yy"
                {
     ElementPtr cert(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("cert-file", cert);
     ctx.leave();
 }
-#line 1027 "agent_parser.cc"
+#line 1032 "agent_parser.cc"
     break;
 
   case 63: // $@12: %empty
-#line 335 "agent_parser.yy"
+#line 340 "agent_parser.yy"
                    {
     ctx.unique("key-file", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1036 "agent_parser.cc"
+#line 1041 "agent_parser.cc"
     break;
 
   case 64: // key_file: "key-file" $@12 ":" "constant string"
-#line 338 "agent_parser.yy"
+#line 343 "agent_parser.yy"
                {
     ElementPtr key(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("key-file", key);
     ctx.leave();
 }
-#line 1046 "agent_parser.cc"
+#line 1051 "agent_parser.cc"
     break;
 
   case 65: // cert_required: "cert-required" ":" "boolean"
-#line 344 "agent_parser.yy"
+#line 349 "agent_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 1056 "agent_parser.cc"
+#line 1061 "agent_parser.cc"
     break;
 
   case 66: // $@13: %empty
-#line 350 "agent_parser.yy"
+#line 355 "agent_parser.yy"
                            {
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1064 "agent_parser.cc"
+#line 1069 "agent_parser.cc"
     break;
 
   case 67: // user_context: "user-context" $@13 ":" map_value
-#line 352 "agent_parser.yy"
+#line 357 "agent_parser.yy"
                   {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context = yystack_[0].value.as < ElementPtr > ();
@@ -1087,19 +1092,19 @@ namespace isc { namespace agent {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 1091 "agent_parser.cc"
+#line 1096 "agent_parser.cc"
     break;
 
   case 68: // $@14: %empty
-#line 375 "agent_parser.yy"
+#line 380 "agent_parser.yy"
                  {
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1099 "agent_parser.cc"
+#line 1104 "agent_parser.cc"
     break;
 
   case 69: // comment: "comment" $@14 ":" "constant string"
-#line 377 "agent_parser.yy"
+#line 382 "agent_parser.yy"
                {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location)));
@@ -1124,11 +1129,11 @@ namespace isc { namespace agent {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 1128 "agent_parser.cc"
+#line 1133 "agent_parser.cc"
     break;
 
   case 70: // $@15: %empty
-#line 403 "agent_parser.yy"
+#line 408 "agent_parser.yy"
                                  {
     ctx.unique("hooks-libraries", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -1136,91 +1141,91 @@ namespace isc { namespace agent {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOOKS_LIBRARIES);
 }
-#line 1140 "agent_parser.cc"
+#line 1145 "agent_parser.cc"
     break;
 
   case 71: // hooks_libraries: "hooks-libraries" $@15 ":" "[" hooks_libraries_list "]"
-#line 409 "agent_parser.yy"
+#line 414 "agent_parser.yy"
                                                              {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1149 "agent_parser.cc"
+#line 1154 "agent_parser.cc"
     break;
 
   case 76: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list ","
-#line 420 "agent_parser.yy"
+#line 425 "agent_parser.yy"
                                            {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 1157 "agent_parser.cc"
+#line 1162 "agent_parser.cc"
     break;
 
   case 77: // $@16: %empty
-#line 425 "agent_parser.yy"
+#line 430 "agent_parser.yy"
                               {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1167 "agent_parser.cc"
+#line 1172 "agent_parser.cc"
     break;
 
   case 78: // hooks_library: "{" $@16 hooks_params "}"
-#line 429 "agent_parser.yy"
+#line 434 "agent_parser.yy"
                               {
     ctx.stack_.pop_back();
 }
-#line 1175 "agent_parser.cc"
+#line 1180 "agent_parser.cc"
     break;
 
   case 81: // hooks_params: hooks_params ","
-#line 435 "agent_parser.yy"
+#line 440 "agent_parser.yy"
                                  {
                 ctx.warnAboutExtraCommas(yystack_[0].location);
                 }
-#line 1183 "agent_parser.cc"
+#line 1188 "agent_parser.cc"
     break;
 
   case 85: // $@17: %empty
-#line 445 "agent_parser.yy"
+#line 450 "agent_parser.yy"
                  {
     ctx.unique("library", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1192 "agent_parser.cc"
+#line 1197 "agent_parser.cc"
     break;
 
   case 86: // library: "library" $@17 ":" "constant string"
-#line 448 "agent_parser.yy"
+#line 453 "agent_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 1202 "agent_parser.cc"
+#line 1207 "agent_parser.cc"
     break;
 
   case 87: // $@18: %empty
-#line 454 "agent_parser.yy"
+#line 459 "agent_parser.yy"
                        {
     ctx.unique("parameters", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1211 "agent_parser.cc"
+#line 1216 "agent_parser.cc"
     break;
 
   case 88: // parameters: "parameters" $@18 ":" map_value
-#line 457 "agent_parser.yy"
+#line 462 "agent_parser.yy"
                   {
     ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 1220 "agent_parser.cc"
+#line 1225 "agent_parser.cc"
     break;
 
   case 89: // $@19: %empty
-#line 465 "agent_parser.yy"
+#line 470 "agent_parser.yy"
                                                       {
     ctx.unique("control-sockets", ctx.loc2pos(yystack_[2].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[2].location)));
@@ -1228,28 +1233,28 @@ namespace isc { namespace agent {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.CONTROL_SOCKETS);
 }
-#line 1232 "agent_parser.cc"
+#line 1237 "agent_parser.cc"
     break;
 
   case 90: // control_sockets: "control-sockets" ":" "{" $@19 control_sockets_params "}"
-#line 471 "agent_parser.yy"
+#line 476 "agent_parser.yy"
                                         {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1241 "agent_parser.cc"
+#line 1246 "agent_parser.cc"
     break;
 
   case 93: // control_sockets_params: control_sockets_params ","
-#line 481 "agent_parser.yy"
+#line 486 "agent_parser.yy"
                                                      {
                           ctx.warnAboutExtraCommas(yystack_[0].location);
                           }
-#line 1249 "agent_parser.cc"
+#line 1254 "agent_parser.cc"
     break;
 
   case 98: // $@20: %empty
-#line 495 "agent_parser.yy"
+#line 500 "agent_parser.yy"
                                   {
     ctx.unique("dhcp4", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1257,20 +1262,20 @@ namespace isc { namespace agent {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SERVER);
 }
-#line 1261 "agent_parser.cc"
+#line 1266 "agent_parser.cc"
     break;
 
   case 99: // dhcp4_server_socket: "dhcp4" $@20 ":" "{" control_socket_params "}"
-#line 501 "agent_parser.yy"
+#line 506 "agent_parser.yy"
                                                             {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1270 "agent_parser.cc"
+#line 1275 "agent_parser.cc"
     break;
 
   case 100: // $@21: %empty
-#line 507 "agent_parser.yy"
+#line 512 "agent_parser.yy"
                                   {
     ctx.unique("dhcp6", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1278,20 +1283,20 @@ namespace isc { namespace agent {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SERVER);
 }
-#line 1282 "agent_parser.cc"
+#line 1287 "agent_parser.cc"
     break;
 
   case 101: // dhcp6_server_socket: "dhcp6" $@21 ":" "{" control_socket_params "}"
-#line 513 "agent_parser.yy"
+#line 518 "agent_parser.yy"
                                                             {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1291 "agent_parser.cc"
+#line 1296 "agent_parser.cc"
     break;
 
   case 102: // $@22: %empty
-#line 519 "agent_parser.yy"
+#line 524 "agent_parser.yy"
                             {
     ctx.unique("d2", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1299,71 +1304,71 @@ namespace isc { namespace agent {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SERVER);
 }
-#line 1303 "agent_parser.cc"
+#line 1308 "agent_parser.cc"
     break;
 
   case 103: // d2_server_socket: "d2" $@22 ":" "{" control_socket_params "}"
-#line 525 "agent_parser.yy"
+#line 530 "agent_parser.yy"
                                                             {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1312 "agent_parser.cc"
+#line 1317 "agent_parser.cc"
     break;
 
   case 106: // control_socket_params: control_socket_params ","
-#line 533 "agent_parser.yy"
+#line 538 "agent_parser.yy"
                                                    {
                          ctx.warnAboutExtraCommas(yystack_[0].location);
                          }
-#line 1320 "agent_parser.cc"
+#line 1325 "agent_parser.cc"
     break;
 
   case 112: // $@23: %empty
-#line 547 "agent_parser.yy"
+#line 552 "agent_parser.yy"
                          {
     ctx.unique("socket-name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1329 "agent_parser.cc"
+#line 1334 "agent_parser.cc"
     break;
 
   case 113: // socket_name: "socket-name" $@23 ":" "constant string"
-#line 550 "agent_parser.yy"
+#line 555 "agent_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 1339 "agent_parser.cc"
+#line 1344 "agent_parser.cc"
     break;
 
   case 114: // $@24: %empty
-#line 557 "agent_parser.yy"
+#line 562 "agent_parser.yy"
                          {
     ctx.unique("socket-type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.SOCKET_TYPE);
 }
-#line 1348 "agent_parser.cc"
+#line 1353 "agent_parser.cc"
     break;
 
   case 115: // socket_type: "socket-type" $@24 ":" socket_type_value
-#line 560 "agent_parser.yy"
+#line 565 "agent_parser.yy"
                           {
     ctx.stack_.back()->set("socket-type", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 1357 "agent_parser.cc"
+#line 1362 "agent_parser.cc"
     break;
 
   case 116: // socket_type_value: "unix"
-#line 566 "agent_parser.yy"
+#line 571 "agent_parser.yy"
                          { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("unix", ctx.loc2pos(yystack_[0].location))); }
-#line 1363 "agent_parser.cc"
+#line 1368 "agent_parser.cc"
     break;
 
   case 117: // $@25: %empty
-#line 573 "agent_parser.yy"
+#line 578 "agent_parser.yy"
                                {
     ctx.unique("authentication", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1371,92 +1376,92 @@ namespace isc { namespace agent {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.AUTHENTICATION);
 }
-#line 1375 "agent_parser.cc"
+#line 1380 "agent_parser.cc"
     break;
 
   case 118: // authentication: "authentication" $@25 ":" "{" auth_params "}"
-#line 579 "agent_parser.yy"
+#line 584 "agent_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 1386 "agent_parser.cc"
+#line 1391 "agent_parser.cc"
     break;
 
   case 121: // auth_params: auth_params ","
-#line 588 "agent_parser.yy"
+#line 593 "agent_parser.yy"
                                {
                ctx.warnAboutExtraCommas(yystack_[0].location);
                }
-#line 1394 "agent_parser.cc"
+#line 1399 "agent_parser.cc"
     break;
 
   case 129: // $@26: %empty
-#line 602 "agent_parser.yy"
+#line 607 "agent_parser.yy"
                 {
     ctx.unique("type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.AUTH_TYPE);
 }
-#line 1403 "agent_parser.cc"
+#line 1408 "agent_parser.cc"
     break;
 
   case 130: // auth_type: "type" $@26 ":" auth_type_value
-#line 605 "agent_parser.yy"
+#line 610 "agent_parser.yy"
                         {
     ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 1412 "agent_parser.cc"
+#line 1417 "agent_parser.cc"
     break;
 
   case 131: // auth_type_value: "basic"
-#line 610 "agent_parser.yy"
+#line 615 "agent_parser.yy"
                        { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("basic", ctx.loc2pos(yystack_[0].location))); }
-#line 1418 "agent_parser.cc"
+#line 1423 "agent_parser.cc"
     break;
 
   case 132: // $@27: %empty
-#line 613 "agent_parser.yy"
+#line 618 "agent_parser.yy"
              {
     ctx.unique("realm", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1427 "agent_parser.cc"
+#line 1432 "agent_parser.cc"
     break;
 
   case 133: // realm: "realm" $@27 ":" "constant string"
-#line 616 "agent_parser.yy"
+#line 621 "agent_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 1437 "agent_parser.cc"
+#line 1442 "agent_parser.cc"
     break;
 
   case 134: // $@28: %empty
-#line 622 "agent_parser.yy"
+#line 627 "agent_parser.yy"
                      {
     ctx.unique("directory", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1446 "agent_parser.cc"
+#line 1451 "agent_parser.cc"
     break;
 
   case 135: // directory: "directory" $@28 ":" "constant string"
-#line 625 "agent_parser.yy"
+#line 630 "agent_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 1456 "agent_parser.cc"
+#line 1461 "agent_parser.cc"
     break;
 
   case 136: // $@29: %empty
-#line 631 "agent_parser.yy"
+#line 636 "agent_parser.yy"
                  {
     ctx.unique("clients", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -1464,130 +1469,130 @@ namespace isc { namespace agent {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CLIENTS);
 }
-#line 1468 "agent_parser.cc"
+#line 1473 "agent_parser.cc"
     break;
 
   case 137: // clients: "clients" $@29 ":" "[" clients_list "]"
-#line 637 "agent_parser.yy"
+#line 642 "agent_parser.yy"
                                                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1477 "agent_parser.cc"
+#line 1482 "agent_parser.cc"
     break;
 
   case 142: // not_empty_clients_list: not_empty_clients_list ","
-#line 648 "agent_parser.yy"
+#line 653 "agent_parser.yy"
                                                      {
                           ctx.warnAboutExtraCommas(yystack_[0].location);
                           }
-#line 1485 "agent_parser.cc"
+#line 1490 "agent_parser.cc"
     break;
 
   case 143: // $@30: %empty
-#line 653 "agent_parser.yy"
+#line 658 "agent_parser.yy"
                            {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1495 "agent_parser.cc"
+#line 1500 "agent_parser.cc"
     break;
 
   case 144: // basic_auth: "{" $@30 clients_params "}"
-#line 657 "agent_parser.yy"
+#line 662 "agent_parser.yy"
                                 {
     ctx.stack_.pop_back();
 }
-#line 1503 "agent_parser.cc"
+#line 1508 "agent_parser.cc"
     break;
 
   case 147: // clients_params: clients_params ","
-#line 663 "agent_parser.yy"
+#line 668 "agent_parser.yy"
                                      {
                   ctx.warnAboutExtraCommas(yystack_[0].location);
                   }
-#line 1511 "agent_parser.cc"
+#line 1516 "agent_parser.cc"
     break;
 
   case 155: // $@31: %empty
-#line 677 "agent_parser.yy"
+#line 682 "agent_parser.yy"
            {
     ctx.unique("user", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1520 "agent_parser.cc"
+#line 1525 "agent_parser.cc"
     break;
 
   case 156: // user: "user" $@31 ":" "constant string"
-#line 680 "agent_parser.yy"
+#line 685 "agent_parser.yy"
                {
     ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("user", user);
     ctx.leave();
 }
-#line 1530 "agent_parser.cc"
+#line 1535 "agent_parser.cc"
     break;
 
   case 157: // $@32: %empty
-#line 686 "agent_parser.yy"
+#line 691 "agent_parser.yy"
                      {
     ctx.unique("user-file", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1539 "agent_parser.cc"
+#line 1544 "agent_parser.cc"
     break;
 
   case 158: // user_file: "user-file" $@32 ":" "constant string"
-#line 689 "agent_parser.yy"
+#line 694 "agent_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 1549 "agent_parser.cc"
+#line 1554 "agent_parser.cc"
     break;
 
   case 159: // $@33: %empty
-#line 695 "agent_parser.yy"
+#line 700 "agent_parser.yy"
                    {
     ctx.unique("password", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1558 "agent_parser.cc"
+#line 1563 "agent_parser.cc"
     break;
 
   case 160: // password: "password" $@33 ":" "constant string"
-#line 698 "agent_parser.yy"
+#line 703 "agent_parser.yy"
                {
     ElementPtr password(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("password", password);
     ctx.leave();
 }
-#line 1568 "agent_parser.cc"
+#line 1573 "agent_parser.cc"
     break;
 
   case 161: // $@34: %empty
-#line 704 "agent_parser.yy"
+#line 709 "agent_parser.yy"
                              {
     ctx.unique("password-file", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1577 "agent_parser.cc"
+#line 1582 "agent_parser.cc"
     break;
 
   case 162: // password_file: "password-file" $@34 ":" "constant string"
-#line 707 "agent_parser.yy"
+#line 712 "agent_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 1587 "agent_parser.cc"
+#line 1592 "agent_parser.cc"
     break;
 
   case 163: // $@35: %empty
-#line 717 "agent_parser.yy"
+#line 722 "agent_parser.yy"
                  {
     ctx.unique("loggers", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -1595,102 +1600,102 @@ namespace isc { namespace agent {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.LOGGERS);
 }
-#line 1599 "agent_parser.cc"
+#line 1604 "agent_parser.cc"
     break;
 
   case 164: // loggers: "loggers" $@35 ":" "[" loggers_entries "]"
-#line 723 "agent_parser.yy"
+#line 728 "agent_parser.yy"
                                                          {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1608 "agent_parser.cc"
+#line 1613 "agent_parser.cc"
     break;
 
   case 167: // loggers_entries: loggers_entries ","
-#line 732 "agent_parser.yy"
+#line 737 "agent_parser.yy"
                                        {
                    ctx.warnAboutExtraCommas(yystack_[0].location);
                    }
-#line 1616 "agent_parser.cc"
+#line 1621 "agent_parser.cc"
     break;
 
   case 168: // $@36: %empty
-#line 738 "agent_parser.yy"
+#line 743 "agent_parser.yy"
                              {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 1626 "agent_parser.cc"
+#line 1631 "agent_parser.cc"
     break;
 
   case 169: // logger_entry: "{" $@36 logger_params "}"
-#line 742 "agent_parser.yy"
+#line 747 "agent_parser.yy"
                                {
     ctx.stack_.pop_back();
 }
-#line 1634 "agent_parser.cc"
+#line 1639 "agent_parser.cc"
     break;
 
   case 172: // logger_params: logger_params ","
-#line 748 "agent_parser.yy"
+#line 753 "agent_parser.yy"
                                    {
                  ctx.warnAboutExtraCommas(yystack_[0].location);
                  }
-#line 1642 "agent_parser.cc"
+#line 1647 "agent_parser.cc"
     break;
 
   case 180: // $@37: %empty
-#line 762 "agent_parser.yy"
+#line 767 "agent_parser.yy"
            {
     ctx.unique("name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1651 "agent_parser.cc"
+#line 1656 "agent_parser.cc"
     break;
 
   case 181: // name: "name" $@37 ":" "constant string"
-#line 765 "agent_parser.yy"
+#line 770 "agent_parser.yy"
                {
     ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("name", name);
     ctx.leave();
 }
-#line 1661 "agent_parser.cc"
+#line 1666 "agent_parser.cc"
     break;
 
   case 182: // debuglevel: "debuglevel" ":" "integer"
-#line 771 "agent_parser.yy"
+#line 776 "agent_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 1671 "agent_parser.cc"
+#line 1676 "agent_parser.cc"
     break;
 
   case 183: // $@38: %empty
-#line 777 "agent_parser.yy"
+#line 782 "agent_parser.yy"
                    {
     ctx.unique("severity", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1680 "agent_parser.cc"
+#line 1685 "agent_parser.cc"
     break;
 
   case 184: // severity: "severity" $@38 ":" "constant string"
-#line 780 "agent_parser.yy"
+#line 785 "agent_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 1690 "agent_parser.cc"
+#line 1695 "agent_parser.cc"
     break;
 
   case 185: // $@39: %empty
-#line 786 "agent_parser.yy"
+#line 791 "agent_parser.yy"
                                     {
     ctx.unique("output_options", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -1698,122 +1703,122 @@ namespace isc { namespace agent {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OUTPUT_OPTIONS);
 }
-#line 1702 "agent_parser.cc"
+#line 1707 "agent_parser.cc"
     break;
 
   case 186: // output_options_list: "output_options" $@39 ":" "[" output_options_list_content "]"
-#line 792 "agent_parser.yy"
+#line 797 "agent_parser.yy"
                                                                     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1711 "agent_parser.cc"
+#line 1716 "agent_parser.cc"
     break;
 
   case 189: // output_options_list_content: output_options_list_content ","
-#line 799 "agent_parser.yy"
+#line 804 "agent_parser.yy"
                                                                {
                                ctx.warnAboutExtraCommas(yystack_[0].location);
                                }
-#line 1719 "agent_parser.cc"
+#line 1724 "agent_parser.cc"
     break;
 
   case 190: // $@40: %empty
-#line 804 "agent_parser.yy"
+#line 809 "agent_parser.yy"
                              {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1729 "agent_parser.cc"
+#line 1734 "agent_parser.cc"
     break;
 
   case 191: // output_entry: "{" $@40 output_params_list "}"
-#line 808 "agent_parser.yy"
+#line 813 "agent_parser.yy"
                                     {
     ctx.stack_.pop_back();
 }
-#line 1737 "agent_parser.cc"
+#line 1742 "agent_parser.cc"
     break;
 
   case 194: // output_params_list: output_params_list ","
-#line 814 "agent_parser.yy"
+#line 819 "agent_parser.yy"
                                         {
                  ctx.warnAboutExtraCommas(yystack_[0].location);
                  }
-#line 1745 "agent_parser.cc"
+#line 1750 "agent_parser.cc"
     break;
 
   case 200: // $@41: %empty
-#line 826 "agent_parser.yy"
+#line 831 "agent_parser.yy"
                {
     ctx.unique("output", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1754 "agent_parser.cc"
+#line 1759 "agent_parser.cc"
     break;
 
   case 201: // output: "output" $@41 ":" "constant string"
-#line 829 "agent_parser.yy"
+#line 834 "agent_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 1764 "agent_parser.cc"
+#line 1769 "agent_parser.cc"
     break;
 
   case 202: // flush: "flush" ":" "boolean"
-#line 835 "agent_parser.yy"
+#line 840 "agent_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 1774 "agent_parser.cc"
+#line 1779 "agent_parser.cc"
     break;
 
   case 203: // maxsize: "maxsize" ":" "integer"
-#line 841 "agent_parser.yy"
+#line 846 "agent_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 1784 "agent_parser.cc"
+#line 1789 "agent_parser.cc"
     break;
 
   case 204: // maxver: "maxver" ":" "integer"
-#line 847 "agent_parser.yy"
+#line 852 "agent_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 1794 "agent_parser.cc"
+#line 1799 "agent_parser.cc"
     break;
 
   case 205: // $@42: %empty
-#line 853 "agent_parser.yy"
+#line 858 "agent_parser.yy"
                  {
     ctx.unique("pattern", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1803 "agent_parser.cc"
+#line 1808 "agent_parser.cc"
     break;
 
   case 206: // pattern: "pattern" $@42 ":" "constant string"
-#line 856 "agent_parser.yy"
+#line 861 "agent_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 1813 "agent_parser.cc"
+#line 1818 "agent_parser.cc"
     break;
 
 
-#line 1817 "agent_parser.cc"
+#line 1822 "agent_parser.cc"
 
             default:
               break;
@@ -2486,27 +2491,27 @@ namespace isc { namespace agent {
   const short
   AgentParser::yyrline_[] =
   {
-       0,   127,   127,   127,   128,   128,   129,   129,   137,   137,
-     148,   154,   155,   156,   157,   158,   159,   160,   164,   164,
-     175,   180,   181,   189,   194,   200,   205,   205,   211,   212,
-     215,   219,   223,   235,   243,   243,   255,   255,   271,   274,
-     278,   279,   280,   287,   288,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   302,   302,   311,   317,
-     317,   326,   326,   335,   335,   344,   350,   350,   375,   375,
-     403,   403,   414,   415,   418,   419,   420,   425,   425,   433,
-     434,   435,   438,   441,   442,   445,   445,   454,   454,   465,
-     465,   479,   480,   481,   488,   489,   490,   491,   495,   495,
-     507,   507,   519,   519,   531,   532,   533,   539,   540,   541,
-     542,   543,   547,   547,   557,   557,   566,   573,   573,   586,
-     587,   588,   593,   594,   595,   596,   597,   598,   599,   602,
-     602,   610,   613,   613,   622,   622,   631,   631,   642,   643,
-     646,   647,   648,   653,   653,   661,   662,   663,   668,   669,
-     670,   671,   672,   673,   674,   677,   677,   686,   686,   695,
-     695,   704,   704,   717,   717,   730,   731,   732,   738,   738,
-     746,   747,   748,   753,   754,   755,   756,   757,   758,   759,
-     762,   762,   771,   777,   777,   786,   786,   797,   798,   799,
-     804,   804,   812,   813,   814,   819,   820,   821,   822,   823,
-     826,   826,   835,   841,   847,   853,   853
+       0,   132,   132,   132,   133,   133,   134,   134,   142,   142,
+     153,   159,   160,   161,   162,   163,   164,   165,   169,   169,
+     180,   185,   186,   194,   199,   205,   210,   210,   216,   217,
+     220,   224,   228,   240,   248,   248,   260,   260,   276,   279,
+     283,   284,   285,   292,   293,   294,   295,   296,   297,   298,
+     299,   300,   301,   302,   303,   304,   307,   307,   316,   322,
+     322,   331,   331,   340,   340,   349,   355,   355,   380,   380,
+     408,   408,   419,   420,   423,   424,   425,   430,   430,   438,
+     439,   440,   443,   446,   447,   450,   450,   459,   459,   470,
+     470,   484,   485,   486,   493,   494,   495,   496,   500,   500,
+     512,   512,   524,   524,   536,   537,   538,   544,   545,   546,
+     547,   548,   552,   552,   562,   562,   571,   578,   578,   591,
+     592,   593,   598,   599,   600,   601,   602,   603,   604,   607,
+     607,   615,   618,   618,   627,   627,   636,   636,   647,   648,
+     651,   652,   653,   658,   658,   666,   667,   668,   673,   674,
+     675,   676,   677,   678,   679,   682,   682,   691,   691,   700,
+     700,   709,   709,   722,   722,   735,   736,   737,   743,   743,
+     751,   752,   753,   758,   759,   760,   761,   762,   763,   764,
+     767,   767,   776,   782,   782,   791,   791,   802,   803,   804,
+     809,   809,   817,   818,   819,   824,   825,   826,   827,   828,
+     831,   831,   840,   846,   852,   858,   858
   };
 
   void
@@ -2539,9 +2544,9 @@ namespace isc { namespace agent {
 
 #line 14 "agent_parser.yy"
 } } // isc::agent
-#line 2543 "agent_parser.cc"
+#line 2548 "agent_parser.cc"
 
-#line 862 "agent_parser.yy"
+#line 867 "agent_parser.yy"
 
 
 void
index 3f820cc25fc7c5255d9bf8f62efd2ddb19c2b79d..511289ae0e37a7c74f95a8dd78b32193fd3ab848 100644 (file)
@@ -1,3 +1,4 @@
+// Generated 202305171251
 // A Bison parser, made by GNU Bison 3.8.2.
 
 // Locations for Bison parsers in C++
index ba6a862ea962b24bd744d5c5824720be5dffa53c..10bd6b2c862c8dbca0aadf5b97c540eafaf73359 100644 (file)
 
 #include <d2/parser_context.h>
 
-#line 52 "d2_parser.cc"
+// Avoid warnings with the error counter.
+#if defined(__GNUC__) || defined(__clang__)
+#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
+#endif
+
+#line 57 "d2_parser.cc"
 
 
 #ifndef YY_
 
 #line 14 "d2_parser.yy"
 namespace isc { namespace d2 {
-#line 145 "d2_parser.cc"
+#line 150 "d2_parser.cc"
 
   /// Build a parser object.
   D2Parser::D2Parser (isc::d2::D2ParserContext& ctx_yyarg)
@@ -378,45 +383,45 @@ namespace isc { namespace d2 {
         switch (yykind)
     {
       case symbol_kind::S_STRING: // "constant string"
-#line 116 "d2_parser.yy"
+#line 121 "d2_parser.yy"
                  { yyoutput << yysym.value.template as < std::string > (); }
-#line 384 "d2_parser.cc"
+#line 389 "d2_parser.cc"
         break;
 
       case symbol_kind::S_INTEGER: // "integer"
-#line 116 "d2_parser.yy"
+#line 121 "d2_parser.yy"
                  { yyoutput << yysym.value.template as < int64_t > (); }
-#line 390 "d2_parser.cc"
+#line 395 "d2_parser.cc"
         break;
 
       case symbol_kind::S_FLOAT: // "floating point"
-#line 116 "d2_parser.yy"
+#line 121 "d2_parser.yy"
                  { yyoutput << yysym.value.template as < double > (); }
-#line 396 "d2_parser.cc"
+#line 401 "d2_parser.cc"
         break;
 
       case symbol_kind::S_BOOLEAN: // "boolean"
-#line 116 "d2_parser.yy"
+#line 121 "d2_parser.yy"
                  { yyoutput << yysym.value.template as < bool > (); }
-#line 402 "d2_parser.cc"
+#line 407 "d2_parser.cc"
         break;
 
       case symbol_kind::S_value: // value
-#line 116 "d2_parser.yy"
+#line 121 "d2_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 408 "d2_parser.cc"
+#line 413 "d2_parser.cc"
         break;
 
       case symbol_kind::S_map_value: // map_value
-#line 116 "d2_parser.yy"
+#line 121 "d2_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 414 "d2_parser.cc"
+#line 419 "d2_parser.cc"
         break;
 
       case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value
-#line 116 "d2_parser.yy"
+#line 121 "d2_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 420 "d2_parser.cc"
+#line 425 "d2_parser.cc"
         break;
 
       default:
@@ -689,249 +694,249 @@ namespace isc { namespace d2 {
           switch (yyn)
             {
   case 2: // $@1: %empty
-#line 125 "d2_parser.yy"
+#line 130 "d2_parser.yy"
                      { ctx.ctx_ = ctx.NO_KEYWORD; }
-#line 695 "d2_parser.cc"
+#line 700 "d2_parser.cc"
     break;
 
   case 4: // $@2: %empty
-#line 126 "d2_parser.yy"
+#line 131 "d2_parser.yy"
                          { ctx.ctx_ = ctx.CONFIG; }
-#line 701 "d2_parser.cc"
+#line 706 "d2_parser.cc"
     break;
 
   case 6: // $@3: %empty
-#line 127 "d2_parser.yy"
+#line 132 "d2_parser.yy"
                     { ctx.ctx_ = ctx.DHCPDDNS; }
-#line 707 "d2_parser.cc"
+#line 712 "d2_parser.cc"
     break;
 
   case 8: // $@4: %empty
-#line 128 "d2_parser.yy"
+#line 133 "d2_parser.yy"
                     { ctx.ctx_ = ctx.TSIG_KEY; }
-#line 713 "d2_parser.cc"
+#line 718 "d2_parser.cc"
     break;
 
   case 10: // $@5: %empty
-#line 129 "d2_parser.yy"
+#line 134 "d2_parser.yy"
                      { ctx.ctx_ = ctx.TSIG_KEYS; }
-#line 719 "d2_parser.cc"
+#line 724 "d2_parser.cc"
     break;
 
   case 12: // $@6: %empty
-#line 130 "d2_parser.yy"
+#line 135 "d2_parser.yy"
                        { ctx.ctx_ = ctx.DDNS_DOMAIN; }
-#line 725 "d2_parser.cc"
+#line 730 "d2_parser.cc"
     break;
 
   case 14: // $@7: %empty
-#line 131 "d2_parser.yy"
+#line 136 "d2_parser.yy"
                         { ctx.ctx_ = ctx.DDNS_DOMAINS; }
-#line 731 "d2_parser.cc"
+#line 736 "d2_parser.cc"
     break;
 
   case 16: // $@8: %empty
-#line 132 "d2_parser.yy"
+#line 137 "d2_parser.yy"
                       { ctx.ctx_ = ctx.DNS_SERVERS; }
-#line 737 "d2_parser.cc"
+#line 742 "d2_parser.cc"
     break;
 
   case 18: // $@9: %empty
-#line 133 "d2_parser.yy"
+#line 138 "d2_parser.yy"
                        { ctx.ctx_ = ctx.DNS_SERVERS; }
-#line 743 "d2_parser.cc"
+#line 748 "d2_parser.cc"
     break;
 
   case 20: // $@10: %empty
-#line 134 "d2_parser.yy"
+#line 139 "d2_parser.yy"
                          { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
-#line 749 "d2_parser.cc"
+#line 754 "d2_parser.cc"
     break;
 
   case 22: // value: "integer"
-#line 142 "d2_parser.yy"
+#line 147 "d2_parser.yy"
                { yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); }
-#line 755 "d2_parser.cc"
+#line 760 "d2_parser.cc"
     break;
 
   case 23: // value: "floating point"
-#line 143 "d2_parser.yy"
+#line 148 "d2_parser.yy"
              { yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); }
-#line 761 "d2_parser.cc"
+#line 766 "d2_parser.cc"
     break;
 
   case 24: // value: "boolean"
-#line 144 "d2_parser.yy"
+#line 149 "d2_parser.yy"
                { yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); }
-#line 767 "d2_parser.cc"
+#line 772 "d2_parser.cc"
     break;
 
   case 25: // value: "constant string"
-#line 145 "d2_parser.yy"
+#line 150 "d2_parser.yy"
               { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); }
-#line 773 "d2_parser.cc"
+#line 778 "d2_parser.cc"
     break;
 
   case 26: // value: "null"
-#line 146 "d2_parser.yy"
+#line 151 "d2_parser.yy"
                  { yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
-#line 779 "d2_parser.cc"
+#line 784 "d2_parser.cc"
     break;
 
   case 27: // value: map2
-#line 147 "d2_parser.yy"
+#line 152 "d2_parser.yy"
             { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 785 "d2_parser.cc"
+#line 790 "d2_parser.cc"
     break;
 
   case 28: // value: list_generic
-#line 148 "d2_parser.yy"
+#line 153 "d2_parser.yy"
                     { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 791 "d2_parser.cc"
+#line 796 "d2_parser.cc"
     break;
 
   case 29: // sub_json: value
-#line 151 "d2_parser.yy"
+#line 156 "d2_parser.yy"
                 {
     // Push back the JSON value on the stack
     ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ());
 }
-#line 800 "d2_parser.cc"
+#line 805 "d2_parser.cc"
     break;
 
   case 30: // $@11: %empty
-#line 156 "d2_parser.yy"
+#line 161 "d2_parser.yy"
                      {
     // This code is executed when we're about to start parsing
     // the content of the map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 811 "d2_parser.cc"
+#line 816 "d2_parser.cc"
     break;
 
   case 31: // map2: "{" $@11 map_content "}"
-#line 161 "d2_parser.yy"
+#line 166 "d2_parser.yy"
                              {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
     // for it.
 }
-#line 821 "d2_parser.cc"
+#line 826 "d2_parser.cc"
     break;
 
   case 32: // map_value: map2
-#line 167 "d2_parser.yy"
+#line 172 "d2_parser.yy"
                 { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 827 "d2_parser.cc"
+#line 832 "d2_parser.cc"
     break;
 
   case 35: // not_empty_map: "constant string" ":" value
-#line 174 "d2_parser.yy"
+#line 179 "d2_parser.yy"
                                   {
                   // map containing a single entry
                   ctx.unique(yystack_[2].value.as < std::string > (), ctx.loc2pos(yystack_[2].location));
                   ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
                   }
-#line 837 "d2_parser.cc"
+#line 842 "d2_parser.cc"
     break;
 
   case 36: // not_empty_map: not_empty_map "," "constant string" ":" value
-#line 179 "d2_parser.yy"
+#line 184 "d2_parser.yy"
                                                       {
                   // map consisting of a shorter map followed by
                   // comma and string:value
                   ctx.unique(yystack_[2].value.as < std::string > (), ctx.loc2pos(yystack_[2].location));
                   ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
                   }
-#line 848 "d2_parser.cc"
+#line 853 "d2_parser.cc"
     break;
 
   case 37: // not_empty_map: not_empty_map ","
-#line 185 "d2_parser.yy"
+#line 190 "d2_parser.yy"
                                    {
                   ctx.warnAboutExtraCommas(yystack_[0].location);
                   }
-#line 856 "d2_parser.cc"
+#line 861 "d2_parser.cc"
     break;
 
   case 38: // $@12: %empty
-#line 190 "d2_parser.yy"
+#line 195 "d2_parser.yy"
                               {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
 }
-#line 865 "d2_parser.cc"
+#line 870 "d2_parser.cc"
     break;
 
   case 39: // list_generic: "[" $@12 list_content "]"
-#line 193 "d2_parser.yy"
+#line 198 "d2_parser.yy"
                                {
     // list parsing complete. Put any sanity checking here
 }
-#line 873 "d2_parser.cc"
+#line 878 "d2_parser.cc"
     break;
 
   case 42: // not_empty_list: value
-#line 201 "d2_parser.yy"
+#line 206 "d2_parser.yy"
                       {
                   // List consisting of a single element.
                   ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
                   }
-#line 882 "d2_parser.cc"
+#line 887 "d2_parser.cc"
     break;
 
   case 43: // not_empty_list: not_empty_list "," value
-#line 205 "d2_parser.yy"
+#line 210 "d2_parser.yy"
                                            {
                   // List ending with , and a value.
                   ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
                   }
-#line 891 "d2_parser.cc"
+#line 896 "d2_parser.cc"
     break;
 
   case 44: // not_empty_list: not_empty_list ","
-#line 209 "d2_parser.yy"
+#line 214 "d2_parser.yy"
                                      {
                   ctx.warnAboutExtraCommas(yystack_[0].location);
                   }
-#line 899 "d2_parser.cc"
+#line 904 "d2_parser.cc"
     break;
 
   case 45: // unknown_map_entry: "constant string" ":"
-#line 219 "d2_parser.yy"
+#line 224 "d2_parser.yy"
                                 {
     const std::string& where = ctx.contextName();
     const std::string& keyword = yystack_[1].value.as < std::string > ();
     error(yystack_[1].location,
           "got unexpected keyword \"" + keyword + "\" in " + where + " map.");
 }
-#line 910 "d2_parser.cc"
+#line 915 "d2_parser.cc"
     break;
 
   case 46: // $@13: %empty
-#line 228 "d2_parser.yy"
+#line 233 "d2_parser.yy"
                            {
     // This code is executed when we're about to start parsing
     // the content of the map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 921 "d2_parser.cc"
+#line 926 "d2_parser.cc"
     break;
 
   case 47: // syntax_map: "{" $@13 global_object "}"
-#line 233 "d2_parser.yy"
+#line 238 "d2_parser.yy"
                                {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
     // for it.
 }
-#line 931 "d2_parser.cc"
+#line 936 "d2_parser.cc"
     break;
 
   case 48: // $@14: %empty
-#line 241 "d2_parser.yy"
+#line 246 "d2_parser.yy"
                         {
     ctx.unique("DhcpDdns", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -939,73 +944,73 @@ namespace isc { namespace d2 {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.DHCPDDNS);
 }
-#line 943 "d2_parser.cc"
+#line 948 "d2_parser.cc"
     break;
 
   case 49: // global_object: "DhcpDdns" $@14 ":" "{" dhcpddns_params "}"
-#line 247 "d2_parser.yy"
+#line 252 "d2_parser.yy"
                                                       {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 952 "d2_parser.cc"
+#line 957 "d2_parser.cc"
     break;
 
   case 51: // global_object_comma: global_object ","
-#line 254 "d2_parser.yy"
+#line 259 "d2_parser.yy"
                                          {
     ctx.warnAboutExtraCommas(yystack_[0].location);
 }
-#line 960 "d2_parser.cc"
+#line 965 "d2_parser.cc"
     break;
 
   case 52: // $@15: %empty
-#line 258 "d2_parser.yy"
+#line 263 "d2_parser.yy"
                              {
     // Parse the dhcpddns map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 970 "d2_parser.cc"
+#line 975 "d2_parser.cc"
     break;
 
   case 53: // sub_dhcpddns: "{" $@15 dhcpddns_params "}"
-#line 262 "d2_parser.yy"
+#line 267 "d2_parser.yy"
                                  {
     // parsing completed
 }
-#line 978 "d2_parser.cc"
+#line 983 "d2_parser.cc"
     break;
 
   case 56: // dhcpddns_params: dhcpddns_params ","
-#line 268 "d2_parser.yy"
+#line 273 "d2_parser.yy"
                                        {
                    ctx.warnAboutExtraCommas(yystack_[0].location);
                    }
-#line 986 "d2_parser.cc"
+#line 991 "d2_parser.cc"
     break;
 
   case 71: // $@16: %empty
-#line 290 "d2_parser.yy"
+#line 295 "d2_parser.yy"
                        {
     ctx.unique("ip-address", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 995 "d2_parser.cc"
+#line 1000 "d2_parser.cc"
     break;
 
   case 72: // ip_address: "ip-address" $@16 ":" "constant string"
-#line 293 "d2_parser.yy"
+#line 298 "d2_parser.yy"
                {
     ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-address", s);
     ctx.leave();
 }
-#line 1005 "d2_parser.cc"
+#line 1010 "d2_parser.cc"
     break;
 
   case 73: // port: "port" ":" "integer"
-#line 299 "d2_parser.yy"
+#line 304 "d2_parser.yy"
                          {
     ctx.unique("port", ctx.loc2pos(yystack_[2].location));
     if (yystack_[0].value.as < int64_t > () <= 0 || yystack_[0].value.as < int64_t > () >= 65536 ) {
@@ -1014,11 +1019,11 @@ namespace isc { namespace d2 {
     ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("port", i);
 }
-#line 1018 "d2_parser.cc"
+#line 1023 "d2_parser.cc"
     break;
 
   case 74: // dns_server_timeout: "dns-server-timeout" ":" "integer"
-#line 308 "d2_parser.yy"
+#line 313 "d2_parser.yy"
                                                      {
     ctx.unique("dns-server-timeout", ctx.loc2pos(yystack_[2].location));
     if (yystack_[0].value.as < int64_t > () <= 0) {
@@ -1028,68 +1033,68 @@ namespace isc { namespace d2 {
         ctx.stack_.back()->set("dns-server-timeout", i);
     }
 }
-#line 1032 "d2_parser.cc"
+#line 1037 "d2_parser.cc"
     break;
 
   case 75: // $@17: %empty
-#line 318 "d2_parser.yy"
+#line 323 "d2_parser.yy"
                            {
     ctx.unique("ncr-protocol", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NCR_PROTOCOL);
 }
-#line 1041 "d2_parser.cc"
+#line 1046 "d2_parser.cc"
     break;
 
   case 76: // ncr_protocol: "ncr-protocol" $@17 ":" ncr_protocol_value
-#line 321 "d2_parser.yy"
+#line 326 "d2_parser.yy"
                            {
     ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 1050 "d2_parser.cc"
+#line 1055 "d2_parser.cc"
     break;
 
   case 77: // ncr_protocol_value: "UDP"
-#line 327 "d2_parser.yy"
+#line 332 "d2_parser.yy"
         { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
-#line 1056 "d2_parser.cc"
+#line 1061 "d2_parser.cc"
     break;
 
   case 78: // ncr_protocol_value: "TCP"
-#line 328 "d2_parser.yy"
+#line 333 "d2_parser.yy"
         { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
-#line 1062 "d2_parser.cc"
+#line 1067 "d2_parser.cc"
     break;
 
   case 79: // $@18: %empty
-#line 331 "d2_parser.yy"
+#line 336 "d2_parser.yy"
                        {
     ctx.unique("ncr-format", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NCR_FORMAT);
 }
-#line 1071 "d2_parser.cc"
+#line 1076 "d2_parser.cc"
     break;
 
   case 80: // ncr_format: "ncr-format" $@18 ":" "JSON"
-#line 334 "d2_parser.yy"
+#line 339 "d2_parser.yy"
              {
     ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ncr-format", json);
     ctx.leave();
 }
-#line 1081 "d2_parser.cc"
+#line 1086 "d2_parser.cc"
     break;
 
   case 81: // $@19: %empty
-#line 340 "d2_parser.yy"
+#line 345 "d2_parser.yy"
                            {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1089 "d2_parser.cc"
+#line 1094 "d2_parser.cc"
     break;
 
   case 82: // user_context: "user-context" $@19 ":" map_value
-#line 342 "d2_parser.yy"
+#line 347 "d2_parser.yy"
                   {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context = yystack_[0].value.as < ElementPtr > ();
@@ -1112,19 +1117,19 @@ namespace isc { namespace d2 {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 1116 "d2_parser.cc"
+#line 1121 "d2_parser.cc"
     break;
 
   case 83: // $@20: %empty
-#line 365 "d2_parser.yy"
+#line 370 "d2_parser.yy"
                  {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1124 "d2_parser.cc"
+#line 1129 "d2_parser.cc"
     break;
 
   case 84: // comment: "comment" $@20 ":" "constant string"
-#line 367 "d2_parser.yy"
+#line 372 "d2_parser.yy"
                {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location)));
@@ -1149,11 +1154,11 @@ namespace isc { namespace d2 {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 1153 "d2_parser.cc"
+#line 1158 "d2_parser.cc"
     break;
 
   case 85: // $@21: %empty
-#line 392 "d2_parser.yy"
+#line 397 "d2_parser.yy"
                             {
     ctx.unique("forward-ddns", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1161,20 +1166,20 @@ namespace isc { namespace d2 {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.FORWARD_DDNS);
 }
-#line 1165 "d2_parser.cc"
+#line 1170 "d2_parser.cc"
     break;
 
   case 86: // forward_ddns: "forward-ddns" $@21 ":" "{" ddns_mgr_params "}"
-#line 398 "d2_parser.yy"
+#line 403 "d2_parser.yy"
                                                       {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1174 "d2_parser.cc"
+#line 1179 "d2_parser.cc"
     break;
 
   case 87: // $@22: %empty
-#line 403 "d2_parser.yy"
+#line 408 "d2_parser.yy"
                             {
     ctx.unique("reverse-ddns", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1182,28 +1187,28 @@ namespace isc { namespace d2 {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.REVERSE_DDNS);
 }
-#line 1186 "d2_parser.cc"
+#line 1191 "d2_parser.cc"
     break;
 
   case 88: // reverse_ddns: "reverse-ddns" $@22 ":" "{" ddns_mgr_params "}"
-#line 409 "d2_parser.yy"
+#line 414 "d2_parser.yy"
                                                       {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1195 "d2_parser.cc"
+#line 1200 "d2_parser.cc"
     break;
 
   case 93: // not_empty_ddns_mgr_params: ddns_mgr_params ","
-#line 420 "d2_parser.yy"
+#line 425 "d2_parser.yy"
                                                  {
                              ctx.warnAboutExtraCommas(yystack_[0].location);
                              }
-#line 1203 "d2_parser.cc"
+#line 1208 "d2_parser.cc"
     break;
 
   case 96: // $@23: %empty
-#line 431 "d2_parser.yy"
+#line 436 "d2_parser.yy"
                            {
     ctx.unique("ddns-domains", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -1211,97 +1216,97 @@ namespace isc { namespace d2 {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.DDNS_DOMAINS);
 }
-#line 1215 "d2_parser.cc"
+#line 1220 "d2_parser.cc"
     break;
 
   case 97: // ddns_domains: "ddns-domains" $@23 ":" "[" ddns_domain_list "]"
-#line 437 "d2_parser.yy"
+#line 442 "d2_parser.yy"
                                                          {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1224 "d2_parser.cc"
+#line 1229 "d2_parser.cc"
     break;
 
   case 98: // $@24: %empty
-#line 442 "d2_parser.yy"
+#line 447 "d2_parser.yy"
                                   {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
 }
-#line 1233 "d2_parser.cc"
+#line 1238 "d2_parser.cc"
     break;
 
   case 99: // sub_ddns_domains: "[" $@24 ddns_domain_list "]"
-#line 445 "d2_parser.yy"
+#line 450 "d2_parser.yy"
                                    {
     // parsing completed
 }
-#line 1241 "d2_parser.cc"
+#line 1246 "d2_parser.cc"
     break;
 
   case 104: // not_empty_ddns_domain_list: not_empty_ddns_domain_list ","
-#line 455 "d2_parser.yy"
+#line 460 "d2_parser.yy"
                                                            {
                             ctx.warnAboutExtraCommas(yystack_[0].location);
                             }
-#line 1249 "d2_parser.cc"
+#line 1254 "d2_parser.cc"
     break;
 
   case 105: // $@25: %empty
-#line 460 "d2_parser.yy"
+#line 465 "d2_parser.yy"
                             {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1259 "d2_parser.cc"
+#line 1264 "d2_parser.cc"
     break;
 
   case 106: // ddns_domain: "{" $@25 ddns_domain_params "}"
-#line 464 "d2_parser.yy"
+#line 469 "d2_parser.yy"
                                     {
     ctx.stack_.pop_back();
 }
-#line 1267 "d2_parser.cc"
+#line 1272 "d2_parser.cc"
     break;
 
   case 107: // $@26: %empty
-#line 468 "d2_parser.yy"
+#line 473 "d2_parser.yy"
                                 {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1276 "d2_parser.cc"
+#line 1281 "d2_parser.cc"
     break;
 
   case 108: // sub_ddns_domain: "{" $@26 ddns_domain_params "}"
-#line 471 "d2_parser.yy"
+#line 476 "d2_parser.yy"
                                     {
     // parsing completed
 }
-#line 1284 "d2_parser.cc"
+#line 1289 "d2_parser.cc"
     break;
 
   case 111: // ddns_domain_params: ddns_domain_params ","
-#line 477 "d2_parser.yy"
+#line 482 "d2_parser.yy"
                                              {
                       ctx.warnAboutExtraCommas(yystack_[0].location);
                       }
-#line 1292 "d2_parser.cc"
+#line 1297 "d2_parser.cc"
     break;
 
   case 118: // $@27: %empty
-#line 491 "d2_parser.yy"
+#line 496 "d2_parser.yy"
                        {
     ctx.unique("name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1301 "d2_parser.cc"
+#line 1306 "d2_parser.cc"
     break;
 
   case 119: // ddns_domain_name: "name" $@27 ":" "constant string"
-#line 494 "d2_parser.yy"
+#line 499 "d2_parser.yy"
                {
     if (yystack_[0].value.as < std::string > () == "") {
         error(yystack_[1].location, "Ddns domain name cannot be blank");
@@ -1311,31 +1316,31 @@ namespace isc { namespace d2 {
     ctx.stack_.back()->set("name", name);
     ctx.leave();
 }
-#line 1315 "d2_parser.cc"
+#line 1320 "d2_parser.cc"
     break;
 
   case 120: // $@28: %empty
-#line 504 "d2_parser.yy"
+#line 509 "d2_parser.yy"
                         {
     ctx.unique("key-name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1324 "d2_parser.cc"
+#line 1329 "d2_parser.cc"
     break;
 
   case 121: // ddns_key_name: "key-name" $@28 ":" "constant string"
-#line 507 "d2_parser.yy"
+#line 512 "d2_parser.yy"
                {
     ElementPtr elem(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("key-name", name);
     ctx.leave();
 }
-#line 1335 "d2_parser.cc"
+#line 1340 "d2_parser.cc"
     break;
 
   case 122: // $@29: %empty
-#line 517 "d2_parser.yy"
+#line 522 "d2_parser.yy"
                          {
     ctx.unique("dns-servers", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -1343,97 +1348,97 @@ namespace isc { namespace d2 {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.DNS_SERVERS);
 }
-#line 1347 "d2_parser.cc"
+#line 1352 "d2_parser.cc"
     break;
 
   case 123: // dns_servers: "dns-servers" $@29 ":" "[" dns_server_list "]"
-#line 523 "d2_parser.yy"
+#line 528 "d2_parser.yy"
                                                         {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1356 "d2_parser.cc"
+#line 1361 "d2_parser.cc"
     break;
 
   case 124: // $@30: %empty
-#line 528 "d2_parser.yy"
+#line 533 "d2_parser.yy"
                                  {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
 }
-#line 1365 "d2_parser.cc"
+#line 1370 "d2_parser.cc"
     break;
 
   case 125: // sub_dns_servers: "[" $@30 dns_server_list "]"
-#line 531 "d2_parser.yy"
+#line 536 "d2_parser.yy"
                                   {
     // parsing completed
 }
-#line 1373 "d2_parser.cc"
+#line 1378 "d2_parser.cc"
     break;
 
   case 128: // dns_server_list: dns_server_list ","
-#line 537 "d2_parser.yy"
+#line 542 "d2_parser.yy"
                                        {
                    ctx.warnAboutExtraCommas(yystack_[0].location);
                    }
-#line 1381 "d2_parser.cc"
+#line 1386 "d2_parser.cc"
     break;
 
   case 129: // $@31: %empty
-#line 542 "d2_parser.yy"
+#line 547 "d2_parser.yy"
                            {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1391 "d2_parser.cc"
+#line 1396 "d2_parser.cc"
     break;
 
   case 130: // dns_server: "{" $@31 dns_server_params "}"
-#line 546 "d2_parser.yy"
+#line 551 "d2_parser.yy"
                                    {
     ctx.stack_.pop_back();
 }
-#line 1399 "d2_parser.cc"
+#line 1404 "d2_parser.cc"
     break;
 
   case 131: // $@32: %empty
-#line 550 "d2_parser.yy"
+#line 555 "d2_parser.yy"
                                {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1408 "d2_parser.cc"
+#line 1413 "d2_parser.cc"
     break;
 
   case 132: // sub_dns_server: "{" $@32 dns_server_params "}"
-#line 553 "d2_parser.yy"
+#line 558 "d2_parser.yy"
                                    {
     // parsing completed
 }
-#line 1416 "d2_parser.cc"
+#line 1421 "d2_parser.cc"
     break;
 
   case 135: // dns_server_params: dns_server_params ","
-#line 559 "d2_parser.yy"
+#line 564 "d2_parser.yy"
                                          {
                    ctx.warnAboutExtraCommas(yystack_[0].location);
                    }
-#line 1424 "d2_parser.cc"
+#line 1429 "d2_parser.cc"
     break;
 
   case 143: // $@33: %empty
-#line 573 "d2_parser.yy"
+#line 578 "d2_parser.yy"
                               {
     ctx.unique("hostname", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1433 "d2_parser.cc"
+#line 1438 "d2_parser.cc"
     break;
 
   case 144: // dns_server_hostname: "hostname" $@33 ":" "constant string"
-#line 576 "d2_parser.yy"
+#line 581 "d2_parser.yy"
                {
     if (yystack_[0].value.as < std::string > () != "") {
         error(yystack_[1].location, "hostname is not yet supported");
@@ -1443,30 +1448,30 @@ namespace isc { namespace d2 {
     ctx.stack_.back()->set("hostname", name);
     ctx.leave();
 }
-#line 1447 "d2_parser.cc"
+#line 1452 "d2_parser.cc"
     break;
 
   case 145: // $@34: %empty
-#line 586 "d2_parser.yy"
+#line 591 "d2_parser.yy"
                                   {
     ctx.unique("ip-address", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1456 "d2_parser.cc"
+#line 1461 "d2_parser.cc"
     break;
 
   case 146: // dns_server_ip_address: "ip-address" $@34 ":" "constant string"
-#line 589 "d2_parser.yy"
+#line 594 "d2_parser.yy"
                {
     ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-address", s);
     ctx.leave();
 }
-#line 1466 "d2_parser.cc"
+#line 1471 "d2_parser.cc"
     break;
 
   case 147: // dns_server_port: "port" ":" "integer"
-#line 595 "d2_parser.yy"
+#line 600 "d2_parser.yy"
                                     {
     ctx.unique("port", ctx.loc2pos(yystack_[2].location));
     if (yystack_[0].value.as < int64_t > () <= 0 || yystack_[0].value.as < int64_t > () >= 65536 ) {
@@ -1475,11 +1480,11 @@ namespace isc { namespace d2 {
     ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("port", i);
 }
-#line 1479 "d2_parser.cc"
+#line 1484 "d2_parser.cc"
     break;
 
   case 148: // $@35: %empty
-#line 610 "d2_parser.yy"
+#line 615 "d2_parser.yy"
                      {
     ctx.unique("tsig-keys", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -1487,98 +1492,98 @@ namespace isc { namespace d2 {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.TSIG_KEYS);
 }
-#line 1491 "d2_parser.cc"
+#line 1496 "d2_parser.cc"
     break;
 
   case 149: // tsig_keys: "tsig-keys" $@35 ":" "[" tsig_keys_list "]"
-#line 616 "d2_parser.yy"
+#line 621 "d2_parser.yy"
                                                        {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1500 "d2_parser.cc"
+#line 1505 "d2_parser.cc"
     break;
 
   case 150: // $@36: %empty
-#line 621 "d2_parser.yy"
+#line 626 "d2_parser.yy"
                                {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
 }
-#line 1509 "d2_parser.cc"
+#line 1514 "d2_parser.cc"
     break;
 
   case 151: // sub_tsig_keys: "[" $@36 tsig_keys_list "]"
-#line 624 "d2_parser.yy"
+#line 629 "d2_parser.yy"
                                  {
     // parsing completed
 }
-#line 1517 "d2_parser.cc"
+#line 1522 "d2_parser.cc"
     break;
 
   case 156: // not_empty_tsig_keys_list: not_empty_tsig_keys_list ","
-#line 634 "d2_parser.yy"
+#line 639 "d2_parser.yy"
                                                          {
                             ctx.warnAboutExtraCommas(yystack_[0].location);
                             }
-#line 1525 "d2_parser.cc"
+#line 1530 "d2_parser.cc"
     break;
 
   case 157: // $@37: %empty
-#line 639 "d2_parser.yy"
+#line 644 "d2_parser.yy"
                          {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1535 "d2_parser.cc"
+#line 1540 "d2_parser.cc"
     break;
 
   case 158: // tsig_key: "{" $@37 tsig_key_params "}"
-#line 643 "d2_parser.yy"
+#line 648 "d2_parser.yy"
                                  {
     ctx.stack_.pop_back();
 }
-#line 1543 "d2_parser.cc"
+#line 1548 "d2_parser.cc"
     break;
 
   case 159: // $@38: %empty
-#line 647 "d2_parser.yy"
+#line 652 "d2_parser.yy"
                              {
     // Parse tsig key list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1553 "d2_parser.cc"
+#line 1558 "d2_parser.cc"
     break;
 
   case 160: // sub_tsig_key: "{" $@38 tsig_key_params "}"
-#line 651 "d2_parser.yy"
+#line 656 "d2_parser.yy"
                                  {
     // parsing completed
 }
-#line 1561 "d2_parser.cc"
+#line 1566 "d2_parser.cc"
     break;
 
   case 163: // tsig_key_params: tsig_key_params ","
-#line 658 "d2_parser.yy"
+#line 663 "d2_parser.yy"
                                        {
                    ctx.warnAboutExtraCommas(yystack_[0].location);
                    }
-#line 1569 "d2_parser.cc"
+#line 1574 "d2_parser.cc"
     break;
 
   case 171: // $@39: %empty
-#line 672 "d2_parser.yy"
+#line 677 "d2_parser.yy"
                     {
     ctx.unique("name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1578 "d2_parser.cc"
+#line 1583 "d2_parser.cc"
     break;
 
   case 172: // tsig_key_name: "name" $@39 ":" "constant string"
-#line 675 "d2_parser.yy"
+#line 680 "d2_parser.yy"
                {
     if (yystack_[0].value.as < std::string > () == "") {
         error(yystack_[1].location, "TSIG key name cannot be blank");
@@ -1588,20 +1593,20 @@ namespace isc { namespace d2 {
     ctx.stack_.back()->set("name", name);
     ctx.leave();
 }
-#line 1592 "d2_parser.cc"
+#line 1597 "d2_parser.cc"
     break;
 
   case 173: // $@40: %empty
-#line 685 "d2_parser.yy"
+#line 690 "d2_parser.yy"
                               {
     ctx.unique("algorithm", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1601 "d2_parser.cc"
+#line 1606 "d2_parser.cc"
     break;
 
   case 174: // tsig_key_algorithm: "algorithm" $@40 ":" "constant string"
-#line 688 "d2_parser.yy"
+#line 693 "d2_parser.yy"
                {
     if (yystack_[0].value.as < std::string > () == "") {
         error(yystack_[1].location, "TSIG key algorithm cannot be blank");
@@ -1610,11 +1615,11 @@ namespace isc { namespace d2 {
     ctx.stack_.back()->set("algorithm", elem);
     ctx.leave();
 }
-#line 1614 "d2_parser.cc"
+#line 1619 "d2_parser.cc"
     break;
 
   case 175: // tsig_key_digest_bits: "digest-bits" ":" "integer"
-#line 697 "d2_parser.yy"
+#line 702 "d2_parser.yy"
                                                 {
     ctx.unique("digest-bits", ctx.loc2pos(yystack_[2].location));
     if (yystack_[0].value.as < int64_t > () < 0 || (yystack_[0].value.as < int64_t > () > 0  && (yystack_[0].value.as < int64_t > () % 8 != 0))) {
@@ -1623,20 +1628,20 @@ namespace isc { namespace d2 {
     ElementPtr elem(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("digest-bits", elem);
 }
-#line 1627 "d2_parser.cc"
+#line 1632 "d2_parser.cc"
     break;
 
   case 176: // $@41: %empty
-#line 706 "d2_parser.yy"
+#line 711 "d2_parser.yy"
                         {
     ctx.unique("secret", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1636 "d2_parser.cc"
+#line 1641 "d2_parser.cc"
     break;
 
   case 177: // tsig_key_secret: "secret" $@41 ":" "constant string"
-#line 709 "d2_parser.yy"
+#line 714 "d2_parser.yy"
                {
     if (yystack_[0].value.as < std::string > () == "") {
         error(yystack_[1].location, "TSIG key secret cannot be blank");
@@ -1645,11 +1650,11 @@ namespace isc { namespace d2 {
     ctx.stack_.back()->set("secret", elem);
     ctx.leave();
 }
-#line 1649 "d2_parser.cc"
+#line 1654 "d2_parser.cc"
     break;
 
   case 178: // $@42: %empty
-#line 723 "d2_parser.yy"
+#line 728 "d2_parser.yy"
                                {
     ctx.unique("control-socket", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1657,66 +1662,66 @@ namespace isc { namespace d2 {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.CONTROL_SOCKET);
 }
-#line 1661 "d2_parser.cc"
+#line 1666 "d2_parser.cc"
     break;
 
   case 179: // control_socket: "control-socket" $@42 ":" "{" control_socket_params "}"
-#line 729 "d2_parser.yy"
+#line 734 "d2_parser.yy"
                                                             {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1670 "d2_parser.cc"
+#line 1675 "d2_parser.cc"
     break;
 
   case 182: // control_socket_params: control_socket_params ","
-#line 736 "d2_parser.yy"
+#line 741 "d2_parser.yy"
                                                    {
                          ctx.warnAboutExtraCommas(yystack_[0].location);
                          }
-#line 1678 "d2_parser.cc"
+#line 1683 "d2_parser.cc"
     break;
 
   case 188: // $@43: %empty
-#line 748 "d2_parser.yy"
+#line 753 "d2_parser.yy"
                                  {
     ctx.unique("socket-type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1687 "d2_parser.cc"
+#line 1692 "d2_parser.cc"
     break;
 
   case 189: // control_socket_type: "socket-type" $@43 ":" "constant string"
-#line 751 "d2_parser.yy"
+#line 756 "d2_parser.yy"
                {
     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 1697 "d2_parser.cc"
+#line 1702 "d2_parser.cc"
     break;
 
   case 190: // $@44: %empty
-#line 757 "d2_parser.yy"
+#line 762 "d2_parser.yy"
                                  {
     ctx.unique("socket-name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1706 "d2_parser.cc"
+#line 1711 "d2_parser.cc"
     break;
 
   case 191: // control_socket_name: "socket-name" $@44 ":" "constant string"
-#line 760 "d2_parser.yy"
+#line 765 "d2_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 1716 "d2_parser.cc"
+#line 1721 "d2_parser.cc"
     break;
 
   case 192: // $@45: %empty
-#line 768 "d2_parser.yy"
+#line 773 "d2_parser.yy"
                                  {
     ctx.unique("hooks-libraries", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -1724,113 +1729,113 @@ namespace isc { namespace d2 {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOOKS_LIBRARIES);
 }
-#line 1728 "d2_parser.cc"
+#line 1733 "d2_parser.cc"
     break;
 
   case 193: // hooks_libraries: "hooks-libraries" $@45 ":" "[" hooks_libraries_list "]"
-#line 774 "d2_parser.yy"
+#line 779 "d2_parser.yy"
                                                              {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1737 "d2_parser.cc"
+#line 1742 "d2_parser.cc"
     break;
 
   case 198: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list ","
-#line 785 "d2_parser.yy"
+#line 790 "d2_parser.yy"
                                            {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 1745 "d2_parser.cc"
+#line 1750 "d2_parser.cc"
     break;
 
   case 199: // $@46: %empty
-#line 790 "d2_parser.yy"
+#line 795 "d2_parser.yy"
                               {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1755 "d2_parser.cc"
+#line 1760 "d2_parser.cc"
     break;
 
   case 200: // hooks_library: "{" $@46 hooks_params "}"
-#line 794 "d2_parser.yy"
+#line 799 "d2_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 1765 "d2_parser.cc"
+#line 1770 "d2_parser.cc"
     break;
 
   case 201: // $@47: %empty
-#line 800 "d2_parser.yy"
+#line 805 "d2_parser.yy"
                                   {
     // Parse the hooks-libraries list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1775 "d2_parser.cc"
+#line 1780 "d2_parser.cc"
     break;
 
   case 202: // sub_hooks_library: "{" $@47 hooks_params "}"
-#line 804 "d2_parser.yy"
+#line 809 "d2_parser.yy"
                               {
     // The library hooks parameter is required
     ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 1785 "d2_parser.cc"
+#line 1790 "d2_parser.cc"
     break;
 
   case 205: // hooks_params: hooks_params ","
-#line 812 "d2_parser.yy"
+#line 817 "d2_parser.yy"
                                  {
                 ctx.warnAboutExtraCommas(yystack_[0].location);
                 }
-#line 1793 "d2_parser.cc"
+#line 1798 "d2_parser.cc"
     break;
 
   case 209: // $@48: %empty
-#line 822 "d2_parser.yy"
+#line 827 "d2_parser.yy"
                  {
     ctx.unique("library", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1802 "d2_parser.cc"
+#line 1807 "d2_parser.cc"
     break;
 
   case 210: // library: "library" $@48 ":" "constant string"
-#line 825 "d2_parser.yy"
+#line 830 "d2_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 1812 "d2_parser.cc"
+#line 1817 "d2_parser.cc"
     break;
 
   case 211: // $@49: %empty
-#line 831 "d2_parser.yy"
+#line 836 "d2_parser.yy"
                        {
     ctx.unique("parameters", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1821 "d2_parser.cc"
+#line 1826 "d2_parser.cc"
     break;
 
   case 212: // parameters: "parameters" $@49 ":" map_value
-#line 834 "d2_parser.yy"
+#line 839 "d2_parser.yy"
                   {
     ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 1830 "d2_parser.cc"
+#line 1835 "d2_parser.cc"
     break;
 
   case 213: // $@50: %empty
-#line 841 "d2_parser.yy"
+#line 846 "d2_parser.yy"
                  {
     ctx.unique("loggers", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -1838,102 +1843,102 @@ namespace isc { namespace d2 {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.LOGGERS);
 }
-#line 1842 "d2_parser.cc"
+#line 1847 "d2_parser.cc"
     break;
 
   case 214: // loggers: "loggers" $@50 ":" "[" loggers_entries "]"
-#line 847 "d2_parser.yy"
+#line 852 "d2_parser.yy"
                                                          {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1851 "d2_parser.cc"
+#line 1856 "d2_parser.cc"
     break;
 
   case 217: // loggers_entries: loggers_entries ","
-#line 856 "d2_parser.yy"
+#line 861 "d2_parser.yy"
                                        {
                    ctx.warnAboutExtraCommas(yystack_[0].location);
                    }
-#line 1859 "d2_parser.cc"
+#line 1864 "d2_parser.cc"
     break;
 
   case 218: // $@51: %empty
-#line 862 "d2_parser.yy"
+#line 867 "d2_parser.yy"
                              {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 1869 "d2_parser.cc"
+#line 1874 "d2_parser.cc"
     break;
 
   case 219: // logger_entry: "{" $@51 logger_params "}"
-#line 866 "d2_parser.yy"
+#line 871 "d2_parser.yy"
                                {
     ctx.stack_.pop_back();
 }
-#line 1877 "d2_parser.cc"
+#line 1882 "d2_parser.cc"
     break;
 
   case 222: // logger_params: logger_params ","
-#line 872 "d2_parser.yy"
+#line 877 "d2_parser.yy"
                                    {
                  ctx.warnAboutExtraCommas(yystack_[0].location);
                  }
-#line 1885 "d2_parser.cc"
+#line 1890 "d2_parser.cc"
     break;
 
   case 230: // $@52: %empty
-#line 886 "d2_parser.yy"
+#line 891 "d2_parser.yy"
            {
     ctx.unique("name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1894 "d2_parser.cc"
+#line 1899 "d2_parser.cc"
     break;
 
   case 231: // name: "name" $@52 ":" "constant string"
-#line 889 "d2_parser.yy"
+#line 894 "d2_parser.yy"
                {
     ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("name", name);
     ctx.leave();
 }
-#line 1904 "d2_parser.cc"
+#line 1909 "d2_parser.cc"
     break;
 
   case 232: // debuglevel: "debuglevel" ":" "integer"
-#line 895 "d2_parser.yy"
+#line 900 "d2_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 1914 "d2_parser.cc"
+#line 1919 "d2_parser.cc"
     break;
 
   case 233: // $@53: %empty
-#line 901 "d2_parser.yy"
+#line 906 "d2_parser.yy"
                    {
     ctx.unique("severity", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1923 "d2_parser.cc"
+#line 1928 "d2_parser.cc"
     break;
 
   case 234: // severity: "severity" $@53 ":" "constant string"
-#line 904 "d2_parser.yy"
+#line 909 "d2_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 1933 "d2_parser.cc"
+#line 1938 "d2_parser.cc"
     break;
 
   case 235: // $@54: %empty
-#line 910 "d2_parser.yy"
+#line 915 "d2_parser.yy"
                                     {
     ctx.unique("output_options", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -1941,122 +1946,122 @@ namespace isc { namespace d2 {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OUTPUT_OPTIONS);
 }
-#line 1945 "d2_parser.cc"
+#line 1950 "d2_parser.cc"
     break;
 
   case 236: // output_options_list: "output_options" $@54 ":" "[" output_options_list_content "]"
-#line 916 "d2_parser.yy"
+#line 921 "d2_parser.yy"
                                                                     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1954 "d2_parser.cc"
+#line 1959 "d2_parser.cc"
     break;
 
   case 239: // output_options_list_content: output_options_list_content ","
-#line 923 "d2_parser.yy"
+#line 928 "d2_parser.yy"
                                                                {
                                ctx.warnAboutExtraCommas(yystack_[0].location);
                                }
-#line 1962 "d2_parser.cc"
+#line 1967 "d2_parser.cc"
     break;
 
   case 240: // $@55: %empty
-#line 928 "d2_parser.yy"
+#line 933 "d2_parser.yy"
                              {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1972 "d2_parser.cc"
+#line 1977 "d2_parser.cc"
     break;
 
   case 241: // output_entry: "{" $@55 output_params_list "}"
-#line 932 "d2_parser.yy"
+#line 937 "d2_parser.yy"
                                     {
     ctx.stack_.pop_back();
 }
-#line 1980 "d2_parser.cc"
+#line 1985 "d2_parser.cc"
     break;
 
   case 244: // output_params_list: output_params_list ","
-#line 938 "d2_parser.yy"
+#line 943 "d2_parser.yy"
                                         {
                  ctx.warnAboutExtraCommas(yystack_[0].location);
                  }
-#line 1988 "d2_parser.cc"
+#line 1993 "d2_parser.cc"
     break;
 
   case 250: // $@56: %empty
-#line 950 "d2_parser.yy"
+#line 955 "d2_parser.yy"
                {
     ctx.unique("output", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1997 "d2_parser.cc"
+#line 2002 "d2_parser.cc"
     break;
 
   case 251: // output: "output" $@56 ":" "constant string"
-#line 953 "d2_parser.yy"
+#line 958 "d2_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 2007 "d2_parser.cc"
+#line 2012 "d2_parser.cc"
     break;
 
   case 252: // flush: "flush" ":" "boolean"
-#line 959 "d2_parser.yy"
+#line 964 "d2_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 2017 "d2_parser.cc"
+#line 2022 "d2_parser.cc"
     break;
 
   case 253: // maxsize: "maxsize" ":" "integer"
-#line 965 "d2_parser.yy"
+#line 970 "d2_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 2027 "d2_parser.cc"
+#line 2032 "d2_parser.cc"
     break;
 
   case 254: // maxver: "maxver" ":" "integer"
-#line 971 "d2_parser.yy"
+#line 976 "d2_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 2037 "d2_parser.cc"
+#line 2042 "d2_parser.cc"
     break;
 
   case 255: // $@57: %empty
-#line 977 "d2_parser.yy"
+#line 982 "d2_parser.yy"
                  {
     ctx.unique("pattern", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2046 "d2_parser.cc"
+#line 2051 "d2_parser.cc"
     break;
 
   case 256: // pattern: "pattern" $@57 ":" "constant string"
-#line 980 "d2_parser.yy"
+#line 985 "d2_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 2056 "d2_parser.cc"
+#line 2061 "d2_parser.cc"
     break;
 
 
-#line 2060 "d2_parser.cc"
+#line 2065 "d2_parser.cc"
 
             default:
               break;
@@ -2787,32 +2792,32 @@ namespace isc { namespace d2 {
   const short
   D2Parser::yyrline_[] =
   {
-       0,   125,   125,   125,   126,   126,   127,   127,   128,   128,
-     129,   129,   130,   130,   131,   131,   132,   132,   133,   133,
-     134,   134,   142,   143,   144,   145,   146,   147,   148,   151,
-     156,   156,   167,   170,   171,   174,   179,   185,   190,   190,
-     197,   198,   201,   205,   209,   219,   228,   228,   241,   241,
-     251,   254,   258,   258,   266,   267,   268,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   290,   290,   299,   308,   318,   318,   327,   328,   331,
-     331,   340,   340,   365,   365,   392,   392,   403,   403,   414,
-     415,   418,   419,   420,   425,   426,   431,   431,   442,   442,
-     449,   450,   453,   454,   455,   460,   460,   468,   468,   475,
-     476,   477,   482,   483,   484,   485,   486,   487,   491,   491,
-     504,   504,   517,   517,   528,   528,   535,   536,   537,   542,
-     542,   550,   550,   557,   558,   559,   564,   565,   566,   567,
-     568,   569,   570,   573,   573,   586,   586,   595,   610,   610,
-     621,   621,   628,   629,   632,   633,   634,   639,   639,   647,
-     647,   656,   657,   658,   663,   664,   665,   666,   667,   668,
-     669,   672,   672,   685,   685,   697,   706,   706,   723,   723,
-     734,   735,   736,   741,   742,   743,   744,   745,   748,   748,
-     757,   757,   768,   768,   779,   780,   783,   784,   785,   790,
-     790,   800,   800,   810,   811,   812,   815,   818,   819,   822,
-     822,   831,   831,   841,   841,   854,   855,   856,   862,   862,
-     870,   871,   872,   877,   878,   879,   880,   881,   882,   883,
-     886,   886,   895,   901,   901,   910,   910,   921,   922,   923,
-     928,   928,   936,   937,   938,   943,   944,   945,   946,   947,
-     950,   950,   959,   965,   971,   977,   977
+       0,   130,   130,   130,   131,   131,   132,   132,   133,   133,
+     134,   134,   135,   135,   136,   136,   137,   137,   138,   138,
+     139,   139,   147,   148,   149,   150,   151,   152,   153,   156,
+     161,   161,   172,   175,   176,   179,   184,   190,   195,   195,
+     202,   203,   206,   210,   214,   224,   233,   233,   246,   246,
+     256,   259,   263,   263,   271,   272,   273,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   295,   295,   304,   313,   323,   323,   332,   333,   336,
+     336,   345,   345,   370,   370,   397,   397,   408,   408,   419,
+     420,   423,   424,   425,   430,   431,   436,   436,   447,   447,
+     454,   455,   458,   459,   460,   465,   465,   473,   473,   480,
+     481,   482,   487,   488,   489,   490,   491,   492,   496,   496,
+     509,   509,   522,   522,   533,   533,   540,   541,   542,   547,
+     547,   555,   555,   562,   563,   564,   569,   570,   571,   572,
+     573,   574,   575,   578,   578,   591,   591,   600,   615,   615,
+     626,   626,   633,   634,   637,   638,   639,   644,   644,   652,
+     652,   661,   662,   663,   668,   669,   670,   671,   672,   673,
+     674,   677,   677,   690,   690,   702,   711,   711,   728,   728,
+     739,   740,   741,   746,   747,   748,   749,   750,   753,   753,
+     762,   762,   773,   773,   784,   785,   788,   789,   790,   795,
+     795,   805,   805,   815,   816,   817,   820,   823,   824,   827,
+     827,   836,   836,   846,   846,   859,   860,   861,   867,   867,
+     875,   876,   877,   882,   883,   884,   885,   886,   887,   888,
+     891,   891,   900,   906,   906,   915,   915,   926,   927,   928,
+     933,   933,   941,   942,   943,   948,   949,   950,   951,   952,
+     955,   955,   964,   970,   976,   982,   982
   };
 
   void
@@ -2845,9 +2850,9 @@ namespace isc { namespace d2 {
 
 #line 14 "d2_parser.yy"
 } } // isc::d2
-#line 2849 "d2_parser.cc"
+#line 2854 "d2_parser.cc"
 
-#line 986 "d2_parser.yy"
+#line 991 "d2_parser.yy"
 
 
 void
index 4145366614db7452dd72b7f324979e0e32d2c78e..23caf1b9d2f2cc3cc5b4cf56e008ad548729f5fe 100644 (file)
@@ -1,3 +1,4 @@
+// Generated 202305171251
 // A Bison parser, made by GNU Bison 3.8.2.
 
 // Locations for Bison parsers in C++
index 83fec2286335a15223de8b9e5a4d92172dd53940..00183ed75aa74e7302db4f4b8e5ae63c465b0635 100644 (file)
 
 #include <dhcp4/parser_context.h>
 
-#line 52 "dhcp4_parser.cc"
+// Avoid warnings with the error counter.
+#if defined(__GNUC__) || defined(__clang__)
+#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
+#endif
+
+#line 57 "dhcp4_parser.cc"
 
 
 #ifndef YY_
 
 #line 14 "dhcp4_parser.yy"
 namespace isc { namespace dhcp {
-#line 145 "dhcp4_parser.cc"
+#line 150 "dhcp4_parser.cc"
 
   /// Build a parser object.
   Dhcp4Parser::Dhcp4Parser (isc::dhcp::Parser4Context& ctx_yyarg)
@@ -402,81 +407,81 @@ namespace isc { namespace dhcp {
         switch (yykind)
     {
       case symbol_kind::S_STRING: // "constant string"
-#line 298 "dhcp4_parser.yy"
+#line 303 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < std::string > (); }
-#line 408 "dhcp4_parser.cc"
+#line 413 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_INTEGER: // "integer"
-#line 298 "dhcp4_parser.yy"
+#line 303 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < int64_t > (); }
-#line 414 "dhcp4_parser.cc"
+#line 419 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_FLOAT: // "floating point"
-#line 298 "dhcp4_parser.yy"
+#line 303 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < double > (); }
-#line 420 "dhcp4_parser.cc"
+#line 425 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_BOOLEAN: // "boolean"
-#line 298 "dhcp4_parser.yy"
+#line 303 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < bool > (); }
-#line 426 "dhcp4_parser.cc"
+#line 431 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_value: // value
-#line 298 "dhcp4_parser.yy"
+#line 303 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 432 "dhcp4_parser.cc"
+#line 437 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_map_value: // map_value
-#line 298 "dhcp4_parser.yy"
+#line 303 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 438 "dhcp4_parser.cc"
+#line 443 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value
-#line 298 "dhcp4_parser.yy"
+#line 303 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 444 "dhcp4_parser.cc"
+#line 449 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_socket_type: // socket_type
-#line 298 "dhcp4_parser.yy"
+#line 303 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 450 "dhcp4_parser.cc"
+#line 455 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_outbound_interface_value: // outbound_interface_value
-#line 298 "dhcp4_parser.yy"
+#line 303 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 456 "dhcp4_parser.cc"
+#line 461 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_db_type: // db_type
-#line 298 "dhcp4_parser.yy"
+#line 303 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 462 "dhcp4_parser.cc"
+#line 467 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_on_fail_mode: // on_fail_mode
-#line 298 "dhcp4_parser.yy"
+#line 303 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 468 "dhcp4_parser.cc"
+#line 473 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_hr_mode: // hr_mode
-#line 298 "dhcp4_parser.yy"
+#line 303 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 474 "dhcp4_parser.cc"
+#line 479 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value
-#line 298 "dhcp4_parser.yy"
+#line 303 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 480 "dhcp4_parser.cc"
+#line 485 "dhcp4_parser.cc"
         break;
 
       default:
@@ -755,300 +760,300 @@ namespace isc { namespace dhcp {
           switch (yyn)
             {
   case 2: // $@1: %empty
-#line 307 "dhcp4_parser.yy"
+#line 312 "dhcp4_parser.yy"
                      { ctx.ctx_ = ctx.NO_KEYWORD; }
-#line 761 "dhcp4_parser.cc"
+#line 766 "dhcp4_parser.cc"
     break;
 
   case 4: // $@2: %empty
-#line 308 "dhcp4_parser.yy"
+#line 313 "dhcp4_parser.yy"
                       { ctx.ctx_ = ctx.CONFIG; }
-#line 767 "dhcp4_parser.cc"
+#line 772 "dhcp4_parser.cc"
     break;
 
   case 6: // $@3: %empty
-#line 309 "dhcp4_parser.yy"
+#line 314 "dhcp4_parser.yy"
                  { ctx.ctx_ = ctx.DHCP4; }
-#line 773 "dhcp4_parser.cc"
+#line 778 "dhcp4_parser.cc"
     break;
 
   case 8: // $@4: %empty
-#line 310 "dhcp4_parser.yy"
+#line 315 "dhcp4_parser.yy"
                        { ctx.ctx_ = ctx.INTERFACES_CONFIG; }
-#line 779 "dhcp4_parser.cc"
+#line 784 "dhcp4_parser.cc"
     break;
 
   case 10: // $@5: %empty
-#line 311 "dhcp4_parser.yy"
+#line 316 "dhcp4_parser.yy"
                    { ctx.ctx_ = ctx.SUBNET4; }
-#line 785 "dhcp4_parser.cc"
+#line 790 "dhcp4_parser.cc"
     break;
 
   case 12: // $@6: %empty
-#line 312 "dhcp4_parser.yy"
+#line 317 "dhcp4_parser.yy"
                  { ctx.ctx_ = ctx.POOLS; }
-#line 791 "dhcp4_parser.cc"
+#line 796 "dhcp4_parser.cc"
     break;
 
   case 14: // $@7: %empty
-#line 313 "dhcp4_parser.yy"
+#line 318 "dhcp4_parser.yy"
                        { ctx.ctx_ = ctx.RESERVATIONS; }
-#line 797 "dhcp4_parser.cc"
+#line 802 "dhcp4_parser.cc"
     break;
 
   case 16: // $@8: %empty
-#line 314 "dhcp4_parser.yy"
+#line 319 "dhcp4_parser.yy"
                        { ctx.ctx_ = ctx.DHCP4; }
-#line 803 "dhcp4_parser.cc"
+#line 808 "dhcp4_parser.cc"
     break;
 
   case 18: // $@9: %empty
-#line 315 "dhcp4_parser.yy"
+#line 320 "dhcp4_parser.yy"
                       { ctx.ctx_ = ctx.OPTION_DEF; }
-#line 809 "dhcp4_parser.cc"
+#line 814 "dhcp4_parser.cc"
     break;
 
   case 20: // $@10: %empty
-#line 316 "dhcp4_parser.yy"
+#line 321 "dhcp4_parser.yy"
                        { ctx.ctx_ = ctx.OPTION_DATA; }
-#line 815 "dhcp4_parser.cc"
+#line 820 "dhcp4_parser.cc"
     break;
 
   case 22: // $@11: %empty
-#line 317 "dhcp4_parser.yy"
+#line 322 "dhcp4_parser.yy"
                          { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
-#line 821 "dhcp4_parser.cc"
+#line 826 "dhcp4_parser.cc"
     break;
 
   case 24: // $@12: %empty
-#line 318 "dhcp4_parser.yy"
+#line 323 "dhcp4_parser.yy"
                      { ctx.ctx_ = ctx.DHCP_DDNS; }
-#line 827 "dhcp4_parser.cc"
+#line 832 "dhcp4_parser.cc"
     break;
 
   case 26: // $@13: %empty
-#line 319 "dhcp4_parser.yy"
+#line 324 "dhcp4_parser.yy"
                           { ctx.ctx_ = ctx.CONFIG_CONTROL; }
-#line 833 "dhcp4_parser.cc"
+#line 838 "dhcp4_parser.cc"
     break;
 
   case 28: // value: "integer"
-#line 327 "dhcp4_parser.yy"
+#line 332 "dhcp4_parser.yy"
                { yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); }
-#line 839 "dhcp4_parser.cc"
+#line 844 "dhcp4_parser.cc"
     break;
 
   case 29: // value: "floating point"
-#line 328 "dhcp4_parser.yy"
+#line 333 "dhcp4_parser.yy"
              { yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); }
-#line 845 "dhcp4_parser.cc"
+#line 850 "dhcp4_parser.cc"
     break;
 
   case 30: // value: "boolean"
-#line 329 "dhcp4_parser.yy"
+#line 334 "dhcp4_parser.yy"
                { yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); }
-#line 851 "dhcp4_parser.cc"
+#line 856 "dhcp4_parser.cc"
     break;
 
   case 31: // value: "constant string"
-#line 330 "dhcp4_parser.yy"
+#line 335 "dhcp4_parser.yy"
               { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); }
-#line 857 "dhcp4_parser.cc"
+#line 862 "dhcp4_parser.cc"
     break;
 
   case 32: // value: "null"
-#line 331 "dhcp4_parser.yy"
+#line 336 "dhcp4_parser.yy"
                  { yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
-#line 863 "dhcp4_parser.cc"
+#line 868 "dhcp4_parser.cc"
     break;
 
   case 33: // value: map2
-#line 332 "dhcp4_parser.yy"
+#line 337 "dhcp4_parser.yy"
             { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 869 "dhcp4_parser.cc"
+#line 874 "dhcp4_parser.cc"
     break;
 
   case 34: // value: list_generic
-#line 333 "dhcp4_parser.yy"
+#line 338 "dhcp4_parser.yy"
                     { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 875 "dhcp4_parser.cc"
+#line 880 "dhcp4_parser.cc"
     break;
 
   case 35: // sub_json: value
-#line 336 "dhcp4_parser.yy"
+#line 341 "dhcp4_parser.yy"
                 {
     // Push back the JSON value on the stack
     ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ());
 }
-#line 884 "dhcp4_parser.cc"
+#line 889 "dhcp4_parser.cc"
     break;
 
   case 36: // $@14: %empty
-#line 341 "dhcp4_parser.yy"
+#line 346 "dhcp4_parser.yy"
                      {
     // This code is executed when we're about to start parsing
     // the content of the map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 895 "dhcp4_parser.cc"
+#line 900 "dhcp4_parser.cc"
     break;
 
   case 37: // map2: "{" $@14 map_content "}"
-#line 346 "dhcp4_parser.yy"
+#line 351 "dhcp4_parser.yy"
                              {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
     // for it.
 }
-#line 905 "dhcp4_parser.cc"
+#line 910 "dhcp4_parser.cc"
     break;
 
   case 38: // map_value: map2
-#line 352 "dhcp4_parser.yy"
+#line 357 "dhcp4_parser.yy"
                 { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 911 "dhcp4_parser.cc"
+#line 916 "dhcp4_parser.cc"
     break;
 
   case 41: // not_empty_map: "constant string" ":" value
-#line 359 "dhcp4_parser.yy"
+#line 364 "dhcp4_parser.yy"
                                   {
                   // map containing a single entry
                   ctx.unique(yystack_[2].value.as < std::string > (), ctx.loc2pos(yystack_[2].location));
                   ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
                   }
-#line 921 "dhcp4_parser.cc"
+#line 926 "dhcp4_parser.cc"
     break;
 
   case 42: // not_empty_map: not_empty_map "," "constant string" ":" value
-#line 364 "dhcp4_parser.yy"
+#line 369 "dhcp4_parser.yy"
                                                       {
                   // map consisting of a shorter map followed by
                   // comma and string:value
                   ctx.unique(yystack_[2].value.as < std::string > (), ctx.loc2pos(yystack_[2].location));
                   ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
                   }
-#line 932 "dhcp4_parser.cc"
+#line 937 "dhcp4_parser.cc"
     break;
 
   case 43: // not_empty_map: not_empty_map ","
-#line 370 "dhcp4_parser.yy"
+#line 375 "dhcp4_parser.yy"
                                    {
                  ctx.warnAboutExtraCommas(yystack_[0].location);
                  }
-#line 940 "dhcp4_parser.cc"
+#line 945 "dhcp4_parser.cc"
     break;
 
   case 44: // $@15: %empty
-#line 375 "dhcp4_parser.yy"
+#line 380 "dhcp4_parser.yy"
                               {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
 }
-#line 949 "dhcp4_parser.cc"
+#line 954 "dhcp4_parser.cc"
     break;
 
   case 45: // list_generic: "[" $@15 list_content "]"
-#line 378 "dhcp4_parser.yy"
+#line 383 "dhcp4_parser.yy"
                                {
     // list parsing complete. Put any sanity checking here
 }
-#line 957 "dhcp4_parser.cc"
+#line 962 "dhcp4_parser.cc"
     break;
 
   case 48: // not_empty_list: value
-#line 386 "dhcp4_parser.yy"
+#line 391 "dhcp4_parser.yy"
                       {
                   // List consisting of a single element.
                   ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
                   }
-#line 966 "dhcp4_parser.cc"
+#line 971 "dhcp4_parser.cc"
     break;
 
   case 49: // not_empty_list: not_empty_list "," value
-#line 390 "dhcp4_parser.yy"
+#line 395 "dhcp4_parser.yy"
                                            {
                   // List ending with , and a value.
                   ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
                   }
-#line 975 "dhcp4_parser.cc"
+#line 980 "dhcp4_parser.cc"
     break;
 
   case 50: // not_empty_list: not_empty_list ","
-#line 394 "dhcp4_parser.yy"
+#line 399 "dhcp4_parser.yy"
                                      {
                   ctx.warnAboutExtraCommas(yystack_[0].location);
                   }
-#line 983 "dhcp4_parser.cc"
+#line 988 "dhcp4_parser.cc"
     break;
 
   case 51: // $@16: %empty
-#line 400 "dhcp4_parser.yy"
+#line 405 "dhcp4_parser.yy"
                               {
     // List parsing about to start
 }
-#line 991 "dhcp4_parser.cc"
+#line 996 "dhcp4_parser.cc"
     break;
 
   case 52: // list_strings: "[" $@16 list_strings_content "]"
-#line 402 "dhcp4_parser.yy"
+#line 407 "dhcp4_parser.yy"
                                        {
     // list parsing complete. Put any sanity checking here
     //ctx.stack_.pop_back();
 }
-#line 1000 "dhcp4_parser.cc"
+#line 1005 "dhcp4_parser.cc"
     break;
 
   case 55: // not_empty_list_strings: "constant string"
-#line 411 "dhcp4_parser.yy"
+#line 416 "dhcp4_parser.yy"
                                {
                           ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
                           }
-#line 1009 "dhcp4_parser.cc"
+#line 1014 "dhcp4_parser.cc"
     break;
 
   case 56: // not_empty_list_strings: not_empty_list_strings "," "constant string"
-#line 415 "dhcp4_parser.yy"
+#line 420 "dhcp4_parser.yy"
                                                             {
                           ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
                           }
-#line 1018 "dhcp4_parser.cc"
+#line 1023 "dhcp4_parser.cc"
     break;
 
   case 57: // not_empty_list_strings: not_empty_list_strings ","
-#line 419 "dhcp4_parser.yy"
+#line 424 "dhcp4_parser.yy"
                                                      {
                           ctx.warnAboutExtraCommas(yystack_[0].location);
                           }
-#line 1026 "dhcp4_parser.cc"
+#line 1031 "dhcp4_parser.cc"
     break;
 
   case 58: // unknown_map_entry: "constant string" ":"
-#line 429 "dhcp4_parser.yy"
+#line 434 "dhcp4_parser.yy"
                                 {
     const std::string& where = ctx.contextName();
     const std::string& keyword = yystack_[1].value.as < std::string > ();
     error(yystack_[1].location,
           "got unexpected keyword \"" + keyword + "\" in " + where + " map.");
 }
-#line 1037 "dhcp4_parser.cc"
+#line 1042 "dhcp4_parser.cc"
     break;
 
   case 59: // $@17: %empty
-#line 438 "dhcp4_parser.yy"
+#line 443 "dhcp4_parser.yy"
                            {
     // This code is executed when we're about to start parsing
     // the content of the map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1048 "dhcp4_parser.cc"
+#line 1053 "dhcp4_parser.cc"
     break;
 
   case 60: // syntax_map: "{" $@17 global_object "}"
-#line 443 "dhcp4_parser.yy"
+#line 448 "dhcp4_parser.yy"
                                {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -1057,11 +1062,11 @@ namespace isc { namespace dhcp {
     // Dhcp4 is required
     ctx.require("Dhcp4", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
 }
-#line 1061 "dhcp4_parser.cc"
+#line 1066 "dhcp4_parser.cc"
     break;
 
   case 61: // $@18: %empty
-#line 453 "dhcp4_parser.yy"
+#line 458 "dhcp4_parser.yy"
                      {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -1072,509 +1077,509 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.DHCP4);
 }
-#line 1076 "dhcp4_parser.cc"
+#line 1081 "dhcp4_parser.cc"
     break;
 
   case 62: // global_object: "Dhcp4" $@18 ":" "{" global_params "}"
-#line 462 "dhcp4_parser.yy"
+#line 467 "dhcp4_parser.yy"
                                                     {
     // No global parameter is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1086 "dhcp4_parser.cc"
+#line 1091 "dhcp4_parser.cc"
     break;
 
   case 64: // global_object_comma: global_object ","
-#line 470 "dhcp4_parser.yy"
+#line 475 "dhcp4_parser.yy"
                                          {
     ctx.warnAboutExtraCommas(yystack_[0].location);
 }
-#line 1094 "dhcp4_parser.cc"
+#line 1099 "dhcp4_parser.cc"
     break;
 
   case 65: // $@19: %empty
-#line 476 "dhcp4_parser.yy"
+#line 481 "dhcp4_parser.yy"
                           {
     // Parse the Dhcp4 map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1104 "dhcp4_parser.cc"
+#line 1109 "dhcp4_parser.cc"
     break;
 
   case 66: // sub_dhcp4: "{" $@19 global_params "}"
-#line 480 "dhcp4_parser.yy"
+#line 485 "dhcp4_parser.yy"
                                {
     // No global parameter is required
     // parsing completed
 }
-#line 1113 "dhcp4_parser.cc"
+#line 1118 "dhcp4_parser.cc"
     break;
 
   case 69: // global_params: global_params ","
-#line 487 "dhcp4_parser.yy"
+#line 492 "dhcp4_parser.yy"
                                    {
                  ctx.warnAboutExtraCommas(yystack_[0].location);
                  }
-#line 1121 "dhcp4_parser.cc"
+#line 1126 "dhcp4_parser.cc"
     break;
 
   case 137: // valid_lifetime: "valid-lifetime" ":" "integer"
-#line 563 "dhcp4_parser.yy"
+#line 568 "dhcp4_parser.yy"
                                              {
     ctx.unique("valid-lifetime", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("valid-lifetime", prf);
 }
-#line 1131 "dhcp4_parser.cc"
+#line 1136 "dhcp4_parser.cc"
     break;
 
   case 138: // min_valid_lifetime: "min-valid-lifetime" ":" "integer"
-#line 569 "dhcp4_parser.yy"
+#line 574 "dhcp4_parser.yy"
                                                      {
     ctx.unique("min-valid-lifetime", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("min-valid-lifetime", prf);
 }
-#line 1141 "dhcp4_parser.cc"
+#line 1146 "dhcp4_parser.cc"
     break;
 
   case 139: // max_valid_lifetime: "max-valid-lifetime" ":" "integer"
-#line 575 "dhcp4_parser.yy"
+#line 580 "dhcp4_parser.yy"
                                                      {
     ctx.unique("max-valid-lifetime", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-valid-lifetime", prf);
 }
-#line 1151 "dhcp4_parser.cc"
+#line 1156 "dhcp4_parser.cc"
     break;
 
   case 140: // renew_timer: "renew-timer" ":" "integer"
-#line 581 "dhcp4_parser.yy"
+#line 586 "dhcp4_parser.yy"
                                        {
     ctx.unique("renew-timer", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("renew-timer", prf);
 }
-#line 1161 "dhcp4_parser.cc"
+#line 1166 "dhcp4_parser.cc"
     break;
 
   case 141: // rebind_timer: "rebind-timer" ":" "integer"
-#line 587 "dhcp4_parser.yy"
+#line 592 "dhcp4_parser.yy"
                                          {
     ctx.unique("rebind-timer", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rebind-timer", prf);
 }
-#line 1171 "dhcp4_parser.cc"
+#line 1176 "dhcp4_parser.cc"
     break;
 
   case 142: // calculate_tee_times: "calculate-tee-times" ":" "boolean"
-#line 593 "dhcp4_parser.yy"
+#line 598 "dhcp4_parser.yy"
                                                        {
     ctx.unique("calculate-tee-times", ctx.loc2pos(yystack_[2].location));
     ElementPtr ctt(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("calculate-tee-times", ctt);
 }
-#line 1181 "dhcp4_parser.cc"
+#line 1186 "dhcp4_parser.cc"
     break;
 
   case 143: // t1_percent: "t1-percent" ":" "floating point"
-#line 599 "dhcp4_parser.yy"
+#line 604 "dhcp4_parser.yy"
                                    {
     ctx.unique("t1-percent", ctx.loc2pos(yystack_[2].location));
     ElementPtr t1(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("t1-percent", t1);
 }
-#line 1191 "dhcp4_parser.cc"
+#line 1196 "dhcp4_parser.cc"
     break;
 
   case 144: // t2_percent: "t2-percent" ":" "floating point"
-#line 605 "dhcp4_parser.yy"
+#line 610 "dhcp4_parser.yy"
                                    {
     ctx.unique("t2-percent", ctx.loc2pos(yystack_[2].location));
     ElementPtr t2(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("t2-percent", t2);
 }
-#line 1201 "dhcp4_parser.cc"
+#line 1206 "dhcp4_parser.cc"
     break;
 
   case 145: // cache_threshold: "cache-threshold" ":" "floating point"
-#line 611 "dhcp4_parser.yy"
+#line 616 "dhcp4_parser.yy"
                                              {
     ctx.unique("cache-threshold", ctx.loc2pos(yystack_[2].location));
     ElementPtr ct(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("cache-threshold", ct);
 }
-#line 1211 "dhcp4_parser.cc"
+#line 1216 "dhcp4_parser.cc"
     break;
 
   case 146: // cache_max_age: "cache-max-age" ":" "integer"
-#line 617 "dhcp4_parser.yy"
+#line 622 "dhcp4_parser.yy"
                                            {
     ctx.unique("cache-max-age", ctx.loc2pos(yystack_[2].location));
     ElementPtr cm(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("cache-max-age", cm);
 }
-#line 1221 "dhcp4_parser.cc"
+#line 1226 "dhcp4_parser.cc"
     break;
 
   case 147: // decline_probation_period: "decline-probation-period" ":" "integer"
-#line 623 "dhcp4_parser.yy"
+#line 628 "dhcp4_parser.yy"
                                                                  {
     ctx.unique("decline-probation-period", ctx.loc2pos(yystack_[2].location));
     ElementPtr dpp(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("decline-probation-period", dpp);
 }
-#line 1231 "dhcp4_parser.cc"
+#line 1236 "dhcp4_parser.cc"
     break;
 
   case 148: // $@20: %empty
-#line 629 "dhcp4_parser.yy"
+#line 634 "dhcp4_parser.yy"
                        {
     ctx.unique("server-tag", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1240 "dhcp4_parser.cc"
+#line 1245 "dhcp4_parser.cc"
     break;
 
   case 149: // server_tag: "server-tag" $@20 ":" "constant string"
-#line 632 "dhcp4_parser.yy"
+#line 637 "dhcp4_parser.yy"
                {
     ElementPtr stag(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-tag", stag);
     ctx.leave();
 }
-#line 1250 "dhcp4_parser.cc"
+#line 1255 "dhcp4_parser.cc"
     break;
 
   case 150: // parked_packet_limit: "parked-packet-limit" ":" "integer"
-#line 638 "dhcp4_parser.yy"
+#line 643 "dhcp4_parser.yy"
                                                        {
     ctx.unique("parked-packet-limit", ctx.loc2pos(yystack_[2].location));
     ElementPtr ppl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("parked-packet-limit", ppl);
 }
-#line 1260 "dhcp4_parser.cc"
+#line 1265 "dhcp4_parser.cc"
     break;
 
   case 151: // $@21: %empty
-#line 644 "dhcp4_parser.yy"
+#line 649 "dhcp4_parser.yy"
                      {
     ctx.unique("allocator", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1269 "dhcp4_parser.cc"
+#line 1274 "dhcp4_parser.cc"
     break;
 
   case 152: // allocator: "allocator" $@21 ":" "constant string"
-#line 647 "dhcp4_parser.yy"
+#line 652 "dhcp4_parser.yy"
                {
     ElementPtr al(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("allocator", al);
     ctx.leave();
 }
-#line 1279 "dhcp4_parser.cc"
+#line 1284 "dhcp4_parser.cc"
     break;
 
   case 153: // echo_client_id: "echo-client-id" ":" "boolean"
-#line 653 "dhcp4_parser.yy"
+#line 658 "dhcp4_parser.yy"
                                              {
     ctx.unique("echo-client-id", ctx.loc2pos(yystack_[2].location));
     ElementPtr echo(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("echo-client-id", echo);
 }
-#line 1289 "dhcp4_parser.cc"
+#line 1294 "dhcp4_parser.cc"
     break;
 
   case 154: // match_client_id: "match-client-id" ":" "boolean"
-#line 659 "dhcp4_parser.yy"
+#line 664 "dhcp4_parser.yy"
                                                {
     ctx.unique("match-client-id", ctx.loc2pos(yystack_[2].location));
     ElementPtr match(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("match-client-id", match);
 }
-#line 1299 "dhcp4_parser.cc"
+#line 1304 "dhcp4_parser.cc"
     break;
 
   case 155: // authoritative: "authoritative" ":" "boolean"
-#line 665 "dhcp4_parser.yy"
+#line 670 "dhcp4_parser.yy"
                                            {
     ctx.unique("authoritative", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("authoritative", prf);
 }
-#line 1309 "dhcp4_parser.cc"
+#line 1314 "dhcp4_parser.cc"
     break;
 
   case 156: // ddns_send_updates: "ddns-send-updates" ":" "boolean"
-#line 671 "dhcp4_parser.yy"
+#line 676 "dhcp4_parser.yy"
                                                    {
     ctx.unique("ddns-send-updates", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ddns-send-updates", b);
 }
-#line 1319 "dhcp4_parser.cc"
+#line 1324 "dhcp4_parser.cc"
     break;
 
   case 157: // ddns_override_no_update: "ddns-override-no-update" ":" "boolean"
-#line 677 "dhcp4_parser.yy"
+#line 682 "dhcp4_parser.yy"
                                                                {
     ctx.unique("ddns-override-no-update", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ddns-override-no-update", b);
 }
-#line 1329 "dhcp4_parser.cc"
+#line 1334 "dhcp4_parser.cc"
     break;
 
   case 158: // ddns_override_client_update: "ddns-override-client-update" ":" "boolean"
-#line 683 "dhcp4_parser.yy"
+#line 688 "dhcp4_parser.yy"
                                                                        {
     ctx.unique("ddns-override-client-update", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ddns-override-client-update", b);
 }
-#line 1339 "dhcp4_parser.cc"
+#line 1344 "dhcp4_parser.cc"
     break;
 
   case 159: // $@22: %empty
-#line 689 "dhcp4_parser.yy"
+#line 694 "dhcp4_parser.yy"
                                                    {
     ctx.enter(ctx.REPLACE_CLIENT_NAME);
     ctx.unique("ddns-replace-client-name", ctx.loc2pos(yystack_[0].location));
 }
-#line 1348 "dhcp4_parser.cc"
+#line 1353 "dhcp4_parser.cc"
     break;
 
   case 160: // ddns_replace_client_name: "ddns-replace-client-name" $@22 ":" ddns_replace_client_name_value
-#line 692 "dhcp4_parser.yy"
+#line 697 "dhcp4_parser.yy"
                                        {
     ctx.stack_.back()->set("ddns-replace-client-name", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 1357 "dhcp4_parser.cc"
+#line 1362 "dhcp4_parser.cc"
     break;
 
   case 161: // ddns_replace_client_name_value: "when-present"
-#line 698 "dhcp4_parser.yy"
+#line 703 "dhcp4_parser.yy"
                  {
       yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location)));
       }
-#line 1365 "dhcp4_parser.cc"
+#line 1370 "dhcp4_parser.cc"
     break;
 
   case 162: // ddns_replace_client_name_value: "never"
-#line 701 "dhcp4_parser.yy"
+#line 706 "dhcp4_parser.yy"
           {
       yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
       }
-#line 1373 "dhcp4_parser.cc"
+#line 1378 "dhcp4_parser.cc"
     break;
 
   case 163: // ddns_replace_client_name_value: "always"
-#line 704 "dhcp4_parser.yy"
+#line 709 "dhcp4_parser.yy"
            {
       yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
       }
-#line 1381 "dhcp4_parser.cc"
+#line 1386 "dhcp4_parser.cc"
     break;
 
   case 164: // ddns_replace_client_name_value: "when-not-present"
-#line 707 "dhcp4_parser.yy"
+#line 712 "dhcp4_parser.yy"
                      {
       yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
       }
-#line 1389 "dhcp4_parser.cc"
+#line 1394 "dhcp4_parser.cc"
     break;
 
   case 165: // ddns_replace_client_name_value: "boolean"
-#line 710 "dhcp4_parser.yy"
+#line 715 "dhcp4_parser.yy"
             {
       error(yystack_[0].location, "boolean values for the replace-client-name are "
                 "no longer supported");
       }
-#line 1398 "dhcp4_parser.cc"
+#line 1403 "dhcp4_parser.cc"
     break;
 
   case 166: // $@23: %empty
-#line 716 "dhcp4_parser.yy"
+#line 721 "dhcp4_parser.yy"
                                              {
     ctx.unique("ddns-generated-prefix", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1407 "dhcp4_parser.cc"
+#line 1412 "dhcp4_parser.cc"
     break;
 
   case 167: // ddns_generated_prefix: "ddns-generated-prefix" $@23 ":" "constant string"
-#line 719 "dhcp4_parser.yy"
+#line 724 "dhcp4_parser.yy"
                {
     ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ddns-generated-prefix", s);
     ctx.leave();
 }
-#line 1417 "dhcp4_parser.cc"
+#line 1422 "dhcp4_parser.cc"
     break;
 
   case 168: // $@24: %empty
-#line 725 "dhcp4_parser.yy"
+#line 730 "dhcp4_parser.yy"
                                                {
     ctx.unique("ddns-qualifying-suffix", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1426 "dhcp4_parser.cc"
+#line 1431 "dhcp4_parser.cc"
     break;
 
   case 169: // ddns_qualifying_suffix: "ddns-qualifying-suffix" $@24 ":" "constant string"
-#line 728 "dhcp4_parser.yy"
+#line 733 "dhcp4_parser.yy"
                {
     ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ddns-qualifying-suffix", s);
     ctx.leave();
 }
-#line 1436 "dhcp4_parser.cc"
+#line 1441 "dhcp4_parser.cc"
     break;
 
   case 170: // ddns_update_on_renew: "ddns-update-on-renew" ":" "boolean"
-#line 734 "dhcp4_parser.yy"
+#line 739 "dhcp4_parser.yy"
                                                          {
     ctx.unique("ddns-update-on-renew", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ddns-update-on-renew", b);
 }
-#line 1446 "dhcp4_parser.cc"
+#line 1451 "dhcp4_parser.cc"
     break;
 
   case 171: // ddns_use_conflict_resolution: "ddns-use-conflict-resolution" ":" "boolean"
-#line 740 "dhcp4_parser.yy"
+#line 745 "dhcp4_parser.yy"
                                                                          {
     ctx.unique("ddns-use-conflict-resolution", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ddns-use-conflict-resolution", b);
 }
-#line 1456 "dhcp4_parser.cc"
+#line 1461 "dhcp4_parser.cc"
     break;
 
   case 172: // ddns_ttl_percent: "ddns-ttl-percent" ":" "floating point"
-#line 746 "dhcp4_parser.yy"
+#line 751 "dhcp4_parser.yy"
                                                {
     ctx.unique("ddns-ttl-percent", ctx.loc2pos(yystack_[2].location));
     ElementPtr ttl(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ddns-ttl-percent", ttl);
 }
-#line 1466 "dhcp4_parser.cc"
+#line 1471 "dhcp4_parser.cc"
     break;
 
   case 173: // $@25: %empty
-#line 752 "dhcp4_parser.yy"
+#line 757 "dhcp4_parser.yy"
                                      {
     ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1475 "dhcp4_parser.cc"
+#line 1480 "dhcp4_parser.cc"
     break;
 
   case 174: // hostname_char_set: "hostname-char-set" $@25 ":" "constant string"
-#line 755 "dhcp4_parser.yy"
+#line 760 "dhcp4_parser.yy"
                {
     ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname-char-set", s);
     ctx.leave();
 }
-#line 1485 "dhcp4_parser.cc"
+#line 1490 "dhcp4_parser.cc"
     break;
 
   case 175: // $@26: %empty
-#line 761 "dhcp4_parser.yy"
+#line 766 "dhcp4_parser.yy"
                                                      {
     ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1494 "dhcp4_parser.cc"
+#line 1499 "dhcp4_parser.cc"
     break;
 
   case 176: // hostname_char_replacement: "hostname-char-replacement" $@26 ":" "constant string"
-#line 764 "dhcp4_parser.yy"
+#line 769 "dhcp4_parser.yy"
                {
     ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname-char-replacement", s);
     ctx.leave();
 }
-#line 1504 "dhcp4_parser.cc"
+#line 1509 "dhcp4_parser.cc"
     break;
 
   case 177: // store_extended_info: "store-extended-info" ":" "boolean"
-#line 770 "dhcp4_parser.yy"
+#line 775 "dhcp4_parser.yy"
                                                        {
     ctx.unique("store-extended-info", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("store-extended-info", b);
 }
-#line 1514 "dhcp4_parser.cc"
+#line 1519 "dhcp4_parser.cc"
     break;
 
   case 178: // statistic_default_sample_count: "statistic-default-sample-count" ":" "integer"
-#line 776 "dhcp4_parser.yy"
+#line 781 "dhcp4_parser.yy"
                                                                              {
     ctx.unique("statistic-default-sample-count", ctx.loc2pos(yystack_[2].location));
     ElementPtr count(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("statistic-default-sample-count", count);
 }
-#line 1524 "dhcp4_parser.cc"
+#line 1529 "dhcp4_parser.cc"
     break;
 
   case 179: // statistic_default_sample_age: "statistic-default-sample-age" ":" "integer"
-#line 782 "dhcp4_parser.yy"
+#line 787 "dhcp4_parser.yy"
                                                                          {
     ctx.unique("statistic-default-sample-age", ctx.loc2pos(yystack_[2].location));
     ElementPtr age(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("statistic-default-sample-age", age);
 }
-#line 1534 "dhcp4_parser.cc"
+#line 1539 "dhcp4_parser.cc"
     break;
 
   case 180: // early_global_reservations_lookup: "early-global-reservations-lookup" ":" "boolean"
-#line 788 "dhcp4_parser.yy"
+#line 793 "dhcp4_parser.yy"
                                                                                  {
     ctx.unique("early-global-reservations-lookup", ctx.loc2pos(yystack_[2].location));
     ElementPtr early(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("early-global-reservations-lookup", early);
 }
-#line 1544 "dhcp4_parser.cc"
+#line 1549 "dhcp4_parser.cc"
     break;
 
   case 181: // ip_reservations_unique: "ip-reservations-unique" ":" "boolean"
-#line 794 "dhcp4_parser.yy"
+#line 799 "dhcp4_parser.yy"
                                                              {
     ctx.unique("ip-reservations-unique", ctx.loc2pos(yystack_[2].location));
     ElementPtr unique(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-reservations-unique", unique);
 }
-#line 1554 "dhcp4_parser.cc"
+#line 1559 "dhcp4_parser.cc"
     break;
 
   case 182: // reservations_lookup_first: "reservations-lookup-first" ":" "boolean"
-#line 800 "dhcp4_parser.yy"
+#line 805 "dhcp4_parser.yy"
                                                                    {
     ctx.unique("reservations-lookup-first", ctx.loc2pos(yystack_[2].location));
     ElementPtr first(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations-lookup-first", first);
 }
-#line 1564 "dhcp4_parser.cc"
+#line 1569 "dhcp4_parser.cc"
     break;
 
   case 183: // offer_lifetime: "offer-lifetime" ":" "integer"
-#line 806 "dhcp4_parser.yy"
+#line 811 "dhcp4_parser.yy"
                                         {
     ctx.unique("offer-lifetime", ctx.loc2pos(yystack_[2].location));
     ElementPtr offer_lifetime(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("offer-lifetime", offer_lifetime);
 }
-#line 1574 "dhcp4_parser.cc"
+#line 1579 "dhcp4_parser.cc"
     break;
 
   case 184: // $@27: %empty
-#line 812 "dhcp4_parser.yy"
+#line 817 "dhcp4_parser.yy"
                                      {
     ctx.unique("interfaces-config", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1582,48 +1587,48 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(i);
     ctx.enter(ctx.INTERFACES_CONFIG);
 }
-#line 1586 "dhcp4_parser.cc"
+#line 1591 "dhcp4_parser.cc"
     break;
 
   case 185: // interfaces_config: "interfaces-config" $@27 ":" "{" interfaces_config_params "}"
-#line 818 "dhcp4_parser.yy"
+#line 823 "dhcp4_parser.yy"
                                                                {
     // No interfaces config param is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1596 "dhcp4_parser.cc"
+#line 1601 "dhcp4_parser.cc"
     break;
 
   case 188: // interfaces_config_params: interfaces_config_params ","
-#line 826 "dhcp4_parser.yy"
+#line 831 "dhcp4_parser.yy"
                                                          {
                             ctx.warnAboutExtraCommas(yystack_[0].location);
                             }
-#line 1604 "dhcp4_parser.cc"
+#line 1609 "dhcp4_parser.cc"
     break;
 
   case 199: // $@28: %empty
-#line 843 "dhcp4_parser.yy"
+#line 848 "dhcp4_parser.yy"
                                 {
     // Parse the interfaces-config map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1614 "dhcp4_parser.cc"
+#line 1619 "dhcp4_parser.cc"
     break;
 
   case 200: // sub_interfaces4: "{" $@28 interfaces_config_params "}"
-#line 847 "dhcp4_parser.yy"
+#line 852 "dhcp4_parser.yy"
                                           {
     // No interfaces config param is required
     // parsing completed
 }
-#line 1623 "dhcp4_parser.cc"
+#line 1628 "dhcp4_parser.cc"
     break;
 
   case 201: // $@29: %empty
-#line 852 "dhcp4_parser.yy"
+#line 857 "dhcp4_parser.yy"
                             {
     ctx.unique("interfaces", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -1631,124 +1636,124 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1635 "dhcp4_parser.cc"
+#line 1640 "dhcp4_parser.cc"
     break;
 
   case 202: // interfaces_list: "interfaces" $@29 ":" list_strings
-#line 858 "dhcp4_parser.yy"
+#line 863 "dhcp4_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1644 "dhcp4_parser.cc"
+#line 1649 "dhcp4_parser.cc"
     break;
 
   case 203: // $@30: %empty
-#line 863 "dhcp4_parser.yy"
+#line 868 "dhcp4_parser.yy"
                                    {
     ctx.unique("dhcp-socket-type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.DHCP_SOCKET_TYPE);
 }
-#line 1653 "dhcp4_parser.cc"
+#line 1658 "dhcp4_parser.cc"
     break;
 
   case 204: // dhcp_socket_type: "dhcp-socket-type" $@30 ":" socket_type
-#line 866 "dhcp4_parser.yy"
+#line 871 "dhcp4_parser.yy"
                     {
     ctx.stack_.back()->set("dhcp-socket-type", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 1662 "dhcp4_parser.cc"
+#line 1667 "dhcp4_parser.cc"
     break;
 
   case 205: // socket_type: "raw"
-#line 871 "dhcp4_parser.yy"
+#line 876 "dhcp4_parser.yy"
                  { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("raw", ctx.loc2pos(yystack_[0].location))); }
-#line 1668 "dhcp4_parser.cc"
+#line 1673 "dhcp4_parser.cc"
     break;
 
   case 206: // socket_type: "udp"
-#line 872 "dhcp4_parser.yy"
+#line 877 "dhcp4_parser.yy"
                  { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("udp", ctx.loc2pos(yystack_[0].location))); }
-#line 1674 "dhcp4_parser.cc"
+#line 1679 "dhcp4_parser.cc"
     break;
 
   case 207: // $@31: %empty
-#line 875 "dhcp4_parser.yy"
+#line 880 "dhcp4_parser.yy"
                                        {
     ctx.unique("outbound-interface", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.OUTBOUND_INTERFACE);
 }
-#line 1683 "dhcp4_parser.cc"
+#line 1688 "dhcp4_parser.cc"
     break;
 
   case 208: // outbound_interface: "outbound-interface" $@31 ":" outbound_interface_value
-#line 878 "dhcp4_parser.yy"
+#line 883 "dhcp4_parser.yy"
                                  {
     ctx.stack_.back()->set("outbound-interface", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 1692 "dhcp4_parser.cc"
+#line 1697 "dhcp4_parser.cc"
     break;
 
   case 209: // outbound_interface_value: "same-as-inbound"
-#line 883 "dhcp4_parser.yy"
+#line 888 "dhcp4_parser.yy"
                                           {
     yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("same-as-inbound", ctx.loc2pos(yystack_[0].location)));
 }
-#line 1700 "dhcp4_parser.cc"
+#line 1705 "dhcp4_parser.cc"
     break;
 
   case 210: // outbound_interface_value: "use-routing"
-#line 885 "dhcp4_parser.yy"
+#line 890 "dhcp4_parser.yy"
                 {
     yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("use-routing", ctx.loc2pos(yystack_[0].location)));
     }
-#line 1708 "dhcp4_parser.cc"
+#line 1713 "dhcp4_parser.cc"
     break;
 
   case 211: // re_detect: "re-detect" ":" "boolean"
-#line 889 "dhcp4_parser.yy"
+#line 894 "dhcp4_parser.yy"
                                    {
     ctx.unique("re-detect", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("re-detect", b);
 }
-#line 1718 "dhcp4_parser.cc"
+#line 1723 "dhcp4_parser.cc"
     break;
 
   case 212: // service_sockets_require_all: "service-sockets-require-all" ":" "boolean"
-#line 895 "dhcp4_parser.yy"
+#line 900 "dhcp4_parser.yy"
                                                                        {
     ctx.unique("service-sockets-require-all", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("service-sockets-require-all", b);
 }
-#line 1728 "dhcp4_parser.cc"
+#line 1733 "dhcp4_parser.cc"
     break;
 
   case 213: // service_sockets_retry_wait_time: "service-sockets-retry-wait-time" ":" "integer"
-#line 901 "dhcp4_parser.yy"
+#line 906 "dhcp4_parser.yy"
                                                                                {
     ctx.unique("service-sockets-retry-wait-time", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("service-sockets-retry-wait-time", n);
 }
-#line 1738 "dhcp4_parser.cc"
+#line 1743 "dhcp4_parser.cc"
     break;
 
   case 214: // service_sockets_max_retries: "service-sockets-max-retries" ":" "integer"
-#line 907 "dhcp4_parser.yy"
+#line 912 "dhcp4_parser.yy"
                                                                        {
     ctx.unique("service-sockets-max-retries", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("service-sockets-max-retries", n);
 }
-#line 1748 "dhcp4_parser.cc"
+#line 1753 "dhcp4_parser.cc"
     break;
 
   case 215: // $@32: %empty
-#line 913 "dhcp4_parser.yy"
+#line 918 "dhcp4_parser.yy"
                                {
     ctx.unique("lease-database", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1756,22 +1761,22 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(i);
     ctx.enter(ctx.LEASE_DATABASE);
 }
-#line 1760 "dhcp4_parser.cc"
+#line 1765 "dhcp4_parser.cc"
     break;
 
   case 216: // lease_database: "lease-database" $@32 ":" "{" database_map_params "}"
-#line 919 "dhcp4_parser.yy"
+#line 924 "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 1771 "dhcp4_parser.cc"
+#line 1776 "dhcp4_parser.cc"
     break;
 
   case 217: // $@33: %empty
-#line 926 "dhcp4_parser.yy"
+#line 931 "dhcp4_parser.yy"
                              {
     ctx.unique("sanity-checks", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1779,37 +1784,37 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SANITY_CHECKS);
 }
-#line 1783 "dhcp4_parser.cc"
+#line 1788 "dhcp4_parser.cc"
     break;
 
   case 218: // sanity_checks: "sanity-checks" $@33 ":" "{" sanity_checks_params "}"
-#line 932 "dhcp4_parser.yy"
+#line 937 "dhcp4_parser.yy"
                                                            {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1792 "dhcp4_parser.cc"
+#line 1797 "dhcp4_parser.cc"
     break;
 
   case 221: // sanity_checks_params: sanity_checks_params ","
-#line 939 "dhcp4_parser.yy"
+#line 944 "dhcp4_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 1800 "dhcp4_parser.cc"
+#line 1805 "dhcp4_parser.cc"
     break;
 
   case 224: // $@34: %empty
-#line 948 "dhcp4_parser.yy"
+#line 953 "dhcp4_parser.yy"
                            {
     ctx.unique("lease-checks", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1809 "dhcp4_parser.cc"
+#line 1814 "dhcp4_parser.cc"
     break;
 
   case 225: // lease_checks: "lease-checks" $@34 ":" "constant string"
-#line 951 "dhcp4_parser.yy"
+#line 956 "dhcp4_parser.yy"
                {
 
     if ( (string(yystack_[0].value.as < std::string > ()) == "none") ||
@@ -1825,20 +1830,20 @@ namespace isc { namespace dhcp {
               ", supported values are: none, warn, fix, fix-del, del");
     }
 }
-#line 1829 "dhcp4_parser.cc"
+#line 1834 "dhcp4_parser.cc"
     break;
 
   case 226: // $@35: %empty
-#line 967 "dhcp4_parser.yy"
+#line 972 "dhcp4_parser.yy"
                                            {
     ctx.unique("extended-info-checks", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1838 "dhcp4_parser.cc"
+#line 1843 "dhcp4_parser.cc"
     break;
 
   case 227: // extended_info_checks: "extended-info-checks" $@35 ":" "constant string"
-#line 970 "dhcp4_parser.yy"
+#line 975 "dhcp4_parser.yy"
                {
 
     if ( (string(yystack_[0].value.as < std::string > ()) == "none") ||
@@ -1853,11 +1858,11 @@ namespace isc { namespace dhcp {
               ", supported values are: none, fix, strict, pedantic");
     }
 }
-#line 1857 "dhcp4_parser.cc"
+#line 1862 "dhcp4_parser.cc"
     break;
 
   case 228: // $@36: %empty
-#line 985 "dhcp4_parser.yy"
+#line 990 "dhcp4_parser.yy"
                                {
     ctx.unique("hosts-database", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1865,22 +1870,22 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(i);
     ctx.enter(ctx.HOSTS_DATABASE);
 }
-#line 1869 "dhcp4_parser.cc"
+#line 1874 "dhcp4_parser.cc"
     break;
 
   case 229: // hosts_database: "hosts-database" $@36 ":" "{" database_map_params "}"
-#line 991 "dhcp4_parser.yy"
+#line 996 "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 1880 "dhcp4_parser.cc"
+#line 1885 "dhcp4_parser.cc"
     break;
 
   case 230: // $@37: %empty
-#line 998 "dhcp4_parser.yy"
+#line 1003 "dhcp4_parser.yy"
                                  {
     ctx.unique("hosts-databases", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -1888,390 +1893,390 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOSTS_DATABASE);
 }
-#line 1892 "dhcp4_parser.cc"
+#line 1897 "dhcp4_parser.cc"
     break;
 
   case 231: // hosts_databases: "hosts-databases" $@37 ":" "[" database_list "]"
-#line 1004 "dhcp4_parser.yy"
+#line 1009 "dhcp4_parser.yy"
                                                       {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1901 "dhcp4_parser.cc"
+#line 1906 "dhcp4_parser.cc"
     break;
 
   case 236: // not_empty_database_list: not_empty_database_list ","
-#line 1015 "dhcp4_parser.yy"
+#line 1020 "dhcp4_parser.yy"
                                                        {
                            ctx.warnAboutExtraCommas(yystack_[0].location);
                            }
-#line 1909 "dhcp4_parser.cc"
+#line 1914 "dhcp4_parser.cc"
     break;
 
   case 237: // $@38: %empty
-#line 1020 "dhcp4_parser.yy"
+#line 1025 "dhcp4_parser.yy"
                          {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1919 "dhcp4_parser.cc"
+#line 1924 "dhcp4_parser.cc"
     break;
 
   case 238: // database: "{" $@38 database_map_params "}"
-#line 1024 "dhcp4_parser.yy"
+#line 1029 "dhcp4_parser.yy"
                                      {
     // The type parameter is required
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 1929 "dhcp4_parser.cc"
+#line 1934 "dhcp4_parser.cc"
     break;
 
   case 241: // database_map_params: database_map_params ","
-#line 1032 "dhcp4_parser.yy"
+#line 1037 "dhcp4_parser.yy"
                                                {
                        ctx.warnAboutExtraCommas(yystack_[0].location);
                        }
-#line 1937 "dhcp4_parser.cc"
+#line 1942 "dhcp4_parser.cc"
     break;
 
   case 264: // $@39: %empty
-#line 1061 "dhcp4_parser.yy"
+#line 1066 "dhcp4_parser.yy"
                     {
     ctx.unique("type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.DATABASE_TYPE);
 }
-#line 1946 "dhcp4_parser.cc"
+#line 1951 "dhcp4_parser.cc"
     break;
 
   case 265: // database_type: "type" $@39 ":" db_type
-#line 1064 "dhcp4_parser.yy"
+#line 1069 "dhcp4_parser.yy"
                 {
     ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 1955 "dhcp4_parser.cc"
+#line 1960 "dhcp4_parser.cc"
     break;
 
   case 266: // db_type: "memfile"
-#line 1069 "dhcp4_parser.yy"
+#line 1074 "dhcp4_parser.yy"
                  { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
-#line 1961 "dhcp4_parser.cc"
+#line 1966 "dhcp4_parser.cc"
     break;
 
   case 267: // db_type: "mysql"
-#line 1070 "dhcp4_parser.yy"
+#line 1075 "dhcp4_parser.yy"
                { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
-#line 1967 "dhcp4_parser.cc"
+#line 1972 "dhcp4_parser.cc"
     break;
 
   case 268: // db_type: "postgresql"
-#line 1071 "dhcp4_parser.yy"
+#line 1076 "dhcp4_parser.yy"
                     { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
-#line 1973 "dhcp4_parser.cc"
+#line 1978 "dhcp4_parser.cc"
     break;
 
   case 269: // $@40: %empty
-#line 1074 "dhcp4_parser.yy"
+#line 1079 "dhcp4_parser.yy"
            {
     ctx.unique("user", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1982 "dhcp4_parser.cc"
+#line 1987 "dhcp4_parser.cc"
     break;
 
   case 270: // user: "user" $@40 ":" "constant string"
-#line 1077 "dhcp4_parser.yy"
+#line 1082 "dhcp4_parser.yy"
                {
     ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("user", user);
     ctx.leave();
 }
-#line 1992 "dhcp4_parser.cc"
+#line 1997 "dhcp4_parser.cc"
     break;
 
   case 271: // $@41: %empty
-#line 1083 "dhcp4_parser.yy"
+#line 1088 "dhcp4_parser.yy"
                    {
     ctx.unique("password", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2001 "dhcp4_parser.cc"
+#line 2006 "dhcp4_parser.cc"
     break;
 
   case 272: // password: "password" $@41 ":" "constant string"
-#line 1086 "dhcp4_parser.yy"
+#line 1091 "dhcp4_parser.yy"
                {
     ElementPtr pwd(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("password", pwd);
     ctx.leave();
 }
-#line 2011 "dhcp4_parser.cc"
+#line 2016 "dhcp4_parser.cc"
     break;
 
   case 273: // $@42: %empty
-#line 1092 "dhcp4_parser.yy"
+#line 1097 "dhcp4_parser.yy"
            {
     ctx.unique("host", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2020 "dhcp4_parser.cc"
+#line 2025 "dhcp4_parser.cc"
     break;
 
   case 274: // host: "host" $@42 ":" "constant string"
-#line 1095 "dhcp4_parser.yy"
+#line 1100 "dhcp4_parser.yy"
                {
     ElementPtr h(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host", h);
     ctx.leave();
 }
-#line 2030 "dhcp4_parser.cc"
+#line 2035 "dhcp4_parser.cc"
     break;
 
   case 275: // port: "port" ":" "integer"
-#line 1101 "dhcp4_parser.yy"
+#line 1106 "dhcp4_parser.yy"
                          {
     ctx.unique("port", ctx.loc2pos(yystack_[2].location));
     ElementPtr p(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("port", p);
 }
-#line 2040 "dhcp4_parser.cc"
+#line 2045 "dhcp4_parser.cc"
     break;
 
   case 276: // $@43: %empty
-#line 1107 "dhcp4_parser.yy"
+#line 1112 "dhcp4_parser.yy"
            {
     ctx.unique("name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2049 "dhcp4_parser.cc"
+#line 2054 "dhcp4_parser.cc"
     break;
 
   case 277: // name: "name" $@43 ":" "constant string"
-#line 1110 "dhcp4_parser.yy"
+#line 1115 "dhcp4_parser.yy"
                {
     ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("name", name);
     ctx.leave();
 }
-#line 2059 "dhcp4_parser.cc"
+#line 2064 "dhcp4_parser.cc"
     break;
 
   case 278: // persist: "persist" ":" "boolean"
-#line 1116 "dhcp4_parser.yy"
+#line 1121 "dhcp4_parser.yy"
                                {
     ctx.unique("persist", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("persist", n);
 }
-#line 2069 "dhcp4_parser.cc"
+#line 2074 "dhcp4_parser.cc"
     break;
 
   case 279: // lfc_interval: "lfc-interval" ":" "integer"
-#line 1122 "dhcp4_parser.yy"
+#line 1127 "dhcp4_parser.yy"
                                          {
     ctx.unique("lfc-interval", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lfc-interval", n);
 }
-#line 2079 "dhcp4_parser.cc"
+#line 2084 "dhcp4_parser.cc"
     break;
 
   case 280: // readonly: "readonly" ":" "boolean"
-#line 1128 "dhcp4_parser.yy"
+#line 1133 "dhcp4_parser.yy"
                                  {
     ctx.unique("readonly", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("readonly", n);
 }
-#line 2089 "dhcp4_parser.cc"
+#line 2094 "dhcp4_parser.cc"
     break;
 
   case 281: // connect_timeout: "connect-timeout" ":" "integer"
-#line 1134 "dhcp4_parser.yy"
+#line 1139 "dhcp4_parser.yy"
                                                {
     ctx.unique("connect-timeout", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("connect-timeout", n);
 }
-#line 2099 "dhcp4_parser.cc"
+#line 2104 "dhcp4_parser.cc"
     break;
 
   case 282: // read_timeout: "read-timeout" ":" "integer"
-#line 1140 "dhcp4_parser.yy"
+#line 1145 "dhcp4_parser.yy"
                                          {
     ctx.unique("read-timeout", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("read-timeout", n);
 }
-#line 2109 "dhcp4_parser.cc"
+#line 2114 "dhcp4_parser.cc"
     break;
 
   case 283: // write_timeout: "write-timeout" ":" "integer"
-#line 1146 "dhcp4_parser.yy"
+#line 1151 "dhcp4_parser.yy"
                                            {
     ctx.unique("write-timeout", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("write-timeout", n);
 }
-#line 2119 "dhcp4_parser.cc"
+#line 2124 "dhcp4_parser.cc"
     break;
 
   case 284: // tcp_user_timeout: "tcp-user-timeout" ":" "integer"
-#line 1152 "dhcp4_parser.yy"
+#line 1157 "dhcp4_parser.yy"
                                                  {
     ctx.unique("tcp-user-timeout", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("tcp-user-timeout", n);
 }
-#line 2129 "dhcp4_parser.cc"
+#line 2134 "dhcp4_parser.cc"
     break;
 
   case 285: // max_reconnect_tries: "max-reconnect-tries" ":" "integer"
-#line 1158 "dhcp4_parser.yy"
+#line 1163 "dhcp4_parser.yy"
                                                        {
     ctx.unique("max-reconnect-tries", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reconnect-tries", n);
 }
-#line 2139 "dhcp4_parser.cc"
+#line 2144 "dhcp4_parser.cc"
     break;
 
   case 286: // reconnect_wait_time: "reconnect-wait-time" ":" "integer"
-#line 1164 "dhcp4_parser.yy"
+#line 1169 "dhcp4_parser.yy"
                                                        {
     ctx.unique("reconnect-wait-time", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reconnect-wait-time", n);
 }
-#line 2149 "dhcp4_parser.cc"
+#line 2154 "dhcp4_parser.cc"
     break;
 
   case 287: // $@44: %empty
-#line 1170 "dhcp4_parser.yy"
+#line 1175 "dhcp4_parser.yy"
                  {
     ctx.unique("on-fail", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.DATABASE_ON_FAIL);
 }
-#line 2158 "dhcp4_parser.cc"
+#line 2163 "dhcp4_parser.cc"
     break;
 
   case 288: // on_fail: "on-fail" $@44 ":" on_fail_mode
-#line 1173 "dhcp4_parser.yy"
+#line 1178 "dhcp4_parser.yy"
                      {
     ctx.stack_.back()->set("on-fail", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 2167 "dhcp4_parser.cc"
+#line 2172 "dhcp4_parser.cc"
     break;
 
   case 289: // on_fail_mode: "stop-retry-exit"
-#line 1178 "dhcp4_parser.yy"
+#line 1183 "dhcp4_parser.yy"
                               { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("stop-retry-exit", ctx.loc2pos(yystack_[0].location))); }
-#line 2173 "dhcp4_parser.cc"
+#line 2178 "dhcp4_parser.cc"
     break;
 
   case 290: // on_fail_mode: "serve-retry-exit"
-#line 1179 "dhcp4_parser.yy"
+#line 1184 "dhcp4_parser.yy"
                                { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-exit", ctx.loc2pos(yystack_[0].location))); }
-#line 2179 "dhcp4_parser.cc"
+#line 2184 "dhcp4_parser.cc"
     break;
 
   case 291: // on_fail_mode: "serve-retry-continue"
-#line 1180 "dhcp4_parser.yy"
+#line 1185 "dhcp4_parser.yy"
                                    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-continue", ctx.loc2pos(yystack_[0].location))); }
-#line 2185 "dhcp4_parser.cc"
+#line 2190 "dhcp4_parser.cc"
     break;
 
   case 292: // max_row_errors: "max-row-errors" ":" "integer"
-#line 1183 "dhcp4_parser.yy"
+#line 1188 "dhcp4_parser.yy"
                                              {
     ctx.unique("max-row-errors", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-row-errors", n);
 }
-#line 2195 "dhcp4_parser.cc"
+#line 2200 "dhcp4_parser.cc"
     break;
 
   case 293: // $@45: %empty
-#line 1189 "dhcp4_parser.yy"
+#line 1194 "dhcp4_parser.yy"
                            {
     ctx.unique("trust-anchor", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2204 "dhcp4_parser.cc"
+#line 2209 "dhcp4_parser.cc"
     break;
 
   case 294: // trust_anchor: "trust-anchor" $@45 ":" "constant string"
-#line 1192 "dhcp4_parser.yy"
+#line 1197 "dhcp4_parser.yy"
                {
     ElementPtr ca(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("trust-anchor", ca);
     ctx.leave();
 }
-#line 2214 "dhcp4_parser.cc"
+#line 2219 "dhcp4_parser.cc"
     break;
 
   case 295: // $@46: %empty
-#line 1198 "dhcp4_parser.yy"
+#line 1203 "dhcp4_parser.yy"
                      {
     ctx.unique("cert-file", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2223 "dhcp4_parser.cc"
+#line 2228 "dhcp4_parser.cc"
     break;
 
   case 296: // cert_file: "cert-file" $@46 ":" "constant string"
-#line 1201 "dhcp4_parser.yy"
+#line 1206 "dhcp4_parser.yy"
                {
     ElementPtr cert(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("cert-file", cert);
     ctx.leave();
 }
-#line 2233 "dhcp4_parser.cc"
+#line 2238 "dhcp4_parser.cc"
     break;
 
   case 297: // $@47: %empty
-#line 1207 "dhcp4_parser.yy"
+#line 1212 "dhcp4_parser.yy"
                    {
     ctx.unique("key-file", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2242 "dhcp4_parser.cc"
+#line 2247 "dhcp4_parser.cc"
     break;
 
   case 298: // key_file: "key-file" $@47 ":" "constant string"
-#line 1210 "dhcp4_parser.yy"
+#line 1215 "dhcp4_parser.yy"
                {
     ElementPtr key(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("key-file", key);
     ctx.leave();
 }
-#line 2252 "dhcp4_parser.cc"
+#line 2257 "dhcp4_parser.cc"
     break;
 
   case 299: // $@48: %empty
-#line 1216 "dhcp4_parser.yy"
+#line 1221 "dhcp4_parser.yy"
                          {
     ctx.unique("cipher-list", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2261 "dhcp4_parser.cc"
+#line 2266 "dhcp4_parser.cc"
     break;
 
   case 300: // cipher_list: "cipher-list" $@48 ":" "constant string"
-#line 1219 "dhcp4_parser.yy"
+#line 1224 "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 2271 "dhcp4_parser.cc"
+#line 2276 "dhcp4_parser.cc"
     break;
 
   case 301: // $@49: %empty
-#line 1225 "dhcp4_parser.yy"
+#line 1230 "dhcp4_parser.yy"
                                                            {
     ctx.unique("host-reservation-identifiers", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2279,73 +2284,73 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS);
 }
-#line 2283 "dhcp4_parser.cc"
+#line 2288 "dhcp4_parser.cc"
     break;
 
   case 302: // host_reservation_identifiers: "host-reservation-identifiers" $@49 ":" "[" host_reservation_identifiers_list "]"
-#line 1231 "dhcp4_parser.yy"
+#line 1236 "dhcp4_parser.yy"
                                                                           {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2292 "dhcp4_parser.cc"
+#line 2297 "dhcp4_parser.cc"
     break;
 
   case 305: // host_reservation_identifiers_list: host_reservation_identifiers_list ","
-#line 1238 "dhcp4_parser.yy"
+#line 1243 "dhcp4_parser.yy"
                                               {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 2300 "dhcp4_parser.cc"
+#line 2305 "dhcp4_parser.cc"
     break;
 
   case 311: // duid_id: "duid"
-#line 1250 "dhcp4_parser.yy"
+#line 1255 "dhcp4_parser.yy"
               {
     ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
 }
-#line 2309 "dhcp4_parser.cc"
+#line 2314 "dhcp4_parser.cc"
     break;
 
   case 312: // hw_address_id: "hw-address"
-#line 1255 "dhcp4_parser.yy"
+#line 1260 "dhcp4_parser.yy"
                           {
     ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(hwaddr);
 }
-#line 2318 "dhcp4_parser.cc"
+#line 2323 "dhcp4_parser.cc"
     break;
 
   case 313: // circuit_id: "circuit-id"
-#line 1260 "dhcp4_parser.yy"
+#line 1265 "dhcp4_parser.yy"
                        {
     ElementPtr circuit(new StringElement("circuit-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(circuit);
 }
-#line 2327 "dhcp4_parser.cc"
+#line 2332 "dhcp4_parser.cc"
     break;
 
   case 314: // client_id: "client-id"
-#line 1265 "dhcp4_parser.yy"
+#line 1270 "dhcp4_parser.yy"
                      {
     ElementPtr client(new StringElement("client-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(client);
 }
-#line 2336 "dhcp4_parser.cc"
+#line 2341 "dhcp4_parser.cc"
     break;
 
   case 315: // flex_id: "flex-id"
-#line 1270 "dhcp4_parser.yy"
+#line 1275 "dhcp4_parser.yy"
                  {
     ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(flex_id);
 }
-#line 2345 "dhcp4_parser.cc"
+#line 2350 "dhcp4_parser.cc"
     break;
 
   case 316: // $@50: %empty
-#line 1277 "dhcp4_parser.yy"
+#line 1282 "dhcp4_parser.yy"
                                            {
     ctx.unique("multi-threading", ctx.loc2pos(yystack_[0].location));
     ElementPtr mt(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2353,60 +2358,60 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(mt);
     ctx.enter(ctx.DHCP_MULTI_THREADING);
 }
-#line 2357 "dhcp4_parser.cc"
+#line 2362 "dhcp4_parser.cc"
     break;
 
   case 317: // dhcp_multi_threading: "multi-threading" $@50 ":" "{" multi_threading_params "}"
-#line 1283 "dhcp4_parser.yy"
+#line 1288 "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 2368 "dhcp4_parser.cc"
+#line 2373 "dhcp4_parser.cc"
     break;
 
   case 320: // multi_threading_params: multi_threading_params ","
-#line 1292 "dhcp4_parser.yy"
+#line 1297 "dhcp4_parser.yy"
                                                      {
                           ctx.warnAboutExtraCommas(yystack_[0].location);
                           }
-#line 2376 "dhcp4_parser.cc"
+#line 2381 "dhcp4_parser.cc"
     break;
 
   case 327: // enable_multi_threading: "enable-multi-threading" ":" "boolean"
-#line 1305 "dhcp4_parser.yy"
+#line 1310 "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 2386 "dhcp4_parser.cc"
+#line 2391 "dhcp4_parser.cc"
     break;
 
   case 328: // thread_pool_size: "thread-pool-size" ":" "integer"
-#line 1311 "dhcp4_parser.yy"
+#line 1316 "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 2396 "dhcp4_parser.cc"
+#line 2401 "dhcp4_parser.cc"
     break;
 
   case 329: // packet_queue_size: "packet-queue-size" ":" "integer"
-#line 1317 "dhcp4_parser.yy"
+#line 1322 "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 2406 "dhcp4_parser.cc"
+#line 2411 "dhcp4_parser.cc"
     break;
 
   case 330: // $@51: %empty
-#line 1323 "dhcp4_parser.yy"
+#line 1328 "dhcp4_parser.yy"
                                  {
     ctx.unique("hooks-libraries", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2414,113 +2419,113 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOOKS_LIBRARIES);
 }
-#line 2418 "dhcp4_parser.cc"
+#line 2423 "dhcp4_parser.cc"
     break;
 
   case 331: // hooks_libraries: "hooks-libraries" $@51 ":" "[" hooks_libraries_list "]"
-#line 1329 "dhcp4_parser.yy"
+#line 1334 "dhcp4_parser.yy"
                                                              {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2427 "dhcp4_parser.cc"
+#line 2432 "dhcp4_parser.cc"
     break;
 
   case 336: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list ","
-#line 1340 "dhcp4_parser.yy"
+#line 1345 "dhcp4_parser.yy"
                                            {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 2435 "dhcp4_parser.cc"
+#line 2440 "dhcp4_parser.cc"
     break;
 
   case 337: // $@52: %empty
-#line 1345 "dhcp4_parser.yy"
+#line 1350 "dhcp4_parser.yy"
                               {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2445 "dhcp4_parser.cc"
+#line 2450 "dhcp4_parser.cc"
     break;
 
   case 338: // hooks_library: "{" $@52 hooks_params "}"
-#line 1349 "dhcp4_parser.yy"
+#line 1354 "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 2455 "dhcp4_parser.cc"
+#line 2460 "dhcp4_parser.cc"
     break;
 
   case 339: // $@53: %empty
-#line 1355 "dhcp4_parser.yy"
+#line 1360 "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 2465 "dhcp4_parser.cc"
+#line 2470 "dhcp4_parser.cc"
     break;
 
   case 340: // sub_hooks_library: "{" $@53 hooks_params "}"
-#line 1359 "dhcp4_parser.yy"
+#line 1364 "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 2475 "dhcp4_parser.cc"
+#line 2480 "dhcp4_parser.cc"
     break;
 
   case 343: // hooks_params: hooks_params ","
-#line 1367 "dhcp4_parser.yy"
+#line 1372 "dhcp4_parser.yy"
                                  {
                 ctx.warnAboutExtraCommas(yystack_[0].location);
                 }
-#line 2483 "dhcp4_parser.cc"
+#line 2488 "dhcp4_parser.cc"
     break;
 
   case 347: // $@54: %empty
-#line 1377 "dhcp4_parser.yy"
+#line 1382 "dhcp4_parser.yy"
                  {
     ctx.unique("library", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2492 "dhcp4_parser.cc"
+#line 2497 "dhcp4_parser.cc"
     break;
 
   case 348: // library: "library" $@54 ":" "constant string"
-#line 1380 "dhcp4_parser.yy"
+#line 1385 "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 2502 "dhcp4_parser.cc"
+#line 2507 "dhcp4_parser.cc"
     break;
 
   case 349: // $@55: %empty
-#line 1386 "dhcp4_parser.yy"
+#line 1391 "dhcp4_parser.yy"
                        {
     ctx.unique("parameters", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2511 "dhcp4_parser.cc"
+#line 2516 "dhcp4_parser.cc"
     break;
 
   case 350: // parameters: "parameters" $@55 ":" map_value
-#line 1389 "dhcp4_parser.yy"
+#line 1394 "dhcp4_parser.yy"
                   {
     ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 2520 "dhcp4_parser.cc"
+#line 2525 "dhcp4_parser.cc"
     break;
 
   case 351: // $@56: %empty
-#line 1395 "dhcp4_parser.yy"
+#line 1400 "dhcp4_parser.yy"
                                                      {
     ctx.unique("expired-leases-processing", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2528,89 +2533,89 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.EXPIRED_LEASES_PROCESSING);
 }
-#line 2532 "dhcp4_parser.cc"
+#line 2537 "dhcp4_parser.cc"
     break;
 
   case 352: // expired_leases_processing: "expired-leases-processing" $@56 ":" "{" expired_leases_params "}"
-#line 1401 "dhcp4_parser.yy"
+#line 1406 "dhcp4_parser.yy"
                                                             {
     // No expired lease parameter is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2542 "dhcp4_parser.cc"
+#line 2547 "dhcp4_parser.cc"
     break;
 
   case 355: // expired_leases_params: expired_leases_params ","
-#line 1409 "dhcp4_parser.yy"
+#line 1414 "dhcp4_parser.yy"
                                                    {
                          ctx.warnAboutExtraCommas(yystack_[0].location);
                          }
-#line 2550 "dhcp4_parser.cc"
+#line 2555 "dhcp4_parser.cc"
     break;
 
   case 362: // reclaim_timer_wait_time: "reclaim-timer-wait-time" ":" "integer"
-#line 1422 "dhcp4_parser.yy"
+#line 1427 "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 2560 "dhcp4_parser.cc"
+#line 2565 "dhcp4_parser.cc"
     break;
 
   case 363: // flush_reclaimed_timer_wait_time: "flush-reclaimed-timer-wait-time" ":" "integer"
-#line 1428 "dhcp4_parser.yy"
+#line 1433 "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 2570 "dhcp4_parser.cc"
+#line 2575 "dhcp4_parser.cc"
     break;
 
   case 364: // hold_reclaimed_time: "hold-reclaimed-time" ":" "integer"
-#line 1434 "dhcp4_parser.yy"
+#line 1439 "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 2580 "dhcp4_parser.cc"
+#line 2585 "dhcp4_parser.cc"
     break;
 
   case 365: // max_reclaim_leases: "max-reclaim-leases" ":" "integer"
-#line 1440 "dhcp4_parser.yy"
+#line 1445 "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 2590 "dhcp4_parser.cc"
+#line 2595 "dhcp4_parser.cc"
     break;
 
   case 366: // max_reclaim_time: "max-reclaim-time" ":" "integer"
-#line 1446 "dhcp4_parser.yy"
+#line 1451 "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 2600 "dhcp4_parser.cc"
+#line 2605 "dhcp4_parser.cc"
     break;
 
   case 367: // unwarned_reclaim_cycles: "unwarned-reclaim-cycles" ":" "integer"
-#line 1452 "dhcp4_parser.yy"
+#line 1457 "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 2610 "dhcp4_parser.cc"
+#line 2615 "dhcp4_parser.cc"
     break;
 
   case 368: // $@57: %empty
-#line 1461 "dhcp4_parser.yy"
+#line 1466 "dhcp4_parser.yy"
                       {
     ctx.unique("subnet4", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2618,38 +2623,38 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.SUBNET4);
 }
-#line 2622 "dhcp4_parser.cc"
+#line 2627 "dhcp4_parser.cc"
     break;
 
   case 369: // subnet4_list: "subnet4" $@57 ":" "[" subnet4_list_content "]"
-#line 1467 "dhcp4_parser.yy"
+#line 1472 "dhcp4_parser.yy"
                                                              {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2631 "dhcp4_parser.cc"
+#line 2636 "dhcp4_parser.cc"
     break;
 
   case 374: // not_empty_subnet4_list: not_empty_subnet4_list ","
-#line 1481 "dhcp4_parser.yy"
+#line 1486 "dhcp4_parser.yy"
                                                      {
                           ctx.warnAboutExtraCommas(yystack_[0].location);
                           }
-#line 2639 "dhcp4_parser.cc"
+#line 2644 "dhcp4_parser.cc"
     break;
 
   case 375: // $@58: %empty
-#line 1490 "dhcp4_parser.yy"
+#line 1495 "dhcp4_parser.yy"
                         {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2649 "dhcp4_parser.cc"
+#line 2654 "dhcp4_parser.cc"
     break;
 
   case 376: // subnet4: "{" $@58 subnet4_params "}"
-#line 1494 "dhcp4_parser.yy"
+#line 1499 "dhcp4_parser.yy"
                                 {
     // Once we reached this place, the subnet parsing is now complete.
     // If we want to, we can implement default values here.
@@ -2671,153 +2676,153 @@ namespace isc { namespace dhcp {
     ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2675 "dhcp4_parser.cc"
+#line 2680 "dhcp4_parser.cc"
     break;
 
   case 377: // $@59: %empty
-#line 1516 "dhcp4_parser.yy"
+#line 1521 "dhcp4_parser.yy"
                             {
     // Parse the subnet4 list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2685 "dhcp4_parser.cc"
+#line 2690 "dhcp4_parser.cc"
     break;
 
   case 378: // sub_subnet4: "{" $@59 subnet4_params "}"
-#line 1520 "dhcp4_parser.yy"
+#line 1525 "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 2695 "dhcp4_parser.cc"
+#line 2700 "dhcp4_parser.cc"
     break;
 
   case 381: // subnet4_params: subnet4_params ","
-#line 1529 "dhcp4_parser.yy"
+#line 1534 "dhcp4_parser.yy"
                                      {
                   ctx.warnAboutExtraCommas(yystack_[0].location);
                   }
-#line 2703 "dhcp4_parser.cc"
+#line 2708 "dhcp4_parser.cc"
     break;
 
   case 430: // $@60: %empty
-#line 1585 "dhcp4_parser.yy"
+#line 1590 "dhcp4_parser.yy"
                {
     ctx.unique("subnet", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2712 "dhcp4_parser.cc"
+#line 2717 "dhcp4_parser.cc"
     break;
 
   case 431: // subnet: "subnet" $@60 ":" "constant string"
-#line 1588 "dhcp4_parser.yy"
+#line 1593 "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 2722 "dhcp4_parser.cc"
+#line 2727 "dhcp4_parser.cc"
     break;
 
   case 432: // $@61: %empty
-#line 1594 "dhcp4_parser.yy"
+#line 1599 "dhcp4_parser.yy"
                                            {
     ctx.unique("4o6-interface", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2731 "dhcp4_parser.cc"
+#line 2736 "dhcp4_parser.cc"
     break;
 
   case 433: // subnet_4o6_interface: "4o6-interface" $@61 ":" "constant string"
-#line 1597 "dhcp4_parser.yy"
+#line 1602 "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 2741 "dhcp4_parser.cc"
+#line 2746 "dhcp4_parser.cc"
     break;
 
   case 434: // $@62: %empty
-#line 1603 "dhcp4_parser.yy"
+#line 1608 "dhcp4_parser.yy"
                                                  {
     ctx.unique("4o6-interface-id", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2750 "dhcp4_parser.cc"
+#line 2755 "dhcp4_parser.cc"
     break;
 
   case 435: // subnet_4o6_interface_id: "4o6-interface-id" $@62 ":" "constant string"
-#line 1606 "dhcp4_parser.yy"
+#line 1611 "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 2760 "dhcp4_parser.cc"
+#line 2765 "dhcp4_parser.cc"
     break;
 
   case 436: // $@63: %empty
-#line 1612 "dhcp4_parser.yy"
+#line 1617 "dhcp4_parser.yy"
                                      {
     ctx.unique("4o6-subnet", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2769 "dhcp4_parser.cc"
+#line 2774 "dhcp4_parser.cc"
     break;
 
   case 437: // subnet_4o6_subnet: "4o6-subnet" $@63 ":" "constant string"
-#line 1615 "dhcp4_parser.yy"
+#line 1620 "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 2779 "dhcp4_parser.cc"
+#line 2784 "dhcp4_parser.cc"
     break;
 
   case 438: // $@64: %empty
-#line 1621 "dhcp4_parser.yy"
+#line 1626 "dhcp4_parser.yy"
                      {
     ctx.unique("interface", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2788 "dhcp4_parser.cc"
+#line 2793 "dhcp4_parser.cc"
     break;
 
   case 439: // interface: "interface" $@64 ":" "constant string"
-#line 1624 "dhcp4_parser.yy"
+#line 1629 "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 2798 "dhcp4_parser.cc"
+#line 2803 "dhcp4_parser.cc"
     break;
 
   case 440: // $@65: %empty
-#line 1630 "dhcp4_parser.yy"
+#line 1635 "dhcp4_parser.yy"
                            {
     ctx.unique("client-class", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2807 "dhcp4_parser.cc"
+#line 2812 "dhcp4_parser.cc"
     break;
 
   case 441: // client_class: "client-class" $@65 ":" "constant string"
-#line 1633 "dhcp4_parser.yy"
+#line 1638 "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 2817 "dhcp4_parser.cc"
+#line 2822 "dhcp4_parser.cc"
     break;
 
   case 442: // $@66: %empty
-#line 1639 "dhcp4_parser.yy"
+#line 1644 "dhcp4_parser.yy"
                                                {
     ctx.unique("require-client-classes", ctx.loc2pos(yystack_[0].location));
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2825,102 +2830,102 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2829 "dhcp4_parser.cc"
+#line 2834 "dhcp4_parser.cc"
     break;
 
   case 443: // require_client_classes: "require-client-classes" $@66 ":" list_strings
-#line 1645 "dhcp4_parser.yy"
+#line 1650 "dhcp4_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2838 "dhcp4_parser.cc"
+#line 2843 "dhcp4_parser.cc"
     break;
 
   case 444: // reservations_global: "reservations-global" ":" "boolean"
-#line 1650 "dhcp4_parser.yy"
+#line 1655 "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 2848 "dhcp4_parser.cc"
+#line 2853 "dhcp4_parser.cc"
     break;
 
   case 445: // reservations_in_subnet: "reservations-in-subnet" ":" "boolean"
-#line 1656 "dhcp4_parser.yy"
+#line 1661 "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 2858 "dhcp4_parser.cc"
+#line 2863 "dhcp4_parser.cc"
     break;
 
   case 446: // reservations_out_of_pool: "reservations-out-of-pool" ":" "boolean"
-#line 1662 "dhcp4_parser.yy"
+#line 1667 "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 2868 "dhcp4_parser.cc"
+#line 2873 "dhcp4_parser.cc"
     break;
 
   case 447: // $@67: %empty
-#line 1668 "dhcp4_parser.yy"
+#line 1673 "dhcp4_parser.yy"
                                    {
     ctx.unique("reservation-mode", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.RESERVATION_MODE);
 }
-#line 2877 "dhcp4_parser.cc"
+#line 2882 "dhcp4_parser.cc"
     break;
 
   case 448: // reservation_mode: "reservation-mode" $@67 ":" hr_mode
-#line 1671 "dhcp4_parser.yy"
+#line 1676 "dhcp4_parser.yy"
                 {
     ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 2886 "dhcp4_parser.cc"
+#line 2891 "dhcp4_parser.cc"
     break;
 
   case 449: // hr_mode: "disabled"
-#line 1676 "dhcp4_parser.yy"
+#line 1681 "dhcp4_parser.yy"
                   { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); }
-#line 2892 "dhcp4_parser.cc"
+#line 2897 "dhcp4_parser.cc"
     break;
 
   case 450: // hr_mode: "out-of-pool"
-#line 1677 "dhcp4_parser.yy"
+#line 1682 "dhcp4_parser.yy"
                      { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); }
-#line 2898 "dhcp4_parser.cc"
+#line 2903 "dhcp4_parser.cc"
     break;
 
   case 451: // hr_mode: "global"
-#line 1678 "dhcp4_parser.yy"
+#line 1683 "dhcp4_parser.yy"
                 { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("global", ctx.loc2pos(yystack_[0].location))); }
-#line 2904 "dhcp4_parser.cc"
+#line 2909 "dhcp4_parser.cc"
     break;
 
   case 452: // hr_mode: "all"
-#line 1679 "dhcp4_parser.yy"
+#line 1684 "dhcp4_parser.yy"
              { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); }
-#line 2910 "dhcp4_parser.cc"
+#line 2915 "dhcp4_parser.cc"
     break;
 
   case 453: // id: "id" ":" "integer"
-#line 1682 "dhcp4_parser.yy"
+#line 1687 "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 2920 "dhcp4_parser.cc"
+#line 2925 "dhcp4_parser.cc"
     break;
 
   case 454: // $@68: %empty
-#line 1690 "dhcp4_parser.yy"
+#line 1695 "dhcp4_parser.yy"
                                  {
     ctx.unique("shared-networks", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2928,54 +2933,54 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.SHARED_NETWORK);
 }
-#line 2932 "dhcp4_parser.cc"
+#line 2937 "dhcp4_parser.cc"
     break;
 
   case 455: // shared_networks: "shared-networks" $@68 ":" "[" shared_networks_content "]"
-#line 1696 "dhcp4_parser.yy"
+#line 1701 "dhcp4_parser.yy"
                                                                 {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2941 "dhcp4_parser.cc"
+#line 2946 "dhcp4_parser.cc"
     break;
 
   case 460: // shared_networks_list: shared_networks_list ","
-#line 1709 "dhcp4_parser.yy"
+#line 1714 "dhcp4_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 2949 "dhcp4_parser.cc"
+#line 2954 "dhcp4_parser.cc"
     break;
 
   case 461: // $@69: %empty
-#line 1714 "dhcp4_parser.yy"
+#line 1719 "dhcp4_parser.yy"
                                {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2959 "dhcp4_parser.cc"
+#line 2964 "dhcp4_parser.cc"
     break;
 
   case 462: // shared_network: "{" $@69 shared_network_params "}"
-#line 1718 "dhcp4_parser.yy"
+#line 1723 "dhcp4_parser.yy"
                                        {
     ctx.stack_.pop_back();
 }
-#line 2967 "dhcp4_parser.cc"
+#line 2972 "dhcp4_parser.cc"
     break;
 
   case 465: // shared_network_params: shared_network_params ","
-#line 1724 "dhcp4_parser.yy"
+#line 1729 "dhcp4_parser.yy"
                                                    {
                          ctx.warnAboutExtraCommas(yystack_[0].location);
                          }
-#line 2975 "dhcp4_parser.cc"
+#line 2980 "dhcp4_parser.cc"
     break;
 
   case 509: // $@70: %empty
-#line 1778 "dhcp4_parser.yy"
+#line 1783 "dhcp4_parser.yy"
                             {
     ctx.unique("option-def", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2983,55 +2988,55 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DEF);
 }
-#line 2987 "dhcp4_parser.cc"
+#line 2992 "dhcp4_parser.cc"
     break;
 
   case 510: // option_def_list: "option-def" $@70 ":" "[" option_def_list_content "]"
-#line 1784 "dhcp4_parser.yy"
+#line 1789 "dhcp4_parser.yy"
                                                                 {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2996 "dhcp4_parser.cc"
+#line 3001 "dhcp4_parser.cc"
     break;
 
   case 511: // $@71: %empty
-#line 1792 "dhcp4_parser.yy"
+#line 1797 "dhcp4_parser.yy"
                                     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3005 "dhcp4_parser.cc"
+#line 3010 "dhcp4_parser.cc"
     break;
 
   case 512: // sub_option_def_list: "{" $@71 option_def_list "}"
-#line 1795 "dhcp4_parser.yy"
+#line 1800 "dhcp4_parser.yy"
                                  {
     // parsing completed
 }
-#line 3013 "dhcp4_parser.cc"
+#line 3018 "dhcp4_parser.cc"
     break;
 
   case 517: // not_empty_option_def_list: not_empty_option_def_list ","
-#line 1807 "dhcp4_parser.yy"
+#line 1812 "dhcp4_parser.yy"
                                                            {
                              ctx.warnAboutExtraCommas(yystack_[0].location);
                              }
-#line 3021 "dhcp4_parser.cc"
+#line 3026 "dhcp4_parser.cc"
     break;
 
   case 518: // $@72: %empty
-#line 1814 "dhcp4_parser.yy"
+#line 1819 "dhcp4_parser.yy"
                                  {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3031 "dhcp4_parser.cc"
+#line 3036 "dhcp4_parser.cc"
     break;
 
   case 519: // option_def_entry: "{" $@72 option_def_params "}"
-#line 1818 "dhcp4_parser.yy"
+#line 1823 "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));
@@ -3039,21 +3044,21 @@ namespace isc { namespace dhcp {
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 3043 "dhcp4_parser.cc"
+#line 3048 "dhcp4_parser.cc"
     break;
 
   case 520: // $@73: %empty
-#line 1829 "dhcp4_parser.yy"
+#line 1834 "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 3053 "dhcp4_parser.cc"
+#line 3058 "dhcp4_parser.cc"
     break;
 
   case 521: // sub_option_def: "{" $@73 option_def_params "}"
-#line 1833 "dhcp4_parser.yy"
+#line 1838 "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));
@@ -3061,115 +3066,115 @@ namespace isc { namespace dhcp {
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 3065 "dhcp4_parser.cc"
+#line 3070 "dhcp4_parser.cc"
     break;
 
   case 526: // not_empty_option_def_params: not_empty_option_def_params ","
-#line 1849 "dhcp4_parser.yy"
+#line 1854 "dhcp4_parser.yy"
                                                                {
                                ctx.warnAboutExtraCommas(yystack_[0].location);
                                }
-#line 3073 "dhcp4_parser.cc"
+#line 3078 "dhcp4_parser.cc"
     break;
 
   case 538: // code: "code" ":" "integer"
-#line 1868 "dhcp4_parser.yy"
+#line 1873 "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 3083 "dhcp4_parser.cc"
+#line 3088 "dhcp4_parser.cc"
     break;
 
   case 540: // $@74: %empty
-#line 1876 "dhcp4_parser.yy"
+#line 1881 "dhcp4_parser.yy"
                       {
     ctx.unique("type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3092 "dhcp4_parser.cc"
+#line 3097 "dhcp4_parser.cc"
     break;
 
   case 541: // option_def_type: "type" $@74 ":" "constant string"
-#line 1879 "dhcp4_parser.yy"
+#line 1884 "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 3102 "dhcp4_parser.cc"
+#line 3107 "dhcp4_parser.cc"
     break;
 
   case 542: // $@75: %empty
-#line 1885 "dhcp4_parser.yy"
+#line 1890 "dhcp4_parser.yy"
                                       {
     ctx.unique("record-types", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3111 "dhcp4_parser.cc"
+#line 3116 "dhcp4_parser.cc"
     break;
 
   case 543: // option_def_record_types: "record-types" $@75 ":" "constant string"
-#line 1888 "dhcp4_parser.yy"
+#line 1893 "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 3121 "dhcp4_parser.cc"
+#line 3126 "dhcp4_parser.cc"
     break;
 
   case 544: // $@76: %empty
-#line 1894 "dhcp4_parser.yy"
+#line 1899 "dhcp4_parser.yy"
              {
     ctx.unique("space", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3130 "dhcp4_parser.cc"
+#line 3135 "dhcp4_parser.cc"
     break;
 
   case 545: // space: "space" $@76 ":" "constant string"
-#line 1897 "dhcp4_parser.yy"
+#line 1902 "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 3140 "dhcp4_parser.cc"
+#line 3145 "dhcp4_parser.cc"
     break;
 
   case 547: // $@77: %empty
-#line 1905 "dhcp4_parser.yy"
+#line 1910 "dhcp4_parser.yy"
                                     {
     ctx.unique("encapsulate", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3149 "dhcp4_parser.cc"
+#line 3154 "dhcp4_parser.cc"
     break;
 
   case 548: // option_def_encapsulate: "encapsulate" $@77 ":" "constant string"
-#line 1908 "dhcp4_parser.yy"
+#line 1913 "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 3159 "dhcp4_parser.cc"
+#line 3164 "dhcp4_parser.cc"
     break;
 
   case 549: // option_def_array: "array" ":" "boolean"
-#line 1914 "dhcp4_parser.yy"
+#line 1919 "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 3169 "dhcp4_parser.cc"
+#line 3174 "dhcp4_parser.cc"
     break;
 
   case 550: // $@78: %empty
-#line 1924 "dhcp4_parser.yy"
+#line 1929 "dhcp4_parser.yy"
                               {
     ctx.unique("option-data", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3177,123 +3182,123 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DATA);
 }
-#line 3181 "dhcp4_parser.cc"
+#line 3186 "dhcp4_parser.cc"
     break;
 
   case 551: // option_data_list: "option-data" $@78 ":" "[" option_data_list_content "]"
-#line 1930 "dhcp4_parser.yy"
+#line 1935 "dhcp4_parser.yy"
                                                                  {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3190 "dhcp4_parser.cc"
+#line 3195 "dhcp4_parser.cc"
     break;
 
   case 556: // not_empty_option_data_list: not_empty_option_data_list ","
-#line 1945 "dhcp4_parser.yy"
+#line 1950 "dhcp4_parser.yy"
                                                              {
                               ctx.warnAboutExtraCommas(yystack_[0].location);
                               }
-#line 3198 "dhcp4_parser.cc"
+#line 3203 "dhcp4_parser.cc"
     break;
 
   case 557: // $@79: %empty
-#line 1952 "dhcp4_parser.yy"
+#line 1957 "dhcp4_parser.yy"
                                   {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3208 "dhcp4_parser.cc"
+#line 3213 "dhcp4_parser.cc"
     break;
 
   case 558: // option_data_entry: "{" $@79 option_data_params "}"
-#line 1956 "dhcp4_parser.yy"
+#line 1961 "dhcp4_parser.yy"
                                     {
     /// @todo: the code or name parameters are required.
     ctx.stack_.pop_back();
 }
-#line 3217 "dhcp4_parser.cc"
+#line 3222 "dhcp4_parser.cc"
     break;
 
   case 559: // $@80: %empty
-#line 1964 "dhcp4_parser.yy"
+#line 1969 "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 3227 "dhcp4_parser.cc"
+#line 3232 "dhcp4_parser.cc"
     break;
 
   case 560: // sub_option_data: "{" $@80 option_data_params "}"
-#line 1968 "dhcp4_parser.yy"
+#line 1973 "dhcp4_parser.yy"
                                     {
     /// @todo: the code or name parameters are required.
     // parsing completed
 }
-#line 3236 "dhcp4_parser.cc"
+#line 3241 "dhcp4_parser.cc"
     break;
 
   case 565: // not_empty_option_data_params: not_empty_option_data_params ","
-#line 1984 "dhcp4_parser.yy"
+#line 1989 "dhcp4_parser.yy"
                                          {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 3244 "dhcp4_parser.cc"
+#line 3249 "dhcp4_parser.cc"
     break;
 
   case 577: // $@81: %empty
-#line 2005 "dhcp4_parser.yy"
+#line 2010 "dhcp4_parser.yy"
                        {
     ctx.unique("data", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3253 "dhcp4_parser.cc"
+#line 3258 "dhcp4_parser.cc"
     break;
 
   case 578: // option_data_data: "data" $@81 ":" "constant string"
-#line 2008 "dhcp4_parser.yy"
+#line 2013 "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 3263 "dhcp4_parser.cc"
+#line 3268 "dhcp4_parser.cc"
     break;
 
   case 581: // option_data_csv_format: "csv-format" ":" "boolean"
-#line 2018 "dhcp4_parser.yy"
+#line 2023 "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 3273 "dhcp4_parser.cc"
+#line 3278 "dhcp4_parser.cc"
     break;
 
   case 582: // option_data_always_send: "always-send" ":" "boolean"
-#line 2024 "dhcp4_parser.yy"
+#line 2029 "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 3283 "dhcp4_parser.cc"
+#line 3288 "dhcp4_parser.cc"
     break;
 
   case 583: // option_data_never_send: "never-send" ":" "boolean"
-#line 2030 "dhcp4_parser.yy"
+#line 2035 "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 3293 "dhcp4_parser.cc"
+#line 3298 "dhcp4_parser.cc"
     break;
 
   case 584: // $@82: %empty
-#line 2039 "dhcp4_parser.yy"
+#line 2044 "dhcp4_parser.yy"
                   {
     ctx.unique("pools", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3301,103 +3306,103 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.POOLS);
 }
-#line 3305 "dhcp4_parser.cc"
+#line 3310 "dhcp4_parser.cc"
     break;
 
   case 585: // pools_list: "pools" $@82 ":" "[" pools_list_content "]"
-#line 2045 "dhcp4_parser.yy"
+#line 2050 "dhcp4_parser.yy"
                                                            {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3314 "dhcp4_parser.cc"
+#line 3319 "dhcp4_parser.cc"
     break;
 
   case 590: // not_empty_pools_list: not_empty_pools_list ","
-#line 2058 "dhcp4_parser.yy"
+#line 2063 "dhcp4_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 3322 "dhcp4_parser.cc"
+#line 3327 "dhcp4_parser.cc"
     break;
 
   case 591: // $@83: %empty
-#line 2063 "dhcp4_parser.yy"
+#line 2068 "dhcp4_parser.yy"
                                 {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3332 "dhcp4_parser.cc"
+#line 3337 "dhcp4_parser.cc"
     break;
 
   case 592: // pool_list_entry: "{" $@83 pool_params "}"
-#line 2067 "dhcp4_parser.yy"
+#line 2072 "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 3342 "dhcp4_parser.cc"
+#line 3347 "dhcp4_parser.cc"
     break;
 
   case 593: // $@84: %empty
-#line 2073 "dhcp4_parser.yy"
+#line 2078 "dhcp4_parser.yy"
                           {
     // Parse the pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3352 "dhcp4_parser.cc"
+#line 3357 "dhcp4_parser.cc"
     break;
 
   case 594: // sub_pool4: "{" $@84 pool_params "}"
-#line 2077 "dhcp4_parser.yy"
+#line 2082 "dhcp4_parser.yy"
                              {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 3362 "dhcp4_parser.cc"
+#line 3367 "dhcp4_parser.cc"
     break;
 
   case 597: // pool_params: pool_params ","
-#line 2085 "dhcp4_parser.yy"
+#line 2090 "dhcp4_parser.yy"
                                {
                ctx.warnAboutExtraCommas(yystack_[0].location);
                }
-#line 3370 "dhcp4_parser.cc"
+#line 3375 "dhcp4_parser.cc"
     break;
 
   case 605: // $@85: %empty
-#line 2099 "dhcp4_parser.yy"
+#line 2104 "dhcp4_parser.yy"
                  {
     ctx.unique("pool", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3379 "dhcp4_parser.cc"
+#line 3384 "dhcp4_parser.cc"
     break;
 
   case 606: // pool_entry: "pool" $@85 ":" "constant string"
-#line 2102 "dhcp4_parser.yy"
+#line 2107 "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 3389 "dhcp4_parser.cc"
+#line 3394 "dhcp4_parser.cc"
     break;
 
   case 607: // $@86: %empty
-#line 2108 "dhcp4_parser.yy"
+#line 2113 "dhcp4_parser.yy"
                            {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3397 "dhcp4_parser.cc"
+#line 3402 "dhcp4_parser.cc"
     break;
 
   case 608: // user_context: "user-context" $@86 ":" map_value
-#line 2110 "dhcp4_parser.yy"
+#line 2115 "dhcp4_parser.yy"
                   {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context = yystack_[0].value.as < ElementPtr > ();
@@ -3420,19 +3425,19 @@ namespace isc { namespace dhcp {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 3424 "dhcp4_parser.cc"
+#line 3429 "dhcp4_parser.cc"
     break;
 
   case 609: // $@87: %empty
-#line 2133 "dhcp4_parser.yy"
+#line 2138 "dhcp4_parser.yy"
                  {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3432 "dhcp4_parser.cc"
+#line 3437 "dhcp4_parser.cc"
     break;
 
   case 610: // comment: "comment" $@87 ":" "constant string"
-#line 2135 "dhcp4_parser.yy"
+#line 2140 "dhcp4_parser.yy"
                {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location)));
@@ -3457,11 +3462,11 @@ namespace isc { namespace dhcp {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 3461 "dhcp4_parser.cc"
+#line 3466 "dhcp4_parser.cc"
     break;
 
   case 611: // $@88: %empty
-#line 2163 "dhcp4_parser.yy"
+#line 2168 "dhcp4_parser.yy"
                            {
     ctx.unique("reservations", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3469,150 +3474,150 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.RESERVATIONS);
 }
-#line 3473 "dhcp4_parser.cc"
+#line 3478 "dhcp4_parser.cc"
     break;
 
   case 612: // reservations: "reservations" $@88 ":" "[" reservations_list "]"
-#line 2169 "dhcp4_parser.yy"
+#line 2174 "dhcp4_parser.yy"
                                                           {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3482 "dhcp4_parser.cc"
+#line 3487 "dhcp4_parser.cc"
     break;
 
   case 617: // not_empty_reservations_list: not_empty_reservations_list ","
-#line 2180 "dhcp4_parser.yy"
+#line 2185 "dhcp4_parser.yy"
                                                                {
                                ctx.warnAboutExtraCommas(yystack_[0].location);
                                }
-#line 3490 "dhcp4_parser.cc"
+#line 3495 "dhcp4_parser.cc"
     break;
 
   case 618: // $@89: %empty
-#line 2185 "dhcp4_parser.yy"
+#line 2190 "dhcp4_parser.yy"
                             {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3500 "dhcp4_parser.cc"
+#line 3505 "dhcp4_parser.cc"
     break;
 
   case 619: // reservation: "{" $@89 reservation_params "}"
-#line 2189 "dhcp4_parser.yy"
+#line 2194 "dhcp4_parser.yy"
                                     {
     /// @todo: an identifier parameter is required.
     ctx.stack_.pop_back();
 }
-#line 3509 "dhcp4_parser.cc"
+#line 3514 "dhcp4_parser.cc"
     break;
 
   case 620: // $@90: %empty
-#line 2194 "dhcp4_parser.yy"
+#line 2199 "dhcp4_parser.yy"
                                 {
     // Parse the reservations list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3519 "dhcp4_parser.cc"
+#line 3524 "dhcp4_parser.cc"
     break;
 
   case 621: // sub_reservation: "{" $@90 reservation_params "}"
-#line 2198 "dhcp4_parser.yy"
+#line 2203 "dhcp4_parser.yy"
                                     {
     /// @todo: an identifier parameter is required.
     // parsing completed
 }
-#line 3528 "dhcp4_parser.cc"
+#line 3533 "dhcp4_parser.cc"
     break;
 
   case 626: // not_empty_reservation_params: not_empty_reservation_params ","
-#line 2209 "dhcp4_parser.yy"
+#line 2214 "dhcp4_parser.yy"
                                          {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 3536 "dhcp4_parser.cc"
+#line 3541 "dhcp4_parser.cc"
     break;
 
   case 642: // $@91: %empty
-#line 2232 "dhcp4_parser.yy"
+#line 2237 "dhcp4_parser.yy"
                          {
     ctx.unique("next-server", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3545 "dhcp4_parser.cc"
+#line 3550 "dhcp4_parser.cc"
     break;
 
   case 643: // next_server: "next-server" $@91 ":" "constant string"
-#line 2235 "dhcp4_parser.yy"
+#line 2240 "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 3555 "dhcp4_parser.cc"
+#line 3560 "dhcp4_parser.cc"
     break;
 
   case 644: // $@92: %empty
-#line 2241 "dhcp4_parser.yy"
+#line 2246 "dhcp4_parser.yy"
                                  {
     ctx.unique("server-hostname", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3564 "dhcp4_parser.cc"
+#line 3569 "dhcp4_parser.cc"
     break;
 
   case 645: // server_hostname: "server-hostname" $@92 ":" "constant string"
-#line 2244 "dhcp4_parser.yy"
+#line 2249 "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 3574 "dhcp4_parser.cc"
+#line 3579 "dhcp4_parser.cc"
     break;
 
   case 646: // $@93: %empty
-#line 2250 "dhcp4_parser.yy"
+#line 2255 "dhcp4_parser.yy"
                                {
     ctx.unique("boot-file-name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3583 "dhcp4_parser.cc"
+#line 3588 "dhcp4_parser.cc"
     break;
 
   case 647: // boot_file_name: "boot-file-name" $@93 ":" "constant string"
-#line 2253 "dhcp4_parser.yy"
+#line 2258 "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 3593 "dhcp4_parser.cc"
+#line 3598 "dhcp4_parser.cc"
     break;
 
   case 648: // $@94: %empty
-#line 2259 "dhcp4_parser.yy"
+#line 2264 "dhcp4_parser.yy"
                        {
     ctx.unique("ip-address", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3602 "dhcp4_parser.cc"
+#line 3607 "dhcp4_parser.cc"
     break;
 
   case 649: // ip_address: "ip-address" $@94 ":" "constant string"
-#line 2262 "dhcp4_parser.yy"
+#line 2267 "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 3612 "dhcp4_parser.cc"
+#line 3617 "dhcp4_parser.cc"
     break;
 
   case 650: // $@95: %empty
-#line 2268 "dhcp4_parser.yy"
+#line 2273 "dhcp4_parser.yy"
                            {
     ctx.unique("ip-addresses", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3620,134 +3625,134 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3624 "dhcp4_parser.cc"
+#line 3629 "dhcp4_parser.cc"
     break;
 
   case 651: // ip_addresses: "ip-addresses" $@95 ":" list_strings
-#line 2274 "dhcp4_parser.yy"
+#line 2279 "dhcp4_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3633 "dhcp4_parser.cc"
+#line 3638 "dhcp4_parser.cc"
     break;
 
   case 652: // $@96: %empty
-#line 2279 "dhcp4_parser.yy"
+#line 2284 "dhcp4_parser.yy"
            {
     ctx.unique("duid", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3642 "dhcp4_parser.cc"
+#line 3647 "dhcp4_parser.cc"
     break;
 
   case 653: // duid: "duid" $@96 ":" "constant string"
-#line 2282 "dhcp4_parser.yy"
+#line 2287 "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 3652 "dhcp4_parser.cc"
+#line 3657 "dhcp4_parser.cc"
     break;
 
   case 654: // $@97: %empty
-#line 2288 "dhcp4_parser.yy"
+#line 2293 "dhcp4_parser.yy"
                        {
     ctx.unique("hw-address", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3661 "dhcp4_parser.cc"
+#line 3666 "dhcp4_parser.cc"
     break;
 
   case 655: // hw_address: "hw-address" $@97 ":" "constant string"
-#line 2291 "dhcp4_parser.yy"
+#line 2296 "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 3671 "dhcp4_parser.cc"
+#line 3676 "dhcp4_parser.cc"
     break;
 
   case 656: // $@98: %empty
-#line 2297 "dhcp4_parser.yy"
+#line 2302 "dhcp4_parser.yy"
                            {
     ctx.unique("client-id", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3680 "dhcp4_parser.cc"
+#line 3685 "dhcp4_parser.cc"
     break;
 
   case 657: // client_id_value: "client-id" $@98 ":" "constant string"
-#line 2300 "dhcp4_parser.yy"
+#line 2305 "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 3690 "dhcp4_parser.cc"
+#line 3695 "dhcp4_parser.cc"
     break;
 
   case 658: // $@99: %empty
-#line 2306 "dhcp4_parser.yy"
+#line 2311 "dhcp4_parser.yy"
                              {
     ctx.unique("circuit-id", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3699 "dhcp4_parser.cc"
+#line 3704 "dhcp4_parser.cc"
     break;
 
   case 659: // circuit_id_value: "circuit-id" $@99 ":" "constant string"
-#line 2309 "dhcp4_parser.yy"
+#line 2314 "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 3709 "dhcp4_parser.cc"
+#line 3714 "dhcp4_parser.cc"
     break;
 
   case 660: // $@100: %empty
-#line 2315 "dhcp4_parser.yy"
+#line 2320 "dhcp4_parser.yy"
                        {
     ctx.unique("flex-id", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3718 "dhcp4_parser.cc"
+#line 3723 "dhcp4_parser.cc"
     break;
 
   case 661: // flex_id_value: "flex-id" $@100 ":" "constant string"
-#line 2318 "dhcp4_parser.yy"
+#line 2323 "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 3728 "dhcp4_parser.cc"
+#line 3733 "dhcp4_parser.cc"
     break;
 
   case 662: // $@101: %empty
-#line 2324 "dhcp4_parser.yy"
+#line 2329 "dhcp4_parser.yy"
                    {
     ctx.unique("hostname", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3737 "dhcp4_parser.cc"
+#line 3742 "dhcp4_parser.cc"
     break;
 
   case 663: // hostname: "hostname" $@101 ":" "constant string"
-#line 2327 "dhcp4_parser.yy"
+#line 2332 "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 3747 "dhcp4_parser.cc"
+#line 3752 "dhcp4_parser.cc"
     break;
 
   case 664: // $@102: %empty
-#line 2333 "dhcp4_parser.yy"
+#line 2338 "dhcp4_parser.yy"
                                            {
     ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location));
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3755,20 +3760,20 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3759 "dhcp4_parser.cc"
+#line 3764 "dhcp4_parser.cc"
     break;
 
   case 665: // reservation_client_classes: "client-classes" $@102 ":" list_strings
-#line 2339 "dhcp4_parser.yy"
+#line 2344 "dhcp4_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3768 "dhcp4_parser.cc"
+#line 3773 "dhcp4_parser.cc"
     break;
 
   case 666: // $@103: %empty
-#line 2347 "dhcp4_parser.yy"
+#line 2352 "dhcp4_parser.yy"
              {
     ctx.unique("relay", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -3776,20 +3781,20 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.RELAY);
 }
-#line 3780 "dhcp4_parser.cc"
+#line 3785 "dhcp4_parser.cc"
     break;
 
   case 667: // relay: "relay" $@103 ":" "{" relay_map "}"
-#line 2353 "dhcp4_parser.yy"
+#line 2358 "dhcp4_parser.yy"
                                                 {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3789 "dhcp4_parser.cc"
+#line 3794 "dhcp4_parser.cc"
     break;
 
   case 670: // $@104: %empty
-#line 2365 "dhcp4_parser.yy"
+#line 2370 "dhcp4_parser.yy"
                                {
     ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3797,114 +3802,114 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CLIENT_CLASSES);
 }
-#line 3801 "dhcp4_parser.cc"
+#line 3806 "dhcp4_parser.cc"
     break;
 
   case 671: // client_classes: "client-classes" $@104 ":" "[" client_classes_list "]"
-#line 2371 "dhcp4_parser.yy"
+#line 2376 "dhcp4_parser.yy"
                                                             {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3810 "dhcp4_parser.cc"
+#line 3815 "dhcp4_parser.cc"
     break;
 
   case 674: // client_classes_list: client_classes_list ","
-#line 2378 "dhcp4_parser.yy"
+#line 2383 "dhcp4_parser.yy"
                                                {
                        ctx.warnAboutExtraCommas(yystack_[0].location);
                        }
-#line 3818 "dhcp4_parser.cc"
+#line 3823 "dhcp4_parser.cc"
     break;
 
   case 675: // $@105: %empty
-#line 2383 "dhcp4_parser.yy"
+#line 2388 "dhcp4_parser.yy"
                                    {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3828 "dhcp4_parser.cc"
+#line 3833 "dhcp4_parser.cc"
     break;
 
   case 676: // client_class_entry: "{" $@105 client_class_params "}"
-#line 2387 "dhcp4_parser.yy"
+#line 2392 "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 3838 "dhcp4_parser.cc"
+#line 3843 "dhcp4_parser.cc"
     break;
 
   case 681: // not_empty_client_class_params: not_empty_client_class_params ","
-#line 2399 "dhcp4_parser.yy"
+#line 2404 "dhcp4_parser.yy"
                                           {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 3846 "dhcp4_parser.cc"
+#line 3851 "dhcp4_parser.cc"
     break;
 
   case 699: // $@106: %empty
-#line 2424 "dhcp4_parser.yy"
+#line 2429 "dhcp4_parser.yy"
                         {
     ctx.unique("test", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3855 "dhcp4_parser.cc"
+#line 3860 "dhcp4_parser.cc"
     break;
 
   case 700: // client_class_test: "test" $@106 ":" "constant string"
-#line 2427 "dhcp4_parser.yy"
+#line 2432 "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 3865 "dhcp4_parser.cc"
+#line 3870 "dhcp4_parser.cc"
     break;
 
   case 701: // $@107: %empty
-#line 2433 "dhcp4_parser.yy"
+#line 2438 "dhcp4_parser.yy"
                                           {
     ctx.unique("template-test", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3874 "dhcp4_parser.cc"
+#line 3879 "dhcp4_parser.cc"
     break;
 
   case 702: // client_class_template_test: "template-test" $@107 ":" "constant string"
-#line 2436 "dhcp4_parser.yy"
+#line 2441 "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 3884 "dhcp4_parser.cc"
+#line 3889 "dhcp4_parser.cc"
     break;
 
   case 703: // only_if_required: "only-if-required" ":" "boolean"
-#line 2442 "dhcp4_parser.yy"
+#line 2447 "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 3894 "dhcp4_parser.cc"
+#line 3899 "dhcp4_parser.cc"
     break;
 
   case 704: // dhcp4o6_port: "dhcp4o6-port" ":" "integer"
-#line 2450 "dhcp4_parser.yy"
+#line 2455 "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 3904 "dhcp4_parser.cc"
+#line 3909 "dhcp4_parser.cc"
     break;
 
   case 705: // $@108: %empty
-#line 2458 "dhcp4_parser.yy"
+#line 2463 "dhcp4_parser.yy"
                                {
     ctx.unique("control-socket", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -3912,66 +3917,66 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.CONTROL_SOCKET);
 }
-#line 3916 "dhcp4_parser.cc"
+#line 3921 "dhcp4_parser.cc"
     break;
 
   case 706: // control_socket: "control-socket" $@108 ":" "{" control_socket_params "}"
-#line 2464 "dhcp4_parser.yy"
+#line 2469 "dhcp4_parser.yy"
                                                             {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3925 "dhcp4_parser.cc"
+#line 3930 "dhcp4_parser.cc"
     break;
 
   case 709: // control_socket_params: control_socket_params ","
-#line 2471 "dhcp4_parser.yy"
+#line 2476 "dhcp4_parser.yy"
                                                    {
                           ctx.warnAboutExtraCommas(yystack_[0].location);
                           }
-#line 3933 "dhcp4_parser.cc"
+#line 3938 "dhcp4_parser.cc"
     break;
 
   case 715: // $@109: %empty
-#line 2483 "dhcp4_parser.yy"
+#line 2488 "dhcp4_parser.yy"
                                  {
     ctx.unique("socket-type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3942 "dhcp4_parser.cc"
+#line 3947 "dhcp4_parser.cc"
     break;
 
   case 716: // control_socket_type: "socket-type" $@109 ":" "constant string"
-#line 2486 "dhcp4_parser.yy"
+#line 2491 "dhcp4_parser.yy"
                {
     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 3952 "dhcp4_parser.cc"
+#line 3957 "dhcp4_parser.cc"
     break;
 
   case 717: // $@110: %empty
-#line 2492 "dhcp4_parser.yy"
+#line 2497 "dhcp4_parser.yy"
                                  {
     ctx.unique("socket-name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3961 "dhcp4_parser.cc"
+#line 3966 "dhcp4_parser.cc"
     break;
 
   case 718: // control_socket_name: "socket-name" $@110 ":" "constant string"
-#line 2495 "dhcp4_parser.yy"
+#line 2500 "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 3971 "dhcp4_parser.cc"
+#line 3976 "dhcp4_parser.cc"
     break;
 
   case 719: // $@111: %empty
-#line 2504 "dhcp4_parser.yy"
+#line 2509 "dhcp4_parser.yy"
                                        {
     ctx.unique("dhcp-queue-control", ctx.loc2pos(yystack_[0].location));
     ElementPtr qc(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -3979,87 +3984,87 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(qc);
     ctx.enter(ctx.DHCP_QUEUE_CONTROL);
 }
-#line 3983 "dhcp4_parser.cc"
+#line 3988 "dhcp4_parser.cc"
     break;
 
   case 720: // dhcp_queue_control: "dhcp-queue-control" $@111 ":" "{" queue_control_params "}"
-#line 2510 "dhcp4_parser.yy"
+#line 2515 "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 3994 "dhcp4_parser.cc"
+#line 3999 "dhcp4_parser.cc"
     break;
 
   case 723: // queue_control_params: queue_control_params ","
-#line 2519 "dhcp4_parser.yy"
+#line 2524 "dhcp4_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 4002 "dhcp4_parser.cc"
+#line 4007 "dhcp4_parser.cc"
     break;
 
   case 730: // enable_queue: "enable-queue" ":" "boolean"
-#line 2532 "dhcp4_parser.yy"
+#line 2537 "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 4012 "dhcp4_parser.cc"
+#line 4017 "dhcp4_parser.cc"
     break;
 
   case 731: // $@112: %empty
-#line 2538 "dhcp4_parser.yy"
+#line 2543 "dhcp4_parser.yy"
                        {
     ctx.unique("queue-type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4021 "dhcp4_parser.cc"
+#line 4026 "dhcp4_parser.cc"
     break;
 
   case 732: // queue_type: "queue-type" $@112 ":" "constant string"
-#line 2541 "dhcp4_parser.yy"
+#line 2546 "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 4031 "dhcp4_parser.cc"
+#line 4036 "dhcp4_parser.cc"
     break;
 
   case 733: // capacity: "capacity" ":" "integer"
-#line 2547 "dhcp4_parser.yy"
+#line 2552 "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 4041 "dhcp4_parser.cc"
+#line 4046 "dhcp4_parser.cc"
     break;
 
   case 734: // $@113: %empty
-#line 2553 "dhcp4_parser.yy"
+#line 2558 "dhcp4_parser.yy"
                             {
     ctx.unique(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4050 "dhcp4_parser.cc"
+#line 4055 "dhcp4_parser.cc"
     break;
 
   case 735: // arbitrary_map_entry: "constant string" $@113 ":" value
-#line 2556 "dhcp4_parser.yy"
+#line 2561 "dhcp4_parser.yy"
               {
     ctx.stack_.back()->set(yystack_[3].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 4059 "dhcp4_parser.cc"
+#line 4064 "dhcp4_parser.cc"
     break;
 
   case 736: // $@114: %empty
-#line 2563 "dhcp4_parser.yy"
+#line 2568 "dhcp4_parser.yy"
                      {
     ctx.unique("dhcp-ddns", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4067,291 +4072,291 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.DHCP_DDNS);
 }
-#line 4071 "dhcp4_parser.cc"
+#line 4076 "dhcp4_parser.cc"
     break;
 
   case 737: // dhcp_ddns: "dhcp-ddns" $@114 ":" "{" dhcp_ddns_params "}"
-#line 2569 "dhcp4_parser.yy"
+#line 2574 "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 4082 "dhcp4_parser.cc"
+#line 4087 "dhcp4_parser.cc"
     break;
 
   case 738: // $@115: %empty
-#line 2576 "dhcp4_parser.yy"
+#line 2581 "dhcp4_parser.yy"
                               {
     // Parse the dhcp-ddns map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 4092 "dhcp4_parser.cc"
+#line 4097 "dhcp4_parser.cc"
     break;
 
   case 739: // sub_dhcp_ddns: "{" $@115 dhcp_ddns_params "}"
-#line 2580 "dhcp4_parser.yy"
+#line 2585 "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 4102 "dhcp4_parser.cc"
+#line 4107 "dhcp4_parser.cc"
     break;
 
   case 742: // dhcp_ddns_params: dhcp_ddns_params ","
-#line 2588 "dhcp4_parser.yy"
+#line 2593 "dhcp4_parser.yy"
                                          {
                     ctx.warnAboutExtraCommas(yystack_[0].location);
                     }
-#line 4110 "dhcp4_parser.cc"
+#line 4115 "dhcp4_parser.cc"
     break;
 
   case 761: // enable_updates: "enable-updates" ":" "boolean"
-#line 2613 "dhcp4_parser.yy"
+#line 2618 "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 4120 "dhcp4_parser.cc"
+#line 4125 "dhcp4_parser.cc"
     break;
 
   case 762: // $@116: %empty
-#line 2619 "dhcp4_parser.yy"
+#line 2624 "dhcp4_parser.yy"
                      {
     ctx.unique("server-ip", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4129 "dhcp4_parser.cc"
+#line 4134 "dhcp4_parser.cc"
     break;
 
   case 763: // server_ip: "server-ip" $@116 ":" "constant string"
-#line 2622 "dhcp4_parser.yy"
+#line 2627 "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 4139 "dhcp4_parser.cc"
+#line 4144 "dhcp4_parser.cc"
     break;
 
   case 764: // server_port: "server-port" ":" "integer"
-#line 2628 "dhcp4_parser.yy"
+#line 2633 "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 4149 "dhcp4_parser.cc"
+#line 4154 "dhcp4_parser.cc"
     break;
 
   case 765: // $@117: %empty
-#line 2634 "dhcp4_parser.yy"
+#line 2639 "dhcp4_parser.yy"
                      {
     ctx.unique("sender-ip", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4158 "dhcp4_parser.cc"
+#line 4163 "dhcp4_parser.cc"
     break;
 
   case 766: // sender_ip: "sender-ip" $@117 ":" "constant string"
-#line 2637 "dhcp4_parser.yy"
+#line 2642 "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 4168 "dhcp4_parser.cc"
+#line 4173 "dhcp4_parser.cc"
     break;
 
   case 767: // sender_port: "sender-port" ":" "integer"
-#line 2643 "dhcp4_parser.yy"
+#line 2648 "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 4178 "dhcp4_parser.cc"
+#line 4183 "dhcp4_parser.cc"
     break;
 
   case 768: // max_queue_size: "max-queue-size" ":" "integer"
-#line 2649 "dhcp4_parser.yy"
+#line 2654 "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 4188 "dhcp4_parser.cc"
+#line 4193 "dhcp4_parser.cc"
     break;
 
   case 769: // $@118: %empty
-#line 2655 "dhcp4_parser.yy"
+#line 2660 "dhcp4_parser.yy"
                            {
     ctx.unique("ncr-protocol", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NCR_PROTOCOL);
 }
-#line 4197 "dhcp4_parser.cc"
+#line 4202 "dhcp4_parser.cc"
     break;
 
   case 770: // ncr_protocol: "ncr-protocol" $@118 ":" ncr_protocol_value
-#line 2658 "dhcp4_parser.yy"
+#line 2663 "dhcp4_parser.yy"
                            {
     ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 4206 "dhcp4_parser.cc"
+#line 4211 "dhcp4_parser.cc"
     break;
 
   case 771: // ncr_protocol_value: "udp"
-#line 2664 "dhcp4_parser.yy"
+#line 2669 "dhcp4_parser.yy"
         { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
-#line 4212 "dhcp4_parser.cc"
+#line 4217 "dhcp4_parser.cc"
     break;
 
   case 772: // ncr_protocol_value: "tcp"
-#line 2665 "dhcp4_parser.yy"
+#line 2670 "dhcp4_parser.yy"
         { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
-#line 4218 "dhcp4_parser.cc"
+#line 4223 "dhcp4_parser.cc"
     break;
 
   case 773: // $@119: %empty
-#line 2668 "dhcp4_parser.yy"
+#line 2673 "dhcp4_parser.yy"
                        {
     ctx.unique("ncr-format", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NCR_FORMAT);
 }
-#line 4227 "dhcp4_parser.cc"
+#line 4232 "dhcp4_parser.cc"
     break;
 
   case 774: // ncr_format: "ncr-format" $@119 ":" "JSON"
-#line 2671 "dhcp4_parser.yy"
+#line 2676 "dhcp4_parser.yy"
              {
     ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ncr-format", json);
     ctx.leave();
 }
-#line 4237 "dhcp4_parser.cc"
+#line 4242 "dhcp4_parser.cc"
     break;
 
   case 775: // $@120: %empty
-#line 2678 "dhcp4_parser.yy"
+#line 2683 "dhcp4_parser.yy"
                                          {
     ctx.unique("qualifying-suffix", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4246 "dhcp4_parser.cc"
+#line 4251 "dhcp4_parser.cc"
     break;
 
   case 776: // dep_qualifying_suffix: "qualifying-suffix" $@120 ":" "constant string"
-#line 2681 "dhcp4_parser.yy"
+#line 2686 "dhcp4_parser.yy"
                {
     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 4256 "dhcp4_parser.cc"
+#line 4261 "dhcp4_parser.cc"
     break;
 
   case 777: // dep_override_no_update: "override-no-update" ":" "boolean"
-#line 2688 "dhcp4_parser.yy"
+#line 2693 "dhcp4_parser.yy"
                                                          {
     ctx.unique("override-no-update", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-no-update", b);
 }
-#line 4266 "dhcp4_parser.cc"
+#line 4271 "dhcp4_parser.cc"
     break;
 
   case 778: // dep_override_client_update: "override-client-update" ":" "boolean"
-#line 2695 "dhcp4_parser.yy"
+#line 2700 "dhcp4_parser.yy"
                                                                  {
     ctx.unique("override-client-update", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-client-update", b);
 }
-#line 4276 "dhcp4_parser.cc"
+#line 4281 "dhcp4_parser.cc"
     break;
 
   case 779: // $@121: %empty
-#line 2702 "dhcp4_parser.yy"
+#line 2707 "dhcp4_parser.yy"
                                              {
     ctx.unique("replace-client-name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.REPLACE_CLIENT_NAME);
 }
-#line 4285 "dhcp4_parser.cc"
+#line 4290 "dhcp4_parser.cc"
     break;
 
   case 780: // dep_replace_client_name: "replace-client-name" $@121 ":" ddns_replace_client_name_value
-#line 2705 "dhcp4_parser.yy"
+#line 2710 "dhcp4_parser.yy"
                                        {
     ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 4294 "dhcp4_parser.cc"
+#line 4299 "dhcp4_parser.cc"
     break;
 
   case 781: // $@122: %empty
-#line 2711 "dhcp4_parser.yy"
+#line 2716 "dhcp4_parser.yy"
                                        {
     ctx.unique("generated-prefix", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4303 "dhcp4_parser.cc"
+#line 4308 "dhcp4_parser.cc"
     break;
 
   case 782: // dep_generated_prefix: "generated-prefix" $@122 ":" "constant string"
-#line 2714 "dhcp4_parser.yy"
+#line 2719 "dhcp4_parser.yy"
                {
     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 4313 "dhcp4_parser.cc"
+#line 4318 "dhcp4_parser.cc"
     break;
 
   case 783: // $@123: %empty
-#line 2721 "dhcp4_parser.yy"
+#line 2726 "dhcp4_parser.yy"
                                          {
     ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4322 "dhcp4_parser.cc"
+#line 4327 "dhcp4_parser.cc"
     break;
 
   case 784: // dep_hostname_char_set: "hostname-char-set" $@123 ":" "constant string"
-#line 2724 "dhcp4_parser.yy"
+#line 2729 "dhcp4_parser.yy"
                {
     ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname-char-set", s);
     ctx.leave();
 }
-#line 4332 "dhcp4_parser.cc"
+#line 4337 "dhcp4_parser.cc"
     break;
 
   case 785: // $@124: %empty
-#line 2731 "dhcp4_parser.yy"
+#line 2736 "dhcp4_parser.yy"
                                                          {
     ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4341 "dhcp4_parser.cc"
+#line 4346 "dhcp4_parser.cc"
     break;
 
   case 786: // dep_hostname_char_replacement: "hostname-char-replacement" $@124 ":" "constant string"
-#line 2734 "dhcp4_parser.yy"
+#line 2739 "dhcp4_parser.yy"
                {
     ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname-char-replacement", s);
     ctx.leave();
 }
-#line 4351 "dhcp4_parser.cc"
+#line 4356 "dhcp4_parser.cc"
     break;
 
   case 787: // $@125: %empty
-#line 2743 "dhcp4_parser.yy"
+#line 2748 "dhcp4_parser.yy"
                                {
     ctx.unique("config-control", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4359,48 +4364,48 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(i);
     ctx.enter(ctx.CONFIG_CONTROL);
 }
-#line 4363 "dhcp4_parser.cc"
+#line 4368 "dhcp4_parser.cc"
     break;
 
   case 788: // config_control: "config-control" $@125 ":" "{" config_control_params "}"
-#line 2749 "dhcp4_parser.yy"
+#line 2754 "dhcp4_parser.yy"
                                                             {
     // No config control params are required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4373 "dhcp4_parser.cc"
+#line 4378 "dhcp4_parser.cc"
     break;
 
   case 789: // $@126: %empty
-#line 2755 "dhcp4_parser.yy"
+#line 2760 "dhcp4_parser.yy"
                                    {
     // Parse the config-control map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 4383 "dhcp4_parser.cc"
+#line 4388 "dhcp4_parser.cc"
     break;
 
   case 790: // sub_config_control: "{" $@126 config_control_params "}"
-#line 2759 "dhcp4_parser.yy"
+#line 2764 "dhcp4_parser.yy"
                                        {
     // No config_control params are required
     // parsing completed
 }
-#line 4392 "dhcp4_parser.cc"
+#line 4397 "dhcp4_parser.cc"
     break;
 
   case 793: // config_control_params: config_control_params ","
-#line 2767 "dhcp4_parser.yy"
+#line 2772 "dhcp4_parser.yy"
                                                    {
                          ctx.warnAboutExtraCommas(yystack_[0].location);
                          }
-#line 4400 "dhcp4_parser.cc"
+#line 4405 "dhcp4_parser.cc"
     break;
 
   case 796: // $@127: %empty
-#line 2777 "dhcp4_parser.yy"
+#line 2782 "dhcp4_parser.yy"
                                    {
     ctx.unique("config-databases", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -4408,30 +4413,30 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CONFIG_DATABASE);
 }
-#line 4412 "dhcp4_parser.cc"
+#line 4417 "dhcp4_parser.cc"
     break;
 
   case 797: // config_databases: "config-databases" $@127 ":" "[" database_list "]"
-#line 2783 "dhcp4_parser.yy"
+#line 2788 "dhcp4_parser.yy"
                                                       {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4421 "dhcp4_parser.cc"
+#line 4426 "dhcp4_parser.cc"
     break;
 
   case 798: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer"
-#line 2788 "dhcp4_parser.yy"
+#line 2793 "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 4431 "dhcp4_parser.cc"
+#line 4436 "dhcp4_parser.cc"
     break;
 
   case 799: // $@128: %empty
-#line 2796 "dhcp4_parser.yy"
+#line 2801 "dhcp4_parser.yy"
                  {
     ctx.unique("loggers", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -4439,83 +4444,83 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.LOGGERS);
 }
-#line 4443 "dhcp4_parser.cc"
+#line 4448 "dhcp4_parser.cc"
     break;
 
   case 800: // loggers: "loggers" $@128 ":" "[" loggers_entries "]"
-#line 2802 "dhcp4_parser.yy"
+#line 2807 "dhcp4_parser.yy"
                                                          {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4452 "dhcp4_parser.cc"
+#line 4457 "dhcp4_parser.cc"
     break;
 
   case 803: // loggers_entries: loggers_entries ","
-#line 2811 "dhcp4_parser.yy"
+#line 2816 "dhcp4_parser.yy"
                                        {
                    ctx.warnAboutExtraCommas(yystack_[0].location);
                    }
-#line 4460 "dhcp4_parser.cc"
+#line 4465 "dhcp4_parser.cc"
     break;
 
   case 804: // $@129: %empty
-#line 2817 "dhcp4_parser.yy"
+#line 2822 "dhcp4_parser.yy"
                              {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 4470 "dhcp4_parser.cc"
+#line 4475 "dhcp4_parser.cc"
     break;
 
   case 805: // logger_entry: "{" $@129 logger_params "}"
-#line 2821 "dhcp4_parser.yy"
+#line 2826 "dhcp4_parser.yy"
                                {
     ctx.stack_.pop_back();
 }
-#line 4478 "dhcp4_parser.cc"
+#line 4483 "dhcp4_parser.cc"
     break;
 
   case 808: // logger_params: logger_params ","
-#line 2827 "dhcp4_parser.yy"
+#line 2832 "dhcp4_parser.yy"
                                    {
                  ctx.warnAboutExtraCommas(yystack_[0].location);
                  }
-#line 4486 "dhcp4_parser.cc"
+#line 4491 "dhcp4_parser.cc"
     break;
 
   case 816: // debuglevel: "debuglevel" ":" "integer"
-#line 2841 "dhcp4_parser.yy"
+#line 2846 "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 4496 "dhcp4_parser.cc"
+#line 4501 "dhcp4_parser.cc"
     break;
 
   case 817: // $@130: %empty
-#line 2847 "dhcp4_parser.yy"
+#line 2852 "dhcp4_parser.yy"
                    {
     ctx.unique("severity", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4505 "dhcp4_parser.cc"
+#line 4510 "dhcp4_parser.cc"
     break;
 
   case 818: // severity: "severity" $@130 ":" "constant string"
-#line 2850 "dhcp4_parser.yy"
+#line 2855 "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 4515 "dhcp4_parser.cc"
+#line 4520 "dhcp4_parser.cc"
     break;
 
   case 819: // $@131: %empty
-#line 2856 "dhcp4_parser.yy"
+#line 2861 "dhcp4_parser.yy"
                                     {
     ctx.unique("output_options", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -4523,122 +4528,122 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OUTPUT_OPTIONS);
 }
-#line 4527 "dhcp4_parser.cc"
+#line 4532 "dhcp4_parser.cc"
     break;
 
   case 820: // output_options_list: "output_options" $@131 ":" "[" output_options_list_content "]"
-#line 2862 "dhcp4_parser.yy"
+#line 2867 "dhcp4_parser.yy"
                                                                     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4536 "dhcp4_parser.cc"
+#line 4541 "dhcp4_parser.cc"
     break;
 
   case 823: // output_options_list_content: output_options_list_content ","
-#line 2869 "dhcp4_parser.yy"
+#line 2874 "dhcp4_parser.yy"
                                                                {
                                ctx.warnAboutExtraCommas(yystack_[0].location);
                                }
-#line 4544 "dhcp4_parser.cc"
+#line 4549 "dhcp4_parser.cc"
     break;
 
   case 824: // $@132: %empty
-#line 2874 "dhcp4_parser.yy"
+#line 2879 "dhcp4_parser.yy"
                              {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 4554 "dhcp4_parser.cc"
+#line 4559 "dhcp4_parser.cc"
     break;
 
   case 825: // output_entry: "{" $@132 output_params_list "}"
-#line 2878 "dhcp4_parser.yy"
+#line 2883 "dhcp4_parser.yy"
                                     {
     ctx.stack_.pop_back();
 }
-#line 4562 "dhcp4_parser.cc"
+#line 4567 "dhcp4_parser.cc"
     break;
 
   case 828: // output_params_list: output_params_list ","
-#line 2884 "dhcp4_parser.yy"
+#line 2889 "dhcp4_parser.yy"
                                              {
                       ctx.warnAboutExtraCommas(yystack_[0].location);
                       }
-#line 4570 "dhcp4_parser.cc"
+#line 4575 "dhcp4_parser.cc"
     break;
 
   case 834: // $@133: %empty
-#line 2896 "dhcp4_parser.yy"
+#line 2901 "dhcp4_parser.yy"
                {
     ctx.unique("output", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4579 "dhcp4_parser.cc"
+#line 4584 "dhcp4_parser.cc"
     break;
 
   case 835: // output: "output" $@133 ":" "constant string"
-#line 2899 "dhcp4_parser.yy"
+#line 2904 "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 4589 "dhcp4_parser.cc"
+#line 4594 "dhcp4_parser.cc"
     break;
 
   case 836: // flush: "flush" ":" "boolean"
-#line 2905 "dhcp4_parser.yy"
+#line 2910 "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 4599 "dhcp4_parser.cc"
+#line 4604 "dhcp4_parser.cc"
     break;
 
   case 837: // maxsize: "maxsize" ":" "integer"
-#line 2911 "dhcp4_parser.yy"
+#line 2916 "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 4609 "dhcp4_parser.cc"
+#line 4614 "dhcp4_parser.cc"
     break;
 
   case 838: // maxver: "maxver" ":" "integer"
-#line 2917 "dhcp4_parser.yy"
+#line 2922 "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 4619 "dhcp4_parser.cc"
+#line 4624 "dhcp4_parser.cc"
     break;
 
   case 839: // $@134: %empty
-#line 2923 "dhcp4_parser.yy"
+#line 2928 "dhcp4_parser.yy"
                  {
     ctx.unique("pattern", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4628 "dhcp4_parser.cc"
+#line 4633 "dhcp4_parser.cc"
     break;
 
   case 840: // pattern: "pattern" $@134 ":" "constant string"
-#line 2926 "dhcp4_parser.yy"
+#line 2931 "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 4638 "dhcp4_parser.cc"
+#line 4643 "dhcp4_parser.cc"
     break;
 
   case 841: // $@135: %empty
-#line 2932 "dhcp4_parser.yy"
+#line 2937 "dhcp4_parser.yy"
                              {
     ctx.unique("compatibility", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4646,68 +4651,68 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(i);
     ctx.enter(ctx.COMPATIBILITY);
 }
-#line 4650 "dhcp4_parser.cc"
+#line 4655 "dhcp4_parser.cc"
     break;
 
   case 842: // compatibility: "compatibility" $@135 ":" "{" compatibility_params "}"
-#line 2938 "dhcp4_parser.yy"
+#line 2943 "dhcp4_parser.yy"
                                                            {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4659 "dhcp4_parser.cc"
+#line 4664 "dhcp4_parser.cc"
     break;
 
   case 845: // compatibility_params: compatibility_params ","
-#line 2945 "dhcp4_parser.yy"
+#line 2950 "dhcp4_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 4667 "dhcp4_parser.cc"
+#line 4672 "dhcp4_parser.cc"
     break;
 
   case 851: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean"
-#line 2957 "dhcp4_parser.yy"
+#line 2962 "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 4677 "dhcp4_parser.cc"
+#line 4682 "dhcp4_parser.cc"
     break;
 
   case 852: // ignore_dhcp_server_identifier: "ignore-dhcp-server-identifier" ":" "boolean"
-#line 2963 "dhcp4_parser.yy"
+#line 2968 "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 4687 "dhcp4_parser.cc"
+#line 4692 "dhcp4_parser.cc"
     break;
 
   case 853: // ignore_rai_link_selection: "ignore-rai-link-selection" ":" "boolean"
-#line 2969 "dhcp4_parser.yy"
+#line 2974 "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 4697 "dhcp4_parser.cc"
+#line 4702 "dhcp4_parser.cc"
     break;
 
   case 854: // exclude_first_last_24: "exclude-first-last-24" ":" "boolean"
-#line 2975 "dhcp4_parser.yy"
+#line 2980 "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 4707 "dhcp4_parser.cc"
+#line 4712 "dhcp4_parser.cc"
     break;
 
 
-#line 4711 "dhcp4_parser.cc"
+#line 4716 "dhcp4_parser.cc"
 
             default:
               break;
@@ -6227,92 +6232,92 @@ namespace isc { namespace dhcp {
   const short
   Dhcp4Parser::yyrline_[] =
   {
-       0,   307,   307,   307,   308,   308,   309,   309,   310,   310,
-     311,   311,   312,   312,   313,   313,   314,   314,   315,   315,
-     316,   316,   317,   317,   318,   318,   319,   319,   327,   328,
-     329,   330,   331,   332,   333,   336,   341,   341,   352,   355,
-     356,   359,   364,   370,   375,   375,   382,   383,   386,   390,
-     394,   400,   400,   407,   408,   411,   415,   419,   429,   438,
-     438,   453,   453,   467,   470,   476,   476,   485,   486,   487,
-     494,   495,   496,   497,   498,   499,   500,   501,   502,   503,
-     504,   505,   506,   507,   508,   509,   510,   511,   512,   513,
-     514,   515,   516,   517,   518,   519,   520,   521,   522,   523,
-     524,   525,   526,   527,   528,   529,   530,   531,   532,   533,
-     534,   535,   536,   537,   538,   539,   540,   541,   542,   543,
-     544,   545,   546,   547,   548,   549,   550,   551,   552,   553,
-     554,   555,   556,   557,   558,   559,   560,   563,   569,   575,
-     581,   587,   593,   599,   605,   611,   617,   623,   629,   629,
-     638,   644,   644,   653,   659,   665,   671,   677,   683,   689,
-     689,   698,   701,   704,   707,   710,   716,   716,   725,   725,
-     734,   740,   746,   752,   752,   761,   761,   770,   776,   782,
-     788,   794,   800,   806,   812,   812,   824,   825,   826,   831,
-     832,   833,   834,   835,   836,   837,   838,   839,   840,   843,
-     843,   852,   852,   863,   863,   871,   872,   875,   875,   883,
-     885,   889,   895,   901,   907,   913,   913,   926,   926,   937,
-     938,   939,   944,   945,   948,   948,   967,   967,   985,   985,
-     998,   998,  1009,  1010,  1013,  1014,  1015,  1020,  1020,  1030,
-    1031,  1032,  1037,  1038,  1039,  1040,  1041,  1042,  1043,  1044,
-    1045,  1046,  1047,  1048,  1049,  1050,  1051,  1052,  1053,  1054,
-    1055,  1056,  1057,  1058,  1061,  1061,  1069,  1070,  1071,  1074,
-    1074,  1083,  1083,  1092,  1092,  1101,  1107,  1107,  1116,  1122,
-    1128,  1134,  1140,  1146,  1152,  1158,  1164,  1170,  1170,  1178,
-    1179,  1180,  1183,  1189,  1189,  1198,  1198,  1207,  1207,  1216,
-    1216,  1225,  1225,  1236,  1237,  1238,  1243,  1244,  1245,  1246,
-    1247,  1250,  1255,  1260,  1265,  1270,  1277,  1277,  1290,  1291,
-    1292,  1297,  1298,  1299,  1300,  1301,  1302,  1305,  1311,  1317,
-    1323,  1323,  1334,  1335,  1338,  1339,  1340,  1345,  1345,  1355,
-    1355,  1365,  1366,  1367,  1370,  1373,  1374,  1377,  1377,  1386,
-    1386,  1395,  1395,  1407,  1408,  1409,  1414,  1415,  1416,  1417,
-    1418,  1419,  1422,  1428,  1434,  1440,  1446,  1452,  1461,  1461,
-    1475,  1476,  1479,  1480,  1481,  1490,  1490,  1516,  1516,  1527,
-    1528,  1529,  1535,  1536,  1537,  1538,  1539,  1540,  1541,  1542,
-    1543,  1544,  1545,  1546,  1547,  1548,  1549,  1550,  1551,  1552,
-    1553,  1554,  1555,  1556,  1557,  1558,  1559,  1560,  1561,  1562,
-    1563,  1564,  1565,  1566,  1567,  1568,  1569,  1570,  1571,  1572,
-    1573,  1574,  1575,  1576,  1577,  1578,  1579,  1580,  1581,  1582,
-    1585,  1585,  1594,  1594,  1603,  1603,  1612,  1612,  1621,  1621,
-    1630,  1630,  1639,  1639,  1650,  1656,  1662,  1668,  1668,  1676,
-    1677,  1678,  1679,  1682,  1690,  1690,  1702,  1703,  1707,  1708,
-    1709,  1714,  1714,  1722,  1723,  1724,  1729,  1730,  1731,  1732,
-    1733,  1734,  1735,  1736,  1737,  1738,  1739,  1740,  1741,  1742,
-    1743,  1744,  1745,  1746,  1747,  1748,  1749,  1750,  1751,  1752,
-    1753,  1754,  1755,  1756,  1757,  1758,  1759,  1760,  1761,  1762,
-    1763,  1764,  1765,  1766,  1767,  1768,  1769,  1770,  1771,  1778,
-    1778,  1792,  1792,  1801,  1802,  1805,  1806,  1807,  1814,  1814,
-    1829,  1829,  1843,  1844,  1847,  1848,  1849,  1854,  1855,  1856,
-    1857,  1858,  1859,  1860,  1861,  1862,  1863,  1866,  1868,  1874,
-    1876,  1876,  1885,  1885,  1894,  1894,  1903,  1905,  1905,  1914,
-    1924,  1924,  1937,  1938,  1943,  1944,  1945,  1952,  1952,  1964,
-    1964,  1976,  1977,  1982,  1983,  1984,  1991,  1992,  1993,  1994,
-    1995,  1996,  1997,  1998,  1999,  2000,  2003,  2005,  2005,  2014,
-    2016,  2018,  2024,  2030,  2039,  2039,  2052,  2053,  2056,  2057,
-    2058,  2063,  2063,  2073,  2073,  2083,  2084,  2085,  2090,  2091,
-    2092,  2093,  2094,  2095,  2096,  2099,  2099,  2108,  2108,  2133,
-    2133,  2163,  2163,  2174,  2175,  2178,  2179,  2180,  2185,  2185,
-    2194,  2194,  2203,  2204,  2207,  2208,  2209,  2215,  2216,  2217,
-    2218,  2219,  2220,  2221,  2222,  2223,  2224,  2225,  2226,  2227,
-    2228,  2229,  2232,  2232,  2241,  2241,  2250,  2250,  2259,  2259,
-    2268,  2268,  2279,  2279,  2288,  2288,  2297,  2297,  2306,  2306,
-    2315,  2315,  2324,  2324,  2333,  2333,  2347,  2347,  2358,  2359,
-    2365,  2365,  2376,  2377,  2378,  2383,  2383,  2393,  2394,  2397,
-    2398,  2399,  2404,  2405,  2406,  2407,  2408,  2409,  2410,  2411,
-    2412,  2413,  2414,  2415,  2416,  2417,  2418,  2419,  2422,  2424,
-    2424,  2433,  2433,  2442,  2450,  2458,  2458,  2469,  2470,  2471,
-    2476,  2477,  2478,  2479,  2480,  2483,  2483,  2492,  2492,  2504,
-    2504,  2517,  2518,  2519,  2524,  2525,  2526,  2527,  2528,  2529,
-    2532,  2538,  2538,  2547,  2553,  2553,  2563,  2563,  2576,  2576,
-    2586,  2587,  2588,  2593,  2594,  2595,  2596,  2597,  2598,  2599,
-    2600,  2601,  2602,  2603,  2604,  2605,  2606,  2607,  2608,  2609,
-    2610,  2613,  2619,  2619,  2628,  2634,  2634,  2643,  2649,  2655,
-    2655,  2664,  2665,  2668,  2668,  2678,  2678,  2688,  2695,  2702,
-    2702,  2711,  2711,  2721,  2721,  2731,  2731,  2743,  2743,  2755,
-    2755,  2765,  2766,  2767,  2773,  2774,  2777,  2777,  2788,  2796,
-    2796,  2809,  2810,  2811,  2817,  2817,  2825,  2826,  2827,  2832,
-    2833,  2834,  2835,  2836,  2837,  2838,  2841,  2847,  2847,  2856,
-    2856,  2867,  2868,  2869,  2874,  2874,  2882,  2883,  2884,  2889,
-    2890,  2891,  2892,  2893,  2896,  2896,  2905,  2911,  2917,  2923,
-    2923,  2932,  2932,  2943,  2944,  2945,  2950,  2951,  2952,  2953,
-    2954,  2957,  2963,  2969,  2975
+       0,   312,   312,   312,   313,   313,   314,   314,   315,   315,
+     316,   316,   317,   317,   318,   318,   319,   319,   320,   320,
+     321,   321,   322,   322,   323,   323,   324,   324,   332,   333,
+     334,   335,   336,   337,   338,   341,   346,   346,   357,   360,
+     361,   364,   369,   375,   380,   380,   387,   388,   391,   395,
+     399,   405,   405,   412,   413,   416,   420,   424,   434,   443,
+     443,   458,   458,   472,   475,   481,   481,   490,   491,   492,
+     499,   500,   501,   502,   503,   504,   505,   506,   507,   508,
+     509,   510,   511,   512,   513,   514,   515,   516,   517,   518,
+     519,   520,   521,   522,   523,   524,   525,   526,   527,   528,
+     529,   530,   531,   532,   533,   534,   535,   536,   537,   538,
+     539,   540,   541,   542,   543,   544,   545,   546,   547,   548,
+     549,   550,   551,   552,   553,   554,   555,   556,   557,   558,
+     559,   560,   561,   562,   563,   564,   565,   568,   574,   580,
+     586,   592,   598,   604,   610,   616,   622,   628,   634,   634,
+     643,   649,   649,   658,   664,   670,   676,   682,   688,   694,
+     694,   703,   706,   709,   712,   715,   721,   721,   730,   730,
+     739,   745,   751,   757,   757,   766,   766,   775,   781,   787,
+     793,   799,   805,   811,   817,   817,   829,   830,   831,   836,
+     837,   838,   839,   840,   841,   842,   843,   844,   845,   848,
+     848,   857,   857,   868,   868,   876,   877,   880,   880,   888,
+     890,   894,   900,   906,   912,   918,   918,   931,   931,   942,
+     943,   944,   949,   950,   953,   953,   972,   972,   990,   990,
+    1003,  1003,  1014,  1015,  1018,  1019,  1020,  1025,  1025,  1035,
+    1036,  1037,  1042,  1043,  1044,  1045,  1046,  1047,  1048,  1049,
+    1050,  1051,  1052,  1053,  1054,  1055,  1056,  1057,  1058,  1059,
+    1060,  1061,  1062,  1063,  1066,  1066,  1074,  1075,  1076,  1079,
+    1079,  1088,  1088,  1097,  1097,  1106,  1112,  1112,  1121,  1127,
+    1133,  1139,  1145,  1151,  1157,  1163,  1169,  1175,  1175,  1183,
+    1184,  1185,  1188,  1194,  1194,  1203,  1203,  1212,  1212,  1221,
+    1221,  1230,  1230,  1241,  1242,  1243,  1248,  1249,  1250,  1251,
+    1252,  1255,  1260,  1265,  1270,  1275,  1282,  1282,  1295,  1296,
+    1297,  1302,  1303,  1304,  1305,  1306,  1307,  1310,  1316,  1322,
+    1328,  1328,  1339,  1340,  1343,  1344,  1345,  1350,  1350,  1360,
+    1360,  1370,  1371,  1372,  1375,  1378,  1379,  1382,  1382,  1391,
+    1391,  1400,  1400,  1412,  1413,  1414,  1419,  1420,  1421,  1422,
+    1423,  1424,  1427,  1433,  1439,  1445,  1451,  1457,  1466,  1466,
+    1480,  1481,  1484,  1485,  1486,  1495,  1495,  1521,  1521,  1532,
+    1533,  1534,  1540,  1541,  1542,  1543,  1544,  1545,  1546,  1547,
+    1548,  1549,  1550,  1551,  1552,  1553,  1554,  1555,  1556,  1557,
+    1558,  1559,  1560,  1561,  1562,  1563,  1564,  1565,  1566,  1567,
+    1568,  1569,  1570,  1571,  1572,  1573,  1574,  1575,  1576,  1577,
+    1578,  1579,  1580,  1581,  1582,  1583,  1584,  1585,  1586,  1587,
+    1590,  1590,  1599,  1599,  1608,  1608,  1617,  1617,  1626,  1626,
+    1635,  1635,  1644,  1644,  1655,  1661,  1667,  1673,  1673,  1681,
+    1682,  1683,  1684,  1687,  1695,  1695,  1707,  1708,  1712,  1713,
+    1714,  1719,  1719,  1727,  1728,  1729,  1734,  1735,  1736,  1737,
+    1738,  1739,  1740,  1741,  1742,  1743,  1744,  1745,  1746,  1747,
+    1748,  1749,  1750,  1751,  1752,  1753,  1754,  1755,  1756,  1757,
+    1758,  1759,  1760,  1761,  1762,  1763,  1764,  1765,  1766,  1767,
+    1768,  1769,  1770,  1771,  1772,  1773,  1774,  1775,  1776,  1783,
+    1783,  1797,  1797,  1806,  1807,  1810,  1811,  1812,  1819,  1819,
+    1834,  1834,  1848,  1849,  1852,  1853,  1854,  1859,  1860,  1861,
+    1862,  1863,  1864,  1865,  1866,  1867,  1868,  1871,  1873,  1879,
+    1881,  1881,  1890,  1890,  1899,  1899,  1908,  1910,  1910,  1919,
+    1929,  1929,  1942,  1943,  1948,  1949,  1950,  1957,  1957,  1969,
+    1969,  1981,  1982,  1987,  1988,  1989,  1996,  1997,  1998,  1999,
+    2000,  2001,  2002,  2003,  2004,  2005,  2008,  2010,  2010,  2019,
+    2021,  2023,  2029,  2035,  2044,  2044,  2057,  2058,  2061,  2062,
+    2063,  2068,  2068,  2078,  2078,  2088,  2089,  2090,  2095,  2096,
+    2097,  2098,  2099,  2100,  2101,  2104,  2104,  2113,  2113,  2138,
+    2138,  2168,  2168,  2179,  2180,  2183,  2184,  2185,  2190,  2190,
+    2199,  2199,  2208,  2209,  2212,  2213,  2214,  2220,  2221,  2222,
+    2223,  2224,  2225,  2226,  2227,  2228,  2229,  2230,  2231,  2232,
+    2233,  2234,  2237,  2237,  2246,  2246,  2255,  2255,  2264,  2264,
+    2273,  2273,  2284,  2284,  2293,  2293,  2302,  2302,  2311,  2311,
+    2320,  2320,  2329,  2329,  2338,  2338,  2352,  2352,  2363,  2364,
+    2370,  2370,  2381,  2382,  2383,  2388,  2388,  2398,  2399,  2402,
+    2403,  2404,  2409,  2410,  2411,  2412,  2413,  2414,  2415,  2416,
+    2417,  2418,  2419,  2420,  2421,  2422,  2423,  2424,  2427,  2429,
+    2429,  2438,  2438,  2447,  2455,  2463,  2463,  2474,  2475,  2476,
+    2481,  2482,  2483,  2484,  2485,  2488,  2488,  2497,  2497,  2509,
+    2509,  2522,  2523,  2524,  2529,  2530,  2531,  2532,  2533,  2534,
+    2537,  2543,  2543,  2552,  2558,  2558,  2568,  2568,  2581,  2581,
+    2591,  2592,  2593,  2598,  2599,  2600,  2601,  2602,  2603,  2604,
+    2605,  2606,  2607,  2608,  2609,  2610,  2611,  2612,  2613,  2614,
+    2615,  2618,  2624,  2624,  2633,  2639,  2639,  2648,  2654,  2660,
+    2660,  2669,  2670,  2673,  2673,  2683,  2683,  2693,  2700,  2707,
+    2707,  2716,  2716,  2726,  2726,  2736,  2736,  2748,  2748,  2760,
+    2760,  2770,  2771,  2772,  2778,  2779,  2782,  2782,  2793,  2801,
+    2801,  2814,  2815,  2816,  2822,  2822,  2830,  2831,  2832,  2837,
+    2838,  2839,  2840,  2841,  2842,  2843,  2846,  2852,  2852,  2861,
+    2861,  2872,  2873,  2874,  2879,  2879,  2887,  2888,  2889,  2894,
+    2895,  2896,  2897,  2898,  2901,  2901,  2910,  2916,  2922,  2928,
+    2928,  2937,  2937,  2948,  2949,  2950,  2955,  2956,  2957,  2958,
+    2959,  2962,  2968,  2974,  2980
   };
 
   void
@@ -6345,9 +6350,9 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp4_parser.yy"
 } } // isc::dhcp
-#line 6349 "dhcp4_parser.cc"
+#line 6354 "dhcp4_parser.cc"
 
-#line 2981 "dhcp4_parser.yy"
+#line 2986 "dhcp4_parser.yy"
 
 
 void
index 860fbfa0c95e26e740fcafb242129de8a5dc2414..5af9d786cdc488745aea81902962b9314b7aed02 100644 (file)
@@ -1,3 +1,4 @@
+// Generated 202305171251
 // A Bison parser, made by GNU Bison 3.8.2.
 
 // Locations for Bison parsers in C++
index 6036876ad184b2443483b034cc3ed4091320ae15..9153be76a9e0736625dce25f19dd6fdba2172e71 100644 (file)
 
 #include <dhcp6/parser_context.h>
 
-#line 52 "dhcp6_parser.cc"
+// Avoid warnings with the error counter.
+#if defined(__GNUC__) || defined(__clang__)
+#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
+#endif
+
+#line 57 "dhcp6_parser.cc"
 
 
 #ifndef YY_
 
 #line 14 "dhcp6_parser.yy"
 namespace isc { namespace dhcp {
-#line 145 "dhcp6_parser.cc"
+#line 150 "dhcp6_parser.cc"
 
   /// Build a parser object.
   Dhcp6Parser::Dhcp6Parser (isc::dhcp::Parser6Context& ctx_yyarg)
@@ -398,75 +403,75 @@ namespace isc { namespace dhcp {
         switch (yykind)
     {
       case symbol_kind::S_STRING: // "constant string"
-#line 302 "dhcp6_parser.yy"
+#line 307 "dhcp6_parser.yy"
                  { yyoutput << yysym.value.template as < std::string > (); }
-#line 404 "dhcp6_parser.cc"
+#line 409 "dhcp6_parser.cc"
         break;
 
       case symbol_kind::S_INTEGER: // "integer"
-#line 302 "dhcp6_parser.yy"
+#line 307 "dhcp6_parser.yy"
                  { yyoutput << yysym.value.template as < int64_t > (); }
-#line 410 "dhcp6_parser.cc"
+#line 415 "dhcp6_parser.cc"
         break;
 
       case symbol_kind::S_FLOAT: // "floating point"
-#line 302 "dhcp6_parser.yy"
+#line 307 "dhcp6_parser.yy"
                  { yyoutput << yysym.value.template as < double > (); }
-#line 416 "dhcp6_parser.cc"
+#line 421 "dhcp6_parser.cc"
         break;
 
       case symbol_kind::S_BOOLEAN: // "boolean"
-#line 302 "dhcp6_parser.yy"
+#line 307 "dhcp6_parser.yy"
                  { yyoutput << yysym.value.template as < bool > (); }
-#line 422 "dhcp6_parser.cc"
+#line 427 "dhcp6_parser.cc"
         break;
 
       case symbol_kind::S_value: // value
-#line 302 "dhcp6_parser.yy"
+#line 307 "dhcp6_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 428 "dhcp6_parser.cc"
+#line 433 "dhcp6_parser.cc"
         break;
 
       case symbol_kind::S_map_value: // map_value
-#line 302 "dhcp6_parser.yy"
+#line 307 "dhcp6_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 434 "dhcp6_parser.cc"
+#line 439 "dhcp6_parser.cc"
         break;
 
       case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value
-#line 302 "dhcp6_parser.yy"
+#line 307 "dhcp6_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 440 "dhcp6_parser.cc"
+#line 445 "dhcp6_parser.cc"
         break;
 
       case symbol_kind::S_db_type: // db_type
-#line 302 "dhcp6_parser.yy"
+#line 307 "dhcp6_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 446 "dhcp6_parser.cc"
+#line 451 "dhcp6_parser.cc"
         break;
 
       case symbol_kind::S_on_fail_mode: // on_fail_mode
-#line 302 "dhcp6_parser.yy"
+#line 307 "dhcp6_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 452 "dhcp6_parser.cc"
+#line 457 "dhcp6_parser.cc"
         break;
 
       case symbol_kind::S_hr_mode: // hr_mode
-#line 302 "dhcp6_parser.yy"
+#line 307 "dhcp6_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 458 "dhcp6_parser.cc"
+#line 463 "dhcp6_parser.cc"
         break;
 
       case symbol_kind::S_duid_type: // duid_type
-#line 302 "dhcp6_parser.yy"
+#line 307 "dhcp6_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 464 "dhcp6_parser.cc"
+#line 469 "dhcp6_parser.cc"
         break;
 
       case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value
-#line 302 "dhcp6_parser.yy"
+#line 307 "dhcp6_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 470 "dhcp6_parser.cc"
+#line 475 "dhcp6_parser.cc"
         break;
 
       default:
@@ -744,306 +749,306 @@ namespace isc { namespace dhcp {
           switch (yyn)
             {
   case 2: // $@1: %empty
-#line 311 "dhcp6_parser.yy"
+#line 316 "dhcp6_parser.yy"
                      { ctx.ctx_ = ctx.NO_KEYWORD; }
-#line 750 "dhcp6_parser.cc"
+#line 755 "dhcp6_parser.cc"
     break;
 
   case 4: // $@2: %empty
-#line 312 "dhcp6_parser.yy"
+#line 317 "dhcp6_parser.yy"
                       { ctx.ctx_ = ctx.CONFIG; }
-#line 756 "dhcp6_parser.cc"
+#line 761 "dhcp6_parser.cc"
     break;
 
   case 6: // $@3: %empty
-#line 313 "dhcp6_parser.yy"
+#line 318 "dhcp6_parser.yy"
                  { ctx.ctx_ = ctx.DHCP6; }
-#line 762 "dhcp6_parser.cc"
+#line 767 "dhcp6_parser.cc"
     break;
 
   case 8: // $@4: %empty
-#line 314 "dhcp6_parser.yy"
+#line 319 "dhcp6_parser.yy"
                        { ctx.ctx_ = ctx.INTERFACES_CONFIG; }
-#line 768 "dhcp6_parser.cc"
+#line 773 "dhcp6_parser.cc"
     break;
 
   case 10: // $@5: %empty
-#line 315 "dhcp6_parser.yy"
+#line 320 "dhcp6_parser.yy"
                    { ctx.ctx_ = ctx.SUBNET6; }
-#line 774 "dhcp6_parser.cc"
+#line 779 "dhcp6_parser.cc"
     break;
 
   case 12: // $@6: %empty
-#line 316 "dhcp6_parser.yy"
+#line 321 "dhcp6_parser.yy"
                  { ctx.ctx_ = ctx.POOLS; }
-#line 780 "dhcp6_parser.cc"
+#line 785 "dhcp6_parser.cc"
     break;
 
   case 14: // $@7: %empty
-#line 317 "dhcp6_parser.yy"
+#line 322 "dhcp6_parser.yy"
                    { ctx.ctx_ = ctx.PD_POOLS; }
-#line 786 "dhcp6_parser.cc"
+#line 791 "dhcp6_parser.cc"
     break;
 
   case 16: // $@8: %empty
-#line 318 "dhcp6_parser.yy"
+#line 323 "dhcp6_parser.yy"
                        { ctx.ctx_ = ctx.RESERVATIONS; }
-#line 792 "dhcp6_parser.cc"
+#line 797 "dhcp6_parser.cc"
     break;
 
   case 18: // $@9: %empty
-#line 319 "dhcp6_parser.yy"
+#line 324 "dhcp6_parser.yy"
                        { ctx.ctx_ = ctx.DHCP6; }
-#line 798 "dhcp6_parser.cc"
+#line 803 "dhcp6_parser.cc"
     break;
 
   case 20: // $@10: %empty
-#line 320 "dhcp6_parser.yy"
+#line 325 "dhcp6_parser.yy"
                       { ctx.ctx_ = ctx.OPTION_DEF; }
-#line 804 "dhcp6_parser.cc"
+#line 809 "dhcp6_parser.cc"
     break;
 
   case 22: // $@11: %empty
-#line 321 "dhcp6_parser.yy"
+#line 326 "dhcp6_parser.yy"
                        { ctx.ctx_ = ctx.OPTION_DATA; }
-#line 810 "dhcp6_parser.cc"
+#line 815 "dhcp6_parser.cc"
     break;
 
   case 24: // $@12: %empty
-#line 322 "dhcp6_parser.yy"
+#line 327 "dhcp6_parser.yy"
                          { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
-#line 816 "dhcp6_parser.cc"
+#line 821 "dhcp6_parser.cc"
     break;
 
   case 26: // $@13: %empty
-#line 323 "dhcp6_parser.yy"
+#line 328 "dhcp6_parser.yy"
                      { ctx.ctx_ = ctx.DHCP_DDNS; }
-#line 822 "dhcp6_parser.cc"
+#line 827 "dhcp6_parser.cc"
     break;
 
   case 28: // $@14: %empty
-#line 324 "dhcp6_parser.yy"
+#line 329 "dhcp6_parser.yy"
                           { ctx.ctx_ = ctx.CONFIG_CONTROL; }
-#line 828 "dhcp6_parser.cc"
+#line 833 "dhcp6_parser.cc"
     break;
 
   case 30: // value: "integer"
-#line 332 "dhcp6_parser.yy"
+#line 337 "dhcp6_parser.yy"
                { yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); }
-#line 834 "dhcp6_parser.cc"
+#line 839 "dhcp6_parser.cc"
     break;
 
   case 31: // value: "floating point"
-#line 333 "dhcp6_parser.yy"
+#line 338 "dhcp6_parser.yy"
              { yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); }
-#line 840 "dhcp6_parser.cc"
+#line 845 "dhcp6_parser.cc"
     break;
 
   case 32: // value: "boolean"
-#line 334 "dhcp6_parser.yy"
+#line 339 "dhcp6_parser.yy"
                { yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); }
-#line 846 "dhcp6_parser.cc"
+#line 851 "dhcp6_parser.cc"
     break;
 
   case 33: // value: "constant string"
-#line 335 "dhcp6_parser.yy"
+#line 340 "dhcp6_parser.yy"
               { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); }
-#line 852 "dhcp6_parser.cc"
+#line 857 "dhcp6_parser.cc"
     break;
 
   case 34: // value: "null"
-#line 336 "dhcp6_parser.yy"
+#line 341 "dhcp6_parser.yy"
                  { yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
-#line 858 "dhcp6_parser.cc"
+#line 863 "dhcp6_parser.cc"
     break;
 
   case 35: // value: map2
-#line 337 "dhcp6_parser.yy"
+#line 342 "dhcp6_parser.yy"
             { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 864 "dhcp6_parser.cc"
+#line 869 "dhcp6_parser.cc"
     break;
 
   case 36: // value: list_generic
-#line 338 "dhcp6_parser.yy"
+#line 343 "dhcp6_parser.yy"
                     { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 870 "dhcp6_parser.cc"
+#line 875 "dhcp6_parser.cc"
     break;
 
   case 37: // sub_json: value
-#line 341 "dhcp6_parser.yy"
+#line 346 "dhcp6_parser.yy"
                 {
     // Push back the JSON value on the stack
     ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ());
 }
-#line 879 "dhcp6_parser.cc"
+#line 884 "dhcp6_parser.cc"
     break;
 
   case 38: // $@15: %empty
-#line 346 "dhcp6_parser.yy"
+#line 351 "dhcp6_parser.yy"
                      {
     // This code is executed when we're about to start parsing
     // the content of the map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 890 "dhcp6_parser.cc"
+#line 895 "dhcp6_parser.cc"
     break;
 
   case 39: // map2: "{" $@15 map_content "}"
-#line 351 "dhcp6_parser.yy"
+#line 356 "dhcp6_parser.yy"
                              {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
     // for it.
 }
-#line 900 "dhcp6_parser.cc"
+#line 905 "dhcp6_parser.cc"
     break;
 
   case 40: // map_value: map2
-#line 357 "dhcp6_parser.yy"
+#line 362 "dhcp6_parser.yy"
                 { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 906 "dhcp6_parser.cc"
+#line 911 "dhcp6_parser.cc"
     break;
 
   case 43: // not_empty_map: "constant string" ":" value
-#line 364 "dhcp6_parser.yy"
+#line 369 "dhcp6_parser.yy"
                                   {
                   // map containing a single entry
                   ctx.unique(yystack_[2].value.as < std::string > (), ctx.loc2pos(yystack_[2].location));
                   ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
                   }
-#line 916 "dhcp6_parser.cc"
+#line 921 "dhcp6_parser.cc"
     break;
 
   case 44: // not_empty_map: not_empty_map "," "constant string" ":" value
-#line 369 "dhcp6_parser.yy"
+#line 374 "dhcp6_parser.yy"
                                                       {
                   // map consisting of a shorter map followed by
                   // comma and string:value
                   ctx.unique(yystack_[2].value.as < std::string > (), ctx.loc2pos(yystack_[2].location));
                   ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
                   }
-#line 927 "dhcp6_parser.cc"
+#line 932 "dhcp6_parser.cc"
     break;
 
   case 45: // not_empty_map: not_empty_map ","
-#line 375 "dhcp6_parser.yy"
+#line 380 "dhcp6_parser.yy"
                                    {
                  ctx.warnAboutExtraCommas(yystack_[0].location);
                  }
-#line 935 "dhcp6_parser.cc"
+#line 940 "dhcp6_parser.cc"
     break;
 
   case 46: // $@16: %empty
-#line 380 "dhcp6_parser.yy"
+#line 385 "dhcp6_parser.yy"
                               {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
 }
-#line 944 "dhcp6_parser.cc"
+#line 949 "dhcp6_parser.cc"
     break;
 
   case 47: // list_generic: "[" $@16 list_content "]"
-#line 383 "dhcp6_parser.yy"
+#line 388 "dhcp6_parser.yy"
                                {
     // list parsing complete. Put any sanity checking here
 }
-#line 952 "dhcp6_parser.cc"
+#line 957 "dhcp6_parser.cc"
     break;
 
   case 50: // not_empty_list: value
-#line 391 "dhcp6_parser.yy"
+#line 396 "dhcp6_parser.yy"
                       {
                   // List consisting of a single element.
                   ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
                   }
-#line 961 "dhcp6_parser.cc"
+#line 966 "dhcp6_parser.cc"
     break;
 
   case 51: // not_empty_list: not_empty_list "," value
-#line 395 "dhcp6_parser.yy"
+#line 400 "dhcp6_parser.yy"
                                            {
                   // List ending with , and a value.
                   ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
                   }
-#line 970 "dhcp6_parser.cc"
+#line 975 "dhcp6_parser.cc"
     break;
 
   case 52: // not_empty_list: not_empty_list ","
-#line 399 "dhcp6_parser.yy"
+#line 404 "dhcp6_parser.yy"
                                      {
                   ctx.warnAboutExtraCommas(yystack_[0].location);
                   }
-#line 978 "dhcp6_parser.cc"
+#line 983 "dhcp6_parser.cc"
     break;
 
   case 53: // $@17: %empty
-#line 405 "dhcp6_parser.yy"
+#line 410 "dhcp6_parser.yy"
                               {
     // List parsing about to start
 }
-#line 986 "dhcp6_parser.cc"
+#line 991 "dhcp6_parser.cc"
     break;
 
   case 54: // list_strings: "[" $@17 list_strings_content "]"
-#line 407 "dhcp6_parser.yy"
+#line 412 "dhcp6_parser.yy"
                                        {
     // list parsing complete. Put any sanity checking here
     //ctx.stack_.pop_back();
 }
-#line 995 "dhcp6_parser.cc"
+#line 1000 "dhcp6_parser.cc"
     break;
 
   case 57: // not_empty_list_strings: "constant string"
-#line 416 "dhcp6_parser.yy"
+#line 421 "dhcp6_parser.yy"
                                {
                           ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
                           }
-#line 1004 "dhcp6_parser.cc"
+#line 1009 "dhcp6_parser.cc"
     break;
 
   case 58: // not_empty_list_strings: not_empty_list_strings "," "constant string"
-#line 420 "dhcp6_parser.yy"
+#line 425 "dhcp6_parser.yy"
                                                             {
                           ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
                           }
-#line 1013 "dhcp6_parser.cc"
+#line 1018 "dhcp6_parser.cc"
     break;
 
   case 59: // not_empty_list_strings: not_empty_list_strings ","
-#line 424 "dhcp6_parser.yy"
+#line 429 "dhcp6_parser.yy"
                                                      {
                           ctx.warnAboutExtraCommas(yystack_[0].location);
                           }
-#line 1021 "dhcp6_parser.cc"
+#line 1026 "dhcp6_parser.cc"
     break;
 
   case 60: // unknown_map_entry: "constant string" ":"
-#line 434 "dhcp6_parser.yy"
+#line 439 "dhcp6_parser.yy"
                                 {
     const std::string& where = ctx.contextName();
     const std::string& keyword = yystack_[1].value.as < std::string > ();
     error(yystack_[1].location,
           "got unexpected keyword \"" + keyword + "\" in " + where + " map.");
 }
-#line 1032 "dhcp6_parser.cc"
+#line 1037 "dhcp6_parser.cc"
     break;
 
   case 61: // $@18: %empty
-#line 443 "dhcp6_parser.yy"
+#line 448 "dhcp6_parser.yy"
                            {
     // This code is executed when we're about to start parsing
     // the content of the map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1043 "dhcp6_parser.cc"
+#line 1048 "dhcp6_parser.cc"
     break;
 
   case 62: // syntax_map: "{" $@18 global_object "}"
-#line 448 "dhcp6_parser.yy"
+#line 453 "dhcp6_parser.yy"
                                {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -1052,11 +1057,11 @@ namespace isc { namespace dhcp {
     // Dhcp6 is required
     ctx.require("Dhcp6", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
 }
-#line 1056 "dhcp6_parser.cc"
+#line 1061 "dhcp6_parser.cc"
     break;
 
   case 63: // $@19: %empty
-#line 458 "dhcp6_parser.yy"
+#line 463 "dhcp6_parser.yy"
                      {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -1067,537 +1072,537 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.DHCP6);
 }
-#line 1071 "dhcp6_parser.cc"
+#line 1076 "dhcp6_parser.cc"
     break;
 
   case 64: // global_object: "Dhcp6" $@19 ":" "{" global_params "}"
-#line 467 "dhcp6_parser.yy"
+#line 472 "dhcp6_parser.yy"
                                                     {
     // No global parameter is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1081 "dhcp6_parser.cc"
+#line 1086 "dhcp6_parser.cc"
     break;
 
   case 66: // global_object_comma: global_object ","
-#line 475 "dhcp6_parser.yy"
+#line 480 "dhcp6_parser.yy"
                                          {
     ctx.warnAboutExtraCommas(yystack_[0].location);
 }
-#line 1089 "dhcp6_parser.cc"
+#line 1094 "dhcp6_parser.cc"
     break;
 
   case 67: // $@20: %empty
-#line 481 "dhcp6_parser.yy"
+#line 486 "dhcp6_parser.yy"
                           {
     // Parse the Dhcp6 map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1099 "dhcp6_parser.cc"
+#line 1104 "dhcp6_parser.cc"
     break;
 
   case 68: // sub_dhcp6: "{" $@20 global_params "}"
-#line 485 "dhcp6_parser.yy"
+#line 490 "dhcp6_parser.yy"
                                {
     // No global parameter is required
     // parsing completed
 }
-#line 1108 "dhcp6_parser.cc"
+#line 1113 "dhcp6_parser.cc"
     break;
 
   case 71: // global_params: global_params ","
-#line 492 "dhcp6_parser.yy"
+#line 497 "dhcp6_parser.yy"
                                    {
                  ctx.warnAboutExtraCommas(yystack_[0].location);
                  }
-#line 1116 "dhcp6_parser.cc"
+#line 1121 "dhcp6_parser.cc"
     break;
 
   case 140: // $@21: %empty
-#line 569 "dhcp6_parser.yy"
+#line 574 "dhcp6_parser.yy"
                                {
     ctx.unique("data-directory", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1125 "dhcp6_parser.cc"
+#line 1130 "dhcp6_parser.cc"
     break;
 
   case 141: // data_directory: "data-directory" $@21 ":" "constant string"
-#line 572 "dhcp6_parser.yy"
+#line 577 "dhcp6_parser.yy"
                {
     ElementPtr datadir(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("data-directory", datadir);
     ctx.leave();
 }
-#line 1135 "dhcp6_parser.cc"
+#line 1140 "dhcp6_parser.cc"
     break;
 
   case 142: // preferred_lifetime: "preferred-lifetime" ":" "integer"
-#line 578 "dhcp6_parser.yy"
+#line 583 "dhcp6_parser.yy"
                                                      {
     ctx.unique("preferred-lifetime", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("preferred-lifetime", prf);
 }
-#line 1145 "dhcp6_parser.cc"
+#line 1150 "dhcp6_parser.cc"
     break;
 
   case 143: // min_preferred_lifetime: "min-preferred-lifetime" ":" "integer"
-#line 584 "dhcp6_parser.yy"
+#line 589 "dhcp6_parser.yy"
                                                              {
     ctx.unique("min-preferred-lifetime", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("min-preferred-lifetime", prf);
 }
-#line 1155 "dhcp6_parser.cc"
+#line 1160 "dhcp6_parser.cc"
     break;
 
   case 144: // max_preferred_lifetime: "max-preferred-lifetime" ":" "integer"
-#line 590 "dhcp6_parser.yy"
+#line 595 "dhcp6_parser.yy"
                                                              {
     ctx.unique("max-preferred-lifetime", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-preferred-lifetime", prf);
 }
-#line 1165 "dhcp6_parser.cc"
+#line 1170 "dhcp6_parser.cc"
     break;
 
   case 145: // valid_lifetime: "valid-lifetime" ":" "integer"
-#line 596 "dhcp6_parser.yy"
+#line 601 "dhcp6_parser.yy"
                                              {
     ctx.unique("valid-lifetime", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("valid-lifetime", prf);
 }
-#line 1175 "dhcp6_parser.cc"
+#line 1180 "dhcp6_parser.cc"
     break;
 
   case 146: // min_valid_lifetime: "min-valid-lifetime" ":" "integer"
-#line 602 "dhcp6_parser.yy"
+#line 607 "dhcp6_parser.yy"
                                                      {
     ctx.unique("min-valid-lifetime", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("min-valid-lifetime", prf);
 }
-#line 1185 "dhcp6_parser.cc"
+#line 1190 "dhcp6_parser.cc"
     break;
 
   case 147: // max_valid_lifetime: "max-valid-lifetime" ":" "integer"
-#line 608 "dhcp6_parser.yy"
+#line 613 "dhcp6_parser.yy"
                                                      {
     ctx.unique("max-valid-lifetime", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-valid-lifetime", prf);
 }
-#line 1195 "dhcp6_parser.cc"
+#line 1200 "dhcp6_parser.cc"
     break;
 
   case 148: // renew_timer: "renew-timer" ":" "integer"
-#line 614 "dhcp6_parser.yy"
+#line 619 "dhcp6_parser.yy"
                                        {
     ctx.unique("renew-timer", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("renew-timer", prf);
 }
-#line 1205 "dhcp6_parser.cc"
+#line 1210 "dhcp6_parser.cc"
     break;
 
   case 149: // rebind_timer: "rebind-timer" ":" "integer"
-#line 620 "dhcp6_parser.yy"
+#line 625 "dhcp6_parser.yy"
                                          {
     ctx.unique("rebind-timer", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rebind-timer", prf);
 }
-#line 1215 "dhcp6_parser.cc"
+#line 1220 "dhcp6_parser.cc"
     break;
 
   case 150: // calculate_tee_times: "calculate-tee-times" ":" "boolean"
-#line 626 "dhcp6_parser.yy"
+#line 631 "dhcp6_parser.yy"
                                                        {
     ctx.unique("calculate-tee-times", ctx.loc2pos(yystack_[2].location));
     ElementPtr ctt(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("calculate-tee-times", ctt);
 }
-#line 1225 "dhcp6_parser.cc"
+#line 1230 "dhcp6_parser.cc"
     break;
 
   case 151: // t1_percent: "t1-percent" ":" "floating point"
-#line 632 "dhcp6_parser.yy"
+#line 637 "dhcp6_parser.yy"
                                    {
     ctx.unique("t1-percent", ctx.loc2pos(yystack_[2].location));
     ElementPtr t1(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("t1-percent", t1);
 }
-#line 1235 "dhcp6_parser.cc"
+#line 1240 "dhcp6_parser.cc"
     break;
 
   case 152: // t2_percent: "t2-percent" ":" "floating point"
-#line 638 "dhcp6_parser.yy"
+#line 643 "dhcp6_parser.yy"
                                    {
     ctx.unique("t2-percent", ctx.loc2pos(yystack_[2].location));
     ElementPtr t2(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("t2-percent", t2);
 }
-#line 1245 "dhcp6_parser.cc"
+#line 1250 "dhcp6_parser.cc"
     break;
 
   case 153: // cache_threshold: "cache-threshold" ":" "floating point"
-#line 644 "dhcp6_parser.yy"
+#line 649 "dhcp6_parser.yy"
                                              {
     ctx.unique("cache-threshold", ctx.loc2pos(yystack_[2].location));
     ElementPtr ct(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("cache-threshold", ct);
 }
-#line 1255 "dhcp6_parser.cc"
+#line 1260 "dhcp6_parser.cc"
     break;
 
   case 154: // cache_max_age: "cache-max-age" ":" "integer"
-#line 650 "dhcp6_parser.yy"
+#line 655 "dhcp6_parser.yy"
                                            {
     ctx.unique("cache-max-age", ctx.loc2pos(yystack_[2].location));
     ElementPtr cm(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("cache-max-age", cm);
 }
-#line 1265 "dhcp6_parser.cc"
+#line 1270 "dhcp6_parser.cc"
     break;
 
   case 155: // decline_probation_period: "decline-probation-period" ":" "integer"
-#line 656 "dhcp6_parser.yy"
+#line 661 "dhcp6_parser.yy"
                                                                  {
     ctx.unique("decline-probation-period", ctx.loc2pos(yystack_[2].location));
     ElementPtr dpp(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("decline-probation-period", dpp);
 }
-#line 1275 "dhcp6_parser.cc"
+#line 1280 "dhcp6_parser.cc"
     break;
 
   case 156: // ddns_send_updates: "ddns-send-updates" ":" "boolean"
-#line 662 "dhcp6_parser.yy"
+#line 667 "dhcp6_parser.yy"
                                                    {
     ctx.unique("ddns-send-updates", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ddns-send-updates", b);
 }
-#line 1285 "dhcp6_parser.cc"
+#line 1290 "dhcp6_parser.cc"
     break;
 
   case 157: // ddns_override_no_update: "ddns-override-no-update" ":" "boolean"
-#line 668 "dhcp6_parser.yy"
+#line 673 "dhcp6_parser.yy"
                                                                {
     ctx.unique("ddns-override-no-update", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ddns-override-no-update", b);
 }
-#line 1295 "dhcp6_parser.cc"
+#line 1300 "dhcp6_parser.cc"
     break;
 
   case 158: // ddns_override_client_update: "ddns-override-client-update" ":" "boolean"
-#line 674 "dhcp6_parser.yy"
+#line 679 "dhcp6_parser.yy"
                                                                        {
     ctx.unique("ddns-override-client-update", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ddns-override-client-update", b);
 }
-#line 1305 "dhcp6_parser.cc"
+#line 1310 "dhcp6_parser.cc"
     break;
 
   case 159: // $@22: %empty
-#line 680 "dhcp6_parser.yy"
+#line 685 "dhcp6_parser.yy"
                                                    {
     ctx.unique("ddns-replace-client-name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.REPLACE_CLIENT_NAME);
 }
-#line 1314 "dhcp6_parser.cc"
+#line 1319 "dhcp6_parser.cc"
     break;
 
   case 160: // ddns_replace_client_name: "ddns-replace-client-name" $@22 ":" ddns_replace_client_name_value
-#line 683 "dhcp6_parser.yy"
+#line 688 "dhcp6_parser.yy"
                                        {
     ctx.stack_.back()->set("ddns-replace-client-name", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 1323 "dhcp6_parser.cc"
+#line 1328 "dhcp6_parser.cc"
     break;
 
   case 161: // ddns_replace_client_name_value: "when-present"
-#line 689 "dhcp6_parser.yy"
+#line 694 "dhcp6_parser.yy"
                  {
       yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location)));
       }
-#line 1331 "dhcp6_parser.cc"
+#line 1336 "dhcp6_parser.cc"
     break;
 
   case 162: // ddns_replace_client_name_value: "never"
-#line 692 "dhcp6_parser.yy"
+#line 697 "dhcp6_parser.yy"
           {
       yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
       }
-#line 1339 "dhcp6_parser.cc"
+#line 1344 "dhcp6_parser.cc"
     break;
 
   case 163: // ddns_replace_client_name_value: "always"
-#line 695 "dhcp6_parser.yy"
+#line 700 "dhcp6_parser.yy"
            {
       yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
       }
-#line 1347 "dhcp6_parser.cc"
+#line 1352 "dhcp6_parser.cc"
     break;
 
   case 164: // ddns_replace_client_name_value: "when-not-present"
-#line 698 "dhcp6_parser.yy"
+#line 703 "dhcp6_parser.yy"
                      {
       yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
       }
-#line 1355 "dhcp6_parser.cc"
+#line 1360 "dhcp6_parser.cc"
     break;
 
   case 165: // ddns_replace_client_name_value: "boolean"
-#line 701 "dhcp6_parser.yy"
+#line 706 "dhcp6_parser.yy"
             {
       error(yystack_[0].location, "boolean values for the replace-client-name are "
                 "no longer supported");
       }
-#line 1364 "dhcp6_parser.cc"
+#line 1369 "dhcp6_parser.cc"
     break;
 
   case 166: // $@23: %empty
-#line 707 "dhcp6_parser.yy"
+#line 712 "dhcp6_parser.yy"
                                              {
     ctx.unique("ddns-generated-prefix", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1373 "dhcp6_parser.cc"
+#line 1378 "dhcp6_parser.cc"
     break;
 
   case 167: // ddns_generated_prefix: "ddns-generated-prefix" $@23 ":" "constant string"
-#line 710 "dhcp6_parser.yy"
+#line 715 "dhcp6_parser.yy"
                {
     ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ddns-generated-prefix", s);
     ctx.leave();
 }
-#line 1383 "dhcp6_parser.cc"
+#line 1388 "dhcp6_parser.cc"
     break;
 
   case 168: // $@24: %empty
-#line 716 "dhcp6_parser.yy"
+#line 721 "dhcp6_parser.yy"
                                                {
     ctx.unique("ddns-qualifying-suffix", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1392 "dhcp6_parser.cc"
+#line 1397 "dhcp6_parser.cc"
     break;
 
   case 169: // ddns_qualifying_suffix: "ddns-qualifying-suffix" $@24 ":" "constant string"
-#line 719 "dhcp6_parser.yy"
+#line 724 "dhcp6_parser.yy"
                {
     ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ddns-qualifying-suffix", s);
     ctx.leave();
 }
-#line 1402 "dhcp6_parser.cc"
+#line 1407 "dhcp6_parser.cc"
     break;
 
   case 170: // ddns_update_on_renew: "ddns-update-on-renew" ":" "boolean"
-#line 725 "dhcp6_parser.yy"
+#line 730 "dhcp6_parser.yy"
                                                          {
     ctx.unique("ddns-update-on-renew", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ddns-update-on-renew", b);
 }
-#line 1412 "dhcp6_parser.cc"
+#line 1417 "dhcp6_parser.cc"
     break;
 
   case 171: // ddns_use_conflict_resolution: "ddns-use-conflict-resolution" ":" "boolean"
-#line 731 "dhcp6_parser.yy"
+#line 736 "dhcp6_parser.yy"
                                                                          {
     ctx.unique("ddns-use-conflict-resolution", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ddns-use-conflict-resolution", b);
 }
-#line 1422 "dhcp6_parser.cc"
+#line 1427 "dhcp6_parser.cc"
     break;
 
   case 172: // ddns_ttl_percent: "ddns-ttl-percent" ":" "floating point"
-#line 737 "dhcp6_parser.yy"
+#line 742 "dhcp6_parser.yy"
                                                {
     ctx.unique("ddns-ttl-percent", ctx.loc2pos(yystack_[2].location));
     ElementPtr ttl(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ddns-ttl-percent", ttl);
 }
-#line 1432 "dhcp6_parser.cc"
+#line 1437 "dhcp6_parser.cc"
     break;
 
   case 173: // $@25: %empty
-#line 743 "dhcp6_parser.yy"
+#line 748 "dhcp6_parser.yy"
                                      {
     ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1441 "dhcp6_parser.cc"
+#line 1446 "dhcp6_parser.cc"
     break;
 
   case 174: // hostname_char_set: "hostname-char-set" $@25 ":" "constant string"
-#line 746 "dhcp6_parser.yy"
+#line 751 "dhcp6_parser.yy"
                {
     ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname-char-set", s);
     ctx.leave();
 }
-#line 1451 "dhcp6_parser.cc"
+#line 1456 "dhcp6_parser.cc"
     break;
 
   case 175: // $@26: %empty
-#line 752 "dhcp6_parser.yy"
+#line 757 "dhcp6_parser.yy"
                                                      {
     ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1460 "dhcp6_parser.cc"
+#line 1465 "dhcp6_parser.cc"
     break;
 
   case 176: // hostname_char_replacement: "hostname-char-replacement" $@26 ":" "constant string"
-#line 755 "dhcp6_parser.yy"
+#line 760 "dhcp6_parser.yy"
                {
     ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname-char-replacement", s);
     ctx.leave();
 }
-#line 1470 "dhcp6_parser.cc"
+#line 1475 "dhcp6_parser.cc"
     break;
 
   case 177: // store_extended_info: "store-extended-info" ":" "boolean"
-#line 761 "dhcp6_parser.yy"
+#line 766 "dhcp6_parser.yy"
                                                        {
     ctx.unique("store-extended-info", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("store-extended-info", b);
 }
-#line 1480 "dhcp6_parser.cc"
+#line 1485 "dhcp6_parser.cc"
     break;
 
   case 178: // statistic_default_sample_count: "statistic-default-sample-count" ":" "integer"
-#line 767 "dhcp6_parser.yy"
+#line 772 "dhcp6_parser.yy"
                                                                              {
     ctx.unique("statistic-default-sample-count", ctx.loc2pos(yystack_[2].location));
     ElementPtr count(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("statistic-default-sample-count", count);
 }
-#line 1490 "dhcp6_parser.cc"
+#line 1495 "dhcp6_parser.cc"
     break;
 
   case 179: // statistic_default_sample_age: "statistic-default-sample-age" ":" "integer"
-#line 773 "dhcp6_parser.yy"
+#line 778 "dhcp6_parser.yy"
                                                                          {
     ctx.unique("statistic-default-sample-age", ctx.loc2pos(yystack_[2].location));
     ElementPtr age(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("statistic-default-sample-age", age);
 }
-#line 1500 "dhcp6_parser.cc"
+#line 1505 "dhcp6_parser.cc"
     break;
 
   case 180: // $@27: %empty
-#line 779 "dhcp6_parser.yy"
+#line 784 "dhcp6_parser.yy"
                        {
     ctx.unique("server-tag", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1509 "dhcp6_parser.cc"
+#line 1514 "dhcp6_parser.cc"
     break;
 
   case 181: // server_tag: "server-tag" $@27 ":" "constant string"
-#line 782 "dhcp6_parser.yy"
+#line 787 "dhcp6_parser.yy"
                {
     ElementPtr stag(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-tag", stag);
     ctx.leave();
 }
-#line 1519 "dhcp6_parser.cc"
+#line 1524 "dhcp6_parser.cc"
     break;
 
   case 182: // parked_packet_limit: "parked-packet-limit" ":" "integer"
-#line 788 "dhcp6_parser.yy"
+#line 793 "dhcp6_parser.yy"
                                                        {
     ctx.unique("parked-packet-limit", ctx.loc2pos(yystack_[2].location));
     ElementPtr ppl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("parked-packet-limit", ppl);
 }
-#line 1529 "dhcp6_parser.cc"
+#line 1534 "dhcp6_parser.cc"
     break;
 
   case 183: // $@28: %empty
-#line 794 "dhcp6_parser.yy"
+#line 799 "dhcp6_parser.yy"
                      {
     ctx.unique("allocator", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1538 "dhcp6_parser.cc"
+#line 1543 "dhcp6_parser.cc"
     break;
 
   case 184: // allocator: "allocator" $@28 ":" "constant string"
-#line 797 "dhcp6_parser.yy"
+#line 802 "dhcp6_parser.yy"
                {
     ElementPtr al(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("allocator", al);
     ctx.leave();
 }
-#line 1548 "dhcp6_parser.cc"
+#line 1553 "dhcp6_parser.cc"
     break;
 
   case 185: // $@29: %empty
-#line 803 "dhcp6_parser.yy"
+#line 808 "dhcp6_parser.yy"
                            {
     ctx.unique("pd-allocator", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1557 "dhcp6_parser.cc"
+#line 1562 "dhcp6_parser.cc"
     break;
 
   case 186: // pd_allocator: "pd-allocator" $@29 ":" "constant string"
-#line 806 "dhcp6_parser.yy"
+#line 811 "dhcp6_parser.yy"
                {
     ElementPtr al(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pd-allocator", al);
     ctx.leave();
 }
-#line 1567 "dhcp6_parser.cc"
+#line 1572 "dhcp6_parser.cc"
     break;
 
   case 187: // early_global_reservations_lookup: "early-global-reservations-lookup" ":" "boolean"
-#line 812 "dhcp6_parser.yy"
+#line 817 "dhcp6_parser.yy"
                                                                                  {
     ctx.unique("early-global-reservations-lookup", ctx.loc2pos(yystack_[2].location));
     ElementPtr early(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("early-global-reservations-lookup", early);
 }
-#line 1577 "dhcp6_parser.cc"
+#line 1582 "dhcp6_parser.cc"
     break;
 
   case 188: // ip_reservations_unique: "ip-reservations-unique" ":" "boolean"
-#line 818 "dhcp6_parser.yy"
+#line 823 "dhcp6_parser.yy"
                                                              {
     ctx.unique("ip-reservations-unique", ctx.loc2pos(yystack_[2].location));
     ElementPtr unique(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-reservations-unique", unique);
 }
-#line 1587 "dhcp6_parser.cc"
+#line 1592 "dhcp6_parser.cc"
     break;
 
   case 189: // reservations_lookup_first: "reservations-lookup-first" ":" "boolean"
-#line 824 "dhcp6_parser.yy"
+#line 829 "dhcp6_parser.yy"
                                                                    {
     ctx.unique("reservations-lookup-first", ctx.loc2pos(yystack_[2].location));
     ElementPtr first(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations-lookup-first", first);
 }
-#line 1597 "dhcp6_parser.cc"
+#line 1602 "dhcp6_parser.cc"
     break;
 
   case 190: // $@30: %empty
-#line 830 "dhcp6_parser.yy"
+#line 835 "dhcp6_parser.yy"
                                      {
     ctx.unique("interfaces-config", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1605,48 +1610,48 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(i);
     ctx.enter(ctx.INTERFACES_CONFIG);
 }
-#line 1609 "dhcp6_parser.cc"
+#line 1614 "dhcp6_parser.cc"
     break;
 
   case 191: // interfaces_config: "interfaces-config" $@30 ":" "{" interfaces_config_params "}"
-#line 836 "dhcp6_parser.yy"
+#line 841 "dhcp6_parser.yy"
                                                                {
     // No interfaces config param is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1619 "dhcp6_parser.cc"
+#line 1624 "dhcp6_parser.cc"
     break;
 
   case 192: // $@31: %empty
-#line 842 "dhcp6_parser.yy"
+#line 847 "dhcp6_parser.yy"
                                 {
     // Parse the interfaces-config map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1629 "dhcp6_parser.cc"
+#line 1634 "dhcp6_parser.cc"
     break;
 
   case 193: // sub_interfaces6: "{" $@31 interfaces_config_params "}"
-#line 846 "dhcp6_parser.yy"
+#line 851 "dhcp6_parser.yy"
                                           {
     // No interfaces config param is required
     // parsing completed
 }
-#line 1638 "dhcp6_parser.cc"
+#line 1643 "dhcp6_parser.cc"
     break;
 
   case 196: // interfaces_config_params: interfaces_config_params ","
-#line 853 "dhcp6_parser.yy"
+#line 858 "dhcp6_parser.yy"
                                                          {
                             ctx.warnAboutExtraCommas(yystack_[0].location);
                             }
-#line 1646 "dhcp6_parser.cc"
+#line 1651 "dhcp6_parser.cc"
     break;
 
   case 205: // $@32: %empty
-#line 868 "dhcp6_parser.yy"
+#line 873 "dhcp6_parser.yy"
                             {
     ctx.unique("interfaces", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -1654,60 +1659,60 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1658 "dhcp6_parser.cc"
+#line 1663 "dhcp6_parser.cc"
     break;
 
   case 206: // interfaces_list: "interfaces" $@32 ":" list_strings
-#line 874 "dhcp6_parser.yy"
+#line 879 "dhcp6_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1667 "dhcp6_parser.cc"
+#line 1672 "dhcp6_parser.cc"
     break;
 
   case 207: // re_detect: "re-detect" ":" "boolean"
-#line 879 "dhcp6_parser.yy"
+#line 884 "dhcp6_parser.yy"
                                    {
     ctx.unique("re-detect", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("re-detect", b);
 }
-#line 1677 "dhcp6_parser.cc"
+#line 1682 "dhcp6_parser.cc"
     break;
 
   case 208: // service_sockets_require_all: "service-sockets-require-all" ":" "boolean"
-#line 885 "dhcp6_parser.yy"
+#line 890 "dhcp6_parser.yy"
                                                                        {
     ctx.unique("service-sockets-require-all", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("service-sockets-require-all", b);
 }
-#line 1687 "dhcp6_parser.cc"
+#line 1692 "dhcp6_parser.cc"
     break;
 
   case 209: // service_sockets_retry_wait_time: "service-sockets-retry-wait-time" ":" "integer"
-#line 891 "dhcp6_parser.yy"
+#line 896 "dhcp6_parser.yy"
                                                                                {
     ctx.unique("service-sockets-retry-wait-time", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("service-sockets-retry-wait-time", n);
 }
-#line 1697 "dhcp6_parser.cc"
+#line 1702 "dhcp6_parser.cc"
     break;
 
   case 210: // service_sockets_max_retries: "service-sockets-max-retries" ":" "integer"
-#line 897 "dhcp6_parser.yy"
+#line 902 "dhcp6_parser.yy"
                                                                        {
     ctx.unique("service-sockets-max-retries", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("service-sockets-max-retries", n);
 }
-#line 1707 "dhcp6_parser.cc"
+#line 1712 "dhcp6_parser.cc"
     break;
 
   case 211: // $@33: %empty
-#line 903 "dhcp6_parser.yy"
+#line 908 "dhcp6_parser.yy"
                                {
     ctx.unique("lease-database", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1715,22 +1720,22 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(i);
     ctx.enter(ctx.LEASE_DATABASE);
 }
-#line 1719 "dhcp6_parser.cc"
+#line 1724 "dhcp6_parser.cc"
     break;
 
   case 212: // lease_database: "lease-database" $@33 ":" "{" database_map_params "}"
-#line 909 "dhcp6_parser.yy"
+#line 914 "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 1730 "dhcp6_parser.cc"
+#line 1735 "dhcp6_parser.cc"
     break;
 
   case 213: // $@34: %empty
-#line 916 "dhcp6_parser.yy"
+#line 921 "dhcp6_parser.yy"
                                {
     ctx.unique("hosts-database", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1738,22 +1743,22 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(i);
     ctx.enter(ctx.HOSTS_DATABASE);
 }
-#line 1742 "dhcp6_parser.cc"
+#line 1747 "dhcp6_parser.cc"
     break;
 
   case 214: // hosts_database: "hosts-database" $@34 ":" "{" database_map_params "}"
-#line 922 "dhcp6_parser.yy"
+#line 927 "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 1753 "dhcp6_parser.cc"
+#line 1758 "dhcp6_parser.cc"
     break;
 
   case 215: // $@35: %empty
-#line 929 "dhcp6_parser.yy"
+#line 934 "dhcp6_parser.yy"
                                  {
     ctx.unique("hosts-databases", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -1761,390 +1766,390 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOSTS_DATABASE);
 }
-#line 1765 "dhcp6_parser.cc"
+#line 1770 "dhcp6_parser.cc"
     break;
 
   case 216: // hosts_databases: "hosts-databases" $@35 ":" "[" database_list "]"
-#line 935 "dhcp6_parser.yy"
+#line 940 "dhcp6_parser.yy"
                                                       {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1774 "dhcp6_parser.cc"
+#line 1779 "dhcp6_parser.cc"
     break;
 
   case 221: // not_empty_database_list: not_empty_database_list ","
-#line 946 "dhcp6_parser.yy"
+#line 951 "dhcp6_parser.yy"
                                                        {
                            ctx.warnAboutExtraCommas(yystack_[0].location);
                            }
-#line 1782 "dhcp6_parser.cc"
+#line 1787 "dhcp6_parser.cc"
     break;
 
   case 222: // $@36: %empty
-#line 951 "dhcp6_parser.yy"
+#line 956 "dhcp6_parser.yy"
                          {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1792 "dhcp6_parser.cc"
+#line 1797 "dhcp6_parser.cc"
     break;
 
   case 223: // database: "{" $@36 database_map_params "}"
-#line 955 "dhcp6_parser.yy"
+#line 960 "dhcp6_parser.yy"
                                      {
     // The type parameter is required
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 1802 "dhcp6_parser.cc"
+#line 1807 "dhcp6_parser.cc"
     break;
 
   case 226: // database_map_params: database_map_params ","
-#line 963 "dhcp6_parser.yy"
+#line 968 "dhcp6_parser.yy"
                                                {
                        ctx.warnAboutExtraCommas(yystack_[0].location);
                        }
-#line 1810 "dhcp6_parser.cc"
+#line 1815 "dhcp6_parser.cc"
     break;
 
   case 249: // $@37: %empty
-#line 992 "dhcp6_parser.yy"
+#line 997 "dhcp6_parser.yy"
                     {
     ctx.unique("type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.DATABASE_TYPE);
 }
-#line 1819 "dhcp6_parser.cc"
+#line 1824 "dhcp6_parser.cc"
     break;
 
   case 250: // database_type: "type" $@37 ":" db_type
-#line 995 "dhcp6_parser.yy"
+#line 1000 "dhcp6_parser.yy"
                 {
     ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 1828 "dhcp6_parser.cc"
+#line 1833 "dhcp6_parser.cc"
     break;
 
   case 251: // db_type: "memfile"
-#line 1000 "dhcp6_parser.yy"
+#line 1005 "dhcp6_parser.yy"
                  { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
-#line 1834 "dhcp6_parser.cc"
+#line 1839 "dhcp6_parser.cc"
     break;
 
   case 252: // db_type: "mysql"
-#line 1001 "dhcp6_parser.yy"
+#line 1006 "dhcp6_parser.yy"
                { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
-#line 1840 "dhcp6_parser.cc"
+#line 1845 "dhcp6_parser.cc"
     break;
 
   case 253: // db_type: "postgresql"
-#line 1002 "dhcp6_parser.yy"
+#line 1007 "dhcp6_parser.yy"
                     { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
-#line 1846 "dhcp6_parser.cc"
+#line 1851 "dhcp6_parser.cc"
     break;
 
   case 254: // $@38: %empty
-#line 1005 "dhcp6_parser.yy"
+#line 1010 "dhcp6_parser.yy"
            {
     ctx.unique("user", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1855 "dhcp6_parser.cc"
+#line 1860 "dhcp6_parser.cc"
     break;
 
   case 255: // user: "user" $@38 ":" "constant string"
-#line 1008 "dhcp6_parser.yy"
+#line 1013 "dhcp6_parser.yy"
                {
     ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("user", user);
     ctx.leave();
 }
-#line 1865 "dhcp6_parser.cc"
+#line 1870 "dhcp6_parser.cc"
     break;
 
   case 256: // $@39: %empty
-#line 1014 "dhcp6_parser.yy"
+#line 1019 "dhcp6_parser.yy"
                    {
     ctx.unique("password", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1874 "dhcp6_parser.cc"
+#line 1879 "dhcp6_parser.cc"
     break;
 
   case 257: // password: "password" $@39 ":" "constant string"
-#line 1017 "dhcp6_parser.yy"
+#line 1022 "dhcp6_parser.yy"
                {
     ElementPtr pwd(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("password", pwd);
     ctx.leave();
 }
-#line 1884 "dhcp6_parser.cc"
+#line 1889 "dhcp6_parser.cc"
     break;
 
   case 258: // $@40: %empty
-#line 1023 "dhcp6_parser.yy"
+#line 1028 "dhcp6_parser.yy"
            {
     ctx.unique("host", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1893 "dhcp6_parser.cc"
+#line 1898 "dhcp6_parser.cc"
     break;
 
   case 259: // host: "host" $@40 ":" "constant string"
-#line 1026 "dhcp6_parser.yy"
+#line 1031 "dhcp6_parser.yy"
                {
     ElementPtr h(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host", h);
     ctx.leave();
 }
-#line 1903 "dhcp6_parser.cc"
+#line 1908 "dhcp6_parser.cc"
     break;
 
   case 260: // port: "port" ":" "integer"
-#line 1032 "dhcp6_parser.yy"
+#line 1037 "dhcp6_parser.yy"
                          {
     ctx.unique("port", ctx.loc2pos(yystack_[2].location));
     ElementPtr p(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("port", p);
 }
-#line 1913 "dhcp6_parser.cc"
+#line 1918 "dhcp6_parser.cc"
     break;
 
   case 261: // $@41: %empty
-#line 1038 "dhcp6_parser.yy"
+#line 1043 "dhcp6_parser.yy"
            {
     ctx.unique("name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1922 "dhcp6_parser.cc"
+#line 1927 "dhcp6_parser.cc"
     break;
 
   case 262: // name: "name" $@41 ":" "constant string"
-#line 1041 "dhcp6_parser.yy"
+#line 1046 "dhcp6_parser.yy"
                {
     ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("name", name);
     ctx.leave();
 }
-#line 1932 "dhcp6_parser.cc"
+#line 1937 "dhcp6_parser.cc"
     break;
 
   case 263: // persist: "persist" ":" "boolean"
-#line 1047 "dhcp6_parser.yy"
+#line 1052 "dhcp6_parser.yy"
                                {
     ctx.unique("persist", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("persist", n);
 }
-#line 1942 "dhcp6_parser.cc"
+#line 1947 "dhcp6_parser.cc"
     break;
 
   case 264: // lfc_interval: "lfc-interval" ":" "integer"
-#line 1053 "dhcp6_parser.yy"
+#line 1058 "dhcp6_parser.yy"
                                          {
     ctx.unique("lfc-interval", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lfc-interval", n);
 }
-#line 1952 "dhcp6_parser.cc"
+#line 1957 "dhcp6_parser.cc"
     break;
 
   case 265: // readonly: "readonly" ":" "boolean"
-#line 1059 "dhcp6_parser.yy"
+#line 1064 "dhcp6_parser.yy"
                                  {
     ctx.unique("readonly", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("readonly", n);
 }
-#line 1962 "dhcp6_parser.cc"
+#line 1967 "dhcp6_parser.cc"
     break;
 
   case 266: // connect_timeout: "connect-timeout" ":" "integer"
-#line 1065 "dhcp6_parser.yy"
+#line 1070 "dhcp6_parser.yy"
                                                {
     ctx.unique("connect-timeout", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("connect-timeout", n);
 }
-#line 1972 "dhcp6_parser.cc"
+#line 1977 "dhcp6_parser.cc"
     break;
 
   case 267: // read_timeout: "read-timeout" ":" "integer"
-#line 1071 "dhcp6_parser.yy"
+#line 1076 "dhcp6_parser.yy"
                                          {
     ctx.unique("read-timeout", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("read-timeout", n);
 }
-#line 1982 "dhcp6_parser.cc"
+#line 1987 "dhcp6_parser.cc"
     break;
 
   case 268: // write_timeout: "write-timeout" ":" "integer"
-#line 1077 "dhcp6_parser.yy"
+#line 1082 "dhcp6_parser.yy"
                                            {
     ctx.unique("write-timeout", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("write-timeout", n);
 }
-#line 1992 "dhcp6_parser.cc"
+#line 1997 "dhcp6_parser.cc"
     break;
 
   case 269: // tcp_user_timeout: "tcp-user-timeout" ":" "integer"
-#line 1083 "dhcp6_parser.yy"
+#line 1088 "dhcp6_parser.yy"
                                                  {
     ctx.unique("tcp-user-timeout", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("tcp-user-timeout", n);
 }
-#line 2002 "dhcp6_parser.cc"
+#line 2007 "dhcp6_parser.cc"
     break;
 
   case 270: // reconnect_wait_time: "reconnect-wait-time" ":" "integer"
-#line 1090 "dhcp6_parser.yy"
+#line 1095 "dhcp6_parser.yy"
                                                        {
     ctx.unique("reconnect-wait-time", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reconnect-wait-time", n);
 }
-#line 2012 "dhcp6_parser.cc"
+#line 2017 "dhcp6_parser.cc"
     break;
 
   case 271: // $@42: %empty
-#line 1096 "dhcp6_parser.yy"
+#line 1101 "dhcp6_parser.yy"
                  {
     ctx.unique("on-fail", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.DATABASE_ON_FAIL);
 }
-#line 2021 "dhcp6_parser.cc"
+#line 2026 "dhcp6_parser.cc"
     break;
 
   case 272: // on_fail: "on-fail" $@42 ":" on_fail_mode
-#line 1099 "dhcp6_parser.yy"
+#line 1104 "dhcp6_parser.yy"
                      {
     ctx.stack_.back()->set("on-fail", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 2030 "dhcp6_parser.cc"
+#line 2035 "dhcp6_parser.cc"
     break;
 
   case 273: // on_fail_mode: "stop-retry-exit"
-#line 1104 "dhcp6_parser.yy"
+#line 1109 "dhcp6_parser.yy"
                               { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("stop-retry-exit", ctx.loc2pos(yystack_[0].location))); }
-#line 2036 "dhcp6_parser.cc"
+#line 2041 "dhcp6_parser.cc"
     break;
 
   case 274: // on_fail_mode: "serve-retry-exit"
-#line 1105 "dhcp6_parser.yy"
+#line 1110 "dhcp6_parser.yy"
                                { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-exit", ctx.loc2pos(yystack_[0].location))); }
-#line 2042 "dhcp6_parser.cc"
+#line 2047 "dhcp6_parser.cc"
     break;
 
   case 275: // on_fail_mode: "serve-retry-continue"
-#line 1106 "dhcp6_parser.yy"
+#line 1111 "dhcp6_parser.yy"
                                    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-continue", ctx.loc2pos(yystack_[0].location))); }
-#line 2048 "dhcp6_parser.cc"
+#line 2053 "dhcp6_parser.cc"
     break;
 
   case 276: // max_row_errors: "max-row-errors" ":" "integer"
-#line 1109 "dhcp6_parser.yy"
+#line 1114 "dhcp6_parser.yy"
                                              {
     ctx.unique("max-row-errors", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-row-errors", n);
 }
-#line 2058 "dhcp6_parser.cc"
+#line 2063 "dhcp6_parser.cc"
     break;
 
   case 277: // max_reconnect_tries: "max-reconnect-tries" ":" "integer"
-#line 1115 "dhcp6_parser.yy"
+#line 1120 "dhcp6_parser.yy"
                                                        {
     ctx.unique("max-reconnect-tries", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reconnect-tries", n);
 }
-#line 2068 "dhcp6_parser.cc"
+#line 2073 "dhcp6_parser.cc"
     break;
 
   case 278: // $@43: %empty
-#line 1121 "dhcp6_parser.yy"
+#line 1126 "dhcp6_parser.yy"
                            {
     ctx.unique("trust-anchor", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2077 "dhcp6_parser.cc"
+#line 2082 "dhcp6_parser.cc"
     break;
 
   case 279: // trust_anchor: "trust-anchor" $@43 ":" "constant string"
-#line 1124 "dhcp6_parser.yy"
+#line 1129 "dhcp6_parser.yy"
                {
     ElementPtr ca(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("trust-anchor", ca);
     ctx.leave();
 }
-#line 2087 "dhcp6_parser.cc"
+#line 2092 "dhcp6_parser.cc"
     break;
 
   case 280: // $@44: %empty
-#line 1130 "dhcp6_parser.yy"
+#line 1135 "dhcp6_parser.yy"
                      {
     ctx.unique("cert-file", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2096 "dhcp6_parser.cc"
+#line 2101 "dhcp6_parser.cc"
     break;
 
   case 281: // cert_file: "cert-file" $@44 ":" "constant string"
-#line 1133 "dhcp6_parser.yy"
+#line 1138 "dhcp6_parser.yy"
                {
     ElementPtr cert(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("cert-file", cert);
     ctx.leave();
 }
-#line 2106 "dhcp6_parser.cc"
+#line 2111 "dhcp6_parser.cc"
     break;
 
   case 282: // $@45: %empty
-#line 1139 "dhcp6_parser.yy"
+#line 1144 "dhcp6_parser.yy"
                    {
     ctx.unique("key-file", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2115 "dhcp6_parser.cc"
+#line 2120 "dhcp6_parser.cc"
     break;
 
   case 283: // key_file: "key-file" $@45 ":" "constant string"
-#line 1142 "dhcp6_parser.yy"
+#line 1147 "dhcp6_parser.yy"
                {
     ElementPtr key(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("key-file", key);
     ctx.leave();
 }
-#line 2125 "dhcp6_parser.cc"
+#line 2130 "dhcp6_parser.cc"
     break;
 
   case 284: // $@46: %empty
-#line 1148 "dhcp6_parser.yy"
+#line 1153 "dhcp6_parser.yy"
                          {
     ctx.unique("cipher-list", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2134 "dhcp6_parser.cc"
+#line 2139 "dhcp6_parser.cc"
     break;
 
   case 285: // cipher_list: "cipher-list" $@46 ":" "constant string"
-#line 1151 "dhcp6_parser.yy"
+#line 1156 "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 2144 "dhcp6_parser.cc"
+#line 2149 "dhcp6_parser.cc"
     break;
 
   case 286: // $@47: %empty
-#line 1157 "dhcp6_parser.yy"
+#line 1162 "dhcp6_parser.yy"
                              {
     ctx.unique("sanity-checks", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2152,37 +2157,37 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SANITY_CHECKS);
 }
-#line 2156 "dhcp6_parser.cc"
+#line 2161 "dhcp6_parser.cc"
     break;
 
   case 287: // sanity_checks: "sanity-checks" $@47 ":" "{" sanity_checks_params "}"
-#line 1163 "dhcp6_parser.yy"
+#line 1168 "dhcp6_parser.yy"
                                                            {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2165 "dhcp6_parser.cc"
+#line 2170 "dhcp6_parser.cc"
     break;
 
   case 290: // sanity_checks_params: sanity_checks_params ","
-#line 1170 "dhcp6_parser.yy"
+#line 1175 "dhcp6_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 2173 "dhcp6_parser.cc"
+#line 2178 "dhcp6_parser.cc"
     break;
 
   case 293: // $@48: %empty
-#line 1179 "dhcp6_parser.yy"
+#line 1184 "dhcp6_parser.yy"
                            {
     ctx.unique("lease-checks", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2182 "dhcp6_parser.cc"
+#line 2187 "dhcp6_parser.cc"
     break;
 
   case 294: // lease_checks: "lease-checks" $@48 ":" "constant string"
-#line 1182 "dhcp6_parser.yy"
+#line 1187 "dhcp6_parser.yy"
                {
 
     if ( (string(yystack_[0].value.as < std::string > ()) == "none") ||
@@ -2198,20 +2203,20 @@ namespace isc { namespace dhcp {
               ", supported values are: none, warn, fix, fix-del, del");
     }
 }
-#line 2202 "dhcp6_parser.cc"
+#line 2207 "dhcp6_parser.cc"
     break;
 
   case 295: // $@49: %empty
-#line 1198 "dhcp6_parser.yy"
+#line 1203 "dhcp6_parser.yy"
                                            {
     ctx.unique("extended-info-checks", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2211 "dhcp6_parser.cc"
+#line 2216 "dhcp6_parser.cc"
     break;
 
   case 296: // extended_info_checks: "extended-info-checks" $@49 ":" "constant string"
-#line 1201 "dhcp6_parser.yy"
+#line 1206 "dhcp6_parser.yy"
                {
 
     if ( (string(yystack_[0].value.as < std::string > ()) == "none") ||
@@ -2226,11 +2231,11 @@ namespace isc { namespace dhcp {
               ", supported values are: none, fix, strict, pedantic");
     }
 }
-#line 2230 "dhcp6_parser.cc"
+#line 2235 "dhcp6_parser.cc"
     break;
 
   case 297: // $@50: %empty
-#line 1216 "dhcp6_parser.yy"
+#line 1221 "dhcp6_parser.yy"
                          {
     ctx.unique("mac-sources", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2238,46 +2243,46 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.MAC_SOURCES);
 }
-#line 2242 "dhcp6_parser.cc"
+#line 2247 "dhcp6_parser.cc"
     break;
 
   case 298: // mac_sources: "mac-sources" $@50 ":" "[" mac_sources_list "]"
-#line 1222 "dhcp6_parser.yy"
+#line 1227 "dhcp6_parser.yy"
                                                          {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2251 "dhcp6_parser.cc"
+#line 2256 "dhcp6_parser.cc"
     break;
 
   case 301: // mac_sources_list: mac_sources_list ","
-#line 1229 "dhcp6_parser.yy"
+#line 1234 "dhcp6_parser.yy"
                                          {
                     ctx.warnAboutExtraCommas(yystack_[0].location);
                     }
-#line 2259 "dhcp6_parser.cc"
+#line 2264 "dhcp6_parser.cc"
     break;
 
   case 304: // duid_id: "duid"
-#line 1238 "dhcp6_parser.yy"
+#line 1243 "dhcp6_parser.yy"
               {
     ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
 }
-#line 2268 "dhcp6_parser.cc"
+#line 2273 "dhcp6_parser.cc"
     break;
 
   case 305: // string_id: "constant string"
-#line 1243 "dhcp6_parser.yy"
+#line 1248 "dhcp6_parser.yy"
                   {
     ElementPtr duid(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
 }
-#line 2277 "dhcp6_parser.cc"
+#line 2282 "dhcp6_parser.cc"
     break;
 
   case 306: // $@51: %empty
-#line 1248 "dhcp6_parser.yy"
+#line 1253 "dhcp6_parser.yy"
                                                            {
     ctx.unique("host-reservation-identifiers", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2285,46 +2290,46 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS);
 }
-#line 2289 "dhcp6_parser.cc"
+#line 2294 "dhcp6_parser.cc"
     break;
 
   case 307: // host_reservation_identifiers: "host-reservation-identifiers" $@51 ":" "[" host_reservation_identifiers_list "]"
-#line 1254 "dhcp6_parser.yy"
+#line 1259 "dhcp6_parser.yy"
                                                                           {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2298 "dhcp6_parser.cc"
+#line 2303 "dhcp6_parser.cc"
     break;
 
   case 310: // host_reservation_identifiers_list: host_reservation_identifiers_list ","
-#line 1261 "dhcp6_parser.yy"
+#line 1266 "dhcp6_parser.yy"
                                               {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 2306 "dhcp6_parser.cc"
+#line 2311 "dhcp6_parser.cc"
     break;
 
   case 314: // hw_address_id: "hw-address"
-#line 1271 "dhcp6_parser.yy"
+#line 1276 "dhcp6_parser.yy"
                           {
     ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(hwaddr);
 }
-#line 2315 "dhcp6_parser.cc"
+#line 2320 "dhcp6_parser.cc"
     break;
 
   case 315: // flex_id: "flex-id"
-#line 1276 "dhcp6_parser.yy"
+#line 1281 "dhcp6_parser.yy"
                  {
     ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(flex_id);
 }
-#line 2324 "dhcp6_parser.cc"
+#line 2329 "dhcp6_parser.cc"
     break;
 
   case 316: // $@52: %empty
-#line 1283 "dhcp6_parser.yy"
+#line 1288 "dhcp6_parser.yy"
                                                {
     ctx.unique("relay-supplied-options", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2332,20 +2337,20 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2336 "dhcp6_parser.cc"
+#line 2341 "dhcp6_parser.cc"
     break;
 
   case 317: // relay_supplied_options: "relay-supplied-options" $@52 ":" "[" list_content "]"
-#line 1289 "dhcp6_parser.yy"
+#line 1294 "dhcp6_parser.yy"
                                                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2345 "dhcp6_parser.cc"
+#line 2350 "dhcp6_parser.cc"
     break;
 
   case 318: // $@53: %empty
-#line 1296 "dhcp6_parser.yy"
+#line 1301 "dhcp6_parser.yy"
                                            {
     ctx.unique("multi-threading", ctx.loc2pos(yystack_[0].location));
     ElementPtr mt(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2353,60 +2358,60 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(mt);
     ctx.enter(ctx.DHCP_MULTI_THREADING);
 }
-#line 2357 "dhcp6_parser.cc"
+#line 2362 "dhcp6_parser.cc"
     break;
 
   case 319: // dhcp_multi_threading: "multi-threading" $@53 ":" "{" multi_threading_params "}"
-#line 1302 "dhcp6_parser.yy"
+#line 1307 "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 2368 "dhcp6_parser.cc"
+#line 2373 "dhcp6_parser.cc"
     break;
 
   case 322: // multi_threading_params: multi_threading_params ","
-#line 1311 "dhcp6_parser.yy"
+#line 1316 "dhcp6_parser.yy"
                                                      {
                           ctx.warnAboutExtraCommas(yystack_[0].location);
                           }
-#line 2376 "dhcp6_parser.cc"
+#line 2381 "dhcp6_parser.cc"
     break;
 
   case 329: // enable_multi_threading: "enable-multi-threading" ":" "boolean"
-#line 1324 "dhcp6_parser.yy"
+#line 1329 "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 2386 "dhcp6_parser.cc"
+#line 2391 "dhcp6_parser.cc"
     break;
 
   case 330: // thread_pool_size: "thread-pool-size" ":" "integer"
-#line 1330 "dhcp6_parser.yy"
+#line 1335 "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 2396 "dhcp6_parser.cc"
+#line 2401 "dhcp6_parser.cc"
     break;
 
   case 331: // packet_queue_size: "packet-queue-size" ":" "integer"
-#line 1336 "dhcp6_parser.yy"
+#line 1341 "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 2406 "dhcp6_parser.cc"
+#line 2411 "dhcp6_parser.cc"
     break;
 
   case 332: // $@54: %empty
-#line 1342 "dhcp6_parser.yy"
+#line 1347 "dhcp6_parser.yy"
                                  {
     ctx.unique("hooks-libraries", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2414,113 +2419,113 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOOKS_LIBRARIES);
 }
-#line 2418 "dhcp6_parser.cc"
+#line 2423 "dhcp6_parser.cc"
     break;
 
   case 333: // hooks_libraries: "hooks-libraries" $@54 ":" "[" hooks_libraries_list "]"
-#line 1348 "dhcp6_parser.yy"
+#line 1353 "dhcp6_parser.yy"
                                                              {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2427 "dhcp6_parser.cc"
+#line 2432 "dhcp6_parser.cc"
     break;
 
   case 338: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list ","
-#line 1359 "dhcp6_parser.yy"
+#line 1364 "dhcp6_parser.yy"
                                            {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 2435 "dhcp6_parser.cc"
+#line 2440 "dhcp6_parser.cc"
     break;
 
   case 339: // $@55: %empty
-#line 1364 "dhcp6_parser.yy"
+#line 1369 "dhcp6_parser.yy"
                               {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2445 "dhcp6_parser.cc"
+#line 2450 "dhcp6_parser.cc"
     break;
 
   case 340: // hooks_library: "{" $@55 hooks_params "}"
-#line 1368 "dhcp6_parser.yy"
+#line 1373 "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 2455 "dhcp6_parser.cc"
+#line 2460 "dhcp6_parser.cc"
     break;
 
   case 341: // $@56: %empty
-#line 1374 "dhcp6_parser.yy"
+#line 1379 "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 2465 "dhcp6_parser.cc"
+#line 2470 "dhcp6_parser.cc"
     break;
 
   case 342: // sub_hooks_library: "{" $@56 hooks_params "}"
-#line 1378 "dhcp6_parser.yy"
+#line 1383 "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 2475 "dhcp6_parser.cc"
+#line 2480 "dhcp6_parser.cc"
     break;
 
   case 345: // hooks_params: hooks_params ","
-#line 1386 "dhcp6_parser.yy"
+#line 1391 "dhcp6_parser.yy"
                                  {
                 ctx.warnAboutExtraCommas(yystack_[0].location);
                 }
-#line 2483 "dhcp6_parser.cc"
+#line 2488 "dhcp6_parser.cc"
     break;
 
   case 349: // $@57: %empty
-#line 1396 "dhcp6_parser.yy"
+#line 1401 "dhcp6_parser.yy"
                  {
     ctx.unique("library", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2492 "dhcp6_parser.cc"
+#line 2497 "dhcp6_parser.cc"
     break;
 
   case 350: // library: "library" $@57 ":" "constant string"
-#line 1399 "dhcp6_parser.yy"
+#line 1404 "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 2502 "dhcp6_parser.cc"
+#line 2507 "dhcp6_parser.cc"
     break;
 
   case 351: // $@58: %empty
-#line 1405 "dhcp6_parser.yy"
+#line 1410 "dhcp6_parser.yy"
                        {
     ctx.unique("parameters", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2511 "dhcp6_parser.cc"
+#line 2516 "dhcp6_parser.cc"
     break;
 
   case 352: // parameters: "parameters" $@58 ":" map_value
-#line 1408 "dhcp6_parser.yy"
+#line 1413 "dhcp6_parser.yy"
                   {
     ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 2520 "dhcp6_parser.cc"
+#line 2525 "dhcp6_parser.cc"
     break;
 
   case 353: // $@59: %empty
-#line 1414 "dhcp6_parser.yy"
+#line 1419 "dhcp6_parser.yy"
                                                      {
     ctx.unique("expired-leases-processing", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2528,89 +2533,89 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.EXPIRED_LEASES_PROCESSING);
 }
-#line 2532 "dhcp6_parser.cc"
+#line 2537 "dhcp6_parser.cc"
     break;
 
   case 354: // expired_leases_processing: "expired-leases-processing" $@59 ":" "{" expired_leases_params "}"
-#line 1420 "dhcp6_parser.yy"
+#line 1425 "dhcp6_parser.yy"
                                                             {
     // No expired lease parameter is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2542 "dhcp6_parser.cc"
+#line 2547 "dhcp6_parser.cc"
     break;
 
   case 357: // expired_leases_params: expired_leases_params ","
-#line 1428 "dhcp6_parser.yy"
+#line 1433 "dhcp6_parser.yy"
                                                    {
                          ctx.warnAboutExtraCommas(yystack_[0].location);
                          }
-#line 2550 "dhcp6_parser.cc"
+#line 2555 "dhcp6_parser.cc"
     break;
 
   case 364: // reclaim_timer_wait_time: "reclaim-timer-wait-time" ":" "integer"
-#line 1441 "dhcp6_parser.yy"
+#line 1446 "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 2560 "dhcp6_parser.cc"
+#line 2565 "dhcp6_parser.cc"
     break;
 
   case 365: // flush_reclaimed_timer_wait_time: "flush-reclaimed-timer-wait-time" ":" "integer"
-#line 1447 "dhcp6_parser.yy"
+#line 1452 "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 2570 "dhcp6_parser.cc"
+#line 2575 "dhcp6_parser.cc"
     break;
 
   case 366: // hold_reclaimed_time: "hold-reclaimed-time" ":" "integer"
-#line 1453 "dhcp6_parser.yy"
+#line 1458 "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 2580 "dhcp6_parser.cc"
+#line 2585 "dhcp6_parser.cc"
     break;
 
   case 367: // max_reclaim_leases: "max-reclaim-leases" ":" "integer"
-#line 1459 "dhcp6_parser.yy"
+#line 1464 "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 2590 "dhcp6_parser.cc"
+#line 2595 "dhcp6_parser.cc"
     break;
 
   case 368: // max_reclaim_time: "max-reclaim-time" ":" "integer"
-#line 1465 "dhcp6_parser.yy"
+#line 1470 "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 2600 "dhcp6_parser.cc"
+#line 2605 "dhcp6_parser.cc"
     break;
 
   case 369: // unwarned_reclaim_cycles: "unwarned-reclaim-cycles" ":" "integer"
-#line 1471 "dhcp6_parser.yy"
+#line 1476 "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 2610 "dhcp6_parser.cc"
+#line 2615 "dhcp6_parser.cc"
     break;
 
   case 370: // $@60: %empty
-#line 1480 "dhcp6_parser.yy"
+#line 1485 "dhcp6_parser.yy"
                       {
     ctx.unique("subnet6", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2618,38 +2623,38 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.SUBNET6);
 }
-#line 2622 "dhcp6_parser.cc"
+#line 2627 "dhcp6_parser.cc"
     break;
 
   case 371: // subnet6_list: "subnet6" $@60 ":" "[" subnet6_list_content "]"
-#line 1486 "dhcp6_parser.yy"
+#line 1491 "dhcp6_parser.yy"
                                                              {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2631 "dhcp6_parser.cc"
+#line 2636 "dhcp6_parser.cc"
     break;
 
   case 376: // not_empty_subnet6_list: not_empty_subnet6_list ","
-#line 1500 "dhcp6_parser.yy"
+#line 1505 "dhcp6_parser.yy"
                                                      {
                           ctx.warnAboutExtraCommas(yystack_[0].location);
                           }
-#line 2639 "dhcp6_parser.cc"
+#line 2644 "dhcp6_parser.cc"
     break;
 
   case 377: // $@61: %empty
-#line 1509 "dhcp6_parser.yy"
+#line 1514 "dhcp6_parser.yy"
                         {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2649 "dhcp6_parser.cc"
+#line 2654 "dhcp6_parser.cc"
     break;
 
   case 378: // subnet6: "{" $@61 subnet6_params "}"
-#line 1513 "dhcp6_parser.yy"
+#line 1518 "dhcp6_parser.yy"
                                 {
     // Once we reached this place, the subnet parsing is now complete.
     // If we want to, we can implement default values here.
@@ -2671,115 +2676,115 @@ namespace isc { namespace dhcp {
     ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2675 "dhcp6_parser.cc"
+#line 2680 "dhcp6_parser.cc"
     break;
 
   case 379: // $@62: %empty
-#line 1535 "dhcp6_parser.yy"
+#line 1540 "dhcp6_parser.yy"
                             {
     // Parse the subnet6 list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2685 "dhcp6_parser.cc"
+#line 2690 "dhcp6_parser.cc"
     break;
 
   case 380: // sub_subnet6: "{" $@62 subnet6_params "}"
-#line 1539 "dhcp6_parser.yy"
+#line 1544 "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 2695 "dhcp6_parser.cc"
+#line 2700 "dhcp6_parser.cc"
     break;
 
   case 383: // subnet6_params: subnet6_params ","
-#line 1548 "dhcp6_parser.yy"
+#line 1553 "dhcp6_parser.yy"
                                      {
                   ctx.warnAboutExtraCommas(yystack_[0].location);
                   }
-#line 2703 "dhcp6_parser.cc"
+#line 2708 "dhcp6_parser.cc"
     break;
 
   case 430: // $@63: %empty
-#line 1602 "dhcp6_parser.yy"
+#line 1607 "dhcp6_parser.yy"
                {
     ctx.unique("subnet", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2712 "dhcp6_parser.cc"
+#line 2717 "dhcp6_parser.cc"
     break;
 
   case 431: // subnet: "subnet" $@63 ":" "constant string"
-#line 1605 "dhcp6_parser.yy"
+#line 1610 "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 2722 "dhcp6_parser.cc"
+#line 2727 "dhcp6_parser.cc"
     break;
 
   case 432: // $@64: %empty
-#line 1611 "dhcp6_parser.yy"
+#line 1616 "dhcp6_parser.yy"
                      {
     ctx.unique("interface", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2731 "dhcp6_parser.cc"
+#line 2736 "dhcp6_parser.cc"
     break;
 
   case 433: // interface: "interface" $@64 ":" "constant string"
-#line 1614 "dhcp6_parser.yy"
+#line 1619 "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 2741 "dhcp6_parser.cc"
+#line 2746 "dhcp6_parser.cc"
     break;
 
   case 434: // $@65: %empty
-#line 1620 "dhcp6_parser.yy"
+#line 1625 "dhcp6_parser.yy"
                            {
     ctx.unique("interface-id", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2750 "dhcp6_parser.cc"
+#line 2755 "dhcp6_parser.cc"
     break;
 
   case 435: // interface_id: "interface-id" $@65 ":" "constant string"
-#line 1623 "dhcp6_parser.yy"
+#line 1628 "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 2760 "dhcp6_parser.cc"
+#line 2765 "dhcp6_parser.cc"
     break;
 
   case 436: // $@66: %empty
-#line 1629 "dhcp6_parser.yy"
+#line 1634 "dhcp6_parser.yy"
                            {
     ctx.unique("client-class", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2769 "dhcp6_parser.cc"
+#line 2774 "dhcp6_parser.cc"
     break;
 
   case 437: // client_class: "client-class" $@66 ":" "constant string"
-#line 1632 "dhcp6_parser.yy"
+#line 1637 "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 2779 "dhcp6_parser.cc"
+#line 2784 "dhcp6_parser.cc"
     break;
 
   case 438: // $@67: %empty
-#line 1638 "dhcp6_parser.yy"
+#line 1643 "dhcp6_parser.yy"
                                                {
     ctx.unique("require-client-classes", ctx.loc2pos(yystack_[0].location));
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2787,112 +2792,112 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2791 "dhcp6_parser.cc"
+#line 2796 "dhcp6_parser.cc"
     break;
 
   case 439: // require_client_classes: "require-client-classes" $@67 ":" list_strings
-#line 1644 "dhcp6_parser.yy"
+#line 1649 "dhcp6_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2800 "dhcp6_parser.cc"
+#line 2805 "dhcp6_parser.cc"
     break;
 
   case 440: // reservations_global: "reservations-global" ":" "boolean"
-#line 1649 "dhcp6_parser.yy"
+#line 1654 "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 2810 "dhcp6_parser.cc"
+#line 2815 "dhcp6_parser.cc"
     break;
 
   case 441: // reservations_in_subnet: "reservations-in-subnet" ":" "boolean"
-#line 1655 "dhcp6_parser.yy"
+#line 1660 "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 2820 "dhcp6_parser.cc"
+#line 2825 "dhcp6_parser.cc"
     break;
 
   case 442: // reservations_out_of_pool: "reservations-out-of-pool" ":" "boolean"
-#line 1661 "dhcp6_parser.yy"
+#line 1666 "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 2830 "dhcp6_parser.cc"
+#line 2835 "dhcp6_parser.cc"
     break;
 
   case 443: // $@68: %empty
-#line 1667 "dhcp6_parser.yy"
+#line 1672 "dhcp6_parser.yy"
                                    {
     ctx.unique("reservation-mode", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.RESERVATION_MODE);
 }
-#line 2839 "dhcp6_parser.cc"
+#line 2844 "dhcp6_parser.cc"
     break;
 
   case 444: // reservation_mode: "reservation-mode" $@68 ":" hr_mode
-#line 1670 "dhcp6_parser.yy"
+#line 1675 "dhcp6_parser.yy"
                 {
     ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 2848 "dhcp6_parser.cc"
+#line 2853 "dhcp6_parser.cc"
     break;
 
   case 445: // hr_mode: "disabled"
-#line 1675 "dhcp6_parser.yy"
+#line 1680 "dhcp6_parser.yy"
                   { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); }
-#line 2854 "dhcp6_parser.cc"
+#line 2859 "dhcp6_parser.cc"
     break;
 
   case 446: // hr_mode: "out-of-pool"
-#line 1676 "dhcp6_parser.yy"
+#line 1681 "dhcp6_parser.yy"
                      { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); }
-#line 2860 "dhcp6_parser.cc"
+#line 2865 "dhcp6_parser.cc"
     break;
 
   case 447: // hr_mode: "global"
-#line 1677 "dhcp6_parser.yy"
+#line 1682 "dhcp6_parser.yy"
                 { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("global", ctx.loc2pos(yystack_[0].location))); }
-#line 2866 "dhcp6_parser.cc"
+#line 2871 "dhcp6_parser.cc"
     break;
 
   case 448: // hr_mode: "all"
-#line 1678 "dhcp6_parser.yy"
+#line 1683 "dhcp6_parser.yy"
              { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); }
-#line 2872 "dhcp6_parser.cc"
+#line 2877 "dhcp6_parser.cc"
     break;
 
   case 449: // id: "id" ":" "integer"
-#line 1681 "dhcp6_parser.yy"
+#line 1686 "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 2882 "dhcp6_parser.cc"
+#line 2887 "dhcp6_parser.cc"
     break;
 
   case 450: // rapid_commit: "rapid-commit" ":" "boolean"
-#line 1687 "dhcp6_parser.yy"
+#line 1692 "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 2892 "dhcp6_parser.cc"
+#line 2897 "dhcp6_parser.cc"
     break;
 
   case 451: // $@69: %empty
-#line 1695 "dhcp6_parser.yy"
+#line 1700 "dhcp6_parser.yy"
                                  {
     ctx.unique("shared-networks", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2900,54 +2905,54 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.SHARED_NETWORK);
 }
-#line 2904 "dhcp6_parser.cc"
+#line 2909 "dhcp6_parser.cc"
     break;
 
   case 452: // shared_networks: "shared-networks" $@69 ":" "[" shared_networks_content "]"
-#line 1701 "dhcp6_parser.yy"
+#line 1706 "dhcp6_parser.yy"
                                                                 {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2913 "dhcp6_parser.cc"
+#line 2918 "dhcp6_parser.cc"
     break;
 
   case 457: // shared_networks_list: shared_networks_list ","
-#line 1714 "dhcp6_parser.yy"
+#line 1719 "dhcp6_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 2921 "dhcp6_parser.cc"
+#line 2926 "dhcp6_parser.cc"
     break;
 
   case 458: // $@70: %empty
-#line 1719 "dhcp6_parser.yy"
+#line 1724 "dhcp6_parser.yy"
                                {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2931 "dhcp6_parser.cc"
+#line 2936 "dhcp6_parser.cc"
     break;
 
   case 459: // shared_network: "{" $@70 shared_network_params "}"
-#line 1723 "dhcp6_parser.yy"
+#line 1728 "dhcp6_parser.yy"
                                        {
     ctx.stack_.pop_back();
 }
-#line 2939 "dhcp6_parser.cc"
+#line 2944 "dhcp6_parser.cc"
     break;
 
   case 462: // shared_network_params: shared_network_params ","
-#line 1729 "dhcp6_parser.yy"
+#line 1734 "dhcp6_parser.yy"
                                                    {
                          ctx.warnAboutExtraCommas(yystack_[0].location);
                          }
-#line 2947 "dhcp6_parser.cc"
+#line 2952 "dhcp6_parser.cc"
     break;
 
   case 506: // $@71: %empty
-#line 1783 "dhcp6_parser.yy"
+#line 1788 "dhcp6_parser.yy"
                             {
     ctx.unique("option-def", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2955,55 +2960,55 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DEF);
 }
-#line 2959 "dhcp6_parser.cc"
+#line 2964 "dhcp6_parser.cc"
     break;
 
   case 507: // option_def_list: "option-def" $@71 ":" "[" option_def_list_content "]"
-#line 1789 "dhcp6_parser.yy"
+#line 1794 "dhcp6_parser.yy"
                                                                 {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2968 "dhcp6_parser.cc"
+#line 2973 "dhcp6_parser.cc"
     break;
 
   case 508: // $@72: %empty
-#line 1797 "dhcp6_parser.yy"
+#line 1802 "dhcp6_parser.yy"
                                     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2977 "dhcp6_parser.cc"
+#line 2982 "dhcp6_parser.cc"
     break;
 
   case 509: // sub_option_def_list: "{" $@72 option_def_list "}"
-#line 1800 "dhcp6_parser.yy"
+#line 1805 "dhcp6_parser.yy"
                                  {
     // parsing completed
 }
-#line 2985 "dhcp6_parser.cc"
+#line 2990 "dhcp6_parser.cc"
     break;
 
   case 514: // not_empty_option_def_list: not_empty_option_def_list ","
-#line 1812 "dhcp6_parser.yy"
+#line 1817 "dhcp6_parser.yy"
                                                            {
                              ctx.warnAboutExtraCommas(yystack_[0].location);
                              }
-#line 2993 "dhcp6_parser.cc"
+#line 2998 "dhcp6_parser.cc"
     break;
 
   case 515: // $@73: %empty
-#line 1819 "dhcp6_parser.yy"
+#line 1824 "dhcp6_parser.yy"
                                  {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3003 "dhcp6_parser.cc"
+#line 3008 "dhcp6_parser.cc"
     break;
 
   case 516: // option_def_entry: "{" $@73 option_def_params "}"
-#line 1823 "dhcp6_parser.yy"
+#line 1828 "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));
@@ -3011,21 +3016,21 @@ namespace isc { namespace dhcp {
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 3015 "dhcp6_parser.cc"
+#line 3020 "dhcp6_parser.cc"
     break;
 
   case 517: // $@74: %empty
-#line 1834 "dhcp6_parser.yy"
+#line 1839 "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 3025 "dhcp6_parser.cc"
+#line 3030 "dhcp6_parser.cc"
     break;
 
   case 518: // sub_option_def: "{" $@74 option_def_params "}"
-#line 1838 "dhcp6_parser.yy"
+#line 1843 "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));
@@ -3033,115 +3038,115 @@ namespace isc { namespace dhcp {
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 3037 "dhcp6_parser.cc"
+#line 3042 "dhcp6_parser.cc"
     break;
 
   case 523: // not_empty_option_def_params: not_empty_option_def_params ","
-#line 1854 "dhcp6_parser.yy"
+#line 1859 "dhcp6_parser.yy"
                                                                {
                                ctx.warnAboutExtraCommas(yystack_[0].location);
                                }
-#line 3045 "dhcp6_parser.cc"
+#line 3050 "dhcp6_parser.cc"
     break;
 
   case 535: // code: "code" ":" "integer"
-#line 1873 "dhcp6_parser.yy"
+#line 1878 "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 3055 "dhcp6_parser.cc"
+#line 3060 "dhcp6_parser.cc"
     break;
 
   case 537: // $@75: %empty
-#line 1881 "dhcp6_parser.yy"
+#line 1886 "dhcp6_parser.yy"
                       {
     ctx.unique("type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3064 "dhcp6_parser.cc"
+#line 3069 "dhcp6_parser.cc"
     break;
 
   case 538: // option_def_type: "type" $@75 ":" "constant string"
-#line 1884 "dhcp6_parser.yy"
+#line 1889 "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 3074 "dhcp6_parser.cc"
+#line 3079 "dhcp6_parser.cc"
     break;
 
   case 539: // $@76: %empty
-#line 1890 "dhcp6_parser.yy"
+#line 1895 "dhcp6_parser.yy"
                                       {
     ctx.unique("record-types", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3083 "dhcp6_parser.cc"
+#line 3088 "dhcp6_parser.cc"
     break;
 
   case 540: // option_def_record_types: "record-types" $@76 ":" "constant string"
-#line 1893 "dhcp6_parser.yy"
+#line 1898 "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 3093 "dhcp6_parser.cc"
+#line 3098 "dhcp6_parser.cc"
     break;
 
   case 541: // $@77: %empty
-#line 1899 "dhcp6_parser.yy"
+#line 1904 "dhcp6_parser.yy"
              {
     ctx.unique("space", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3102 "dhcp6_parser.cc"
+#line 3107 "dhcp6_parser.cc"
     break;
 
   case 542: // space: "space" $@77 ":" "constant string"
-#line 1902 "dhcp6_parser.yy"
+#line 1907 "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 3112 "dhcp6_parser.cc"
+#line 3117 "dhcp6_parser.cc"
     break;
 
   case 544: // $@78: %empty
-#line 1910 "dhcp6_parser.yy"
+#line 1915 "dhcp6_parser.yy"
                                     {
     ctx.unique("encapsulate", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3121 "dhcp6_parser.cc"
+#line 3126 "dhcp6_parser.cc"
     break;
 
   case 545: // option_def_encapsulate: "encapsulate" $@78 ":" "constant string"
-#line 1913 "dhcp6_parser.yy"
+#line 1918 "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 3131 "dhcp6_parser.cc"
+#line 3136 "dhcp6_parser.cc"
     break;
 
   case 546: // option_def_array: "array" ":" "boolean"
-#line 1919 "dhcp6_parser.yy"
+#line 1924 "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 3141 "dhcp6_parser.cc"
+#line 3146 "dhcp6_parser.cc"
     break;
 
   case 547: // $@79: %empty
-#line 1929 "dhcp6_parser.yy"
+#line 1934 "dhcp6_parser.yy"
                               {
     ctx.unique("option-data", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3149,123 +3154,123 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DATA);
 }
-#line 3153 "dhcp6_parser.cc"
+#line 3158 "dhcp6_parser.cc"
     break;
 
   case 548: // option_data_list: "option-data" $@79 ":" "[" option_data_list_content "]"
-#line 1935 "dhcp6_parser.yy"
+#line 1940 "dhcp6_parser.yy"
                                                                  {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3162 "dhcp6_parser.cc"
+#line 3167 "dhcp6_parser.cc"
     break;
 
   case 553: // not_empty_option_data_list: not_empty_option_data_list ","
-#line 1950 "dhcp6_parser.yy"
+#line 1955 "dhcp6_parser.yy"
                                                              {
                               ctx.warnAboutExtraCommas(yystack_[0].location);
                               }
-#line 3170 "dhcp6_parser.cc"
+#line 3175 "dhcp6_parser.cc"
     break;
 
   case 554: // $@80: %empty
-#line 1957 "dhcp6_parser.yy"
+#line 1962 "dhcp6_parser.yy"
                                   {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3180 "dhcp6_parser.cc"
+#line 3185 "dhcp6_parser.cc"
     break;
 
   case 555: // option_data_entry: "{" $@80 option_data_params "}"
-#line 1961 "dhcp6_parser.yy"
+#line 1966 "dhcp6_parser.yy"
                                     {
     /// @todo: the code or name parameters are required.
     ctx.stack_.pop_back();
 }
-#line 3189 "dhcp6_parser.cc"
+#line 3194 "dhcp6_parser.cc"
     break;
 
   case 556: // $@81: %empty
-#line 1969 "dhcp6_parser.yy"
+#line 1974 "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 3199 "dhcp6_parser.cc"
+#line 3204 "dhcp6_parser.cc"
     break;
 
   case 557: // sub_option_data: "{" $@81 option_data_params "}"
-#line 1973 "dhcp6_parser.yy"
+#line 1978 "dhcp6_parser.yy"
                                     {
     /// @todo: the code or name parameters are required.
     // parsing completed
 }
-#line 3208 "dhcp6_parser.cc"
+#line 3213 "dhcp6_parser.cc"
     break;
 
   case 562: // not_empty_option_data_params: not_empty_option_data_params ","
-#line 1989 "dhcp6_parser.yy"
+#line 1994 "dhcp6_parser.yy"
                                          {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 3216 "dhcp6_parser.cc"
+#line 3221 "dhcp6_parser.cc"
     break;
 
   case 574: // $@82: %empty
-#line 2010 "dhcp6_parser.yy"
+#line 2015 "dhcp6_parser.yy"
                        {
     ctx.unique("data", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3225 "dhcp6_parser.cc"
+#line 3230 "dhcp6_parser.cc"
     break;
 
   case 575: // option_data_data: "data" $@82 ":" "constant string"
-#line 2013 "dhcp6_parser.yy"
+#line 2018 "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 3235 "dhcp6_parser.cc"
+#line 3240 "dhcp6_parser.cc"
     break;
 
   case 578: // option_data_csv_format: "csv-format" ":" "boolean"
-#line 2023 "dhcp6_parser.yy"
+#line 2028 "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 3245 "dhcp6_parser.cc"
+#line 3250 "dhcp6_parser.cc"
     break;
 
   case 579: // option_data_always_send: "always-send" ":" "boolean"
-#line 2029 "dhcp6_parser.yy"
+#line 2034 "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 3255 "dhcp6_parser.cc"
+#line 3260 "dhcp6_parser.cc"
     break;
 
   case 580: // option_data_never_send: "never-send" ":" "boolean"
-#line 2035 "dhcp6_parser.yy"
+#line 2040 "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 3265 "dhcp6_parser.cc"
+#line 3270 "dhcp6_parser.cc"
     break;
 
   case 581: // $@83: %empty
-#line 2044 "dhcp6_parser.yy"
+#line 2049 "dhcp6_parser.yy"
                   {
     ctx.unique("pools", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3273,103 +3278,103 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.POOLS);
 }
-#line 3277 "dhcp6_parser.cc"
+#line 3282 "dhcp6_parser.cc"
     break;
 
   case 582: // pools_list: "pools" $@83 ":" "[" pools_list_content "]"
-#line 2050 "dhcp6_parser.yy"
+#line 2055 "dhcp6_parser.yy"
                                                            {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3286 "dhcp6_parser.cc"
+#line 3291 "dhcp6_parser.cc"
     break;
 
   case 587: // not_empty_pools_list: not_empty_pools_list ","
-#line 2063 "dhcp6_parser.yy"
+#line 2068 "dhcp6_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 3294 "dhcp6_parser.cc"
+#line 3299 "dhcp6_parser.cc"
     break;
 
   case 588: // $@84: %empty
-#line 2068 "dhcp6_parser.yy"
+#line 2073 "dhcp6_parser.yy"
                                 {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3304 "dhcp6_parser.cc"
+#line 3309 "dhcp6_parser.cc"
     break;
 
   case 589: // pool_list_entry: "{" $@84 pool_params "}"
-#line 2072 "dhcp6_parser.yy"
+#line 2077 "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 3314 "dhcp6_parser.cc"
+#line 3319 "dhcp6_parser.cc"
     break;
 
   case 590: // $@85: %empty
-#line 2078 "dhcp6_parser.yy"
+#line 2083 "dhcp6_parser.yy"
                           {
     // Parse the pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3324 "dhcp6_parser.cc"
+#line 3329 "dhcp6_parser.cc"
     break;
 
   case 591: // sub_pool6: "{" $@85 pool_params "}"
-#line 2082 "dhcp6_parser.yy"
+#line 2087 "dhcp6_parser.yy"
                              {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 3334 "dhcp6_parser.cc"
+#line 3339 "dhcp6_parser.cc"
     break;
 
   case 594: // pool_params: pool_params ","
-#line 2090 "dhcp6_parser.yy"
+#line 2095 "dhcp6_parser.yy"
                                {
                ctx.warnAboutExtraCommas(yystack_[0].location);
                }
-#line 3342 "dhcp6_parser.cc"
+#line 3347 "dhcp6_parser.cc"
     break;
 
   case 602: // $@86: %empty
-#line 2104 "dhcp6_parser.yy"
+#line 2109 "dhcp6_parser.yy"
                  {
     ctx.unique("pool", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3351 "dhcp6_parser.cc"
+#line 3356 "dhcp6_parser.cc"
     break;
 
   case 603: // pool_entry: "pool" $@86 ":" "constant string"
-#line 2107 "dhcp6_parser.yy"
+#line 2112 "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 3361 "dhcp6_parser.cc"
+#line 3366 "dhcp6_parser.cc"
     break;
 
   case 604: // $@87: %empty
-#line 2113 "dhcp6_parser.yy"
+#line 2118 "dhcp6_parser.yy"
                            {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3369 "dhcp6_parser.cc"
+#line 3374 "dhcp6_parser.cc"
     break;
 
   case 605: // user_context: "user-context" $@87 ":" map_value
-#line 2115 "dhcp6_parser.yy"
+#line 2120 "dhcp6_parser.yy"
                   {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context = yystack_[0].value.as < ElementPtr > ();
@@ -3392,19 +3397,19 @@ namespace isc { namespace dhcp {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 3396 "dhcp6_parser.cc"
+#line 3401 "dhcp6_parser.cc"
     break;
 
   case 606: // $@88: %empty
-#line 2138 "dhcp6_parser.yy"
+#line 2143 "dhcp6_parser.yy"
                  {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3404 "dhcp6_parser.cc"
+#line 3409 "dhcp6_parser.cc"
     break;
 
   case 607: // comment: "comment" $@88 ":" "constant string"
-#line 2140 "dhcp6_parser.yy"
+#line 2145 "dhcp6_parser.yy"
                {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location)));
@@ -3429,11 +3434,11 @@ namespace isc { namespace dhcp {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 3433 "dhcp6_parser.cc"
+#line 3438 "dhcp6_parser.cc"
     break;
 
   case 608: // $@89: %empty
-#line 2168 "dhcp6_parser.yy"
+#line 2173 "dhcp6_parser.yy"
                         {
     ctx.unique("pd-pools", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3441,38 +3446,38 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.PD_POOLS);
 }
-#line 3445 "dhcp6_parser.cc"
+#line 3450 "dhcp6_parser.cc"
     break;
 
   case 609: // pd_pools_list: "pd-pools" $@89 ":" "[" pd_pools_list_content "]"
-#line 2174 "dhcp6_parser.yy"
+#line 2179 "dhcp6_parser.yy"
                                                               {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3454 "dhcp6_parser.cc"
+#line 3459 "dhcp6_parser.cc"
     break;
 
   case 614: // not_empty_pd_pools_list: not_empty_pd_pools_list ","
-#line 2187 "dhcp6_parser.yy"
+#line 2192 "dhcp6_parser.yy"
                                                        {
                            ctx.warnAboutExtraCommas(yystack_[0].location);
                            }
-#line 3462 "dhcp6_parser.cc"
+#line 3467 "dhcp6_parser.cc"
     break;
 
   case 615: // $@90: %empty
-#line 2192 "dhcp6_parser.yy"
+#line 2197 "dhcp6_parser.yy"
                               {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3472 "dhcp6_parser.cc"
+#line 3477 "dhcp6_parser.cc"
     break;
 
   case 616: // pd_pool_entry: "{" $@90 pd_pool_params "}"
-#line 2196 "dhcp6_parser.yy"
+#line 2201 "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));
@@ -3480,21 +3485,21 @@ namespace isc { namespace dhcp {
     ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 3484 "dhcp6_parser.cc"
+#line 3489 "dhcp6_parser.cc"
     break;
 
   case 617: // $@91: %empty
-#line 2204 "dhcp6_parser.yy"
+#line 2209 "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 3494 "dhcp6_parser.cc"
+#line 3499 "dhcp6_parser.cc"
     break;
 
   case 618: // sub_pd_pool: "{" $@91 pd_pool_params "}"
-#line 2208 "dhcp6_parser.yy"
+#line 2213 "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));
@@ -3502,87 +3507,87 @@ namespace isc { namespace dhcp {
     ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 3506 "dhcp6_parser.cc"
+#line 3511 "dhcp6_parser.cc"
     break;
 
   case 621: // pd_pool_params: pd_pool_params ","
-#line 2218 "dhcp6_parser.yy"
+#line 2223 "dhcp6_parser.yy"
                                      {
                   ctx.warnAboutExtraCommas(yystack_[0].location);
                   }
-#line 3514 "dhcp6_parser.cc"
+#line 3519 "dhcp6_parser.cc"
     break;
 
   case 633: // $@92: %empty
-#line 2236 "dhcp6_parser.yy"
+#line 2241 "dhcp6_parser.yy"
                   {
     ctx.unique("prefix", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3523 "dhcp6_parser.cc"
+#line 3528 "dhcp6_parser.cc"
     break;
 
   case 634: // pd_prefix: "prefix" $@92 ":" "constant string"
-#line 2239 "dhcp6_parser.yy"
+#line 2244 "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 3533 "dhcp6_parser.cc"
+#line 3538 "dhcp6_parser.cc"
     break;
 
   case 635: // pd_prefix_len: "prefix-len" ":" "integer"
-#line 2245 "dhcp6_parser.yy"
+#line 2250 "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 3543 "dhcp6_parser.cc"
+#line 3548 "dhcp6_parser.cc"
     break;
 
   case 636: // $@93: %empty
-#line 2251 "dhcp6_parser.yy"
+#line 2256 "dhcp6_parser.yy"
                                  {
     ctx.unique("excluded-prefix", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3552 "dhcp6_parser.cc"
+#line 3557 "dhcp6_parser.cc"
     break;
 
   case 637: // excluded_prefix: "excluded-prefix" $@93 ":" "constant string"
-#line 2254 "dhcp6_parser.yy"
+#line 2259 "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 3562 "dhcp6_parser.cc"
+#line 3567 "dhcp6_parser.cc"
     break;
 
   case 638: // excluded_prefix_len: "excluded-prefix-len" ":" "integer"
-#line 2260 "dhcp6_parser.yy"
+#line 2265 "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 3572 "dhcp6_parser.cc"
+#line 3577 "dhcp6_parser.cc"
     break;
 
   case 639: // pd_delegated_len: "delegated-len" ":" "integer"
-#line 2266 "dhcp6_parser.yy"
+#line 2271 "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 3582 "dhcp6_parser.cc"
+#line 3587 "dhcp6_parser.cc"
     break;
 
   case 640: // $@94: %empty
-#line 2275 "dhcp6_parser.yy"
+#line 2280 "dhcp6_parser.yy"
                            {
     ctx.unique("reservations", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3590,74 +3595,74 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.RESERVATIONS);
 }
-#line 3594 "dhcp6_parser.cc"
+#line 3599 "dhcp6_parser.cc"
     break;
 
   case 641: // reservations: "reservations" $@94 ":" "[" reservations_list "]"
-#line 2281 "dhcp6_parser.yy"
+#line 2286 "dhcp6_parser.yy"
                                                           {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3603 "dhcp6_parser.cc"
+#line 3608 "dhcp6_parser.cc"
     break;
 
   case 646: // not_empty_reservations_list: not_empty_reservations_list ","
-#line 2292 "dhcp6_parser.yy"
+#line 2297 "dhcp6_parser.yy"
                                                                {
                                ctx.warnAboutExtraCommas(yystack_[0].location);
                                }
-#line 3611 "dhcp6_parser.cc"
+#line 3616 "dhcp6_parser.cc"
     break;
 
   case 647: // $@95: %empty
-#line 2297 "dhcp6_parser.yy"
+#line 2302 "dhcp6_parser.yy"
                             {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3621 "dhcp6_parser.cc"
+#line 3626 "dhcp6_parser.cc"
     break;
 
   case 648: // reservation: "{" $@95 reservation_params "}"
-#line 2301 "dhcp6_parser.yy"
+#line 2306 "dhcp6_parser.yy"
                                     {
     /// @todo: an identifier parameter is required.
     ctx.stack_.pop_back();
 }
-#line 3630 "dhcp6_parser.cc"
+#line 3635 "dhcp6_parser.cc"
     break;
 
   case 649: // $@96: %empty
-#line 2306 "dhcp6_parser.yy"
+#line 2311 "dhcp6_parser.yy"
                                 {
     // Parse the reservations list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3640 "dhcp6_parser.cc"
+#line 3645 "dhcp6_parser.cc"
     break;
 
   case 650: // sub_reservation: "{" $@96 reservation_params "}"
-#line 2310 "dhcp6_parser.yy"
+#line 2315 "dhcp6_parser.yy"
                                     {
     /// @todo: an identifier parameter is required.
     // parsing completed
 }
-#line 3649 "dhcp6_parser.cc"
+#line 3654 "dhcp6_parser.cc"
     break;
 
   case 655: // not_empty_reservation_params: not_empty_reservation_params ","
-#line 2321 "dhcp6_parser.yy"
+#line 2326 "dhcp6_parser.yy"
                                          {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 3657 "dhcp6_parser.cc"
+#line 3662 "dhcp6_parser.cc"
     break;
 
   case 667: // $@97: %empty
-#line 2340 "dhcp6_parser.yy"
+#line 2345 "dhcp6_parser.yy"
                            {
     ctx.unique("ip-addresses", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3665,20 +3670,20 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3669 "dhcp6_parser.cc"
+#line 3674 "dhcp6_parser.cc"
     break;
 
   case 668: // ip_addresses: "ip-addresses" $@97 ":" list_strings
-#line 2346 "dhcp6_parser.yy"
+#line 2351 "dhcp6_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3678 "dhcp6_parser.cc"
+#line 3683 "dhcp6_parser.cc"
     break;
 
   case 669: // $@98: %empty
-#line 2351 "dhcp6_parser.yy"
+#line 2356 "dhcp6_parser.yy"
                    {
     ctx.unique("prefixes", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3686,96 +3691,96 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3690 "dhcp6_parser.cc"
+#line 3695 "dhcp6_parser.cc"
     break;
 
   case 670: // prefixes: "prefixes" $@98 ":" list_strings
-#line 2357 "dhcp6_parser.yy"
+#line 2362 "dhcp6_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3699 "dhcp6_parser.cc"
+#line 3704 "dhcp6_parser.cc"
     break;
 
   case 671: // $@99: %empty
-#line 2362 "dhcp6_parser.yy"
+#line 2367 "dhcp6_parser.yy"
            {
     ctx.unique("duid", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3708 "dhcp6_parser.cc"
+#line 3713 "dhcp6_parser.cc"
     break;
 
   case 672: // duid: "duid" $@99 ":" "constant string"
-#line 2365 "dhcp6_parser.yy"
+#line 2370 "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 3718 "dhcp6_parser.cc"
+#line 3723 "dhcp6_parser.cc"
     break;
 
   case 673: // $@100: %empty
-#line 2371 "dhcp6_parser.yy"
+#line 2376 "dhcp6_parser.yy"
                        {
     ctx.unique("hw-address", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3727 "dhcp6_parser.cc"
+#line 3732 "dhcp6_parser.cc"
     break;
 
   case 674: // hw_address: "hw-address" $@100 ":" "constant string"
-#line 2374 "dhcp6_parser.yy"
+#line 2379 "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 3737 "dhcp6_parser.cc"
+#line 3742 "dhcp6_parser.cc"
     break;
 
   case 675: // $@101: %empty
-#line 2380 "dhcp6_parser.yy"
+#line 2385 "dhcp6_parser.yy"
                    {
     ctx.unique("hostname", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3746 "dhcp6_parser.cc"
+#line 3751 "dhcp6_parser.cc"
     break;
 
   case 676: // hostname: "hostname" $@101 ":" "constant string"
-#line 2383 "dhcp6_parser.yy"
+#line 2388 "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 3756 "dhcp6_parser.cc"
+#line 3761 "dhcp6_parser.cc"
     break;
 
   case 677: // $@102: %empty
-#line 2389 "dhcp6_parser.yy"
+#line 2394 "dhcp6_parser.yy"
                        {
     ctx.unique("flex-id", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3765 "dhcp6_parser.cc"
+#line 3770 "dhcp6_parser.cc"
     break;
 
   case 678: // flex_id_value: "flex-id" $@102 ":" "constant string"
-#line 2392 "dhcp6_parser.yy"
+#line 2397 "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 3775 "dhcp6_parser.cc"
+#line 3780 "dhcp6_parser.cc"
     break;
 
   case 679: // $@103: %empty
-#line 2398 "dhcp6_parser.yy"
+#line 2403 "dhcp6_parser.yy"
                                            {
     ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location));
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3783,20 +3788,20 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3787 "dhcp6_parser.cc"
+#line 3792 "dhcp6_parser.cc"
     break;
 
   case 680: // reservation_client_classes: "client-classes" $@103 ":" list_strings
-#line 2404 "dhcp6_parser.yy"
+#line 2409 "dhcp6_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3796 "dhcp6_parser.cc"
+#line 3801 "dhcp6_parser.cc"
     break;
 
   case 681: // $@104: %empty
-#line 2412 "dhcp6_parser.yy"
+#line 2417 "dhcp6_parser.yy"
              {
     ctx.unique("relay", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -3804,39 +3809,39 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.RELAY);
 }
-#line 3808 "dhcp6_parser.cc"
+#line 3813 "dhcp6_parser.cc"
     break;
 
   case 682: // relay: "relay" $@104 ":" "{" relay_map "}"
-#line 2418 "dhcp6_parser.yy"
+#line 2423 "dhcp6_parser.yy"
                                                 {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3817 "dhcp6_parser.cc"
+#line 3822 "dhcp6_parser.cc"
     break;
 
   case 685: // $@105: %empty
-#line 2427 "dhcp6_parser.yy"
+#line 2432 "dhcp6_parser.yy"
                        {
     ctx.unique("ip-address", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3826 "dhcp6_parser.cc"
+#line 3831 "dhcp6_parser.cc"
     break;
 
   case 686: // ip_address: "ip-address" $@105 ":" "constant string"
-#line 2430 "dhcp6_parser.yy"
+#line 2435 "dhcp6_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 3836 "dhcp6_parser.cc"
+#line 3841 "dhcp6_parser.cc"
     break;
 
   case 687: // $@106: %empty
-#line 2439 "dhcp6_parser.yy"
+#line 2444 "dhcp6_parser.yy"
                                {
     ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3844,104 +3849,104 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CLIENT_CLASSES);
 }
-#line 3848 "dhcp6_parser.cc"
+#line 3853 "dhcp6_parser.cc"
     break;
 
   case 688: // client_classes: "client-classes" $@106 ":" "[" client_classes_list "]"
-#line 2445 "dhcp6_parser.yy"
+#line 2450 "dhcp6_parser.yy"
                                                             {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3857 "dhcp6_parser.cc"
+#line 3862 "dhcp6_parser.cc"
     break;
 
   case 691: // client_classes_list: client_classes_list ","
-#line 2452 "dhcp6_parser.yy"
+#line 2457 "dhcp6_parser.yy"
                                                {
                        ctx.warnAboutExtraCommas(yystack_[0].location);
                        }
-#line 3865 "dhcp6_parser.cc"
+#line 3870 "dhcp6_parser.cc"
     break;
 
   case 692: // $@107: %empty
-#line 2457 "dhcp6_parser.yy"
+#line 2462 "dhcp6_parser.yy"
                                    {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3875 "dhcp6_parser.cc"
+#line 3880 "dhcp6_parser.cc"
     break;
 
   case 693: // client_class_entry: "{" $@107 client_class_params "}"
-#line 2461 "dhcp6_parser.yy"
+#line 2466 "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 3885 "dhcp6_parser.cc"
+#line 3890 "dhcp6_parser.cc"
     break;
 
   case 698: // not_empty_client_class_params: not_empty_client_class_params ","
-#line 2473 "dhcp6_parser.yy"
+#line 2478 "dhcp6_parser.yy"
                                           {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 3893 "dhcp6_parser.cc"
+#line 3898 "dhcp6_parser.cc"
     break;
 
   case 714: // $@108: %empty
-#line 2496 "dhcp6_parser.yy"
+#line 2501 "dhcp6_parser.yy"
                         {
     ctx.unique("test", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3902 "dhcp6_parser.cc"
+#line 3907 "dhcp6_parser.cc"
     break;
 
   case 715: // client_class_test: "test" $@108 ":" "constant string"
-#line 2499 "dhcp6_parser.yy"
+#line 2504 "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 3912 "dhcp6_parser.cc"
+#line 3917 "dhcp6_parser.cc"
     break;
 
   case 716: // $@109: %empty
-#line 2505 "dhcp6_parser.yy"
+#line 2510 "dhcp6_parser.yy"
                                           {
     ctx.unique("template-test", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3921 "dhcp6_parser.cc"
+#line 3926 "dhcp6_parser.cc"
     break;
 
   case 717: // client_class_template_test: "template-test" $@109 ":" "constant string"
-#line 2508 "dhcp6_parser.yy"
+#line 2513 "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 3931 "dhcp6_parser.cc"
+#line 3936 "dhcp6_parser.cc"
     break;
 
   case 718: // only_if_required: "only-if-required" ":" "boolean"
-#line 2514 "dhcp6_parser.yy"
+#line 2519 "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 3941 "dhcp6_parser.cc"
+#line 3946 "dhcp6_parser.cc"
     break;
 
   case 719: // $@110: %empty
-#line 2523 "dhcp6_parser.yy"
+#line 2528 "dhcp6_parser.yy"
                      {
     ctx.unique("server-id", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -3949,125 +3954,125 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SERVER_ID);
 }
-#line 3953 "dhcp6_parser.cc"
+#line 3958 "dhcp6_parser.cc"
     break;
 
   case 720: // server_id: "server-id" $@110 ":" "{" server_id_params "}"
-#line 2529 "dhcp6_parser.yy"
+#line 2534 "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 3964 "dhcp6_parser.cc"
+#line 3969 "dhcp6_parser.cc"
     break;
 
   case 723: // server_id_params: server_id_params ","
-#line 2538 "dhcp6_parser.yy"
+#line 2543 "dhcp6_parser.yy"
                                          {
                     ctx.warnAboutExtraCommas(yystack_[0].location);
                     }
-#line 3972 "dhcp6_parser.cc"
+#line 3977 "dhcp6_parser.cc"
     break;
 
   case 733: // $@111: %empty
-#line 2554 "dhcp6_parser.yy"
+#line 2559 "dhcp6_parser.yy"
                      {
     ctx.unique("type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.DUID_TYPE);
 }
-#line 3981 "dhcp6_parser.cc"
+#line 3986 "dhcp6_parser.cc"
     break;
 
   case 734: // server_id_type: "type" $@111 ":" duid_type
-#line 2557 "dhcp6_parser.yy"
+#line 2562 "dhcp6_parser.yy"
                   {
     ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 3990 "dhcp6_parser.cc"
+#line 3995 "dhcp6_parser.cc"
     break;
 
   case 735: // duid_type: "LLT"
-#line 2562 "dhcp6_parser.yy"
+#line 2567 "dhcp6_parser.yy"
                { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); }
-#line 3996 "dhcp6_parser.cc"
+#line 4001 "dhcp6_parser.cc"
     break;
 
   case 736: // duid_type: "EN"
-#line 2563 "dhcp6_parser.yy"
+#line 2568 "dhcp6_parser.yy"
               { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); }
-#line 4002 "dhcp6_parser.cc"
+#line 4007 "dhcp6_parser.cc"
     break;
 
   case 737: // duid_type: "LL"
-#line 2564 "dhcp6_parser.yy"
+#line 2569 "dhcp6_parser.yy"
               { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); }
-#line 4008 "dhcp6_parser.cc"
+#line 4013 "dhcp6_parser.cc"
     break;
 
   case 738: // htype: "htype" ":" "integer"
-#line 2567 "dhcp6_parser.yy"
+#line 2572 "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 4018 "dhcp6_parser.cc"
+#line 4023 "dhcp6_parser.cc"
     break;
 
   case 739: // $@112: %empty
-#line 2573 "dhcp6_parser.yy"
+#line 2578 "dhcp6_parser.yy"
                        {
     ctx.unique("identifier", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4027 "dhcp6_parser.cc"
+#line 4032 "dhcp6_parser.cc"
     break;
 
   case 740: // identifier: "identifier" $@112 ":" "constant string"
-#line 2576 "dhcp6_parser.yy"
+#line 2581 "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 4037 "dhcp6_parser.cc"
+#line 4042 "dhcp6_parser.cc"
     break;
 
   case 741: // time: "time" ":" "integer"
-#line 2582 "dhcp6_parser.yy"
+#line 2587 "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 4047 "dhcp6_parser.cc"
+#line 4052 "dhcp6_parser.cc"
     break;
 
   case 742: // enterprise_id: "enterprise-id" ":" "integer"
-#line 2588 "dhcp6_parser.yy"
+#line 2593 "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 4057 "dhcp6_parser.cc"
+#line 4062 "dhcp6_parser.cc"
     break;
 
   case 743: // dhcp4o6_port: "dhcp4o6-port" ":" "integer"
-#line 2596 "dhcp6_parser.yy"
+#line 2601 "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 4067 "dhcp6_parser.cc"
+#line 4072 "dhcp6_parser.cc"
     break;
 
   case 744: // $@113: %empty
-#line 2604 "dhcp6_parser.yy"
+#line 2609 "dhcp6_parser.yy"
                                {
     ctx.unique("control-socket", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4075,66 +4080,66 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.CONTROL_SOCKET);
 }
-#line 4079 "dhcp6_parser.cc"
+#line 4084 "dhcp6_parser.cc"
     break;
 
   case 745: // control_socket: "control-socket" $@113 ":" "{" control_socket_params "}"
-#line 2610 "dhcp6_parser.yy"
+#line 2615 "dhcp6_parser.yy"
                                                             {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4088 "dhcp6_parser.cc"
+#line 4093 "dhcp6_parser.cc"
     break;
 
   case 748: // control_socket_params: control_socket_params ","
-#line 2617 "dhcp6_parser.yy"
+#line 2622 "dhcp6_parser.yy"
                                                    {
                          ctx.warnAboutExtraCommas(yystack_[0].location);
                          }
-#line 4096 "dhcp6_parser.cc"
+#line 4101 "dhcp6_parser.cc"
     break;
 
   case 754: // $@114: %empty
-#line 2629 "dhcp6_parser.yy"
+#line 2634 "dhcp6_parser.yy"
                          {
     ctx.unique("socket-type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4105 "dhcp6_parser.cc"
+#line 4110 "dhcp6_parser.cc"
     break;
 
   case 755: // socket_type: "socket-type" $@114 ":" "constant string"
-#line 2632 "dhcp6_parser.yy"
+#line 2637 "dhcp6_parser.yy"
                {
     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 4115 "dhcp6_parser.cc"
+#line 4120 "dhcp6_parser.cc"
     break;
 
   case 756: // $@115: %empty
-#line 2638 "dhcp6_parser.yy"
+#line 2643 "dhcp6_parser.yy"
                          {
     ctx.unique("socket-name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4124 "dhcp6_parser.cc"
+#line 4129 "dhcp6_parser.cc"
     break;
 
   case 757: // socket_name: "socket-name" $@115 ":" "constant string"
-#line 2641 "dhcp6_parser.yy"
+#line 2646 "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 4134 "dhcp6_parser.cc"
+#line 4139 "dhcp6_parser.cc"
     break;
 
   case 758: // $@116: %empty
-#line 2650 "dhcp6_parser.yy"
+#line 2655 "dhcp6_parser.yy"
                                        {
     ctx.unique("dhcp-queue-control", ctx.loc2pos(yystack_[0].location));
     ElementPtr qc(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4142,87 +4147,87 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(qc);
     ctx.enter(ctx.DHCP_QUEUE_CONTROL);
 }
-#line 4146 "dhcp6_parser.cc"
+#line 4151 "dhcp6_parser.cc"
     break;
 
   case 759: // dhcp_queue_control: "dhcp-queue-control" $@116 ":" "{" queue_control_params "}"
-#line 2656 "dhcp6_parser.yy"
+#line 2661 "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 4157 "dhcp6_parser.cc"
+#line 4162 "dhcp6_parser.cc"
     break;
 
   case 762: // queue_control_params: queue_control_params ","
-#line 2665 "dhcp6_parser.yy"
+#line 2670 "dhcp6_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 4165 "dhcp6_parser.cc"
+#line 4170 "dhcp6_parser.cc"
     break;
 
   case 769: // enable_queue: "enable-queue" ":" "boolean"
-#line 2678 "dhcp6_parser.yy"
+#line 2683 "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 4175 "dhcp6_parser.cc"
+#line 4180 "dhcp6_parser.cc"
     break;
 
   case 770: // $@117: %empty
-#line 2684 "dhcp6_parser.yy"
+#line 2689 "dhcp6_parser.yy"
                        {
     ctx.unique("queue-type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4184 "dhcp6_parser.cc"
+#line 4189 "dhcp6_parser.cc"
     break;
 
   case 771: // queue_type: "queue-type" $@117 ":" "constant string"
-#line 2687 "dhcp6_parser.yy"
+#line 2692 "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 4194 "dhcp6_parser.cc"
+#line 4199 "dhcp6_parser.cc"
     break;
 
   case 772: // capacity: "capacity" ":" "integer"
-#line 2693 "dhcp6_parser.yy"
+#line 2698 "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 4204 "dhcp6_parser.cc"
+#line 4209 "dhcp6_parser.cc"
     break;
 
   case 773: // $@118: %empty
-#line 2699 "dhcp6_parser.yy"
+#line 2704 "dhcp6_parser.yy"
                             {
     ctx.unique(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4213 "dhcp6_parser.cc"
+#line 4218 "dhcp6_parser.cc"
     break;
 
   case 774: // arbitrary_map_entry: "constant string" $@118 ":" value
-#line 2702 "dhcp6_parser.yy"
+#line 2707 "dhcp6_parser.yy"
               {
     ctx.stack_.back()->set(yystack_[3].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 4222 "dhcp6_parser.cc"
+#line 4227 "dhcp6_parser.cc"
     break;
 
   case 775: // $@119: %empty
-#line 2709 "dhcp6_parser.yy"
+#line 2714 "dhcp6_parser.yy"
                      {
     ctx.unique("dhcp-ddns", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4230,291 +4235,291 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.DHCP_DDNS);
 }
-#line 4234 "dhcp6_parser.cc"
+#line 4239 "dhcp6_parser.cc"
     break;
 
   case 776: // dhcp_ddns: "dhcp-ddns" $@119 ":" "{" dhcp_ddns_params "}"
-#line 2715 "dhcp6_parser.yy"
+#line 2720 "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 4245 "dhcp6_parser.cc"
+#line 4250 "dhcp6_parser.cc"
     break;
 
   case 777: // $@120: %empty
-#line 2722 "dhcp6_parser.yy"
+#line 2727 "dhcp6_parser.yy"
                               {
     // Parse the dhcp-ddns map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 4255 "dhcp6_parser.cc"
+#line 4260 "dhcp6_parser.cc"
     break;
 
   case 778: // sub_dhcp_ddns: "{" $@120 dhcp_ddns_params "}"
-#line 2726 "dhcp6_parser.yy"
+#line 2731 "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 4265 "dhcp6_parser.cc"
+#line 4270 "dhcp6_parser.cc"
     break;
 
   case 781: // dhcp_ddns_params: dhcp_ddns_params ","
-#line 2734 "dhcp6_parser.yy"
+#line 2739 "dhcp6_parser.yy"
                                          {
                     ctx.warnAboutExtraCommas(yystack_[0].location);
                     }
-#line 4273 "dhcp6_parser.cc"
+#line 4278 "dhcp6_parser.cc"
     break;
 
   case 800: // enable_updates: "enable-updates" ":" "boolean"
-#line 2759 "dhcp6_parser.yy"
+#line 2764 "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 4283 "dhcp6_parser.cc"
+#line 4288 "dhcp6_parser.cc"
     break;
 
   case 801: // $@121: %empty
-#line 2766 "dhcp6_parser.yy"
+#line 2771 "dhcp6_parser.yy"
                                          {
     ctx.unique("qualifying-suffix", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4292 "dhcp6_parser.cc"
+#line 4297 "dhcp6_parser.cc"
     break;
 
   case 802: // dep_qualifying_suffix: "qualifying-suffix" $@121 ":" "constant string"
-#line 2769 "dhcp6_parser.yy"
+#line 2774 "dhcp6_parser.yy"
                {
     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 4302 "dhcp6_parser.cc"
+#line 4307 "dhcp6_parser.cc"
     break;
 
   case 803: // $@122: %empty
-#line 2775 "dhcp6_parser.yy"
+#line 2780 "dhcp6_parser.yy"
                      {
     ctx.unique("server-ip", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4311 "dhcp6_parser.cc"
+#line 4316 "dhcp6_parser.cc"
     break;
 
   case 804: // server_ip: "server-ip" $@122 ":" "constant string"
-#line 2778 "dhcp6_parser.yy"
+#line 2783 "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 4321 "dhcp6_parser.cc"
+#line 4326 "dhcp6_parser.cc"
     break;
 
   case 805: // server_port: "server-port" ":" "integer"
-#line 2784 "dhcp6_parser.yy"
+#line 2789 "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 4331 "dhcp6_parser.cc"
+#line 4336 "dhcp6_parser.cc"
     break;
 
   case 806: // $@123: %empty
-#line 2790 "dhcp6_parser.yy"
+#line 2795 "dhcp6_parser.yy"
                      {
     ctx.unique("sender-ip", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4340 "dhcp6_parser.cc"
+#line 4345 "dhcp6_parser.cc"
     break;
 
   case 807: // sender_ip: "sender-ip" $@123 ":" "constant string"
-#line 2793 "dhcp6_parser.yy"
+#line 2798 "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 4350 "dhcp6_parser.cc"
+#line 4355 "dhcp6_parser.cc"
     break;
 
   case 808: // sender_port: "sender-port" ":" "integer"
-#line 2799 "dhcp6_parser.yy"
+#line 2804 "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 4360 "dhcp6_parser.cc"
+#line 4365 "dhcp6_parser.cc"
     break;
 
   case 809: // max_queue_size: "max-queue-size" ":" "integer"
-#line 2805 "dhcp6_parser.yy"
+#line 2810 "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 4370 "dhcp6_parser.cc"
+#line 4375 "dhcp6_parser.cc"
     break;
 
   case 810: // $@124: %empty
-#line 2811 "dhcp6_parser.yy"
+#line 2816 "dhcp6_parser.yy"
                            {
     ctx.unique("ncr-protocol", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NCR_PROTOCOL);
 }
-#line 4379 "dhcp6_parser.cc"
+#line 4384 "dhcp6_parser.cc"
     break;
 
   case 811: // ncr_protocol: "ncr-protocol" $@124 ":" ncr_protocol_value
-#line 2814 "dhcp6_parser.yy"
+#line 2819 "dhcp6_parser.yy"
                            {
     ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 4388 "dhcp6_parser.cc"
+#line 4393 "dhcp6_parser.cc"
     break;
 
   case 812: // ncr_protocol_value: "UDP"
-#line 2820 "dhcp6_parser.yy"
+#line 2825 "dhcp6_parser.yy"
         { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
-#line 4394 "dhcp6_parser.cc"
+#line 4399 "dhcp6_parser.cc"
     break;
 
   case 813: // ncr_protocol_value: "TCP"
-#line 2821 "dhcp6_parser.yy"
+#line 2826 "dhcp6_parser.yy"
         { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
-#line 4400 "dhcp6_parser.cc"
+#line 4405 "dhcp6_parser.cc"
     break;
 
   case 814: // $@125: %empty
-#line 2824 "dhcp6_parser.yy"
+#line 2829 "dhcp6_parser.yy"
                        {
     ctx.unique("ncr-format", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NCR_FORMAT);
 }
-#line 4409 "dhcp6_parser.cc"
+#line 4414 "dhcp6_parser.cc"
     break;
 
   case 815: // ncr_format: "ncr-format" $@125 ":" "JSON"
-#line 2827 "dhcp6_parser.yy"
+#line 2832 "dhcp6_parser.yy"
              {
     ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ncr-format", json);
     ctx.leave();
 }
-#line 4419 "dhcp6_parser.cc"
+#line 4424 "dhcp6_parser.cc"
     break;
 
   case 816: // dep_override_no_update: "override-no-update" ":" "boolean"
-#line 2834 "dhcp6_parser.yy"
+#line 2839 "dhcp6_parser.yy"
                                                          {
     ctx.unique("override-no-update", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-no-update", b);
 }
-#line 4429 "dhcp6_parser.cc"
+#line 4434 "dhcp6_parser.cc"
     break;
 
   case 817: // dep_override_client_update: "override-client-update" ":" "boolean"
-#line 2841 "dhcp6_parser.yy"
+#line 2846 "dhcp6_parser.yy"
                                                                  {
     ctx.unique("override-client-update", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-client-update", b);
 }
-#line 4439 "dhcp6_parser.cc"
+#line 4444 "dhcp6_parser.cc"
     break;
 
   case 818: // $@126: %empty
-#line 2848 "dhcp6_parser.yy"
+#line 2853 "dhcp6_parser.yy"
                                              {
     ctx.unique("replace-client-name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.REPLACE_CLIENT_NAME);
 }
-#line 4448 "dhcp6_parser.cc"
+#line 4453 "dhcp6_parser.cc"
     break;
 
   case 819: // dep_replace_client_name: "replace-client-name" $@126 ":" ddns_replace_client_name_value
-#line 2851 "dhcp6_parser.yy"
+#line 2856 "dhcp6_parser.yy"
                                        {
     ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 4457 "dhcp6_parser.cc"
+#line 4462 "dhcp6_parser.cc"
     break;
 
   case 820: // $@127: %empty
-#line 2857 "dhcp6_parser.yy"
+#line 2862 "dhcp6_parser.yy"
                                        {
     ctx.unique("generated-prefix", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4466 "dhcp6_parser.cc"
+#line 4471 "dhcp6_parser.cc"
     break;
 
   case 821: // dep_generated_prefix: "generated-prefix" $@127 ":" "constant string"
-#line 2860 "dhcp6_parser.yy"
+#line 2865 "dhcp6_parser.yy"
                {
     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 4476 "dhcp6_parser.cc"
+#line 4481 "dhcp6_parser.cc"
     break;
 
   case 822: // $@128: %empty
-#line 2867 "dhcp6_parser.yy"
+#line 2872 "dhcp6_parser.yy"
                                          {
     ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4485 "dhcp6_parser.cc"
+#line 4490 "dhcp6_parser.cc"
     break;
 
   case 823: // dep_hostname_char_set: "hostname-char-set" $@128 ":" "constant string"
-#line 2870 "dhcp6_parser.yy"
+#line 2875 "dhcp6_parser.yy"
                {
     ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname-char-set", s);
     ctx.leave();
 }
-#line 4495 "dhcp6_parser.cc"
+#line 4500 "dhcp6_parser.cc"
     break;
 
   case 824: // $@129: %empty
-#line 2877 "dhcp6_parser.yy"
+#line 2882 "dhcp6_parser.yy"
                                                          {
     ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4504 "dhcp6_parser.cc"
+#line 4509 "dhcp6_parser.cc"
     break;
 
   case 825: // dep_hostname_char_replacement: "hostname-char-replacement" $@129 ":" "constant string"
-#line 2880 "dhcp6_parser.yy"
+#line 2885 "dhcp6_parser.yy"
                {
     ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname-char-replacement", s);
     ctx.leave();
 }
-#line 4514 "dhcp6_parser.cc"
+#line 4519 "dhcp6_parser.cc"
     break;
 
   case 826: // $@130: %empty
-#line 2889 "dhcp6_parser.yy"
+#line 2894 "dhcp6_parser.yy"
                                {
     ctx.unique("config-control", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4522,48 +4527,48 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(i);
     ctx.enter(ctx.CONFIG_CONTROL);
 }
-#line 4526 "dhcp6_parser.cc"
+#line 4531 "dhcp6_parser.cc"
     break;
 
   case 827: // config_control: "config-control" $@130 ":" "{" config_control_params "}"
-#line 2895 "dhcp6_parser.yy"
+#line 2900 "dhcp6_parser.yy"
                                                             {
     // No config control params are required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4536 "dhcp6_parser.cc"
+#line 4541 "dhcp6_parser.cc"
     break;
 
   case 828: // $@131: %empty
-#line 2901 "dhcp6_parser.yy"
+#line 2906 "dhcp6_parser.yy"
                                    {
     // Parse the config-control map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 4546 "dhcp6_parser.cc"
+#line 4551 "dhcp6_parser.cc"
     break;
 
   case 829: // sub_config_control: "{" $@131 config_control_params "}"
-#line 2905 "dhcp6_parser.yy"
+#line 2910 "dhcp6_parser.yy"
                                        {
     // No config_control params are required
     // parsing completed
 }
-#line 4555 "dhcp6_parser.cc"
+#line 4560 "dhcp6_parser.cc"
     break;
 
   case 832: // config_control_params: config_control_params ","
-#line 2913 "dhcp6_parser.yy"
+#line 2918 "dhcp6_parser.yy"
                                                    {
                          ctx.warnAboutExtraCommas(yystack_[0].location);
                          }
-#line 4563 "dhcp6_parser.cc"
+#line 4568 "dhcp6_parser.cc"
     break;
 
   case 835: // $@132: %empty
-#line 2923 "dhcp6_parser.yy"
+#line 2928 "dhcp6_parser.yy"
                                    {
     ctx.unique("config-databases", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -4571,30 +4576,30 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CONFIG_DATABASE);
 }
-#line 4575 "dhcp6_parser.cc"
+#line 4580 "dhcp6_parser.cc"
     break;
 
   case 836: // config_databases: "config-databases" $@132 ":" "[" database_list "]"
-#line 2929 "dhcp6_parser.yy"
+#line 2934 "dhcp6_parser.yy"
                                                       {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4584 "dhcp6_parser.cc"
+#line 4589 "dhcp6_parser.cc"
     break;
 
   case 837: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer"
-#line 2934 "dhcp6_parser.yy"
+#line 2939 "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 4594 "dhcp6_parser.cc"
+#line 4599 "dhcp6_parser.cc"
     break;
 
   case 838: // $@133: %empty
-#line 2942 "dhcp6_parser.yy"
+#line 2947 "dhcp6_parser.yy"
                  {
     ctx.unique("loggers", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -4602,83 +4607,83 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.LOGGERS);
 }
-#line 4606 "dhcp6_parser.cc"
+#line 4611 "dhcp6_parser.cc"
     break;
 
   case 839: // loggers: "loggers" $@133 ":" "[" loggers_entries "]"
-#line 2948 "dhcp6_parser.yy"
+#line 2953 "dhcp6_parser.yy"
                                                          {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4615 "dhcp6_parser.cc"
+#line 4620 "dhcp6_parser.cc"
     break;
 
   case 842: // loggers_entries: loggers_entries ","
-#line 2957 "dhcp6_parser.yy"
+#line 2962 "dhcp6_parser.yy"
                                        {
                    ctx.warnAboutExtraCommas(yystack_[0].location);
                    }
-#line 4623 "dhcp6_parser.cc"
+#line 4628 "dhcp6_parser.cc"
     break;
 
   case 843: // $@134: %empty
-#line 2963 "dhcp6_parser.yy"
+#line 2968 "dhcp6_parser.yy"
                              {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 4633 "dhcp6_parser.cc"
+#line 4638 "dhcp6_parser.cc"
     break;
 
   case 844: // logger_entry: "{" $@134 logger_params "}"
-#line 2967 "dhcp6_parser.yy"
+#line 2972 "dhcp6_parser.yy"
                                {
     ctx.stack_.pop_back();
 }
-#line 4641 "dhcp6_parser.cc"
+#line 4646 "dhcp6_parser.cc"
     break;
 
   case 847: // logger_params: logger_params ","
-#line 2973 "dhcp6_parser.yy"
+#line 2978 "dhcp6_parser.yy"
                                    {
                  ctx.warnAboutExtraCommas(yystack_[0].location);
                  }
-#line 4649 "dhcp6_parser.cc"
+#line 4654 "dhcp6_parser.cc"
     break;
 
   case 855: // debuglevel: "debuglevel" ":" "integer"
-#line 2987 "dhcp6_parser.yy"
+#line 2992 "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 4659 "dhcp6_parser.cc"
+#line 4664 "dhcp6_parser.cc"
     break;
 
   case 856: // $@135: %empty
-#line 2993 "dhcp6_parser.yy"
+#line 2998 "dhcp6_parser.yy"
                    {
     ctx.unique("severity", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4668 "dhcp6_parser.cc"
+#line 4673 "dhcp6_parser.cc"
     break;
 
   case 857: // severity: "severity" $@135 ":" "constant string"
-#line 2996 "dhcp6_parser.yy"
+#line 3001 "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 4678 "dhcp6_parser.cc"
+#line 4683 "dhcp6_parser.cc"
     break;
 
   case 858: // $@136: %empty
-#line 3002 "dhcp6_parser.yy"
+#line 3007 "dhcp6_parser.yy"
                                     {
     ctx.unique("output_options", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -4686,122 +4691,122 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OUTPUT_OPTIONS);
 }
-#line 4690 "dhcp6_parser.cc"
+#line 4695 "dhcp6_parser.cc"
     break;
 
   case 859: // output_options_list: "output_options" $@136 ":" "[" output_options_list_content "]"
-#line 3008 "dhcp6_parser.yy"
+#line 3013 "dhcp6_parser.yy"
                                                                     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4699 "dhcp6_parser.cc"
+#line 4704 "dhcp6_parser.cc"
     break;
 
   case 862: // output_options_list_content: output_options_list_content ","
-#line 3015 "dhcp6_parser.yy"
+#line 3020 "dhcp6_parser.yy"
                                                                {
                                ctx.warnAboutExtraCommas(yystack_[0].location);
                                }
-#line 4707 "dhcp6_parser.cc"
+#line 4712 "dhcp6_parser.cc"
     break;
 
   case 863: // $@137: %empty
-#line 3020 "dhcp6_parser.yy"
+#line 3025 "dhcp6_parser.yy"
                              {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 4717 "dhcp6_parser.cc"
+#line 4722 "dhcp6_parser.cc"
     break;
 
   case 864: // output_entry: "{" $@137 output_params_list "}"
-#line 3024 "dhcp6_parser.yy"
+#line 3029 "dhcp6_parser.yy"
                                     {
     ctx.stack_.pop_back();
 }
-#line 4725 "dhcp6_parser.cc"
+#line 4730 "dhcp6_parser.cc"
     break;
 
   case 867: // output_params_list: output_params_list ","
-#line 3030 "dhcp6_parser.yy"
+#line 3035 "dhcp6_parser.yy"
                                              {
                       ctx.warnAboutExtraCommas(yystack_[0].location);
                       }
-#line 4733 "dhcp6_parser.cc"
+#line 4738 "dhcp6_parser.cc"
     break;
 
   case 873: // $@138: %empty
-#line 3042 "dhcp6_parser.yy"
+#line 3047 "dhcp6_parser.yy"
                {
     ctx.unique("output", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4742 "dhcp6_parser.cc"
+#line 4747 "dhcp6_parser.cc"
     break;
 
   case 874: // output: "output" $@138 ":" "constant string"
-#line 3045 "dhcp6_parser.yy"
+#line 3050 "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 4752 "dhcp6_parser.cc"
+#line 4757 "dhcp6_parser.cc"
     break;
 
   case 875: // flush: "flush" ":" "boolean"
-#line 3051 "dhcp6_parser.yy"
+#line 3056 "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 4762 "dhcp6_parser.cc"
+#line 4767 "dhcp6_parser.cc"
     break;
 
   case 876: // maxsize: "maxsize" ":" "integer"
-#line 3057 "dhcp6_parser.yy"
+#line 3062 "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 4772 "dhcp6_parser.cc"
+#line 4777 "dhcp6_parser.cc"
     break;
 
   case 877: // maxver: "maxver" ":" "integer"
-#line 3063 "dhcp6_parser.yy"
+#line 3068 "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 4782 "dhcp6_parser.cc"
+#line 4787 "dhcp6_parser.cc"
     break;
 
   case 878: // $@139: %empty
-#line 3069 "dhcp6_parser.yy"
+#line 3074 "dhcp6_parser.yy"
                  {
     ctx.unique("pattern", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4791 "dhcp6_parser.cc"
+#line 4796 "dhcp6_parser.cc"
     break;
 
   case 879: // pattern: "pattern" $@139 ":" "constant string"
-#line 3072 "dhcp6_parser.yy"
+#line 3077 "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 4801 "dhcp6_parser.cc"
+#line 4806 "dhcp6_parser.cc"
     break;
 
   case 880: // $@140: %empty
-#line 3078 "dhcp6_parser.yy"
+#line 3083 "dhcp6_parser.yy"
                              {
     ctx.unique("compatibility", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4809,38 +4814,38 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(i);
     ctx.enter(ctx.COMPATIBILITY);
 }
-#line 4813 "dhcp6_parser.cc"
+#line 4818 "dhcp6_parser.cc"
     break;
 
   case 881: // compatibility: "compatibility" $@140 ":" "{" compatibility_params "}"
-#line 3084 "dhcp6_parser.yy"
+#line 3089 "dhcp6_parser.yy"
                                                            {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4822 "dhcp6_parser.cc"
+#line 4827 "dhcp6_parser.cc"
     break;
 
   case 884: // compatibility_params: compatibility_params ","
-#line 3091 "dhcp6_parser.yy"
+#line 3096 "dhcp6_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 4830 "dhcp6_parser.cc"
+#line 4835 "dhcp6_parser.cc"
     break;
 
   case 887: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean"
-#line 3100 "dhcp6_parser.yy"
+#line 3105 "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 4840 "dhcp6_parser.cc"
+#line 4845 "dhcp6_parser.cc"
     break;
 
 
-#line 4844 "dhcp6_parser.cc"
+#line 4849 "dhcp6_parser.cc"
 
             default:
               break;
@@ -6401,95 +6406,95 @@ namespace isc { namespace dhcp {
   const short
   Dhcp6Parser::yyrline_[] =
   {
-       0,   311,   311,   311,   312,   312,   313,   313,   314,   314,
-     315,   315,   316,   316,   317,   317,   318,   318,   319,   319,
+       0,   316,   316,   316,   317,   317,   318,   318,   319,   319,
      320,   320,   321,   321,   322,   322,   323,   323,   324,   324,
-     332,   333,   334,   335,   336,   337,   338,   341,   346,   346,
-     357,   360,   361,   364,   369,   375,   380,   380,   387,   388,
-     391,   395,   399,   405,   405,   412,   413,   416,   420,   424,
-     434,   443,   443,   458,   458,   472,   475,   481,   481,   490,
-     491,   492,   499,   500,   501,   502,   503,   504,   505,   506,
-     507,   508,   509,   510,   511,   512,   513,   514,   515,   516,
-     517,   518,   519,   520,   521,   522,   523,   524,   525,   526,
-     527,   528,   529,   530,   531,   532,   533,   534,   535,   536,
-     537,   538,   539,   540,   541,   542,   543,   544,   545,   546,
-     547,   548,   549,   550,   551,   552,   553,   554,   555,   556,
-     557,   558,   559,   560,   561,   562,   563,   564,   565,   566,
-     569,   569,   578,   584,   590,   596,   602,   608,   614,   620,
-     626,   632,   638,   644,   650,   656,   662,   668,   674,   680,
-     680,   689,   692,   695,   698,   701,   707,   707,   716,   716,
-     725,   731,   737,   743,   743,   752,   752,   761,   767,   773,
-     779,   779,   788,   794,   794,   803,   803,   812,   818,   824,
-     830,   830,   842,   842,   851,   852,   853,   858,   859,   860,
-     861,   862,   863,   864,   865,   868,   868,   879,   885,   891,
-     897,   903,   903,   916,   916,   929,   929,   940,   941,   944,
-     945,   946,   951,   951,   961,   962,   963,   968,   969,   970,
-     971,   972,   973,   974,   975,   976,   977,   978,   979,   980,
-     981,   982,   983,   984,   985,   986,   987,   988,   989,   992,
-     992,  1000,  1001,  1002,  1005,  1005,  1014,  1014,  1023,  1023,
-    1032,  1038,  1038,  1047,  1053,  1059,  1065,  1071,  1077,  1083,
-    1090,  1096,  1096,  1104,  1105,  1106,  1109,  1115,  1121,  1121,
-    1130,  1130,  1139,  1139,  1148,  1148,  1157,  1157,  1168,  1169,
-    1170,  1175,  1176,  1179,  1179,  1198,  1198,  1216,  1216,  1227,
-    1228,  1229,  1234,  1235,  1238,  1243,  1248,  1248,  1259,  1260,
-    1261,  1266,  1267,  1268,  1271,  1276,  1283,  1283,  1296,  1296,
-    1309,  1310,  1311,  1316,  1317,  1318,  1319,  1320,  1321,  1324,
-    1330,  1336,  1342,  1342,  1353,  1354,  1357,  1358,  1359,  1364,
-    1364,  1374,  1374,  1384,  1385,  1386,  1389,  1392,  1393,  1396,
-    1396,  1405,  1405,  1414,  1414,  1426,  1427,  1428,  1433,  1434,
-    1435,  1436,  1437,  1438,  1441,  1447,  1453,  1459,  1465,  1471,
-    1480,  1480,  1494,  1495,  1498,  1499,  1500,  1509,  1509,  1535,
-    1535,  1546,  1547,  1548,  1554,  1555,  1556,  1557,  1558,  1559,
-    1560,  1561,  1562,  1563,  1564,  1565,  1566,  1567,  1568,  1569,
-    1570,  1571,  1572,  1573,  1574,  1575,  1576,  1577,  1578,  1579,
-    1580,  1581,  1582,  1583,  1584,  1585,  1586,  1587,  1588,  1589,
-    1590,  1591,  1592,  1593,  1594,  1595,  1596,  1597,  1598,  1599,
-    1602,  1602,  1611,  1611,  1620,  1620,  1629,  1629,  1638,  1638,
-    1649,  1655,  1661,  1667,  1667,  1675,  1676,  1677,  1678,  1681,
-    1687,  1695,  1695,  1707,  1708,  1712,  1713,  1714,  1719,  1719,
-    1727,  1728,  1729,  1734,  1735,  1736,  1737,  1738,  1739,  1740,
-    1741,  1742,  1743,  1744,  1745,  1746,  1747,  1748,  1749,  1750,
-    1751,  1752,  1753,  1754,  1755,  1756,  1757,  1758,  1759,  1760,
-    1761,  1762,  1763,  1764,  1765,  1766,  1767,  1768,  1769,  1770,
-    1771,  1772,  1773,  1774,  1775,  1776,  1783,  1783,  1797,  1797,
-    1806,  1807,  1810,  1811,  1812,  1819,  1819,  1834,  1834,  1848,
-    1849,  1852,  1853,  1854,  1859,  1860,  1861,  1862,  1863,  1864,
-    1865,  1866,  1867,  1868,  1871,  1873,  1879,  1881,  1881,  1890,
-    1890,  1899,  1899,  1908,  1910,  1910,  1919,  1929,  1929,  1942,
-    1943,  1948,  1949,  1950,  1957,  1957,  1969,  1969,  1981,  1982,
-    1987,  1988,  1989,  1996,  1997,  1998,  1999,  2000,  2001,  2002,
-    2003,  2004,  2005,  2008,  2010,  2010,  2019,  2021,  2023,  2029,
-    2035,  2044,  2044,  2057,  2058,  2061,  2062,  2063,  2068,  2068,
-    2078,  2078,  2088,  2089,  2090,  2095,  2096,  2097,  2098,  2099,
-    2100,  2101,  2104,  2104,  2113,  2113,  2138,  2138,  2168,  2168,
-    2181,  2182,  2185,  2186,  2187,  2192,  2192,  2204,  2204,  2216,
-    2217,  2218,  2223,  2224,  2225,  2226,  2227,  2228,  2229,  2230,
-    2231,  2232,  2233,  2236,  2236,  2245,  2251,  2251,  2260,  2266,
-    2275,  2275,  2286,  2287,  2290,  2291,  2292,  2297,  2297,  2306,
-    2306,  2315,  2316,  2319,  2320,  2321,  2327,  2328,  2329,  2330,
-    2331,  2332,  2333,  2334,  2335,  2336,  2337,  2340,  2340,  2351,
-    2351,  2362,  2362,  2371,  2371,  2380,  2380,  2389,  2389,  2398,
-    2398,  2412,  2412,  2423,  2424,  2427,  2427,  2439,  2439,  2450,
-    2451,  2452,  2457,  2457,  2467,  2468,  2471,  2472,  2473,  2478,
-    2479,  2480,  2481,  2482,  2483,  2484,  2485,  2486,  2487,  2488,
-    2489,  2490,  2491,  2494,  2496,  2496,  2505,  2505,  2514,  2523,
-    2523,  2536,  2537,  2538,  2543,  2544,  2545,  2546,  2547,  2548,
-    2549,  2550,  2551,  2554,  2554,  2562,  2563,  2564,  2567,  2573,
-    2573,  2582,  2588,  2596,  2604,  2604,  2615,  2616,  2617,  2622,
-    2623,  2624,  2625,  2626,  2629,  2629,  2638,  2638,  2650,  2650,
-    2663,  2664,  2665,  2670,  2671,  2672,  2673,  2674,  2675,  2678,
-    2684,  2684,  2693,  2699,  2699,  2709,  2709,  2722,  2722,  2732,
-    2733,  2734,  2739,  2740,  2741,  2742,  2743,  2744,  2745,  2746,
-    2747,  2748,  2749,  2750,  2751,  2752,  2753,  2754,  2755,  2756,
-    2759,  2766,  2766,  2775,  2775,  2784,  2790,  2790,  2799,  2805,
-    2811,  2811,  2820,  2821,  2824,  2824,  2834,  2841,  2848,  2848,
-    2857,  2857,  2867,  2867,  2877,  2877,  2889,  2889,  2901,  2901,
-    2911,  2912,  2913,  2919,  2920,  2923,  2923,  2934,  2942,  2942,
-    2955,  2956,  2957,  2963,  2963,  2971,  2972,  2973,  2978,  2979,
-    2980,  2981,  2982,  2983,  2984,  2987,  2993,  2993,  3002,  3002,
-    3013,  3014,  3015,  3020,  3020,  3028,  3029,  3030,  3035,  3036,
-    3037,  3038,  3039,  3042,  3042,  3051,  3057,  3063,  3069,  3069,
-    3078,  3078,  3089,  3090,  3091,  3096,  3097,  3100
+     325,   325,   326,   326,   327,   327,   328,   328,   329,   329,
+     337,   338,   339,   340,   341,   342,   343,   346,   351,   351,
+     362,   365,   366,   369,   374,   380,   385,   385,   392,   393,
+     396,   400,   404,   410,   410,   417,   418,   421,   425,   429,
+     439,   448,   448,   463,   463,   477,   480,   486,   486,   495,
+     496,   497,   504,   505,   506,   507,   508,   509,   510,   511,
+     512,   513,   514,   515,   516,   517,   518,   519,   520,   521,
+     522,   523,   524,   525,   526,   527,   528,   529,   530,   531,
+     532,   533,   534,   535,   536,   537,   538,   539,   540,   541,
+     542,   543,   544,   545,   546,   547,   548,   549,   550,   551,
+     552,   553,   554,   555,   556,   557,   558,   559,   560,   561,
+     562,   563,   564,   565,   566,   567,   568,   569,   570,   571,
+     574,   574,   583,   589,   595,   601,   607,   613,   619,   625,
+     631,   637,   643,   649,   655,   661,   667,   673,   679,   685,
+     685,   694,   697,   700,   703,   706,   712,   712,   721,   721,
+     730,   736,   742,   748,   748,   757,   757,   766,   772,   778,
+     784,   784,   793,   799,   799,   808,   808,   817,   823,   829,
+     835,   835,   847,   847,   856,   857,   858,   863,   864,   865,
+     866,   867,   868,   869,   870,   873,   873,   884,   890,   896,
+     902,   908,   908,   921,   921,   934,   934,   945,   946,   949,
+     950,   951,   956,   956,   966,   967,   968,   973,   974,   975,
+     976,   977,   978,   979,   980,   981,   982,   983,   984,   985,
+     986,   987,   988,   989,   990,   991,   992,   993,   994,   997,
+     997,  1005,  1006,  1007,  1010,  1010,  1019,  1019,  1028,  1028,
+    1037,  1043,  1043,  1052,  1058,  1064,  1070,  1076,  1082,  1088,
+    1095,  1101,  1101,  1109,  1110,  1111,  1114,  1120,  1126,  1126,
+    1135,  1135,  1144,  1144,  1153,  1153,  1162,  1162,  1173,  1174,
+    1175,  1180,  1181,  1184,  1184,  1203,  1203,  1221,  1221,  1232,
+    1233,  1234,  1239,  1240,  1243,  1248,  1253,  1253,  1264,  1265,
+    1266,  1271,  1272,  1273,  1276,  1281,  1288,  1288,  1301,  1301,
+    1314,  1315,  1316,  1321,  1322,  1323,  1324,  1325,  1326,  1329,
+    1335,  1341,  1347,  1347,  1358,  1359,  1362,  1363,  1364,  1369,
+    1369,  1379,  1379,  1389,  1390,  1391,  1394,  1397,  1398,  1401,
+    1401,  1410,  1410,  1419,  1419,  1431,  1432,  1433,  1438,  1439,
+    1440,  1441,  1442,  1443,  1446,  1452,  1458,  1464,  1470,  1476,
+    1485,  1485,  1499,  1500,  1503,  1504,  1505,  1514,  1514,  1540,
+    1540,  1551,  1552,  1553,  1559,  1560,  1561,  1562,  1563,  1564,
+    1565,  1566,  1567,  1568,  1569,  1570,  1571,  1572,  1573,  1574,
+    1575,  1576,  1577,  1578,  1579,  1580,  1581,  1582,  1583,  1584,
+    1585,  1586,  1587,  1588,  1589,  1590,  1591,  1592,  1593,  1594,
+    1595,  1596,  1597,  1598,  1599,  1600,  1601,  1602,  1603,  1604,
+    1607,  1607,  1616,  1616,  1625,  1625,  1634,  1634,  1643,  1643,
+    1654,  1660,  1666,  1672,  1672,  1680,  1681,  1682,  1683,  1686,
+    1692,  1700,  1700,  1712,  1713,  1717,  1718,  1719,  1724,  1724,
+    1732,  1733,  1734,  1739,  1740,  1741,  1742,  1743,  1744,  1745,
+    1746,  1747,  1748,  1749,  1750,  1751,  1752,  1753,  1754,  1755,
+    1756,  1757,  1758,  1759,  1760,  1761,  1762,  1763,  1764,  1765,
+    1766,  1767,  1768,  1769,  1770,  1771,  1772,  1773,  1774,  1775,
+    1776,  1777,  1778,  1779,  1780,  1781,  1788,  1788,  1802,  1802,
+    1811,  1812,  1815,  1816,  1817,  1824,  1824,  1839,  1839,  1853,
+    1854,  1857,  1858,  1859,  1864,  1865,  1866,  1867,  1868,  1869,
+    1870,  1871,  1872,  1873,  1876,  1878,  1884,  1886,  1886,  1895,
+    1895,  1904,  1904,  1913,  1915,  1915,  1924,  1934,  1934,  1947,
+    1948,  1953,  1954,  1955,  1962,  1962,  1974,  1974,  1986,  1987,
+    1992,  1993,  1994,  2001,  2002,  2003,  2004,  2005,  2006,  2007,
+    2008,  2009,  2010,  2013,  2015,  2015,  2024,  2026,  2028,  2034,
+    2040,  2049,  2049,  2062,  2063,  2066,  2067,  2068,  2073,  2073,
+    2083,  2083,  2093,  2094,  2095,  2100,  2101,  2102,  2103,  2104,
+    2105,  2106,  2109,  2109,  2118,  2118,  2143,  2143,  2173,  2173,
+    2186,  2187,  2190,  2191,  2192,  2197,  2197,  2209,  2209,  2221,
+    2222,  2223,  2228,  2229,  2230,  2231,  2232,  2233,  2234,  2235,
+    2236,  2237,  2238,  2241,  2241,  2250,  2256,  2256,  2265,  2271,
+    2280,  2280,  2291,  2292,  2295,  2296,  2297,  2302,  2302,  2311,
+    2311,  2320,  2321,  2324,  2325,  2326,  2332,  2333,  2334,  2335,
+    2336,  2337,  2338,  2339,  2340,  2341,  2342,  2345,  2345,  2356,
+    2356,  2367,  2367,  2376,  2376,  2385,  2385,  2394,  2394,  2403,
+    2403,  2417,  2417,  2428,  2429,  2432,  2432,  2444,  2444,  2455,
+    2456,  2457,  2462,  2462,  2472,  2473,  2476,  2477,  2478,  2483,
+    2484,  2485,  2486,  2487,  2488,  2489,  2490,  2491,  2492,  2493,
+    2494,  2495,  2496,  2499,  2501,  2501,  2510,  2510,  2519,  2528,
+    2528,  2541,  2542,  2543,  2548,  2549,  2550,  2551,  2552,  2553,
+    2554,  2555,  2556,  2559,  2559,  2567,  2568,  2569,  2572,  2578,
+    2578,  2587,  2593,  2601,  2609,  2609,  2620,  2621,  2622,  2627,
+    2628,  2629,  2630,  2631,  2634,  2634,  2643,  2643,  2655,  2655,
+    2668,  2669,  2670,  2675,  2676,  2677,  2678,  2679,  2680,  2683,
+    2689,  2689,  2698,  2704,  2704,  2714,  2714,  2727,  2727,  2737,
+    2738,  2739,  2744,  2745,  2746,  2747,  2748,  2749,  2750,  2751,
+    2752,  2753,  2754,  2755,  2756,  2757,  2758,  2759,  2760,  2761,
+    2764,  2771,  2771,  2780,  2780,  2789,  2795,  2795,  2804,  2810,
+    2816,  2816,  2825,  2826,  2829,  2829,  2839,  2846,  2853,  2853,
+    2862,  2862,  2872,  2872,  2882,  2882,  2894,  2894,  2906,  2906,
+    2916,  2917,  2918,  2924,  2925,  2928,  2928,  2939,  2947,  2947,
+    2960,  2961,  2962,  2968,  2968,  2976,  2977,  2978,  2983,  2984,
+    2985,  2986,  2987,  2988,  2989,  2992,  2998,  2998,  3007,  3007,
+    3018,  3019,  3020,  3025,  3025,  3033,  3034,  3035,  3040,  3041,
+    3042,  3043,  3044,  3047,  3047,  3056,  3062,  3068,  3074,  3074,
+    3083,  3083,  3094,  3095,  3096,  3101,  3102,  3105
   };
 
   void
@@ -6522,9 +6527,9 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp6_parser.yy"
 } } // isc::dhcp
-#line 6526 "dhcp6_parser.cc"
+#line 6531 "dhcp6_parser.cc"
 
-#line 3106 "dhcp6_parser.yy"
+#line 3111 "dhcp6_parser.yy"
 
 
 void
index 4fb140a70e84670df203b73b7676c6a8eb318816..d9e0df1a5c28465c7c59784cfdedab192bd23201 100644 (file)
@@ -1,3 +1,4 @@
+// Generated 202305171251
 // A Bison parser, made by GNU Bison 3.8.2.
 
 // Locations for Bison parsers in C++
index 842a1114e856c3d44fc03873ed851109aeb8b34f..a60860a7bc0b0b14067489595cadbdec022975bb 100644 (file)
@@ -1,3 +1,4 @@
+// Generated 202305171251
 // A Bison parser, made by GNU Bison 3.8.2.
 
 // Locations for Bison parsers in C++
index c113378b028a57524db38af88cf6add5261c71d0..bb96708f25dc35c4c438f54c86e074e4f7b54113 100644 (file)
 
 #include <netconf/parser_context.h>
 
-#line 52 "netconf_parser.cc"
+// Avoid warnings with the error counter.
+#if defined(__GNUC__) || defined(__clang__)
+#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
+#endif
+
+#line 57 "netconf_parser.cc"
 
 
 #ifndef YY_
 
 #line 14 "netconf_parser.yy"
 namespace isc { namespace netconf {
-#line 145 "netconf_parser.cc"
+#line 150 "netconf_parser.cc"
 
   /// Build a parser object.
   NetconfParser::NetconfParser (isc::netconf::ParserContext& ctx_yyarg)
@@ -378,45 +383,45 @@ namespace isc { namespace netconf {
         switch (yykind)
     {
       case symbol_kind::S_STRING: // "constant string"
-#line 110 "netconf_parser.yy"
+#line 115 "netconf_parser.yy"
                  { yyoutput << yysym.value.template as < string > (); }
-#line 384 "netconf_parser.cc"
+#line 389 "netconf_parser.cc"
         break;
 
       case symbol_kind::S_INTEGER: // "integer"
-#line 110 "netconf_parser.yy"
+#line 115 "netconf_parser.yy"
                  { yyoutput << yysym.value.template as < int64_t > (); }
-#line 390 "netconf_parser.cc"
+#line 395 "netconf_parser.cc"
         break;
 
       case symbol_kind::S_FLOAT: // "floating point"
-#line 110 "netconf_parser.yy"
+#line 115 "netconf_parser.yy"
                  { yyoutput << yysym.value.template as < double > (); }
-#line 396 "netconf_parser.cc"
+#line 401 "netconf_parser.cc"
         break;
 
       case symbol_kind::S_BOOLEAN: // "boolean"
-#line 110 "netconf_parser.yy"
+#line 115 "netconf_parser.yy"
                  { yyoutput << yysym.value.template as < bool > (); }
-#line 402 "netconf_parser.cc"
+#line 407 "netconf_parser.cc"
         break;
 
       case symbol_kind::S_value: // value
-#line 110 "netconf_parser.yy"
+#line 115 "netconf_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 408 "netconf_parser.cc"
+#line 413 "netconf_parser.cc"
         break;
 
       case symbol_kind::S_map_value: // map_value
-#line 110 "netconf_parser.yy"
+#line 115 "netconf_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 414 "netconf_parser.cc"
+#line 419 "netconf_parser.cc"
         break;
 
       case symbol_kind::S_socket_type_value: // socket_type_value
-#line 110 "netconf_parser.yy"
+#line 115 "netconf_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 420 "netconf_parser.cc"
+#line 425 "netconf_parser.cc"
         break;
 
       default:
@@ -689,224 +694,224 @@ namespace isc { namespace netconf {
           switch (yyn)
             {
   case 2: // $@1: %empty
-#line 121 "netconf_parser.yy"
+#line 126 "netconf_parser.yy"
                        { ctx.ctx_ = ctx.NO_KEYWORDS; }
-#line 695 "netconf_parser.cc"
+#line 700 "netconf_parser.cc"
     break;
 
   case 4: // $@2: %empty
-#line 122 "netconf_parser.yy"
+#line 127 "netconf_parser.yy"
                          { ctx.ctx_ = ctx.CONFIG; }
-#line 701 "netconf_parser.cc"
+#line 706 "netconf_parser.cc"
     break;
 
   case 6: // $@3: %empty
-#line 123 "netconf_parser.yy"
+#line 128 "netconf_parser.yy"
                          { ctx.ctx_ = ctx.NETCONF; }
-#line 707 "netconf_parser.cc"
+#line 712 "netconf_parser.cc"
     break;
 
   case 8: // $@4: %empty
-#line 131 "netconf_parser.yy"
+#line 136 "netconf_parser.yy"
                             {
     // Parse the Netconf map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 717 "netconf_parser.cc"
+#line 722 "netconf_parser.cc"
     break;
 
   case 9: // sub_netconf: "{" $@4 global_params "}"
-#line 135 "netconf_parser.yy"
+#line 140 "netconf_parser.yy"
                                {
     // parsing completed
 }
-#line 725 "netconf_parser.cc"
+#line 730 "netconf_parser.cc"
     break;
 
   case 10: // json: value
-#line 142 "netconf_parser.yy"
+#line 147 "netconf_parser.yy"
             {
     // Push back the JSON value on the stack
     ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ());
 }
-#line 734 "netconf_parser.cc"
+#line 739 "netconf_parser.cc"
     break;
 
   case 11: // value: "integer"
-#line 148 "netconf_parser.yy"
+#line 153 "netconf_parser.yy"
                { yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); }
-#line 740 "netconf_parser.cc"
+#line 745 "netconf_parser.cc"
     break;
 
   case 12: // value: "floating point"
-#line 149 "netconf_parser.yy"
+#line 154 "netconf_parser.yy"
              { yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); }
-#line 746 "netconf_parser.cc"
+#line 751 "netconf_parser.cc"
     break;
 
   case 13: // value: "boolean"
-#line 150 "netconf_parser.yy"
+#line 155 "netconf_parser.yy"
                { yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); }
-#line 752 "netconf_parser.cc"
+#line 757 "netconf_parser.cc"
     break;
 
   case 14: // value: "constant string"
-#line 151 "netconf_parser.yy"
+#line 156 "netconf_parser.yy"
               { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < string > (), ctx.loc2pos(yystack_[0].location))); }
-#line 758 "netconf_parser.cc"
+#line 763 "netconf_parser.cc"
     break;
 
   case 15: // value: "null"
-#line 152 "netconf_parser.yy"
+#line 157 "netconf_parser.yy"
                  { yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
-#line 764 "netconf_parser.cc"
+#line 769 "netconf_parser.cc"
     break;
 
   case 16: // value: map
-#line 153 "netconf_parser.yy"
+#line 158 "netconf_parser.yy"
            { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 770 "netconf_parser.cc"
+#line 775 "netconf_parser.cc"
     break;
 
   case 17: // value: list_generic
-#line 154 "netconf_parser.yy"
+#line 159 "netconf_parser.yy"
                     { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 776 "netconf_parser.cc"
+#line 781 "netconf_parser.cc"
     break;
 
   case 18: // $@5: %empty
-#line 158 "netconf_parser.yy"
+#line 163 "netconf_parser.yy"
                     {
     // This code is executed when we're about to start parsing
     // the content of the map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 787 "netconf_parser.cc"
+#line 792 "netconf_parser.cc"
     break;
 
   case 19: // map: "{" $@5 map_content "}"
-#line 163 "netconf_parser.yy"
+#line 168 "netconf_parser.yy"
                              {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
     // for it.
 }
-#line 797 "netconf_parser.cc"
+#line 802 "netconf_parser.cc"
     break;
 
   case 20: // map_value: map
-#line 169 "netconf_parser.yy"
+#line 174 "netconf_parser.yy"
                { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 803 "netconf_parser.cc"
+#line 808 "netconf_parser.cc"
     break;
 
   case 23: // not_empty_map: "constant string" ":" value
-#line 183 "netconf_parser.yy"
+#line 188 "netconf_parser.yy"
                                   {
                   // map containing a single entry
                   ctx.unique(yystack_[2].value.as < string > (), ctx.loc2pos(yystack_[2].location));
                   ctx.stack_.back()->set(yystack_[2].value.as < string > (), yystack_[0].value.as < ElementPtr > ());
                   }
-#line 813 "netconf_parser.cc"
+#line 818 "netconf_parser.cc"
     break;
 
   case 24: // not_empty_map: not_empty_map "," "constant string" ":" value
-#line 188 "netconf_parser.yy"
+#line 193 "netconf_parser.yy"
                                                       {
                   // map consisting of a shorter map followed by
                   // comma and string:value
                   ctx.unique(yystack_[2].value.as < string > (), ctx.loc2pos(yystack_[2].location));
                   ctx.stack_.back()->set(yystack_[2].value.as < string > (), yystack_[0].value.as < ElementPtr > ());
                   }
-#line 824 "netconf_parser.cc"
+#line 829 "netconf_parser.cc"
     break;
 
   case 25: // not_empty_map: not_empty_map ","
-#line 194 "netconf_parser.yy"
+#line 199 "netconf_parser.yy"
                                    {
                  ctx.warnAboutExtraCommas(yystack_[0].location);
                  }
-#line 832 "netconf_parser.cc"
+#line 837 "netconf_parser.cc"
     break;
 
   case 26: // $@6: %empty
-#line 199 "netconf_parser.yy"
+#line 204 "netconf_parser.yy"
                               {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
 }
-#line 841 "netconf_parser.cc"
+#line 846 "netconf_parser.cc"
     break;
 
   case 27: // list_generic: "[" $@6 list_content "]"
-#line 202 "netconf_parser.yy"
+#line 207 "netconf_parser.yy"
                                {
 }
-#line 848 "netconf_parser.cc"
+#line 853 "netconf_parser.cc"
     break;
 
   case 30: // not_empty_list: value
-#line 209 "netconf_parser.yy"
+#line 214 "netconf_parser.yy"
                       {
                   // List consisting of a single element.
                   ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
                   }
-#line 857 "netconf_parser.cc"
+#line 862 "netconf_parser.cc"
     break;
 
   case 31: // not_empty_list: not_empty_list "," value
-#line 213 "netconf_parser.yy"
+#line 218 "netconf_parser.yy"
                                            {
                   // List ending with , and a value.
                   ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
                   }
-#line 866 "netconf_parser.cc"
+#line 871 "netconf_parser.cc"
     break;
 
   case 32: // not_empty_list: not_empty_list ","
-#line 217 "netconf_parser.yy"
+#line 222 "netconf_parser.yy"
                                      {
                   ctx.warnAboutExtraCommas(yystack_[0].location);
                   }
-#line 874 "netconf_parser.cc"
+#line 879 "netconf_parser.cc"
     break;
 
   case 33: // unknown_map_entry: "constant string" ":"
-#line 229 "netconf_parser.yy"
+#line 234 "netconf_parser.yy"
                                 {
     const string& where = ctx.contextName();
     const string& keyword = yystack_[1].value.as < string > ();
     error(yystack_[1].location,
           "got unexpected keyword \"" + keyword + "\" in " + where + " map.");
 }
-#line 885 "netconf_parser.cc"
+#line 890 "netconf_parser.cc"
     break;
 
   case 34: // $@7: %empty
-#line 237 "netconf_parser.yy"
+#line 242 "netconf_parser.yy"
                                    {
     // This code is executed when we're about to start parsing
     // the content of the map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 896 "netconf_parser.cc"
+#line 901 "netconf_parser.cc"
     break;
 
   case 35: // netconf_syntax_map: "{" $@7 global_object "}"
-#line 242 "netconf_parser.yy"
+#line 247 "netconf_parser.yy"
                                {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
     // for it.
 }
-#line 906 "netconf_parser.cc"
+#line 911 "netconf_parser.cc"
     break;
 
   case 36: // $@8: %empty
-#line 249 "netconf_parser.yy"
+#line 254 "netconf_parser.yy"
                        {
     // Let's create a MapElement that will represent it, add it to the
     // top level map (that's already on the stack) and put the new map
@@ -920,76 +925,76 @@ namespace isc { namespace netconf {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.NETCONF);
 }
-#line 924 "netconf_parser.cc"
+#line 929 "netconf_parser.cc"
     break;
 
   case 37: // global_object: "Netconf" $@8 ":" "{" global_params "}"
-#line 261 "netconf_parser.yy"
+#line 266 "netconf_parser.yy"
                                                     {
     // Ok, we're done with parsing Netconf. Let's take the map
     // off the stack.
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 935 "netconf_parser.cc"
+#line 940 "netconf_parser.cc"
     break;
 
   case 39: // global_object_comma: global_object ","
-#line 270 "netconf_parser.yy"
+#line 275 "netconf_parser.yy"
                                          {
     ctx.warnAboutExtraCommas(yystack_[0].location);
 }
-#line 943 "netconf_parser.cc"
+#line 948 "netconf_parser.cc"
     break;
 
   case 44: // not_empty_global_params: not_empty_global_params ","
-#line 281 "netconf_parser.yy"
+#line 286 "netconf_parser.yy"
                                                        {
                            ctx.warnAboutExtraCommas(yystack_[0].location);
                            }
-#line 951 "netconf_parser.cc"
+#line 956 "netconf_parser.cc"
     break;
 
   case 54: // boot_update: "boot-update" ":" "boolean"
-#line 299 "netconf_parser.yy"
+#line 304 "netconf_parser.yy"
                                        {
     ctx.unique("boot-update", ctx.loc2pos(yystack_[2].location));
     ElementPtr flag(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("boot-update", flag);
 }
-#line 961 "netconf_parser.cc"
+#line 966 "netconf_parser.cc"
     break;
 
   case 55: // subscribe_changes: "subscribe-changes" ":" "boolean"
-#line 305 "netconf_parser.yy"
+#line 310 "netconf_parser.yy"
                                                    {
     ctx.unique("subscribe-changes", ctx.loc2pos(yystack_[2].location));
     ElementPtr flag(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subscribe-changes", flag);
 }
-#line 971 "netconf_parser.cc"
+#line 976 "netconf_parser.cc"
     break;
 
   case 56: // validate_changes: "validate-changes" ":" "boolean"
-#line 311 "netconf_parser.yy"
+#line 316 "netconf_parser.yy"
                                                  {
     ctx.unique("validate-changes", ctx.loc2pos(yystack_[2].location));
     ElementPtr flag(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("validate-changes", flag);
 }
-#line 981 "netconf_parser.cc"
+#line 986 "netconf_parser.cc"
     break;
 
   case 57: // $@9: %empty
-#line 317 "netconf_parser.yy"
+#line 322 "netconf_parser.yy"
                            {
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 989 "netconf_parser.cc"
+#line 994 "netconf_parser.cc"
     break;
 
   case 58: // user_context: "user-context" $@9 ":" map_value
-#line 319 "netconf_parser.yy"
+#line 324 "netconf_parser.yy"
                   {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context = yystack_[0].value.as < ElementPtr > ();
@@ -1012,19 +1017,19 @@ namespace isc { namespace netconf {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 1016 "netconf_parser.cc"
+#line 1021 "netconf_parser.cc"
     break;
 
   case 59: // $@10: %empty
-#line 342 "netconf_parser.yy"
+#line 347 "netconf_parser.yy"
                  {
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1024 "netconf_parser.cc"
+#line 1029 "netconf_parser.cc"
     break;
 
   case 60: // comment: "comment" $@10 ":" "constant string"
-#line 344 "netconf_parser.yy"
+#line 349 "netconf_parser.yy"
                {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location)));
@@ -1049,11 +1054,11 @@ namespace isc { namespace netconf {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 1053 "netconf_parser.cc"
+#line 1058 "netconf_parser.cc"
     break;
 
   case 61: // $@11: %empty
-#line 370 "netconf_parser.yy"
+#line 375 "netconf_parser.yy"
                                  {
     ctx.unique("hooks-libraries", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -1061,91 +1066,91 @@ namespace isc { namespace netconf {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOOKS_LIBRARIES);
 }
-#line 1065 "netconf_parser.cc"
+#line 1070 "netconf_parser.cc"
     break;
 
   case 62: // hooks_libraries: "hooks-libraries" $@11 ":" "[" hooks_libraries_list "]"
-#line 376 "netconf_parser.yy"
+#line 381 "netconf_parser.yy"
                                                              {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1074 "netconf_parser.cc"
+#line 1079 "netconf_parser.cc"
     break;
 
   case 67: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list ","
-#line 387 "netconf_parser.yy"
+#line 392 "netconf_parser.yy"
                                            {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 1082 "netconf_parser.cc"
+#line 1087 "netconf_parser.cc"
     break;
 
   case 68: // $@12: %empty
-#line 392 "netconf_parser.yy"
+#line 397 "netconf_parser.yy"
                               {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1092 "netconf_parser.cc"
+#line 1097 "netconf_parser.cc"
     break;
 
   case 69: // hooks_library: "{" $@12 hooks_params "}"
-#line 396 "netconf_parser.yy"
+#line 401 "netconf_parser.yy"
                               {
     ctx.stack_.pop_back();
 }
-#line 1100 "netconf_parser.cc"
+#line 1105 "netconf_parser.cc"
     break;
 
   case 72: // hooks_params: hooks_params ","
-#line 402 "netconf_parser.yy"
+#line 407 "netconf_parser.yy"
                                  {
               ctx.warnAboutExtraCommas(yystack_[0].location);
               }
-#line 1108 "netconf_parser.cc"
+#line 1113 "netconf_parser.cc"
     break;
 
   case 76: // $@13: %empty
-#line 412 "netconf_parser.yy"
+#line 417 "netconf_parser.yy"
                  {
     ctx.unique("library", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1117 "netconf_parser.cc"
+#line 1122 "netconf_parser.cc"
     break;
 
   case 77: // library: "library" $@13 ":" "constant string"
-#line 415 "netconf_parser.yy"
+#line 420 "netconf_parser.yy"
                {
     ElementPtr lib(new StringElement(yystack_[0].value.as < string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("library", lib);
     ctx.leave();
 }
-#line 1127 "netconf_parser.cc"
+#line 1132 "netconf_parser.cc"
     break;
 
   case 78: // $@14: %empty
-#line 421 "netconf_parser.yy"
+#line 426 "netconf_parser.yy"
                        {
     ctx.unique("parameters", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1136 "netconf_parser.cc"
+#line 1141 "netconf_parser.cc"
     break;
 
   case 79: // parameters: "parameters" $@14 ":" map_value
-#line 424 "netconf_parser.yy"
+#line 429 "netconf_parser.yy"
                   {
     ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 1145 "netconf_parser.cc"
+#line 1150 "netconf_parser.cc"
     break;
 
   case 80: // $@15: %empty
-#line 432 "netconf_parser.yy"
+#line 437 "netconf_parser.yy"
                                                       {
     ctx.unique("managed-servers", ctx.loc2pos(yystack_[2].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[2].location)));
@@ -1153,28 +1158,28 @@ namespace isc { namespace netconf {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.MANAGED_SERVERS);
 }
-#line 1157 "netconf_parser.cc"
+#line 1162 "netconf_parser.cc"
     break;
 
   case 81: // managed_servers: "managed-servers" ":" "{" $@15 servers_entries "}"
-#line 438 "netconf_parser.yy"
+#line 443 "netconf_parser.yy"
                                  {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1166 "netconf_parser.cc"
+#line 1171 "netconf_parser.cc"
     break;
 
   case 86: // not_empty_servers_entries: not_empty_servers_entries ","
-#line 449 "netconf_parser.yy"
+#line 454 "netconf_parser.yy"
                                                            {
                              ctx.warnAboutExtraCommas(yystack_[0].location);
                              }
-#line 1174 "netconf_parser.cc"
+#line 1179 "netconf_parser.cc"
     break;
 
   case 92: // $@16: %empty
-#line 465 "netconf_parser.yy"
+#line 470 "netconf_parser.yy"
                            {
     ctx.unique("dhcp4", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1182,20 +1187,20 @@ namespace isc { namespace netconf {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SERVER);
 }
-#line 1186 "netconf_parser.cc"
+#line 1191 "netconf_parser.cc"
     break;
 
   case 93: // dhcp4_server: "dhcp4" $@16 ":" "{" managed_server_params "}"
-#line 471 "netconf_parser.yy"
+#line 476 "netconf_parser.yy"
                                                             {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1195 "netconf_parser.cc"
+#line 1200 "netconf_parser.cc"
     break;
 
   case 94: // $@17: %empty
-#line 477 "netconf_parser.yy"
+#line 482 "netconf_parser.yy"
                            {
     ctx.unique("dhcp6", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1203,20 +1208,20 @@ namespace isc { namespace netconf {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SERVER);
 }
-#line 1207 "netconf_parser.cc"
+#line 1212 "netconf_parser.cc"
     break;
 
   case 95: // dhcp6_server: "dhcp6" $@17 ":" "{" managed_server_params "}"
-#line 483 "netconf_parser.yy"
+#line 488 "netconf_parser.yy"
                                                             {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1216 "netconf_parser.cc"
+#line 1221 "netconf_parser.cc"
     break;
 
   case 96: // $@18: %empty
-#line 489 "netconf_parser.yy"
+#line 494 "netconf_parser.yy"
                      {
     ctx.unique("d2", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1224,20 +1229,20 @@ namespace isc { namespace netconf {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SERVER);
 }
-#line 1228 "netconf_parser.cc"
+#line 1233 "netconf_parser.cc"
     break;
 
   case 97: // d2_server: "d2" $@18 ":" "{" managed_server_params "}"
-#line 495 "netconf_parser.yy"
+#line 500 "netconf_parser.yy"
                                                             {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1237 "netconf_parser.cc"
+#line 1242 "netconf_parser.cc"
     break;
 
   case 98: // $@19: %empty
-#line 501 "netconf_parser.yy"
+#line 506 "netconf_parser.yy"
                      {
     ctx.unique("ca", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1245,47 +1250,47 @@ namespace isc { namespace netconf {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SERVER);
 }
-#line 1249 "netconf_parser.cc"
+#line 1254 "netconf_parser.cc"
     break;
 
   case 99: // ca_server: "ca" $@19 ":" "{" managed_server_params "}"
-#line 507 "netconf_parser.yy"
+#line 512 "netconf_parser.yy"
                                                             {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1258 "netconf_parser.cc"
+#line 1263 "netconf_parser.cc"
     break;
 
   case 102: // managed_server_params: managed_server_params ","
-#line 515 "netconf_parser.yy"
+#line 520 "netconf_parser.yy"
                                                    {
                          ctx.warnAboutExtraCommas(yystack_[0].location);
                          }
-#line 1266 "netconf_parser.cc"
+#line 1271 "netconf_parser.cc"
     break;
 
   case 111: // $@20: %empty
-#line 532 "netconf_parser.yy"
+#line 537 "netconf_parser.yy"
              {
     ctx.unique("model", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1275 "netconf_parser.cc"
+#line 1280 "netconf_parser.cc"
     break;
 
   case 112: // model: "model" $@20 ":" "constant string"
-#line 535 "netconf_parser.yy"
+#line 540 "netconf_parser.yy"
                {
     ElementPtr model(new StringElement(yystack_[0].value.as < string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("model", model);
     ctx.leave();
 }
-#line 1285 "netconf_parser.cc"
+#line 1290 "netconf_parser.cc"
     break;
 
   case 113: // $@21: %empty
-#line 542 "netconf_parser.yy"
+#line 547 "netconf_parser.yy"
                                {
     ctx.unique("control-socket", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1293,102 +1298,102 @@ namespace isc { namespace netconf {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.CONTROL_SOCKET);
 }
-#line 1297 "netconf_parser.cc"
+#line 1302 "netconf_parser.cc"
     break;
 
   case 114: // control_socket: "control-socket" $@21 ":" "{" control_socket_params "}"
-#line 548 "netconf_parser.yy"
+#line 553 "netconf_parser.yy"
                                                             {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1306 "netconf_parser.cc"
+#line 1311 "netconf_parser.cc"
     break;
 
   case 117: // control_socket_params: control_socket_params ","
-#line 556 "netconf_parser.yy"
+#line 561 "netconf_parser.yy"
                                                    {
                          ctx.warnAboutExtraCommas(yystack_[0].location);
                          }
-#line 1314 "netconf_parser.cc"
+#line 1319 "netconf_parser.cc"
     break;
 
   case 124: // $@22: %empty
-#line 569 "netconf_parser.yy"
+#line 574 "netconf_parser.yy"
                          {
     ctx.unique("socket-type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.SOCKET_TYPE);
 }
-#line 1323 "netconf_parser.cc"
+#line 1328 "netconf_parser.cc"
     break;
 
   case 125: // socket_type: "socket-type" $@22 ":" socket_type_value
-#line 572 "netconf_parser.yy"
+#line 577 "netconf_parser.yy"
                           {
     ctx.stack_.back()->set("socket-type", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 1332 "netconf_parser.cc"
+#line 1337 "netconf_parser.cc"
     break;
 
   case 126: // socket_type_value: "unix"
-#line 578 "netconf_parser.yy"
+#line 583 "netconf_parser.yy"
                          { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("unix", ctx.loc2pos(yystack_[0].location))); }
-#line 1338 "netconf_parser.cc"
+#line 1343 "netconf_parser.cc"
     break;
 
   case 127: // socket_type_value: "http"
-#line 579 "netconf_parser.yy"
+#line 584 "netconf_parser.yy"
                          { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("http", ctx.loc2pos(yystack_[0].location))); }
-#line 1344 "netconf_parser.cc"
+#line 1349 "netconf_parser.cc"
     break;
 
   case 128: // socket_type_value: "stdout"
-#line 580 "netconf_parser.yy"
+#line 585 "netconf_parser.yy"
                            { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("stdout", ctx.loc2pos(yystack_[0].location))); }
-#line 1350 "netconf_parser.cc"
+#line 1355 "netconf_parser.cc"
     break;
 
   case 129: // $@23: %empty
-#line 583 "netconf_parser.yy"
+#line 588 "netconf_parser.yy"
                          {
     ctx.unique("socket-name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1359 "netconf_parser.cc"
+#line 1364 "netconf_parser.cc"
     break;
 
   case 130: // socket_name: "socket-name" $@23 ":" "constant string"
-#line 586 "netconf_parser.yy"
+#line 591 "netconf_parser.yy"
                {
     ElementPtr name(new StringElement(yystack_[0].value.as < string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-name", name);
     ctx.leave();
 }
-#line 1369 "netconf_parser.cc"
+#line 1374 "netconf_parser.cc"
     break;
 
   case 131: // $@24: %empty
-#line 593 "netconf_parser.yy"
+#line 598 "netconf_parser.yy"
                        {
     ctx.unique("socket-url", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1378 "netconf_parser.cc"
+#line 1383 "netconf_parser.cc"
     break;
 
   case 132: // socket_url: "socket-url" $@24 ":" "constant string"
-#line 596 "netconf_parser.yy"
+#line 601 "netconf_parser.yy"
                {
     ElementPtr url(new StringElement(yystack_[0].value.as < string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-url", url);
     ctx.leave();
 }
-#line 1388 "netconf_parser.cc"
+#line 1393 "netconf_parser.cc"
     break;
 
   case 133: // $@25: %empty
-#line 606 "netconf_parser.yy"
+#line 611 "netconf_parser.yy"
                  {
     ctx.unique("loggers", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -1396,102 +1401,102 @@ namespace isc { namespace netconf {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.LOGGERS);
 }
-#line 1400 "netconf_parser.cc"
+#line 1405 "netconf_parser.cc"
     break;
 
   case 134: // loggers: "loggers" $@25 ":" "[" loggers_entries "]"
-#line 612 "netconf_parser.yy"
+#line 617 "netconf_parser.yy"
                                                          {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1409 "netconf_parser.cc"
+#line 1414 "netconf_parser.cc"
     break;
 
   case 137: // loggers_entries: loggers_entries ","
-#line 621 "netconf_parser.yy"
+#line 626 "netconf_parser.yy"
                                        {
                    ctx.warnAboutExtraCommas(yystack_[0].location);
                    }
-#line 1417 "netconf_parser.cc"
+#line 1422 "netconf_parser.cc"
     break;
 
   case 138: // $@26: %empty
-#line 627 "netconf_parser.yy"
+#line 632 "netconf_parser.yy"
                              {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 1427 "netconf_parser.cc"
+#line 1432 "netconf_parser.cc"
     break;
 
   case 139: // logger_entry: "{" $@26 logger_params "}"
-#line 631 "netconf_parser.yy"
+#line 636 "netconf_parser.yy"
                                {
     ctx.stack_.pop_back();
 }
-#line 1435 "netconf_parser.cc"
+#line 1440 "netconf_parser.cc"
     break;
 
   case 142: // logger_params: logger_params ","
-#line 637 "netconf_parser.yy"
+#line 642 "netconf_parser.yy"
                                    {
                  ctx.warnAboutExtraCommas(yystack_[0].location);
                  }
-#line 1443 "netconf_parser.cc"
+#line 1448 "netconf_parser.cc"
     break;
 
   case 150: // $@27: %empty
-#line 651 "netconf_parser.yy"
+#line 656 "netconf_parser.yy"
            {
     ctx.unique("name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1452 "netconf_parser.cc"
+#line 1457 "netconf_parser.cc"
     break;
 
   case 151: // name: "name" $@27 ":" "constant string"
-#line 654 "netconf_parser.yy"
+#line 659 "netconf_parser.yy"
                {
     ElementPtr name(new StringElement(yystack_[0].value.as < string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("name", name);
     ctx.leave();
 }
-#line 1462 "netconf_parser.cc"
+#line 1467 "netconf_parser.cc"
     break;
 
   case 152: // debuglevel: "debuglevel" ":" "integer"
-#line 660 "netconf_parser.yy"
+#line 665 "netconf_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 1472 "netconf_parser.cc"
+#line 1477 "netconf_parser.cc"
     break;
 
   case 153: // $@28: %empty
-#line 666 "netconf_parser.yy"
+#line 671 "netconf_parser.yy"
                    {
     ctx.unique("severity", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1481 "netconf_parser.cc"
+#line 1486 "netconf_parser.cc"
     break;
 
   case 154: // severity: "severity" $@28 ":" "constant string"
-#line 669 "netconf_parser.yy"
+#line 674 "netconf_parser.yy"
                {
     ElementPtr sev(new StringElement(yystack_[0].value.as < string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("severity", sev);
     ctx.leave();
 }
-#line 1491 "netconf_parser.cc"
+#line 1496 "netconf_parser.cc"
     break;
 
   case 155: // $@29: %empty
-#line 675 "netconf_parser.yy"
+#line 680 "netconf_parser.yy"
                                     {
     ctx.unique("output_options", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -1499,122 +1504,122 @@ namespace isc { namespace netconf {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OUTPUT_OPTIONS);
 }
-#line 1503 "netconf_parser.cc"
+#line 1508 "netconf_parser.cc"
     break;
 
   case 156: // output_options_list: "output_options" $@29 ":" "[" output_options_list_content "]"
-#line 681 "netconf_parser.yy"
+#line 686 "netconf_parser.yy"
                                                                     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1512 "netconf_parser.cc"
+#line 1517 "netconf_parser.cc"
     break;
 
   case 159: // output_options_list_content: output_options_list_content ","
-#line 688 "netconf_parser.yy"
+#line 693 "netconf_parser.yy"
                                                                {
                                ctx.warnAboutExtraCommas(yystack_[0].location);
                                }
-#line 1520 "netconf_parser.cc"
+#line 1525 "netconf_parser.cc"
     break;
 
   case 160: // $@30: %empty
-#line 693 "netconf_parser.yy"
+#line 698 "netconf_parser.yy"
                              {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1530 "netconf_parser.cc"
+#line 1535 "netconf_parser.cc"
     break;
 
   case 161: // output_entry: "{" $@30 output_params_list "}"
-#line 697 "netconf_parser.yy"
+#line 702 "netconf_parser.yy"
                                     {
     ctx.stack_.pop_back();
 }
-#line 1538 "netconf_parser.cc"
+#line 1543 "netconf_parser.cc"
     break;
 
   case 164: // output_params_list: output_params_list ","
-#line 703 "netconf_parser.yy"
+#line 708 "netconf_parser.yy"
                                         {
                  ctx.warnAboutExtraCommas(yystack_[0].location);
                  }
-#line 1546 "netconf_parser.cc"
+#line 1551 "netconf_parser.cc"
     break;
 
   case 170: // $@31: %empty
-#line 715 "netconf_parser.yy"
+#line 720 "netconf_parser.yy"
                {
     ctx.unique("output", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1555 "netconf_parser.cc"
+#line 1560 "netconf_parser.cc"
     break;
 
   case 171: // output: "output" $@31 ":" "constant string"
-#line 718 "netconf_parser.yy"
+#line 723 "netconf_parser.yy"
                {
     ElementPtr sev(new StringElement(yystack_[0].value.as < string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output", sev);
     ctx.leave();
 }
-#line 1565 "netconf_parser.cc"
+#line 1570 "netconf_parser.cc"
     break;
 
   case 172: // flush: "flush" ":" "boolean"
-#line 724 "netconf_parser.yy"
+#line 729 "netconf_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 1575 "netconf_parser.cc"
+#line 1580 "netconf_parser.cc"
     break;
 
   case 173: // maxsize: "maxsize" ":" "integer"
-#line 730 "netconf_parser.yy"
+#line 735 "netconf_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 1585 "netconf_parser.cc"
+#line 1590 "netconf_parser.cc"
     break;
 
   case 174: // maxver: "maxver" ":" "integer"
-#line 736 "netconf_parser.yy"
+#line 741 "netconf_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 1595 "netconf_parser.cc"
+#line 1600 "netconf_parser.cc"
     break;
 
   case 175: // $@32: %empty
-#line 742 "netconf_parser.yy"
+#line 747 "netconf_parser.yy"
                  {
     ctx.unique("pattern", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1604 "netconf_parser.cc"
+#line 1609 "netconf_parser.cc"
     break;
 
   case 176: // pattern: "pattern" $@32 ":" "constant string"
-#line 745 "netconf_parser.yy"
+#line 750 "netconf_parser.yy"
                {
     ElementPtr sev(new StringElement(yystack_[0].value.as < string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pattern", sev);
     ctx.leave();
 }
-#line 1614 "netconf_parser.cc"
+#line 1619 "netconf_parser.cc"
     break;
 
 
-#line 1618 "netconf_parser.cc"
+#line 1623 "netconf_parser.cc"
 
             default:
               break;
@@ -2249,24 +2254,24 @@ namespace isc { namespace netconf {
   const short
   NetconfParser::yyrline_[] =
   {
-       0,   121,   121,   121,   122,   122,   123,   123,   131,   131,
-     142,   148,   149,   150,   151,   152,   153,   154,   158,   158,
-     169,   174,   175,   183,   188,   194,   199,   199,   205,   206,
-     209,   213,   217,   229,   237,   237,   249,   249,   267,   270,
-     275,   276,   279,   280,   281,   288,   289,   290,   291,   292,
-     293,   294,   295,   296,   299,   305,   311,   317,   317,   342,
-     342,   370,   370,   381,   382,   385,   386,   387,   392,   392,
-     400,   401,   402,   405,   408,   409,   412,   412,   421,   421,
-     432,   432,   443,   444,   447,   448,   449,   457,   458,   459,
-     460,   461,   465,   465,   477,   477,   489,   489,   501,   501,
-     513,   514,   515,   521,   522,   523,   524,   525,   526,   527,
-     528,   532,   532,   542,   542,   554,   555,   556,   561,   562,
-     563,   564,   565,   566,   569,   569,   578,   579,   580,   583,
-     583,   593,   593,   606,   606,   619,   620,   621,   627,   627,
-     635,   636,   637,   642,   643,   644,   645,   646,   647,   648,
-     651,   651,   660,   666,   666,   675,   675,   686,   687,   688,
-     693,   693,   701,   702,   703,   708,   709,   710,   711,   712,
-     715,   715,   724,   730,   736,   742,   742
+       0,   126,   126,   126,   127,   127,   128,   128,   136,   136,
+     147,   153,   154,   155,   156,   157,   158,   159,   163,   163,
+     174,   179,   180,   188,   193,   199,   204,   204,   210,   211,
+     214,   218,   222,   234,   242,   242,   254,   254,   272,   275,
+     280,   281,   284,   285,   286,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   304,   310,   316,   322,   322,   347,
+     347,   375,   375,   386,   387,   390,   391,   392,   397,   397,
+     405,   406,   407,   410,   413,   414,   417,   417,   426,   426,
+     437,   437,   448,   449,   452,   453,   454,   462,   463,   464,
+     465,   466,   470,   470,   482,   482,   494,   494,   506,   506,
+     518,   519,   520,   526,   527,   528,   529,   530,   531,   532,
+     533,   537,   537,   547,   547,   559,   560,   561,   566,   567,
+     568,   569,   570,   571,   574,   574,   583,   584,   585,   588,
+     588,   598,   598,   611,   611,   624,   625,   626,   632,   632,
+     640,   641,   642,   647,   648,   649,   650,   651,   652,   653,
+     656,   656,   665,   671,   671,   680,   680,   691,   692,   693,
+     698,   698,   706,   707,   708,   713,   714,   715,   716,   717,
+     720,   720,   729,   735,   741,   747,   747
   };
 
   void
@@ -2299,9 +2304,9 @@ namespace isc { namespace netconf {
 
 #line 14 "netconf_parser.yy"
 } } // isc::netconf
-#line 2303 "netconf_parser.cc"
+#line 2308 "netconf_parser.cc"
 
-#line 751 "netconf_parser.yy"
+#line 756 "netconf_parser.yy"
 
 
 void
index 5bde47985a8d2444193ac8ca0efa59009963b37a..2331490b4c60d7eb2ce9c9632a76cb29f08c3aa6 100644 (file)
@@ -1,3 +1,4 @@
+// Generated 202305171251
 // A Bison parser, made by GNU Bison 3.8.2.
 
 // Locations for Bison parsers in C++
index bb206c85d61a0e193c21800802653a50886b119a..e73d694df43595b2512e8a7595cbef097f3547e2 100644 (file)
 
 # include "eval_context.h"
 
-#line 52 "parser.cc"
+// Avoid warnings with the error counter.
+#if defined(__GNUC__) || defined(__clang__)
+#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
+#endif
+
+#line 57 "parser.cc"
 
 
 #ifndef YY_
 
 #line 14 "parser.yy"
 namespace isc { namespace eval {
-#line 145 "parser.cc"
+#line 150 "parser.cc"
 
   /// Build a parser object.
   EvalParser::EvalParser (EvalContext& ctx_yyarg)
@@ -458,93 +463,93 @@ namespace isc { namespace eval {
         switch (yykind)
     {
       case symbol_kind::S_STRING: // "constant string"
-#line 122 "parser.yy"
+#line 127 "parser.yy"
                  { yyoutput << yysym.value.template as < std::string > (); }
-#line 464 "parser.cc"
+#line 469 "parser.cc"
         break;
 
       case symbol_kind::S_INTEGER: // "integer"
-#line 122 "parser.yy"
+#line 127 "parser.yy"
                  { yyoutput << yysym.value.template as < std::string > (); }
-#line 470 "parser.cc"
+#line 475 "parser.cc"
         break;
 
       case symbol_kind::S_HEXSTRING: // "constant hexstring"
-#line 122 "parser.yy"
+#line 127 "parser.yy"
                  { yyoutput << yysym.value.template as < std::string > (); }
-#line 476 "parser.cc"
+#line 481 "parser.cc"
         break;
 
       case symbol_kind::S_OPTION_NAME: // "option name"
-#line 122 "parser.yy"
+#line 127 "parser.yy"
                  { yyoutput << yysym.value.template as < std::string > (); }
-#line 482 "parser.cc"
+#line 487 "parser.cc"
         break;
 
       case symbol_kind::S_IP_ADDRESS: // "ip address"
-#line 122 "parser.yy"
+#line 127 "parser.yy"
                  { yyoutput << yysym.value.template as < std::string > (); }
-#line 488 "parser.cc"
+#line 493 "parser.cc"
         break;
 
       case symbol_kind::S_integer_expr: // integer_expr
-#line 122 "parser.yy"
+#line 127 "parser.yy"
                  { yyoutput << yysym.value.template as < uint32_t > (); }
-#line 494 "parser.cc"
+#line 499 "parser.cc"
         break;
 
       case symbol_kind::S_option_code: // option_code
-#line 122 "parser.yy"
+#line 127 "parser.yy"
                  { yyoutput << yysym.value.template as < uint16_t > (); }
-#line 500 "parser.cc"
+#line 505 "parser.cc"
         break;
 
       case symbol_kind::S_sub_option_code: // sub_option_code
-#line 122 "parser.yy"
+#line 127 "parser.yy"
                  { yyoutput << yysym.value.template as < uint16_t > (); }
-#line 506 "parser.cc"
+#line 511 "parser.cc"
         break;
 
       case symbol_kind::S_option_repr_type: // option_repr_type
-#line 122 "parser.yy"
+#line 127 "parser.yy"
                  { yyoutput << yysym.value.template as < TokenOption::RepresentationType > (); }
-#line 512 "parser.cc"
+#line 517 "parser.cc"
         break;
 
       case symbol_kind::S_nest_level: // nest_level
-#line 122 "parser.yy"
+#line 127 "parser.yy"
                  { yyoutput << yysym.value.template as < int8_t > (); }
-#line 518 "parser.cc"
+#line 523 "parser.cc"
         break;
 
       case symbol_kind::S_pkt_metadata: // pkt_metadata
-#line 122 "parser.yy"
+#line 127 "parser.yy"
                  { yyoutput << yysym.value.template as < TokenPkt::MetadataType > (); }
-#line 524 "parser.cc"
+#line 529 "parser.cc"
         break;
 
       case symbol_kind::S_enterprise_id: // enterprise_id
-#line 122 "parser.yy"
+#line 127 "parser.yy"
                  { yyoutput << yysym.value.template as < uint32_t > (); }
-#line 530 "parser.cc"
+#line 535 "parser.cc"
         break;
 
       case symbol_kind::S_pkt4_field: // pkt4_field
-#line 122 "parser.yy"
+#line 127 "parser.yy"
                  { yyoutput << yysym.value.template as < TokenPkt4::FieldType > (); }
-#line 536 "parser.cc"
+#line 541 "parser.cc"
         break;
 
       case symbol_kind::S_pkt6_field: // pkt6_field
-#line 122 "parser.yy"
+#line 127 "parser.yy"
                  { yyoutput << yysym.value.template as < TokenPkt6::FieldType > (); }
-#line 542 "parser.cc"
+#line 547 "parser.cc"
         break;
 
       case symbol_kind::S_relay6_field: // relay6_field
-#line 122 "parser.yy"
+#line 127 "parser.yy"
                  { yyoutput << yysym.value.template as < TokenRelay6Field::FieldType > (); }
-#line 548 "parser.cc"
+#line 553 "parser.cc"
         break;
 
       default:
@@ -837,61 +842,61 @@ namespace isc { namespace eval {
           switch (yyn)
             {
   case 6: // bool_expr: "not" bool_expr
-#line 142 "parser.yy"
+#line 147 "parser.yy"
                 {
                     TokenPtr neg(new TokenNot());
                     ctx.expression.push_back(neg);
                 }
-#line 846 "parser.cc"
+#line 851 "parser.cc"
     break;
 
   case 7: // bool_expr: bool_expr "and" bool_expr
-#line 147 "parser.yy"
+#line 152 "parser.yy"
                 {
                     TokenPtr neg(new TokenAnd());
                     ctx.expression.push_back(neg);
                 }
-#line 855 "parser.cc"
+#line 860 "parser.cc"
     break;
 
   case 8: // bool_expr: bool_expr "or" bool_expr
-#line 152 "parser.yy"
+#line 157 "parser.yy"
                 {
                     TokenPtr neg(new TokenOr());
                     ctx.expression.push_back(neg);
                 }
-#line 864 "parser.cc"
+#line 869 "parser.cc"
     break;
 
   case 9: // bool_expr: string_expr "==" string_expr
-#line 157 "parser.yy"
+#line 162 "parser.yy"
                 {
                     TokenPtr eq(new TokenEqual());
                     ctx.expression.push_back(eq);
                 }
-#line 873 "parser.cc"
+#line 878 "parser.cc"
     break;
 
   case 10: // bool_expr: "option" "[" option_code "]" "." "exists"
-#line 162 "parser.yy"
+#line 167 "parser.yy"
                 {
                     TokenPtr opt(new TokenOption(yystack_[3].value.as < uint16_t > (), TokenOption::EXISTS));
                     ctx.expression.push_back(opt);
                 }
-#line 882 "parser.cc"
+#line 887 "parser.cc"
     break;
 
   case 11: // bool_expr: "option" "[" option_code "]" "." "option" "[" sub_option_code "]" "." "exists"
-#line 167 "parser.yy"
+#line 172 "parser.yy"
                 {
                     TokenPtr opt(new TokenSubOption(yystack_[8].value.as < uint16_t > (), yystack_[3].value.as < uint16_t > (), TokenOption::EXISTS));
                     ctx.expression.push_back(opt);
                 }
-#line 891 "parser.cc"
+#line 896 "parser.cc"
     break;
 
   case 12: // bool_expr: "relay4" "[" sub_option_code "]" "." "exists"
-#line 172 "parser.yy"
+#line 177 "parser.yy"
                 {
                    switch (ctx.getUniverse()) {
                    case Option::V4:
@@ -911,11 +916,11 @@ namespace isc { namespace eval {
                        error(yystack_[5].location, "relay4 can only be used in DHCPv4.");
                    }
                 }
-#line 915 "parser.cc"
+#line 920 "parser.cc"
     break;
 
   case 13: // bool_expr: "relay6" "[" nest_level "]" "." "option" "[" sub_option_code "]" "." "exists"
-#line 192 "parser.yy"
+#line 197 "parser.yy"
                 {
                     switch (ctx.getUniverse()) {
                     case Option::V6:
@@ -929,11 +934,11 @@ namespace isc { namespace eval {
                         error(yystack_[10].location, "relay6 can only be used in DHCPv6.");
                     }
                 }
-#line 933 "parser.cc"
+#line 938 "parser.cc"
     break;
 
   case 14: // bool_expr: "vendor-class" "[" enterprise_id "]" "." "exists"
-#line 206 "parser.yy"
+#line 211 "parser.yy"
               {
                   // Expression: vendor-class[1234].exists
                   //
@@ -942,11 +947,11 @@ namespace isc { namespace eval {
                   TokenPtr exist(new TokenVendorClass(ctx.getUniverse(), yystack_[3].value.as < uint32_t > (), TokenOption::EXISTS));
                   ctx.expression.push_back(exist);
               }
-#line 946 "parser.cc"
+#line 951 "parser.cc"
     break;
 
   case 15: // bool_expr: "vendor" "[" enterprise_id "]" "." "exists"
-#line 215 "parser.yy"
+#line 220 "parser.yy"
               {
                   // Expression: vendor[1234].exists
                   //
@@ -955,11 +960,11 @@ namespace isc { namespace eval {
                   TokenPtr exist(new TokenVendor(ctx.getUniverse(), yystack_[3].value.as < uint32_t > (), TokenOption::EXISTS));
                   ctx.expression.push_back(exist);
               }
-#line 959 "parser.cc"
+#line 964 "parser.cc"
     break;
 
   case 16: // bool_expr: "vendor" "[" enterprise_id "]" "." "option" "[" sub_option_code "]" "." "exists"
-#line 224 "parser.yy"
+#line 229 "parser.yy"
               {
                   // Expression vendor[1234].option[123].exists
                   //
@@ -969,11 +974,11 @@ namespace isc { namespace eval {
                   TokenPtr exist(new TokenVendor(ctx.getUniverse(), yystack_[8].value.as < uint32_t > (), TokenOption::EXISTS, yystack_[3].value.as < uint16_t > ()));
                   ctx.expression.push_back(exist);
                }
-#line 973 "parser.cc"
+#line 978 "parser.cc"
     break;
 
   case 17: // bool_expr: "member" "(" "constant string" ")"
-#line 234 "parser.yy"
+#line 239 "parser.yy"
               {
                   // Expression member('foo')
                   //
@@ -988,56 +993,56 @@ namespace isc { namespace eval {
                   TokenPtr member(new TokenMember(cc));
                   ctx.expression.push_back(member);
               }
-#line 992 "parser.cc"
+#line 997 "parser.cc"
     break;
 
   case 18: // string_expr: "constant string"
-#line 251 "parser.yy"
+#line 256 "parser.yy"
                   {
                       TokenPtr str(new TokenString(yystack_[0].value.as < std::string > ()));
                       ctx.expression.push_back(str);
                   }
-#line 1001 "parser.cc"
+#line 1006 "parser.cc"
     break;
 
   case 19: // string_expr: "constant hexstring"
-#line 256 "parser.yy"
+#line 261 "parser.yy"
                   {
                       TokenPtr hex(new TokenHexString(yystack_[0].value.as < std::string > ()));
                       ctx.expression.push_back(hex);
                   }
-#line 1010 "parser.cc"
+#line 1015 "parser.cc"
     break;
 
   case 20: // string_expr: "ip address"
-#line 261 "parser.yy"
+#line 266 "parser.yy"
                   {
                       TokenPtr ip(new TokenIpAddress(yystack_[0].value.as < std::string > ()));
                       ctx.expression.push_back(ip);
                   }
-#line 1019 "parser.cc"
+#line 1024 "parser.cc"
     break;
 
   case 21: // string_expr: "option" "[" option_code "]" "." option_repr_type
-#line 266 "parser.yy"
+#line 271 "parser.yy"
                   {
                       TokenPtr opt(new TokenOption(yystack_[3].value.as < uint16_t > (), yystack_[0].value.as < TokenOption::RepresentationType > ()));
                       ctx.expression.push_back(opt);
                   }
-#line 1028 "parser.cc"
+#line 1033 "parser.cc"
     break;
 
   case 22: // string_expr: "option" "[" option_code "]" "." "option" "[" sub_option_code "]" "." option_repr_type
-#line 271 "parser.yy"
+#line 276 "parser.yy"
                   {
                       TokenPtr opt(new TokenSubOption(yystack_[8].value.as < uint16_t > (), yystack_[3].value.as < uint16_t > (), yystack_[0].value.as < TokenOption::RepresentationType > ()));
                       ctx.expression.push_back(opt);
                   }
-#line 1037 "parser.cc"
+#line 1042 "parser.cc"
     break;
 
   case 23: // string_expr: "relay4" "[" sub_option_code "]" "." option_repr_type
-#line 276 "parser.yy"
+#line 281 "parser.yy"
                   {
                      switch (ctx.getUniverse()) {
                      case Option::V4:
@@ -1057,11 +1062,11 @@ namespace isc { namespace eval {
                          error(yystack_[5].location, "relay4 can only be used in DHCPv4.");
                      }
                   }
-#line 1061 "parser.cc"
+#line 1066 "parser.cc"
     break;
 
   case 24: // string_expr: "relay6" "[" nest_level "]" "." "option" "[" sub_option_code "]" "." option_repr_type
-#line 297 "parser.yy"
+#line 302 "parser.yy"
                   {
                      switch (ctx.getUniverse()) {
                      case Option::V6:
@@ -1075,20 +1080,20 @@ namespace isc { namespace eval {
                          error(yystack_[10].location, "relay6 can only be used in DHCPv6.");
                      }
                   }
-#line 1079 "parser.cc"
+#line 1084 "parser.cc"
     break;
 
   case 25: // string_expr: "pkt" "." pkt_metadata
-#line 312 "parser.yy"
+#line 317 "parser.yy"
                   {
                       TokenPtr pkt_metadata(new TokenPkt(yystack_[0].value.as < TokenPkt::MetadataType > ()));
                       ctx.expression.push_back(pkt_metadata);
                   }
-#line 1088 "parser.cc"
+#line 1093 "parser.cc"
     break;
 
   case 26: // string_expr: "pkt4" "." pkt4_field
-#line 317 "parser.yy"
+#line 322 "parser.yy"
                   {
                      switch (ctx.getUniverse()) {
                      case Option::V4:
@@ -1102,11 +1107,11 @@ namespace isc { namespace eval {
                          error(yystack_[2].location, "pkt4 can only be used in DHCPv4.");
                      }
                   }
-#line 1106 "parser.cc"
+#line 1111 "parser.cc"
     break;
 
   case 27: // string_expr: "pkt6" "." pkt6_field
-#line 331 "parser.yy"
+#line 336 "parser.yy"
                   {
                      switch (ctx.getUniverse()) {
                      case Option::V6:
@@ -1120,11 +1125,11 @@ namespace isc { namespace eval {
                          error(yystack_[2].location, "pkt6 can only be used in DHCPv6.");
                      }
                   }
-#line 1124 "parser.cc"
+#line 1129 "parser.cc"
     break;
 
   case 28: // string_expr: "relay6" "[" nest_level "]" "." relay6_field
-#line 345 "parser.yy"
+#line 350 "parser.yy"
                   {
                      switch (ctx.getUniverse()) {
                      case Option::V6:
@@ -1138,128 +1143,128 @@ namespace isc { namespace eval {
                          error(yystack_[5].location, "relay6 can only be used in DHCPv6.");
                      }
                   }
-#line 1142 "parser.cc"
+#line 1147 "parser.cc"
     break;
 
   case 29: // string_expr: "substring" "(" string_expr "," start_expr "," length_expr ")"
-#line 360 "parser.yy"
+#line 365 "parser.yy"
                   {
                       TokenPtr sub(new TokenSubstring());
                       ctx.expression.push_back(sub);
                   }
-#line 1151 "parser.cc"
+#line 1156 "parser.cc"
     break;
 
   case 30: // string_expr: "split" "(" string_expr "," string_expr "," int_expr ")"
-#line 365 "parser.yy"
+#line 370 "parser.yy"
                   {
                       TokenPtr split(new TokenSplit());
                       ctx.expression.push_back(split);
                   }
-#line 1160 "parser.cc"
+#line 1165 "parser.cc"
     break;
 
   case 31: // string_expr: "concat" "(" string_expr "," string_expr ")"
-#line 370 "parser.yy"
+#line 375 "parser.yy"
                   {
                       TokenPtr conc(new TokenConcat());
                       ctx.expression.push_back(conc);
                   }
-#line 1169 "parser.cc"
+#line 1174 "parser.cc"
     break;
 
   case 32: // string_expr: string_expr "+" string_expr
-#line 375 "parser.yy"
+#line 380 "parser.yy"
                   {
                       TokenPtr conc(new TokenConcat());
                       ctx.expression.push_back(conc);
                   }
-#line 1178 "parser.cc"
+#line 1183 "parser.cc"
     break;
 
   case 33: // string_expr: "ifelse" "(" bool_expr "," string_expr "," string_expr ")"
-#line 380 "parser.yy"
+#line 385 "parser.yy"
                   {
                       TokenPtr cond(new TokenIfElse());
                       ctx.expression.push_back(cond);
                   }
-#line 1187 "parser.cc"
+#line 1192 "parser.cc"
     break;
 
   case 34: // string_expr: "hexstring" "(" string_expr "," string_expr ")"
-#line 385 "parser.yy"
+#line 390 "parser.yy"
                   {
                       TokenPtr tohex(new TokenToHexString());
                       ctx.expression.push_back(tohex);
                   }
-#line 1196 "parser.cc"
+#line 1201 "parser.cc"
     break;
 
   case 35: // string_expr: "addrtotext" "(" string_expr ")"
-#line 390 "parser.yy"
+#line 395 "parser.yy"
                   {
                       TokenPtr addrtotext(new TokenIpAddressToText());
                       ctx.expression.push_back(addrtotext);
                   }
-#line 1205 "parser.cc"
+#line 1210 "parser.cc"
     break;
 
   case 36: // string_expr: "int8totext" "(" string_expr ")"
-#line 395 "parser.yy"
+#line 400 "parser.yy"
                   {
                       TokenPtr int8totext(new TokenInt8ToText());
                       ctx.expression.push_back(int8totext);
                   }
-#line 1214 "parser.cc"
+#line 1219 "parser.cc"
     break;
 
   case 37: // string_expr: "int16totext" "(" string_expr ")"
-#line 400 "parser.yy"
+#line 405 "parser.yy"
                   {
                       TokenPtr int16totext(new TokenInt16ToText());
                       ctx.expression.push_back(int16totext);
                   }
-#line 1223 "parser.cc"
+#line 1228 "parser.cc"
     break;
 
   case 38: // string_expr: "int32totext" "(" string_expr ")"
-#line 405 "parser.yy"
+#line 410 "parser.yy"
                   {
                       TokenPtr int32totext(new TokenInt32ToText());
                       ctx.expression.push_back(int32totext);
                   }
-#line 1232 "parser.cc"
+#line 1237 "parser.cc"
     break;
 
   case 39: // string_expr: "uint8totext" "(" string_expr ")"
-#line 410 "parser.yy"
+#line 415 "parser.yy"
                   {
                       TokenPtr uint8totext(new TokenUInt8ToText());
                       ctx.expression.push_back(uint8totext);
                   }
-#line 1241 "parser.cc"
+#line 1246 "parser.cc"
     break;
 
   case 40: // string_expr: "uint16totext" "(" string_expr ")"
-#line 415 "parser.yy"
+#line 420 "parser.yy"
                   {
                       TokenPtr uint16totext(new TokenUInt16ToText());
                       ctx.expression.push_back(uint16totext);
                   }
-#line 1250 "parser.cc"
+#line 1255 "parser.cc"
     break;
 
   case 41: // string_expr: "uint32totext" "(" string_expr ")"
-#line 420 "parser.yy"
+#line 425 "parser.yy"
                   {
                       TokenPtr uint32totext(new TokenUInt32ToText());
                       ctx.expression.push_back(uint32totext);
                   }
-#line 1259 "parser.cc"
+#line 1264 "parser.cc"
     break;
 
   case 42: // string_expr: "vendor" "." "enterprise"
-#line 425 "parser.yy"
+#line 430 "parser.yy"
                 {
                     // expression: vendor.enterprise
                     //
@@ -1268,11 +1273,11 @@ namespace isc { namespace eval {
                     TokenPtr vendor(new TokenVendor(ctx.getUniverse(), 0, TokenVendor::ENTERPRISE_ID));
                     ctx.expression.push_back(vendor);
                 }
-#line 1272 "parser.cc"
+#line 1277 "parser.cc"
     break;
 
   case 43: // string_expr: "vendor-class" "." "enterprise"
-#line 434 "parser.yy"
+#line 439 "parser.yy"
                 {
                     // expression: vendor-class.enterprise
                     //
@@ -1282,11 +1287,11 @@ namespace isc { namespace eval {
                                                          TokenVendor::ENTERPRISE_ID));
                     ctx.expression.push_back(vendor);
                 }
-#line 1286 "parser.cc"
+#line 1291 "parser.cc"
     break;
 
   case 44: // string_expr: "vendor" "[" enterprise_id "]" "." "option" "[" sub_option_code "]" "." option_repr_type
-#line 444 "parser.yy"
+#line 449 "parser.yy"
                 {
                     // This token will search for vendor option with
                     // specified enterprise-id.  If found, will search
@@ -1295,11 +1300,11 @@ namespace isc { namespace eval {
                     TokenPtr opt(new TokenVendor(ctx.getUniverse(), yystack_[8].value.as < uint32_t > (), yystack_[0].value.as < TokenOption::RepresentationType > (), yystack_[3].value.as < uint16_t > ()));
                     ctx.expression.push_back(opt);
                 }
-#line 1299 "parser.cc"
+#line 1304 "parser.cc"
     break;
 
   case 45: // string_expr: "vendor-class" "[" enterprise_id "]" "." "data"
-#line 453 "parser.yy"
+#line 458 "parser.yy"
                 {
                     // expression: vendor-class[1234].data
                     //
@@ -1312,11 +1317,11 @@ namespace isc { namespace eval {
                                                                TokenVendor::DATA, 0));
                     ctx.expression.push_back(vendor_class);
                 }
-#line 1316 "parser.cc"
+#line 1321 "parser.cc"
     break;
 
   case 46: // string_expr: "vendor-class" "[" enterprise_id "]" "." "data" "[" "integer" "]"
-#line 466 "parser.yy"
+#line 471 "parser.yy"
                 {
                     // expression: vendor-class[1234].data[5]
                     //
@@ -1329,264 +1334,264 @@ namespace isc { namespace eval {
                                                                TokenVendor::DATA, index));
                     ctx.expression.push_back(vendor_class);
                 }
-#line 1333 "parser.cc"
+#line 1338 "parser.cc"
     break;
 
   case 47: // string_expr: integer_expr
-#line 479 "parser.yy"
+#line 484 "parser.yy"
                 {
                     TokenPtr integer(new TokenInteger(yystack_[0].value.as < uint32_t > ()));
                     ctx.expression.push_back(integer);
                 }
-#line 1342 "parser.cc"
+#line 1347 "parser.cc"
     break;
 
   case 49: // integer_expr: "integer"
-#line 487 "parser.yy"
+#line 492 "parser.yy"
                  {
                      yylhs.value.as < uint32_t > () = ctx.convertUint32(yystack_[0].value.as < std::string > (), yystack_[0].location);
                  }
-#line 1350 "parser.cc"
+#line 1355 "parser.cc"
     break;
 
   case 50: // option_code: "integer"
-#line 493 "parser.yy"
+#line 498 "parser.yy"
                  {
                      yylhs.value.as < uint16_t > () = ctx.convertOptionCode(yystack_[0].value.as < std::string > (), yystack_[0].location);
                  }
-#line 1358 "parser.cc"
+#line 1363 "parser.cc"
     break;
 
   case 51: // option_code: "option name"
-#line 497 "parser.yy"
+#line 502 "parser.yy"
                  {
                      yylhs.value.as < uint16_t > () = ctx.convertOptionName(yystack_[0].value.as < std::string > (), yystack_[0].location);
                  }
-#line 1366 "parser.cc"
+#line 1371 "parser.cc"
     break;
 
   case 52: // sub_option_code: "integer"
-#line 503 "parser.yy"
+#line 508 "parser.yy"
                  {
                      yylhs.value.as < uint16_t > () = ctx.convertOptionCode(yystack_[0].value.as < std::string > (), yystack_[0].location);
                  }
-#line 1374 "parser.cc"
+#line 1379 "parser.cc"
     break;
 
   case 53: // option_repr_type: "text"
-#line 509 "parser.yy"
+#line 514 "parser.yy"
                       {
                           yylhs.value.as < TokenOption::RepresentationType > () = TokenOption::TEXTUAL;
                       }
-#line 1382 "parser.cc"
+#line 1387 "parser.cc"
     break;
 
   case 54: // option_repr_type: "hex"
-#line 513 "parser.yy"
+#line 518 "parser.yy"
                       {
                           yylhs.value.as < TokenOption::RepresentationType > () = TokenOption::HEXADECIMAL;
                       }
-#line 1390 "parser.cc"
+#line 1395 "parser.cc"
     break;
 
   case 55: // nest_level: "integer"
-#line 519 "parser.yy"
+#line 524 "parser.yy"
                  {
                      yylhs.value.as < int8_t > () = ctx.convertNestLevelNumber(yystack_[0].value.as < std::string > (), yystack_[0].location);
                  }
-#line 1398 "parser.cc"
+#line 1403 "parser.cc"
     break;
 
   case 56: // pkt_metadata: "iface"
-#line 528 "parser.yy"
+#line 533 "parser.yy"
                   {
                       yylhs.value.as < TokenPkt::MetadataType > () = TokenPkt::IFACE;
                   }
-#line 1406 "parser.cc"
+#line 1411 "parser.cc"
     break;
 
   case 57: // pkt_metadata: "src"
-#line 532 "parser.yy"
+#line 537 "parser.yy"
                   {
                       yylhs.value.as < TokenPkt::MetadataType > () = TokenPkt::SRC;
                   }
-#line 1414 "parser.cc"
+#line 1419 "parser.cc"
     break;
 
   case 58: // pkt_metadata: "dst"
-#line 536 "parser.yy"
+#line 541 "parser.yy"
                   {
                       yylhs.value.as < TokenPkt::MetadataType > () = TokenPkt::DST;
                   }
-#line 1422 "parser.cc"
+#line 1427 "parser.cc"
     break;
 
   case 59: // pkt_metadata: "len"
-#line 540 "parser.yy"
+#line 545 "parser.yy"
                   {
                       yylhs.value.as < TokenPkt::MetadataType > () = TokenPkt::LEN;
                   }
-#line 1430 "parser.cc"
+#line 1435 "parser.cc"
     break;
 
   case 60: // enterprise_id: "integer"
-#line 546 "parser.yy"
+#line 551 "parser.yy"
                    {
                        yylhs.value.as < uint32_t > () = ctx.convertUint32(yystack_[0].value.as < std::string > (), yystack_[0].location);
                    }
-#line 1438 "parser.cc"
+#line 1443 "parser.cc"
     break;
 
   case 61: // enterprise_id: "*"
-#line 550 "parser.yy"
+#line 555 "parser.yy"
                    {
                        yylhs.value.as < uint32_t > () = 0;
                    }
-#line 1446 "parser.cc"
+#line 1451 "parser.cc"
     break;
 
   case 62: // pkt4_field: "mac"
-#line 556 "parser.yy"
+#line 561 "parser.yy"
                 {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::CHADDR;
                 }
-#line 1454 "parser.cc"
+#line 1459 "parser.cc"
     break;
 
   case 63: // pkt4_field: "hlen"
-#line 560 "parser.yy"
+#line 565 "parser.yy"
                 {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::HLEN;
                 }
-#line 1462 "parser.cc"
+#line 1467 "parser.cc"
     break;
 
   case 64: // pkt4_field: "htype"
-#line 564 "parser.yy"
+#line 569 "parser.yy"
                 {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::HTYPE;
                 }
-#line 1470 "parser.cc"
+#line 1475 "parser.cc"
     break;
 
   case 65: // pkt4_field: "ciaddr"
-#line 568 "parser.yy"
+#line 573 "parser.yy"
                 {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::CIADDR;
                 }
-#line 1478 "parser.cc"
+#line 1483 "parser.cc"
     break;
 
   case 66: // pkt4_field: "giaddr"
-#line 572 "parser.yy"
+#line 577 "parser.yy"
                 {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::GIADDR;
                 }
-#line 1486 "parser.cc"
+#line 1491 "parser.cc"
     break;
 
   case 67: // pkt4_field: "yiaddr"
-#line 576 "parser.yy"
+#line 581 "parser.yy"
                 {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::YIADDR;
                 }
-#line 1494 "parser.cc"
+#line 1499 "parser.cc"
     break;
 
   case 68: // pkt4_field: "siaddr"
-#line 580 "parser.yy"
+#line 585 "parser.yy"
                 {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::SIADDR;
                 }
-#line 1502 "parser.cc"
+#line 1507 "parser.cc"
     break;
 
   case 69: // pkt4_field: "msgtype"
-#line 584 "parser.yy"
+#line 589 "parser.yy"
                  {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::MSGTYPE;
                  }
-#line 1510 "parser.cc"
+#line 1515 "parser.cc"
     break;
 
   case 70: // pkt4_field: "transid"
-#line 588 "parser.yy"
+#line 593 "parser.yy"
                  {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::TRANSID;
                  }
-#line 1518 "parser.cc"
+#line 1523 "parser.cc"
     break;
 
   case 71: // pkt6_field: "msgtype"
-#line 594 "parser.yy"
+#line 599 "parser.yy"
                  {
                      yylhs.value.as < TokenPkt6::FieldType > () = TokenPkt6::MSGTYPE;
                  }
-#line 1526 "parser.cc"
+#line 1531 "parser.cc"
     break;
 
   case 72: // pkt6_field: "transid"
-#line 598 "parser.yy"
+#line 603 "parser.yy"
                  {
                      yylhs.value.as < TokenPkt6::FieldType > () = TokenPkt6::TRANSID;
                  }
-#line 1534 "parser.cc"
+#line 1539 "parser.cc"
     break;
 
   case 73: // relay6_field: "peeraddr"
-#line 604 "parser.yy"
+#line 609 "parser.yy"
                    {
                        yylhs.value.as < TokenRelay6Field::FieldType > () = TokenRelay6Field::PEERADDR;
                    }
-#line 1542 "parser.cc"
+#line 1547 "parser.cc"
     break;
 
   case 74: // relay6_field: "linkaddr"
-#line 608 "parser.yy"
+#line 613 "parser.yy"
                    {
                        yylhs.value.as < TokenRelay6Field::FieldType > () = TokenRelay6Field::LINKADDR;
                    }
-#line 1550 "parser.cc"
+#line 1555 "parser.cc"
     break;
 
   case 75: // start_expr: "integer"
-#line 614 "parser.yy"
+#line 619 "parser.yy"
                 {
                     TokenPtr str(new TokenString(yystack_[0].value.as < std::string > ()));
                     ctx.expression.push_back(str);
                 }
-#line 1559 "parser.cc"
+#line 1564 "parser.cc"
     break;
 
   case 76: // length_expr: "integer"
-#line 621 "parser.yy"
+#line 626 "parser.yy"
                  {
                      TokenPtr str(new TokenString(yystack_[0].value.as < std::string > ()));
                      ctx.expression.push_back(str);
                  }
-#line 1568 "parser.cc"
+#line 1573 "parser.cc"
     break;
 
   case 77: // length_expr: "all"
-#line 626 "parser.yy"
+#line 631 "parser.yy"
                  {
                      TokenPtr str(new TokenString("all"));
                      ctx.expression.push_back(str);
                  }
-#line 1577 "parser.cc"
+#line 1582 "parser.cc"
     break;
 
   case 78: // int_expr: "integer"
-#line 632 "parser.yy"
+#line 637 "parser.yy"
                  {
                      TokenPtr str(new TokenString(yystack_[0].value.as < std::string > ()));
                      ctx.expression.push_back(str);
                  }
-#line 1586 "parser.cc"
+#line 1591 "parser.cc"
     break;
 
 
-#line 1590 "parser.cc"
+#line 1595 "parser.cc"
 
             default:
               break;
@@ -2170,14 +2175,14 @@ namespace isc { namespace eval {
   const short
   EvalParser::yyrline_[] =
   {
-       0,   131,   131,   132,   137,   140,   141,   146,   151,   156,
-     161,   166,   171,   191,   205,   214,   223,   233,   250,   255,
-     260,   265,   270,   275,   296,   311,   316,   330,   344,   359,
-     364,   369,   374,   379,   384,   389,   394,   399,   404,   409,
-     414,   419,   424,   433,   443,   452,   465,   478,   483,   486,
-     492,   496,   502,   508,   512,   518,   527,   531,   535,   539,
-     545,   549,   555,   559,   563,   567,   571,   575,   579,   583,
-     587,   593,   597,   603,   607,   613,   620,   625,   631
+       0,   136,   136,   137,   142,   145,   146,   151,   156,   161,
+     166,   171,   176,   196,   210,   219,   228,   238,   255,   260,
+     265,   270,   275,   280,   301,   316,   321,   335,   349,   364,
+     369,   374,   379,   384,   389,   394,   399,   404,   409,   414,
+     419,   424,   429,   438,   448,   457,   470,   483,   488,   491,
+     497,   501,   507,   513,   517,   523,   532,   536,   540,   544,
+     550,   554,   560,   564,   568,   572,   576,   580,   584,   588,
+     592,   598,   602,   608,   612,   618,   625,   630,   636
   };
 
   void
@@ -2210,9 +2215,9 @@ namespace isc { namespace eval {
 
 #line 14 "parser.yy"
 } } // isc::eval
-#line 2214 "parser.cc"
+#line 2219 "parser.cc"
 
-#line 638 "parser.yy"
+#line 643 "parser.yy"
 
 void
 isc::eval::EvalParser::error(const location_type& loc,