]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#30,!183] Regen flex/bison
authorFrancis Dupont <fdupont@isc.org>
Thu, 27 Dec 2018 23:25:14 +0000 (23:25 +0000)
committerFrancis Dupont <fdupont@isc.org>
Thu, 3 Jan 2019 09:05:03 +0000 (04:05 -0500)
src/bin/d2/d2_lexer.cc
src/bin/d2/d2_parser.cc
src/bin/d2/d2_parser.h
src/bin/d2/location.hh
src/bin/d2/position.hh
src/bin/d2/stack.hh

index 915f94cab71dc6bba6eb9a90dc6c0dc7f1464dba..823f62b4b6f5c344ad9a3138940b13dcf057ea0d 100644 (file)
@@ -691,8 +691,8 @@ static void yynoreturn yy_fatal_error ( const char* msg  );
 /* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\
        (yy_c_buf_p) = yy_cp;
 /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
-#define YY_NUM_RULES 64
-#define YY_END_OF_BUFFER 65
+#define YY_NUM_RULES 67
+#define YY_END_OF_BUFFER 68
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -700,50 +700,54 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static const flex_int16_t yy_accept[388] =
+static const flex_int16_t yy_accept[417] =
     {   0,
-       57,   57,    0,    0,    0,    0,    0,    0,    0,    0,
-       65,   63,   10,   11,   63,    1,   57,   54,   57,   57,
-       63,   56,   55,   63,   63,   63,   63,   63,   50,   51,
-       63,   63,   63,   52,   53,    5,    5,    5,   63,   63,
-       63,   10,   11,    0,    0,   46,    0,    0,    0,    0,
+       60,   60,    0,    0,    0,    0,    0,    0,    0,    0,
+       68,   66,   10,   11,   66,    1,   60,   57,   60,   60,
+       66,   59,   58,   66,   66,   66,   66,   66,   53,   54,
+       66,   66,   66,   55,   56,    5,    5,    5,   66,   66,
+       66,   10,   11,    0,    0,   49,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    1,
-       57,   57,    0,   56,   57,    3,    2,    6,    0,   57,
+       60,   60,    0,   59,   60,    3,    2,    6,    0,   60,
         0,    0,    0,    0,    0,    0,    4,    0,    0,    9,
-        0,   47,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   50,    0,    0,    0,    0,    0,    0,    0,    0,
 
-       49,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       52,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    2,    0,    0,    0,    0,    0,    0,
-        0,    8,    0,    0,    0,    0,    0,    0,    0,    0,
-       48,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   62,   60,    0,   59,   58,
-        0,    0,    0,    0,    0,    0,   19,   18,    0,    0,
+        0,    0,    0,    0,    2,    0,    0,    0,    0,    0,
+        0,    0,    8,    0,    0,    0,    0,    0,    0,    0,
+        0,   51,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   65,   63,
+        0,   62,   61,    0,    0,    0,    0,    0,    0,   19,
+       18,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,   61,   58,    0,    0,    0,    0,    0,    0,
-       20,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   40,    0,    0,
-        0,   14,    0,    0,    0,    0,    0,    0,    0,    0,
-       43,   44,    0,    0,    0,    0,    0,    0,    0,    0,
-       37,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    7,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   64,   61,    0,
+        0,    0,    0,    0,    0,   20,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   43,    0,    0,    0,   14,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   46,   47,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   40,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    7,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   39,    0,    0,   36,    0,    0,   32,    0,
-        0,    0,    0,    0,   33,    0,   22,    0,    0,    0,
-
-        0,    0,    0,    0,    0,   34,   38,    0,    0,    0,
-        0,    0,    0,    0,    0,   12,    0,    0,    0,    0,
-        0,    0,   28,    0,   26,    0,    0,    0,    0,   42,
-        0,    0,    0,   30,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   29,    0,    0,    0,   41,    0,
-        0,    0,    0,   13,   17,    0,    0,    0,    0,    0,
-        0,   31,    0,   27,    0,    0,    0,    0,    0,    0,
-       25,    0,   23,   16,    0,   24,   21,   45,    0,    0,
-        0,   35,    0,    0,    0,   15,    0
+        0,    0,   42,    0,    0,   39,    0,    0,   32,    0,
+
+        0,    0,    0,    0,    0,   36,    0,   22,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   37,   41,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   12,
+        0,    0,    0,    0,    0,    0,    0,   28,    0,   26,
+        0,    0,    0,    0,   45,    0,    0,    0,    0,    0,
+       30,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   29,    0,    0,    0,    0,   44,
+        0,    0,    0,    0,   13,   17,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   31,    0,   27,    0,    0,
+        0,    0,   35,   34,    0,    0,    0,   25,    0,   23,
+
+       16,    0,   24,   21,   48,    0,    0,    0,   33,    0,
+       38,    0,    0,    0,   15,    0
     } ;
 
 static const YY_CHAR yy_ec[256] =
@@ -789,103 +793,109 @@ static const YY_CHAR yy_meta[67] =
         3,    3,    3,    3,    3,    3
     } ;
 
-static const flex_int16_t yy_base[399] =
+static const flex_int16_t yy_base[428] =
     {   0,
         0,    0,   65,   68,   71,    0,   69,   73,   54,   70,
-      706,  707,   89,  702,  137,    0,  192,  707,  197,  200,
-       86,  212,  707,  684,   97,   74,   63,   69,  707,  707,
-       83,   68,   78,  707,  707,  707,  124,  690,  649,    0,
-      682,  128,  697,  212,  234,  707,  645,  651,  172,  643,
-      196,  196,  257,  645,  641,  187,  191,  640,  638,  648,
-      637,  650,   91,  630,  634,  643,  642,  209,  210,    0,
-      281,  289,  308,  314,  293,  707,    0,  707,  232,  257,
-      182,  224,  219,  283,  284,  285,  707,  643,  678,  707,
-      294,  707,  330,  630,  640,  291,  635,  296,  301,  674,
-
-        0,  376,  633,  626,  624,  635,  629,  617,  614,  616,
-      614,  659,  606,  622,  605,  614,  609,  606,  607,  602,
-      299,  613,  616,    0,  305,  312,  255,  309,  318,  324,
-      608,  707,    0,  600,  602,  319,  610,  649,  648,  647,
-      707,  408,  598,  599,  593,  590,  604,  636,  589,  584,
-      586,  603,  631,  595,  290,  596,  628,  583,  579,  592,
-      579,  590,  587,  576,  329,  707,  707,  330,  707,  707,
-      572,    0,  574,  337,  623,  580,  707,  707,  440,  571,
-      582,  614,  578,  566,  565,  574,  580,  566,  575,  564,
-      572,  567,  570,  607,  205,  553,  605,  554,  565,  552,
-
-      596,  595,  707,  707,  562,    0,  550,  597,  596,  558,
-      707,  547,  472,  551,  545,  554,  545,  537,  550,  587,
-      536,  551,  547,  549,  532,  523,  530,  707,  531,  528,
-      525,  707,  525,  523,  532,  529,  536,  533,    0,  525,
-      707,  707,  522,  528,  515,  514,  517,  526,  558,  512,
-      707,  524,  514,  509,  512,  506,  518,  555,  504,  505,
-      354,  514,  551,  498,  511,  500,  707,  542,  495,  545,
-      497,  525,  477,  464,  470,  450,  498,  464,  463,  462,
-      499,  498,  707,  451,  444,  707,  447,  489,  707,  436,
-      429,  438,  450,  483,  707,  427,  707,  438,  433,  428,
-
-      431,  431,  467,  415,  465,  707,  707,  430,  415,  413,
-      424,  454,  402,  400,  411,  707,  441,  398,  394,  386,
-      387,  399,  707,  384,  707,  382,  397,  380,  394,  707,
-      430,  391,  384,  707,  374,  420,  368,  346,  362,  408,
-      407,  358,  363,  357,  707,  347,  355,  350,  707,  400,
-      347,  398,  339,  707,  707,  344,  340,  330,  327,  326,
-      376,  707,  333,  707,  374,  373,  325,  371,  370,  364,
-      707,  313,  707,  707,  307,  707,  707,  707,  221,  258,
-      205,  707,  196,  185,  217,  707,  707,  517,  522,  527,
-      532,  537,  542,  545,  216,  130,  115,   87
-
+      735,  736,   89,  731,  137,    0,  192,  736,  197,  200,
+       86,  212,  736,  713,   97,   74,   63,   69,  736,  736,
+       83,   68,   78,  736,  736,  736,  124,  719,  678,    0,
+      711,  128,  726,  212,  234,  736,  674,  680,  172,  672,
+      196,  196,  257,  674,  670,  187,  191,  669,  667,  677,
+      666,  679,   91,  659,  663,  672,  179,  209,  210,    0,
+      281,  289,  308,  314,  293,  736,    0,  736,  232,  257,
+      224,  227,  276,  292,  293,  277,  736,  673,  708,  736,
+      294,  736,  328,  660,  670,  297,  665,  301,  307,  704,
+
+        0,  374,  663,  207,  655,  666,  660,  648,  645,  647,
+      645,  690,  637,  653,  636,  645,  640,  637,  638,  633,
+      300,  650,  643,  646,    0,  307,  317,  255,  313,  320,
+      322,  638,  736,    0,  630,  632,  321,  640,  679,  678,
+      677,  736,  406,  628,  629,  622,  622,  619,  633,  665,
+      618,  613,  615,  632,  660,  624,  292,  625,  657,  612,
+      608,  621,  608,  619,  612,  615,  604,  328,  736,  736,
+      332,  736,  736,  600,    0,  602,  339,  651,  608,  736,
+      736,  438,  599,  610,  597,  641,  605,  593,  592,  601,
+      607,  593,  602,  591,  599,  594,  597,  634,  209,  580,
+
+      632,  581,  592,  579,  590,  622,  621,  736,  736,  588,
+        0,  576,  623,  622,  584,  736,  573,  470,  577,  571,
+      569,  579,  570,  562,  575,  612,  561,  576,  572,  574,
+      557,  548,  555,  736,  556,  553,  550,  736,  550,  548,
+      557,  546,  553,  560,  557,    0,  549,  736,  736,  546,
+      552,  539,  538,  544,  540,  549,  581,  535,  736,  547,
+      537,  532,  535,  529,  541,  578,  527,  528,  204,  537,
+      574,  521,  567,  533,  522,  736,  564,  517,  567,  525,
+      565,  559,  517,  508,  526,  506,  554,  520,  519,  518,
+      555,  554,  736,  507,  500,  736,  503,  545,  736,  492,
+
+      322,  491,  500,  512,  545,  736,  498,  736,  492,  502,
+      485,  479,  478,  466,  502,  450,  500,  736,  736,  465,
+      450,  448,  459,  495,  460,  436,  441,  439,  444,  736,
+      483,  434,  439,  426,  418,  419,  431,  736,  416,  736,
+      414,  429,  412,  426,  736,  416,  412,  460,  421,  414,
+      736,  415,  403,  449,  388,  348,  391,  437,  436,  387,
+      392,  386,  394,  393,  736,  374,  382,  384,  376,  736,
+      420,  367,  418,  366,  736,  736,  362,  358,  354,  404,
+      403,  350,  349,  362,  398,  736,  355,  736,  396,  395,
+      341,  387,  736,  736,  386,  385,  327,  736,  331,  736,
+
+      736,  325,  736,  736,  736,  373,  334,  371,  736,  313,
+      736,  302,  207,  244,  736,  736,  515,  520,  525,  530,
+      535,  540,  543,  216,  130,  115,   87
     } ;
 
-static const flex_int16_t yy_def[399] =
+static const flex_int16_t yy_def[428] =
     {   0,
-      387,    1,  388,  388,    1,    5,    5,    5,    5,    5,
-      387,  387,  387,  387,  387,  389,  387,  387,  387,  387,
-      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
-      387,  387,  387,  387,  387,  387,  387,  387,  387,  390,
-      387,  387,  387,  391,   15,  387,   45,   45,   45,   45,
-       45,   45,  392,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,  389,
-      387,  387,  387,  387,  387,  387,  393,  387,  387,  387,
-      387,  387,  387,  387,  387,  387,  387,  387,  390,  387,
-      391,  387,  387,   45,   45,   45,   45,   45,   45,  394,
-
-       45,  392,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,  393,  387,  387,  387,  387,  387,  387,
-      387,  387,  395,   45,   45,   45,   45,   45,   45,  394,
-      387,  392,   45,   45,   45,   45,   45,   45,   45,   45,
+      416,    1,  417,  417,    1,    5,    5,    5,    5,    5,
+      416,  416,  416,  416,  416,  418,  416,  416,  416,  416,
+      416,  416,  416,  416,  416,  416,  416,  416,  416,  416,
+      416,  416,  416,  416,  416,  416,  416,  416,  416,  419,
+      416,  416,  416,  420,   15,  416,   45,   45,   45,   45,
+       45,   45,  421,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,  418,
+      416,  416,  416,  416,  416,  416,  422,  416,  416,  416,
+      416,  416,  416,  416,  416,  416,  416,  416,  419,  416,
+      420,  416,  416,   45,   45,   45,   45,   45,   45,  423,
+
+       45,  421,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,  387,  387,  387,  387,  387,  387,
-      387,  396,   45,   45,   45,   45,  387,  387,  392,   45,
+       45,   45,   45,   45,  422,  416,  416,  416,  416,  416,
+      416,  416,  416,  424,   45,   45,   45,   45,   45,   45,
+      423,  416,  421,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,  416,  416,  416,
+      416,  416,  416,  416,  425,   45,   45,   45,   45,  416,
+      416,  421,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45,  387,  387,  387,  397,   45,   45,   45,   45,
-      387,   45,  392,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,  387,   45,   45,
-       45,  387,   45,   45,   45,   45,   45,  387,  398,   45,
-      387,  387,   45,   45,   45,   45,   45,   45,   45,   45,
-      387,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,  387,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,  416,  416,  416,
+      426,   45,   45,   45,   45,  416,   45,  421,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,  387,   45,   45,  387,   45,   45,  387,   45,
-       45,   45,   45,   45,  387,   45,  387,   45,   45,   45,
-
-       45,   45,   45,   45,   45,  387,  387,   45,   45,   45,
-       45,   45,   45,   45,   45,  387,   45,   45,   45,   45,
-       45,   45,  387,   45,  387,   45,   45,   45,   45,  387,
-       45,   45,   45,  387,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,  387,   45,   45,   45,  387,   45,
-       45,   45,   45,  387,  387,   45,   45,   45,   45,   45,
-       45,  387,   45,  387,   45,   45,   45,   45,   45,   45,
-      387,   45,  387,  387,   45,  387,  387,  387,   45,   45,
-       45,  387,   45,   45,   45,  387,    0,  387,  387,  387,
-      387,  387,  387,  387,  387,  387,  387,  387
-
+       45,   45,   45,  416,   45,   45,   45,  416,   45,   45,
+       45,   45,   45,   45,  416,  427,   45,  416,  416,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,  416,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,  416,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,  416,   45,   45,  416,   45,   45,  416,   45,
+
+       45,   45,   45,   45,   45,  416,   45,  416,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,  416,  416,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,  416,
+       45,   45,   45,   45,   45,   45,   45,  416,   45,  416,
+       45,   45,   45,   45,  416,   45,   45,   45,   45,   45,
+      416,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,  416,   45,   45,   45,   45,  416,
+       45,   45,   45,   45,  416,  416,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,  416,   45,  416,   45,   45,
+       45,   45,  416,  416,   45,   45,   45,  416,   45,  416,
+
+      416,   45,  416,  416,  416,   45,   45,   45,  416,   45,
+      416,   45,   45,   45,  416,    0,  416,  416,  416,  416,
+      416,  416,  416,  416,  416,  416,  416
     } ;
 
-static const flex_int16_t yy_nxt[774] =
+static const flex_int16_t yy_nxt[803] =
     {   0,
        12,   13,   14,   13,   12,   15,   16,   12,   17,   18,
        19,   20,   21,   22,   22,   22,   23,   24,   12,   12,
@@ -899,9 +909,9 @@ static const flex_int16_t yy_nxt[774] =
        42,   91,   42,   76,   81,   12,   12,   82,   77,   12,
 
        83,   12,   82,   81,   12,   79,   12,   79,   12,   83,
-       80,   80,   80,   81,   12,   12,   12,   12,   39,  239,
+       80,   80,   80,   81,   12,   12,   12,   12,   39,  246,
        12,   82,   84,   12,   83,   42,   85,   42,   12,   42,
-      116,   42,  117,   86,  206,   12,   12,   44,   44,   44,
+      116,   42,  117,   86,  211,   12,   12,   44,   44,   44,
        45,   45,   46,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   47,
        48,   45,   45,   49,   50,   45,   45,   45,   45,   45,
@@ -909,72 +919,76 @@ static const flex_int16_t yy_nxt[774] =
        45,   57,   45,   58,   59,   49,   60,   61,   62,   63,
        64,   65,   66,   67,   68,   69,   45,   45,   45,   45,
 
-       45,   45,   45,   71,   96,   72,   72,   72,   71,  125,
+       45,   45,   45,   71,   96,   72,   72,   72,   71,  296,
        74,   74,   74,   75,   75,   75,   73,   92,   98,   99,
-      172,   73,  386,   71,   73,   74,   74,   74,   96,  105,
-      106,   98,  125,   99,  107,   73,   73,   98,   99,  108,
-       73,  109,  385,   73,  110,   80,   80,   80,   93,  229,
-       98,  126,   99,  127,  384,   73,   45,   45,  383,  230,
-       45,   45,  101,  382,  381,  122,  123,   45,   45,   45,
-       80,   80,   80,   45,  126,   45,   45,  127,   45,  167,
+      175,   73,  121,   71,   73,   74,   74,   74,   96,  105,
+      106,   98,  122,   99,  107,   73,   73,   98,   99,  108,
+       73,  109,  297,   73,  110,   80,   80,   80,   93,  415,
+       98,  126,   99,  235,  127,   73,   45,   45,  145,  146,
+       45,   45,  101,  236,  414,  123,  124,   45,   45,   45,
+       80,   80,   80,   45,  126,   45,   45,  127,   45,  170,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   75,   75,   75,   45,  167,   92,
+       45,   45,   45,   45,   75,   75,   75,   45,  170,   92,
 
        71,   45,   72,   72,   72,   73,   75,   75,   75,   45,
-      125,  126,   45,   73,   45,  102,   79,   73,   79,  127,
-      136,   80,   80,   80,   73,   71,  138,   74,   74,   74,
-       93,  139,   73,  128,  129,   91,   73,  165,   73,  166,
-      161,  165,   91,  130,  136,  166,  192,  175,  167,  193,
-      138,  208,  209,  203,  203,  139,  351,   73,  162,  286,
-      210,  165,  166,  380,  379,  168,   91,  170,  169,  378,
-       91,  175,  203,  204,   91,  377,  376,  375,  374,  373,
-      372,  371,   91,  370,  369,   91,  368,   91,  133,  142,
-      142,  142,  287,  367,  366,  365,  142,  142,  142,  142,
-
-      142,  142,  352,  364,  363,  362,  361,  360,  359,  358,
-      357,  356,  355,  354,  353,  142,  142,  142,  142,  142,
-      142,  179,  179,  179,  350,  349,  348,  347,  179,  179,
-      179,  179,  179,  179,  346,  345,  344,  343,  342,  341,
-      340,  339,  338,  337,  336,  335,  334,  179,  179,  179,
-      179,  179,  179,  213,  213,  213,  333,  332,  331,  330,
-      213,  213,  213,  213,  213,  213,  329,  328,  327,  326,
-      325,  324,  323,  322,  321,  320,  319,  318,  317,  213,
-      213,  213,  213,  213,  213,   45,   45,   45,  316,  315,
-      314,  313,   45,   45,   45,   45,   45,   45,  312,  311,
-
-      310,  309,  308,  307,  306,  305,  304,  303,  302,  301,
-      300,   45,   45,   45,   45,   45,   45,   36,   36,   36,
-       36,   36,   70,  299,   70,   70,   70,   89,  298,   89,
-      297,   89,   91,   91,   91,   91,   91,  100,  100,  100,
-      100,  100,  124,  296,  124,  124,  124,  140,  140,  140,
-      295,  294,  293,  292,  291,  290,  289,  288,  285,  284,
-      283,  282,  281,  280,  279,  278,  277,  276,  275,  274,
-      273,  272,  271,  270,  269,  268,  267,  266,  265,  264,
-      263,  262,  261,  260,  259,  258,  257,  256,  255,  254,
-      253,  252,  251,  250,  249,  248,  247,  246,  245,  244,
-
-      243,  242,  241,  240,  238,  237,  236,  235,  234,  233,
-      232,  231,  228,  227,  226,  225,  224,  223,  222,  221,
-      220,  219,  218,  217,  216,  215,  214,  212,  211,  207,
-      205,  202,  201,  200,  199,  198,  197,  196,  195,  194,
-      191,  190,  189,  188,  187,  186,  185,  184,  183,  182,
-      181,  180,  141,  178,  177,  176,  174,  173,  171,  164,
-      163,  160,  159,  158,  157,  156,  155,  154,  153,  152,
-      151,  150,  149,  148,  147,  146,  145,  144,  143,  141,
-      137,  135,  134,  132,  131,  121,  120,  119,  118,  115,
-      114,  113,  112,  111,  104,  103,   97,   95,   94,   43,
-
-       90,   88,   87,   78,   43,  387,   11,  387,  387,  387,
-      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
-      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
-      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
-      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
-      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
-      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
-      387,  387,  387
+      128,  128,   45,   73,   45,  102,   79,   73,   79,  126,
+      127,   80,   80,   80,   73,   71,  137,   74,   74,   74,
+       93,  139,   73,   91,  128,  131,   73,  140,   73,  168,
+       91,  163,  129,  130,  169,  168,  170,  169,  196,  178,
+      137,  197,  208,  213,  214,  139,  208,   73,  372,  164,
+      413,  140,  215,  168,   91,  173,  412,  169,   91,  171,
+      172,  208,   91,  178,  325,  209,  411,  410,  409,  326,
+       91,  408,  407,   91,  406,   91,  134,  143,  143,  143,
+      405,  404,  403,  402,  143,  143,  143,  143,  143,  143,
+
+      401,  400,  399,  398,  373,  397,  396,  395,  394,  393,
+      392,  391,  390,  143,  143,  143,  143,  143,  143,  182,
+      182,  182,  389,  388,  387,  386,  182,  182,  182,  182,
+      182,  182,  385,  384,  383,  382,  381,  380,  379,  378,
+      377,  376,  375,  374,  371,  182,  182,  182,  182,  182,
+      182,  218,  218,  218,  370,  369,  368,  367,  218,  218,
+      218,  218,  218,  218,  366,  365,  364,  363,  362,  361,
+      360,  359,  358,  357,  356,  355,  354,  218,  218,  218,
+      218,  218,  218,   45,   45,   45,  353,  352,  351,  350,
+       45,   45,   45,   45,   45,   45,  349,  348,  347,  346,
+
+      345,  344,  343,  342,  341,  340,  339,  338,  337,   45,
+       45,   45,   45,   45,   45,   36,   36,   36,   36,   36,
+       70,  336,   70,   70,   70,   89,  335,   89,  334,   89,
+       91,   91,   91,   91,   91,  100,  100,  100,  100,  100,
+      125,  333,  125,  125,  125,  141,  141,  141,  332,  331,
+      330,  329,  328,  327,  324,  323,  322,  321,  320,  319,
+      318,  317,  316,  315,  314,  313,  312,  311,  310,  309,
+      308,  307,  306,  305,  304,  303,  302,  301,  300,  299,
+      298,  295,  294,  293,  292,  291,  290,  289,  288,  287,
+      286,  285,  284,  283,  282,  281,  280,  279,  278,  277,
+
+      276,  275,  274,  273,  272,  271,  270,  269,  268,  267,
+      266,  265,  264,  263,  262,  261,  260,  259,  258,  257,
+      256,  255,  254,  253,  252,  251,  250,  249,  248,  247,
+      245,  244,  243,  242,  241,  240,  239,  238,  237,  234,
+      233,  232,  231,  230,  229,  228,  227,  226,  225,  224,
+      223,  222,  221,  220,  219,  217,  216,  212,  210,  207,
+      206,  205,  204,  203,  202,  201,  200,  199,  198,  195,
+      194,  193,  192,  191,  190,  189,  188,  187,  186,  185,
+      184,  183,  142,  181,  180,  179,  177,  176,  174,  167,
+      166,  165,  162,  161,  160,  159,  158,  157,  156,  155,
+
+      154,  153,  152,  151,  150,  149,  148,  147,  144,  142,
+      138,  136,  135,  133,  132,  120,  119,  118,  115,  114,
+      113,  112,  111,  104,  103,   97,   95,   94,   43,   90,
+       88,   87,   78,   43,  416,   11,  416,  416,  416,  416,
+      416,  416,  416,  416,  416,  416,  416,  416,  416,  416,
+      416,  416,  416,  416,  416,  416,  416,  416,  416,  416,
+      416,  416,  416,  416,  416,  416,  416,  416,  416,  416,
+      416,  416,  416,  416,  416,  416,  416,  416,  416,  416,
+      416,  416,  416,  416,  416,  416,  416,  416,  416,  416,
+      416,  416,  416,  416,  416,  416,  416,  416,  416,  416,
+
+      416,  416
     } ;
 
-static const flex_int16_t yy_chk[774] =
+static const flex_int16_t yy_chk[803] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -985,12 +999,12 @@ static const flex_int16_t yy_chk[774] =
         1,    1,    1,    1,    1,    1,    3,    3,    3,    4,
         4,    4,    3,    9,    7,    4,    5,    5,    8,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,   10,
-       13,  398,   13,   21,   26,    5,    5,   27,   21,    5,
+       13,  427,   13,   21,   26,    5,    5,   27,   21,    5,
 
        28,    9,   32,   31,    5,   25,    5,   25,    5,   33,
-       25,   25,   25,   26,    5,    5,    7,   10,    5,  397,
+       25,   25,   25,   26,    5,    5,    7,   10,    5,  426,
         8,   27,   31,    5,   28,   37,   32,   37,    5,   42,
-       63,   42,   63,   33,  396,    5,    5,   15,   15,   15,
+       63,   42,   63,   33,  425,    5,    5,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
@@ -998,69 +1012,73 @@ static const flex_int16_t yy_chk[774] =
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
 
-       15,   15,   15,   17,   49,   17,   17,   17,   19,   81,
+       15,   15,   15,   17,   49,   17,   17,   17,   19,  269,
        19,   19,   19,   20,   20,   20,   17,   44,   51,   52,
-      395,   19,  385,   22,   20,   22,   22,   22,   49,   56,
-       56,   68,   81,   69,   56,   17,   22,   51,   52,   56,
-       19,   57,  384,   20,   57,   79,   79,   79,   44,  195,
-       68,   82,   69,   83,  383,   22,   45,   45,  381,  195,
-       45,   45,   53,  380,  379,   68,   69,   45,   45,   53,
-       80,   80,   80,   45,   82,   45,   45,   83,   45,  127,
+      424,   19,   67,   22,   20,   22,   22,   22,   49,   56,
+       56,   68,   67,   69,   56,   17,   22,   51,   52,   56,
+       19,   57,  269,   20,   57,   79,   79,   79,   44,  414,
+       68,   81,   69,  199,   82,   22,   45,   45,  104,  104,
+       45,   45,   53,  199,  413,   68,   69,   45,   45,   53,
+       80,   80,   80,   45,   81,   45,   45,   82,   45,  128,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   53,   71,   71,   71,   53,  127,   91,
+       45,   45,   45,   53,   71,   71,   71,   53,  128,   91,
 
        72,   53,   72,   72,   72,   71,   75,   75,   75,   53,
-       84,   85,   53,   72,   53,   53,   73,   75,   73,   86,
-       96,   73,   73,   73,   71,   74,   98,   74,   74,   74,
-       91,   99,   72,   84,   85,   93,   75,  125,   74,  126,
-      121,  128,   93,   86,   96,  129,  155,  136,  130,  155,
-       98,  174,  174,  165,  168,   99,  338,   74,  121,  261,
-      174,  125,  126,  375,  372,  128,   93,  130,  129,  370,
-       93,  136,  165,  168,   93,  369,  368,  367,  366,  365,
-      363,  361,   93,  360,  359,   93,  358,   93,   93,  102,
-      102,  102,  261,  357,  356,  353,  102,  102,  102,  102,
-
-      102,  102,  338,  352,  351,  350,  348,  347,  346,  344,
-      343,  342,  341,  340,  339,  102,  102,  102,  102,  102,
-      102,  142,  142,  142,  337,  336,  335,  333,  142,  142,
-      142,  142,  142,  142,  332,  331,  329,  328,  327,  326,
-      324,  322,  321,  320,  319,  318,  317,  142,  142,  142,
-      142,  142,  142,  179,  179,  179,  315,  314,  313,  312,
-      179,  179,  179,  179,  179,  179,  311,  310,  309,  308,
-      305,  304,  303,  302,  301,  300,  299,  298,  296,  179,
-      179,  179,  179,  179,  179,  213,  213,  213,  294,  293,
-      292,  291,  213,  213,  213,  213,  213,  213,  290,  288,
-
-      287,  285,  284,  282,  281,  280,  279,  278,  277,  276,
-      275,  213,  213,  213,  213,  213,  213,  388,  388,  388,
-      388,  388,  389,  274,  389,  389,  389,  390,  273,  390,
-      272,  390,  391,  391,  391,  391,  391,  392,  392,  392,
-      392,  392,  393,  271,  393,  393,  393,  394,  394,  394,
-      270,  269,  268,  266,  265,  264,  263,  262,  260,  259,
-      258,  257,  256,  255,  254,  253,  252,  250,  249,  248,
-      247,  246,  245,  244,  243,  240,  238,  237,  236,  235,
-      234,  233,  231,  230,  229,  227,  226,  225,  224,  223,
-      222,  221,  220,  219,  218,  217,  216,  215,  214,  212,
-
-      210,  209,  208,  207,  205,  202,  201,  200,  199,  198,
-      197,  196,  194,  193,  192,  191,  190,  189,  188,  187,
-      186,  185,  184,  183,  182,  181,  180,  176,  175,  173,
-      171,  164,  163,  162,  161,  160,  159,  158,  157,  156,
-      154,  153,  152,  151,  150,  149,  148,  147,  146,  145,
-      144,  143,  140,  139,  138,  137,  135,  134,  131,  123,
-      122,  120,  119,  118,  117,  116,  115,  114,  113,  112,
-      111,  110,  109,  108,  107,  106,  105,  104,  103,  100,
-       97,   95,   94,   89,   88,   67,   66,   65,   64,   62,
-       61,   60,   59,   58,   55,   54,   50,   48,   47,   43,
-
-       41,   39,   38,   24,   14,   11,  387,  387,  387,  387,
-      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
-      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
-      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
-      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
-      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
-      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
-      387,  387,  387
+       83,   86,   53,   72,   53,   53,   73,   75,   73,   84,
+       85,   73,   73,   73,   71,   74,   96,   74,   74,   74,
+       91,   98,   72,   93,   83,   86,   75,   99,   74,  126,
+       93,  121,   84,   85,  127,  129,  131,  130,  157,  137,
+       96,  157,  168,  177,  177,   98,  171,   74,  356,  121,
+      412,   99,  177,  126,   93,  131,  410,  127,   93,  129,
+      130,  168,   93,  137,  301,  171,  408,  407,  406,  301,
+       93,  402,  399,   93,  397,   93,   93,  102,  102,  102,
+      396,  395,  392,  391,  102,  102,  102,  102,  102,  102,
+
+      390,  389,  387,  385,  356,  384,  383,  382,  381,  380,
+      379,  378,  377,  102,  102,  102,  102,  102,  102,  143,
+      143,  143,  374,  373,  372,  371,  143,  143,  143,  143,
+      143,  143,  369,  368,  367,  366,  364,  363,  362,  361,
+      360,  359,  358,  357,  355,  143,  143,  143,  143,  143,
+      143,  182,  182,  182,  354,  353,  352,  350,  182,  182,
+      182,  182,  182,  182,  349,  348,  347,  346,  344,  343,
+      342,  341,  339,  337,  336,  335,  334,  182,  182,  182,
+      182,  182,  182,  218,  218,  218,  333,  332,  331,  329,
+      218,  218,  218,  218,  218,  218,  328,  327,  326,  325,
+
+      324,  323,  322,  321,  320,  317,  316,  315,  314,  218,
+      218,  218,  218,  218,  218,  417,  417,  417,  417,  417,
+      418,  313,  418,  418,  418,  419,  312,  419,  311,  419,
+      420,  420,  420,  420,  420,  421,  421,  421,  421,  421,
+      422,  310,  422,  422,  422,  423,  423,  423,  309,  307,
+      305,  304,  303,  302,  300,  298,  297,  295,  294,  292,
+      291,  290,  289,  288,  287,  286,  285,  284,  283,  282,
+      281,  280,  279,  278,  277,  275,  274,  273,  272,  271,
+      270,  268,  267,  266,  265,  264,  263,  262,  261,  260,
+      258,  257,  256,  255,  254,  253,  252,  251,  250,  247,
+
+      245,  244,  243,  242,  241,  240,  239,  237,  236,  235,
+      233,  232,  231,  230,  229,  228,  227,  226,  225,  224,
+      223,  222,  221,  220,  219,  217,  215,  214,  213,  212,
+      210,  207,  206,  205,  204,  203,  202,  201,  200,  198,
+      197,  196,  195,  194,  193,  192,  191,  190,  189,  188,
+      187,  186,  185,  184,  183,  179,  178,  176,  174,  167,
+      166,  165,  164,  163,  162,  161,  160,  159,  158,  156,
+      155,  154,  153,  152,  151,  150,  149,  148,  147,  146,
+      145,  144,  141,  140,  139,  138,  136,  135,  132,  124,
+      123,  122,  120,  119,  118,  117,  116,  115,  114,  113,
+
+      112,  111,  110,  109,  108,  107,  106,  105,  103,  100,
+       97,   95,   94,   89,   88,   66,   65,   64,   62,   61,
+       60,   59,   58,   55,   54,   50,   48,   47,   43,   41,
+       39,   38,   24,   14,   11,  416,  416,  416,  416,  416,
+      416,  416,  416,  416,  416,  416,  416,  416,  416,  416,
+      416,  416,  416,  416,  416,  416,  416,  416,  416,  416,
+      416,  416,  416,  416,  416,  416,  416,  416,  416,  416,
+      416,  416,  416,  416,  416,  416,  416,  416,  416,  416,
+      416,  416,  416,  416,  416,  416,  416,  416,  416,  416,
+      416,  416,  416,  416,  416,  416,  416,  416,  416,  416,
+
+      416,  416
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1069,15 +1087,15 @@ static char *yy_last_accepting_cpos;
 extern int yy_flex_debug;
 int yy_flex_debug = 1;
 
-static const flex_int16_t yy_rule_linenum[64] =
+static const flex_int16_t yy_rule_linenum[67] =
     {   0,
       133,  135,  137,  142,  143,  148,  149,  150,  162,  165,
       170,  176,  185,  196,  207,  216,  225,  234,  244,  254,
-      264,  280,  296,  305,  314,  324,  334,  344,  355,  364,
-      374,  384,  395,  404,  413,  422,  431,  440,  449,  458,
-      471,  480,  489,  498,  507,  517,  616,  621,  626,  631,
-      632,  633,  634,  635,  636,  638,  656,  669,  674,  678,
-      680,  682,  684
+      264,  281,  298,  307,  316,  326,  336,  346,  357,  366,
+      376,  386,  396,  405,  414,  424,  433,  442,  451,  460,
+      469,  478,  487,  500,  509,  518,  527,  536,  546,  645,
+      650,  655,  660,  661,  662,  663,  664,  665,  667,  685,
+      698,  703,  707,  709,  711,  713
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -1128,7 +1146,7 @@ unsigned int comment_start_line = 0;
 
 /* To avoid the call to exit... oops! */
 #define YY_FATAL_ERROR(msg) isc::d2::D2ParserContext::fatal(msg)
-#line 1131 "d2_lexer.cc"
+#line 1149 "d2_lexer.cc"
 /* noyywrap disables automatic rewinding for the next file to parse. Since we
    always parse only a single string, there's no need to do any wraps. And
    using yywrap requires linking with -lfl, which provides the default yywrap
@@ -1154,8 +1172,8 @@ unsigned int comment_start_line = 0;
    by moving it ahead by yyleng bytes. yyleng specifies the length of the
    currently matched token. */
 #define YY_USER_ACTION  driver.loc_.columns(yyleng);
-#line 1157 "d2_lexer.cc"
-#line 1158 "d2_lexer.cc"
+#line 1175 "d2_lexer.cc"
+#line 1176 "d2_lexer.cc"
 
 #define INITIAL 0
 #define COMMENT 1
@@ -1473,7 +1491,7 @@ YY_DECL
     }
 
 
-#line 1476 "d2_lexer.cc"
+#line 1494 "d2_lexer.cc"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@ -1502,13 +1520,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 388 )
+                               if ( yy_current_state >= 417 )
                                        yy_c = yy_meta[yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
                        ++yy_cp;
                        }
-               while ( yy_current_state != 387 );
+               while ( yy_current_state != 416 );
                yy_cp = (yy_last_accepting_cpos);
                yy_current_state = (yy_last_accepting_state);
 
@@ -1527,13 +1545,13 @@ do_action:      /* This label is used only to access EOF actions. */
                        {
                        if ( yy_act == 0 )
                                fprintf( stderr, "--scanner backing up\n" );
-                       else if ( yy_act < 64 )
+                       else if ( yy_act < 67 )
                                fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
                                         (long)yy_rule_linenum[yy_act], yytext );
-                       else if ( yy_act == 64 )
+                       else if ( yy_act == 67 )
                                fprintf( stderr, "--accepting default rule (\"%s\")\n",
                                         yytext );
-                       else if ( yy_act == 65 )
+                       else if ( yy_act == 68 )
                                fprintf( stderr, "--(end of buffer or a NUL)\n" );
                        else
                                fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -1764,6 +1782,7 @@ YY_RULE_SETUP
     case isc::d2::D2ParserContext::DNS_SERVERS:
     case isc::d2::D2ParserContext::TSIG_KEY:
     case isc::d2::D2ParserContext::TSIG_KEYS:
+    case isc::d2::D2ParserContext::CONTROL_SOCKET:
     case isc::d2::D2ParserContext::LOGGERS:
         return isc::d2::D2Parser::make_USER_CONTEXT(driver.loc_);
     default:
@@ -1773,7 +1792,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 280 "d2_lexer.ll"
+#line 281 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::DHCPDDNS:
@@ -1783,6 +1802,7 @@ YY_RULE_SETUP
     case isc::d2::D2ParserContext::DNS_SERVERS:
     case isc::d2::D2ParserContext::TSIG_KEY:
     case isc::d2::D2ParserContext::TSIG_KEYS:
+    case isc::d2::D2ParserContext::CONTROL_SOCKET:
     case isc::d2::D2ParserContext::LOGGERS:
         return isc::d2::D2Parser::make_COMMENT(driver.loc_);
     default:
@@ -1792,7 +1812,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 296 "d2_lexer.ll"
+#line 298 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::DHCPDDNS:
@@ -1804,7 +1824,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 305 "d2_lexer.ll"
+#line 307 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::DHCPDDNS:
@@ -1816,7 +1836,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 314 "d2_lexer.ll"
+#line 316 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::FORWARD_DDNS:
@@ -1829,7 +1849,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 324 "d2_lexer.ll"
+#line 326 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::DDNS_DOMAIN:
@@ -1842,7 +1862,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 334 "d2_lexer.ll"
+#line 336 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::DDNS_DOMAIN:
@@ -1855,7 +1875,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 344 "d2_lexer.ll"
+#line 346 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::DNS_SERVER:
@@ -1868,7 +1888,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 355 "d2_lexer.ll"
+#line 357 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::DHCPDDNS:
@@ -1880,7 +1900,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 364 "d2_lexer.ll"
+#line 366 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::TSIG_KEY:
@@ -1893,7 +1913,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 374 "d2_lexer.ll"
+#line 376 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::TSIG_KEY:
@@ -1906,7 +1926,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 384 "d2_lexer.ll"
+#line 386 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::TSIG_KEY:
@@ -1919,7 +1939,43 @@ YY_RULE_SETUP
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 395 "d2_lexer.ll"
+#line 396 "d2_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::d2::D2ParserContext::DHCPDDNS:
+        return isc::d2::D2Parser::make_CONTROL_SOCKET(driver.loc_);
+    default:
+        return isc::d2::D2Parser::make_STRING("control-socket", driver.loc_);
+    }
+}
+       YY_BREAK
+case 34:
+YY_RULE_SETUP
+#line 405 "d2_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::d2::D2ParserContext::CONTROL_SOCKET:
+        return isc::d2::D2Parser::make_SOCKET_TYPE(driver.loc_);
+    default:
+        return isc::d2::D2Parser::make_STRING("socket-type", driver.loc_);
+    }
+}
+       YY_BREAK
+case 35:
+YY_RULE_SETUP
+#line 414 "d2_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::d2::D2ParserContext::CONTROL_SOCKET:
+        return isc::d2::D2Parser::make_SOCKET_NAME(driver.loc_);
+    default:
+        return isc::d2::D2Parser::make_STRING("socket-name", driver.loc_);
+    }
+}
+       YY_BREAK
+case 36:
+YY_RULE_SETUP
+#line 424 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::CONFIG:
@@ -1929,9 +1985,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 34:
+case 37:
 YY_RULE_SETUP
-#line 404 "d2_lexer.ll"
+#line 433 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::LOGGING:
@@ -1941,9 +1997,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 35:
+case 38:
 YY_RULE_SETUP
-#line 413 "d2_lexer.ll"
+#line 442 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::LOGGERS:
@@ -1953,9 +2009,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 36:
+case 39:
 YY_RULE_SETUP
-#line 422 "d2_lexer.ll"
+#line 451 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::OUTPUT_OPTIONS:
@@ -1965,9 +2021,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 37:
+case 40:
 YY_RULE_SETUP
-#line 431 "d2_lexer.ll"
+#line 460 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::OUTPUT_OPTIONS:
@@ -1977,9 +2033,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 38:
+case 41:
 YY_RULE_SETUP
-#line 440 "d2_lexer.ll"
+#line 469 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::OUTPUT_OPTIONS:
@@ -1989,9 +2045,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 39:
+case 42:
 YY_RULE_SETUP
-#line 449 "d2_lexer.ll"
+#line 478 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::OUTPUT_OPTIONS:
@@ -2001,9 +2057,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 40:
+case 43:
 YY_RULE_SETUP
-#line 458 "d2_lexer.ll"
+#line 487 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::LOGGERS:
@@ -2017,9 +2073,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 41:
+case 44:
 YY_RULE_SETUP
-#line 471 "d2_lexer.ll"
+#line 500 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::LOGGERS:
@@ -2029,9 +2085,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 42:
+case 45:
 YY_RULE_SETUP
-#line 480 "d2_lexer.ll"
+#line 509 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::LOGGERS:
@@ -2041,9 +2097,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 43:
+case 46:
 YY_RULE_SETUP
-#line 489 "d2_lexer.ll"
+#line 518 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::CONFIG:
@@ -2053,9 +2109,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 44:
+case 47:
 YY_RULE_SETUP
-#line 498 "d2_lexer.ll"
+#line 527 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::CONFIG:
@@ -2065,9 +2121,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 45:
+case 48:
 YY_RULE_SETUP
-#line 507 "d2_lexer.ll"
+#line 536 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::CONFIG:
@@ -2077,9 +2133,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 46:
+case 49:
 YY_RULE_SETUP
-#line 517 "d2_lexer.ll"
+#line 546 "d2_lexer.ll"
 {
     /* A string has been matched. It contains the actual string and single quotes.
        We need to get those quotes out of the way and just use its content, e.g.
@@ -2179,65 +2235,65 @@ YY_RULE_SETUP
     return isc::d2::D2Parser::make_STRING(decoded, driver.loc_);
 }
        YY_BREAK
-case 47:
-/* rule 47 can match eol */
+case 50:
+/* rule 50 can match eol */
 YY_RULE_SETUP
-#line 616 "d2_lexer.ll"
+#line 645 "d2_lexer.ll"
 {
     /* Bad string with a forbidden control character inside */
     driver.error(driver.loc_, "Invalid control in " + std::string(yytext));
 }
        YY_BREAK
-case 48:
-/* rule 48 can match eol */
+case 51:
+/* rule 51 can match eol */
 YY_RULE_SETUP
-#line 621 "d2_lexer.ll"
+#line 650 "d2_lexer.ll"
 {
     /* Bad string with a bad escape inside */
     driver.error(driver.loc_, "Bad escape in " + std::string(yytext));
 }
        YY_BREAK
-case 49:
+case 52:
 YY_RULE_SETUP
-#line 626 "d2_lexer.ll"
+#line 655 "d2_lexer.ll"
 {
     /* Bad string with an open escape at the end */
     driver.error(driver.loc_, "Overflow escape in " + std::string(yytext));
 }
        YY_BREAK
-case 50:
+case 53:
 YY_RULE_SETUP
-#line 631 "d2_lexer.ll"
+#line 660 "d2_lexer.ll"
 { return isc::d2::D2Parser::make_LSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 51:
+case 54:
 YY_RULE_SETUP
-#line 632 "d2_lexer.ll"
+#line 661 "d2_lexer.ll"
 { return isc::d2::D2Parser::make_RSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 52:
+case 55:
 YY_RULE_SETUP
-#line 633 "d2_lexer.ll"
+#line 662 "d2_lexer.ll"
 { return isc::d2::D2Parser::make_LCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 53:
+case 56:
 YY_RULE_SETUP
-#line 634 "d2_lexer.ll"
+#line 663 "d2_lexer.ll"
 { return isc::d2::D2Parser::make_RCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 54:
+case 57:
 YY_RULE_SETUP
-#line 635 "d2_lexer.ll"
+#line 664 "d2_lexer.ll"
 { return isc::d2::D2Parser::make_COMMA(driver.loc_); }
        YY_BREAK
-case 55:
+case 58:
 YY_RULE_SETUP
-#line 636 "d2_lexer.ll"
+#line 665 "d2_lexer.ll"
 { return isc::d2::D2Parser::make_COLON(driver.loc_); }
        YY_BREAK
-case 56:
+case 59:
 YY_RULE_SETUP
-#line 638 "d2_lexer.ll"
+#line 667 "d2_lexer.ll"
 {
     /* An integer was found. */
     std::string tmp(yytext);
@@ -2256,9 +2312,9 @@ YY_RULE_SETUP
     return isc::d2::D2Parser::make_INTEGER(integer, driver.loc_);
 }
        YY_BREAK
-case 57:
+case 60:
 YY_RULE_SETUP
-#line 656 "d2_lexer.ll"
+#line 685 "d2_lexer.ll"
 {
     /* A floating point was found. */
     std::string tmp(yytext);
@@ -2272,43 +2328,43 @@ YY_RULE_SETUP
     return isc::d2::D2Parser::make_FLOAT(fp, driver.loc_);
 }
        YY_BREAK
-case 58:
+case 61:
 YY_RULE_SETUP
-#line 669 "d2_lexer.ll"
+#line 698 "d2_lexer.ll"
 {
     string tmp(yytext);
     return isc::d2::D2Parser::make_BOOLEAN(tmp == "true", driver.loc_);
 }
        YY_BREAK
-case 59:
+case 62:
 YY_RULE_SETUP
-#line 674 "d2_lexer.ll"
+#line 703 "d2_lexer.ll"
 {
    return isc::d2::D2Parser::make_NULL_TYPE(driver.loc_);
 }
        YY_BREAK
-case 60:
+case 63:
 YY_RULE_SETUP
-#line 678 "d2_lexer.ll"
+#line 707 "d2_lexer.ll"
 driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
        YY_BREAK
-case 61:
+case 64:
 YY_RULE_SETUP
-#line 680 "d2_lexer.ll"
+#line 709 "d2_lexer.ll"
 driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
        YY_BREAK
-case 62:
+case 65:
 YY_RULE_SETUP
-#line 682 "d2_lexer.ll"
+#line 711 "d2_lexer.ll"
 driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
        YY_BREAK
-case 63:
+case 66:
 YY_RULE_SETUP
-#line 684 "d2_lexer.ll"
+#line 713 "d2_lexer.ll"
 driver.error (driver.loc_, "Invalid character: " + std::string(yytext));
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 686 "d2_lexer.ll"
+#line 715 "d2_lexer.ll"
 {
     if (driver.states_.empty()) {
         return isc::d2::D2Parser::make_END(driver.loc_);
@@ -2332,12 +2388,12 @@ case YY_STATE_EOF(INITIAL):
     BEGIN(DIR_EXIT);
 }
        YY_BREAK
-case 64:
+case 67:
 YY_RULE_SETUP
-#line 709 "d2_lexer.ll"
+#line 738 "d2_lexer.ll"
 ECHO;
        YY_BREAK
-#line 2340 "d2_lexer.cc"
+#line 2396 "d2_lexer.cc"
 
        case YY_END_OF_BUFFER:
                {
@@ -2656,7 +2712,7 @@ static int yy_get_next_buffer (void)
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 388 )
+                       if ( yy_current_state >= 417 )
                                yy_c = yy_meta[yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -2689,11 +2745,11 @@ static int yy_get_next_buffer (void)
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 388 )
+               if ( yy_current_state >= 417 )
                        yy_c = yy_meta[yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-       yy_is_jam = (yy_current_state == 387);
+       yy_is_jam = (yy_current_state == 416);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
@@ -3442,7 +3498,7 @@ void yyfree (void * ptr )
 
 /* %ok-for-header */
 
-#line 709 "d2_lexer.ll"
+#line 738 "d2_lexer.ll"
 
 
 using namespace isc::dhcp;
index 72d47f37b2823676ec98407a07a2333eed4bd608..7633b75e3628ebc77a96f6b3ed50946d088201f4 100644 (file)
@@ -1,4 +1,4 @@
-// A Bison parser, made by GNU Bison 3.2.1.
+// A Bison parser, made by GNU Bison 3.2.4.
 
 // Skeleton implementation for Bison LALR(1) parsers in C++
 
@@ -245,25 +245,25 @@ namespace isc { namespace d2 {
   {
     switch (that.type_get ())
     {
-      case 68: // value
-      case 72: // map_value
-      case 96: // ncr_protocol_value
+      case 71: // value
+      case 75: // map_value
+      case 99: // ncr_protocol_value
         value.YY_MOVE_OR_COPY< ElementPtr > (YY_MOVE (that.value));
         break;
 
-      case 56: // "boolean"
+      case 59: // "boolean"
         value.YY_MOVE_OR_COPY< bool > (YY_MOVE (that.value));
         break;
 
-      case 55: // "floating point"
+      case 58: // "floating point"
         value.YY_MOVE_OR_COPY< double > (YY_MOVE (that.value));
         break;
 
-      case 54: // "integer"
+      case 57: // "integer"
         value.YY_MOVE_OR_COPY< int64_t > (YY_MOVE (that.value));
         break;
 
-      case 53: // "constant string"
+      case 56: // "constant string"
         value.YY_MOVE_OR_COPY< std::string > (YY_MOVE (that.value));
         break;
 
@@ -282,25 +282,25 @@ namespace isc { namespace d2 {
   {
     switch (that.type_get ())
     {
-      case 68: // value
-      case 72: // map_value
-      case 96: // ncr_protocol_value
+      case 71: // value
+      case 75: // map_value
+      case 99: // ncr_protocol_value
         value.move< ElementPtr > (YY_MOVE (that.value));
         break;
 
-      case 56: // "boolean"
+      case 59: // "boolean"
         value.move< bool > (YY_MOVE (that.value));
         break;
 
-      case 55: // "floating point"
+      case 58: // "floating point"
         value.move< double > (YY_MOVE (that.value));
         break;
 
-      case 54: // "integer"
+      case 57: // "integer"
         value.move< int64_t > (YY_MOVE (that.value));
         break;
 
-      case 53: // "constant string"
+      case 56: // "constant string"
         value.move< std::string > (YY_MOVE (that.value));
         break;
 
@@ -319,25 +319,25 @@ namespace isc { namespace d2 {
     state = that.state;
     switch (that.type_get ())
     {
-      case 68: // value
-      case 72: // map_value
-      case 96: // ncr_protocol_value
+      case 71: // value
+      case 75: // map_value
+      case 99: // ncr_protocol_value
         value.move< ElementPtr > (that.value);
         break;
 
-      case 56: // "boolean"
+      case 59: // "boolean"
         value.move< bool > (that.value);
         break;
 
-      case 55: // "floating point"
+      case 58: // "floating point"
         value.move< double > (that.value);
         break;
 
-      case 54: // "integer"
+      case 57: // "integer"
         value.move< int64_t > (that.value);
         break;
 
-      case 53: // "constant string"
+      case 56: // "constant string"
         value.move< std::string > (that.value);
         break;
 
@@ -378,51 +378,51 @@ namespace isc { namespace d2 {
         << yysym.location << ": ";
     switch (yytype)
     {
-            case 53: // "constant string"
+            case 56: // "constant string"
 
-#line 111 "d2_parser.yy" // lalr1.cc:672
+#line 115 "d2_parser.yy" // lalr1.cc:672
         { yyoutput << yysym.value.template as< std::string > (); }
 #line 386 "d2_parser.cc" // lalr1.cc:672
         break;
 
-      case 54: // "integer"
+      case 57: // "integer"
 
-#line 111 "d2_parser.yy" // lalr1.cc:672
+#line 115 "d2_parser.yy" // lalr1.cc:672
         { yyoutput << yysym.value.template as< int64_t > (); }
 #line 393 "d2_parser.cc" // lalr1.cc:672
         break;
 
-      case 55: // "floating point"
+      case 58: // "floating point"
 
-#line 111 "d2_parser.yy" // lalr1.cc:672
+#line 115 "d2_parser.yy" // lalr1.cc:672
         { yyoutput << yysym.value.template as< double > (); }
 #line 400 "d2_parser.cc" // lalr1.cc:672
         break;
 
-      case 56: // "boolean"
+      case 59: // "boolean"
 
-#line 111 "d2_parser.yy" // lalr1.cc:672
+#line 115 "d2_parser.yy" // lalr1.cc:672
         { yyoutput << yysym.value.template as< bool > (); }
 #line 407 "d2_parser.cc" // lalr1.cc:672
         break;
 
-      case 68: // value
+      case 71: // value
 
-#line 111 "d2_parser.yy" // lalr1.cc:672
+#line 115 "d2_parser.yy" // lalr1.cc:672
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 414 "d2_parser.cc" // lalr1.cc:672
         break;
 
-      case 72: // map_value
+      case 75: // map_value
 
-#line 111 "d2_parser.yy" // lalr1.cc:672
+#line 115 "d2_parser.yy" // lalr1.cc:672
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 421 "d2_parser.cc" // lalr1.cc:672
         break;
 
-      case 96: // ncr_protocol_value
+      case 99: // ncr_protocol_value
 
-#line 111 "d2_parser.yy" // lalr1.cc:672
+#line 115 "d2_parser.yy" // lalr1.cc:672
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 428 "d2_parser.cc" // lalr1.cc:672
         break;
@@ -634,25 +634,25 @@ namespace isc { namespace d2 {
          when using variants.  */
       switch (yyr1_[yyn])
     {
-      case 68: // value
-      case 72: // map_value
-      case 96: // ncr_protocol_value
+      case 71: // value
+      case 75: // map_value
+      case 99: // ncr_protocol_value
         yylhs.value.emplace< ElementPtr > ();
         break;
 
-      case 56: // "boolean"
+      case 59: // "boolean"
         yylhs.value.emplace< bool > ();
         break;
 
-      case 55: // "floating point"
+      case 58: // "floating point"
         yylhs.value.emplace< double > ();
         break;
 
-      case 54: // "integer"
+      case 57: // "integer"
         yylhs.value.emplace< int64_t > ();
         break;
 
-      case 53: // "constant string"
+      case 56: // "constant string"
         yylhs.value.emplace< std::string > ();
         break;
 
@@ -677,103 +677,103 @@ namespace isc { namespace d2 {
           switch (yyn)
             {
   case 2:
-#line 120 "d2_parser.yy" // lalr1.cc:907
+#line 124 "d2_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.NO_KEYWORD; }
 #line 683 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 4:
-#line 121 "d2_parser.yy" // lalr1.cc:907
+#line 125 "d2_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.CONFIG; }
 #line 689 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 6:
-#line 122 "d2_parser.yy" // lalr1.cc:907
+#line 126 "d2_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.DHCPDDNS; }
 #line 695 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 8:
-#line 123 "d2_parser.yy" // lalr1.cc:907
+#line 127 "d2_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.TSIG_KEY; }
 #line 701 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 10:
-#line 124 "d2_parser.yy" // lalr1.cc:907
+#line 128 "d2_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.TSIG_KEYS; }
 #line 707 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 12:
-#line 125 "d2_parser.yy" // lalr1.cc:907
+#line 129 "d2_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.DDNS_DOMAIN; }
 #line 713 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 14:
-#line 126 "d2_parser.yy" // lalr1.cc:907
+#line 130 "d2_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.DDNS_DOMAINS; }
 #line 719 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 16:
-#line 127 "d2_parser.yy" // lalr1.cc:907
+#line 131 "d2_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.DNS_SERVERS; }
 #line 725 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 18:
-#line 128 "d2_parser.yy" // lalr1.cc:907
+#line 132 "d2_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.DNS_SERVERS; }
 #line 731 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 20:
-#line 136 "d2_parser.yy" // lalr1.cc:907
+#line 140 "d2_parser.yy" // lalr1.cc:907
     { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
 #line 737 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 21:
-#line 137 "d2_parser.yy" // lalr1.cc:907
+#line 141 "d2_parser.yy" // lalr1.cc:907
     { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
 #line 743 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 22:
-#line 138 "d2_parser.yy" // lalr1.cc:907
+#line 142 "d2_parser.yy" // lalr1.cc:907
     { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
 #line 749 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 23:
-#line 139 "d2_parser.yy" // lalr1.cc:907
+#line 143 "d2_parser.yy" // lalr1.cc:907
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
 #line 755 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 24:
-#line 140 "d2_parser.yy" // lalr1.cc:907
+#line 144 "d2_parser.yy" // lalr1.cc:907
     { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
 #line 761 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 25:
-#line 141 "d2_parser.yy" // lalr1.cc:907
+#line 145 "d2_parser.yy" // lalr1.cc:907
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 767 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 26:
-#line 142 "d2_parser.yy" // lalr1.cc:907
+#line 146 "d2_parser.yy" // lalr1.cc:907
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 773 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 27:
-#line 145 "d2_parser.yy" // lalr1.cc:907
+#line 149 "d2_parser.yy" // lalr1.cc:907
     {
     // Push back the JSON value on the stack
     ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ());
@@ -782,7 +782,7 @@ namespace isc { namespace d2 {
     break;
 
   case 28:
-#line 150 "d2_parser.yy" // lalr1.cc:907
+#line 154 "d2_parser.yy" // lalr1.cc:907
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -793,7 +793,7 @@ namespace isc { namespace d2 {
     break;
 
   case 29:
-#line 155 "d2_parser.yy" // lalr1.cc:907
+#line 159 "d2_parser.yy" // lalr1.cc:907
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -803,13 +803,13 @@ namespace isc { namespace d2 {
     break;
 
   case 30:
-#line 161 "d2_parser.yy" // lalr1.cc:907
+#line 165 "d2_parser.yy" // lalr1.cc:907
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 809 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 33:
-#line 168 "d2_parser.yy" // lalr1.cc:907
+#line 172 "d2_parser.yy" // lalr1.cc:907
     {
                   // map containing a single entry
                   ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
@@ -818,7 +818,7 @@ namespace isc { namespace d2 {
     break;
 
   case 34:
-#line 172 "d2_parser.yy" // lalr1.cc:907
+#line 176 "d2_parser.yy" // lalr1.cc:907
     {
                   // map consisting of a shorter map followed by
                   // comma and string:value
@@ -828,7 +828,7 @@ namespace isc { namespace d2 {
     break;
 
   case 35:
-#line 179 "d2_parser.yy" // lalr1.cc:907
+#line 183 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
@@ -837,7 +837,7 @@ namespace isc { namespace d2 {
     break;
 
   case 36:
-#line 182 "d2_parser.yy" // lalr1.cc:907
+#line 186 "d2_parser.yy" // lalr1.cc:907
     {
     // list parsing complete. Put any sanity checking here
 }
@@ -845,7 +845,7 @@ namespace isc { namespace d2 {
     break;
 
   case 39:
-#line 190 "d2_parser.yy" // lalr1.cc:907
+#line 194 "d2_parser.yy" // lalr1.cc:907
     {
                   // List consisting of a single element.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
@@ -854,7 +854,7 @@ namespace isc { namespace d2 {
     break;
 
   case 40:
-#line 194 "d2_parser.yy" // lalr1.cc:907
+#line 198 "d2_parser.yy" // lalr1.cc:907
     {
                   // List ending with , and a value.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
@@ -863,7 +863,7 @@ namespace isc { namespace d2 {
     break;
 
   case 41:
-#line 205 "d2_parser.yy" // lalr1.cc:907
+#line 209 "d2_parser.yy" // lalr1.cc:907
     {
     const std::string& where = ctx.contextName();
     const std::string& keyword = yystack_[1].value.as< std::string > ();
@@ -874,7 +874,7 @@ namespace isc { namespace d2 {
     break;
 
   case 42:
-#line 215 "d2_parser.yy" // lalr1.cc:907
+#line 219 "d2_parser.yy" // lalr1.cc:907
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -885,7 +885,7 @@ namespace isc { namespace d2 {
     break;
 
   case 43:
-#line 220 "d2_parser.yy" // lalr1.cc:907
+#line 224 "d2_parser.yy" // lalr1.cc:907
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -895,7 +895,7 @@ namespace isc { namespace d2 {
     break;
 
   case 52:
-#line 242 "d2_parser.yy" // lalr1.cc:907
+#line 246 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("DhcpDdns", m);
@@ -906,7 +906,7 @@ namespace isc { namespace d2 {
     break;
 
   case 53:
-#line 247 "d2_parser.yy" // lalr1.cc:907
+#line 251 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -915,7 +915,7 @@ namespace isc { namespace d2 {
     break;
 
   case 54:
-#line 252 "d2_parser.yy" // lalr1.cc:907
+#line 256 "d2_parser.yy" // lalr1.cc:907
     {
     // Parse the dhcpddns map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -925,23 +925,23 @@ namespace isc { namespace d2 {
     break;
 
   case 55:
-#line 256 "d2_parser.yy" // lalr1.cc:907
+#line 260 "d2_parser.yy" // lalr1.cc:907
     {
     // parsing completed
 }
 #line 933 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 69:
-#line 278 "d2_parser.yy" // lalr1.cc:907
+  case 70:
+#line 283 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 941 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 70:
-#line 280 "d2_parser.yy" // lalr1.cc:907
+  case 71:
+#line 285 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-address", s);
@@ -950,8 +950,8 @@ namespace isc { namespace d2 {
 #line 951 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 71:
-#line 286 "d2_parser.yy" // lalr1.cc:907
+  case 72:
+#line 291 "d2_parser.yy" // lalr1.cc:907
     {
     if (yystack_[0].value.as< int64_t > () <= 0 || yystack_[0].value.as< int64_t > () >= 65536 ) {
         error(yystack_[0].location, "port must be greater than zero but less than 65536");
@@ -962,8 +962,8 @@ namespace isc { namespace d2 {
 #line 963 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 72:
-#line 294 "d2_parser.yy" // lalr1.cc:907
+  case 73:
+#line 299 "d2_parser.yy" // lalr1.cc:907
     {
     if (yystack_[0].value.as< int64_t > () <= 0) {
         error(yystack_[0].location, "dns-server-timeout must be greater than zero");
@@ -975,16 +975,16 @@ namespace isc { namespace d2 {
 #line 976 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 73:
-#line 303 "d2_parser.yy" // lalr1.cc:907
+  case 74:
+#line 308 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NCR_PROTOCOL);
 }
 #line 984 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 74:
-#line 305 "d2_parser.yy" // lalr1.cc:907
+  case 75:
+#line 310 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -992,28 +992,28 @@ namespace isc { namespace d2 {
 #line 993 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 75:
-#line 311 "d2_parser.yy" // lalr1.cc:907
+  case 76:
+#line 316 "d2_parser.yy" // lalr1.cc:907
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
 #line 999 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 76:
-#line 312 "d2_parser.yy" // lalr1.cc:907
+  case 77:
+#line 317 "d2_parser.yy" // lalr1.cc:907
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
 #line 1005 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 77:
-#line 315 "d2_parser.yy" // lalr1.cc:907
+  case 78:
+#line 320 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NCR_FORMAT);
 }
 #line 1013 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 78:
-#line 317 "d2_parser.yy" // lalr1.cc:907
+  case 79:
+#line 322 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ncr-format", json);
@@ -1022,16 +1022,16 @@ namespace isc { namespace d2 {
 #line 1023 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 79:
-#line 323 "d2_parser.yy" // lalr1.cc:907
+  case 80:
+#line 328 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1031 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 80:
-#line 325 "d2_parser.yy" // lalr1.cc:907
+  case 81:
+#line 330 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context = yystack_[0].value.as< ElementPtr > ();
@@ -1057,16 +1057,16 @@ namespace isc { namespace d2 {
 #line 1058 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 81:
-#line 348 "d2_parser.yy" // lalr1.cc:907
+  case 82:
+#line 353 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1066 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 82:
-#line 350 "d2_parser.yy" // lalr1.cc:907
+  case 83:
+#line 355 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location)));
@@ -1094,8 +1094,8 @@ namespace isc { namespace d2 {
 #line 1095 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 83:
-#line 375 "d2_parser.yy" // lalr1.cc:907
+  case 84:
+#line 380 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("forward-ddns", m);
@@ -1105,8 +1105,8 @@ namespace isc { namespace d2 {
 #line 1106 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 84:
-#line 380 "d2_parser.yy" // lalr1.cc:907
+  case 85:
+#line 385 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1114,8 +1114,8 @@ namespace isc { namespace d2 {
 #line 1115 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 85:
-#line 385 "d2_parser.yy" // lalr1.cc:907
+  case 86:
+#line 390 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reverse-ddns", m);
@@ -1125,8 +1125,8 @@ namespace isc { namespace d2 {
 #line 1126 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 86:
-#line 390 "d2_parser.yy" // lalr1.cc:907
+  case 87:
+#line 395 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1134,8 +1134,8 @@ namespace isc { namespace d2 {
 #line 1135 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 93:
-#line 409 "d2_parser.yy" // lalr1.cc:907
+  case 94:
+#line 414 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ddns-domains", l);
@@ -1145,8 +1145,8 @@ namespace isc { namespace d2 {
 #line 1146 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 94:
-#line 414 "d2_parser.yy" // lalr1.cc:907
+  case 95:
+#line 419 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1154,8 +1154,8 @@ namespace isc { namespace d2 {
 #line 1155 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 95:
-#line 419 "d2_parser.yy" // lalr1.cc:907
+  case 96:
+#line 424 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
@@ -1163,16 +1163,16 @@ namespace isc { namespace d2 {
 #line 1164 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 96:
-#line 422 "d2_parser.yy" // lalr1.cc:907
+  case 97:
+#line 427 "d2_parser.yy" // lalr1.cc:907
     {
     // parsing completed
 }
 #line 1172 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 101:
-#line 434 "d2_parser.yy" // lalr1.cc:907
+  case 102:
+#line 439 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -1181,16 +1181,16 @@ namespace isc { namespace d2 {
 #line 1182 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 102:
-#line 438 "d2_parser.yy" // lalr1.cc:907
+  case 103:
+#line 443 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
 }
 #line 1190 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 103:
-#line 442 "d2_parser.yy" // lalr1.cc:907
+  case 104:
+#line 447 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
@@ -1198,24 +1198,24 @@ namespace isc { namespace d2 {
 #line 1199 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 104:
-#line 445 "d2_parser.yy" // lalr1.cc:907
+  case 105:
+#line 450 "d2_parser.yy" // lalr1.cc:907
     {
     // parsing completed
 }
 #line 1207 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 113:
-#line 462 "d2_parser.yy" // lalr1.cc:907
+  case 114:
+#line 467 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1215 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 114:
-#line 464 "d2_parser.yy" // lalr1.cc:907
+  case 115:
+#line 469 "d2_parser.yy" // lalr1.cc:907
     {
     if (yystack_[0].value.as< std::string > () == "") {
         error(yystack_[1].location, "Ddns domain name cannot be blank");
@@ -1228,16 +1228,16 @@ namespace isc { namespace d2 {
 #line 1229 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 115:
-#line 474 "d2_parser.yy" // lalr1.cc:907
+  case 116:
+#line 479 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1237 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 116:
-#line 476 "d2_parser.yy" // lalr1.cc:907
+  case 117:
+#line 481 "d2_parser.yy" // lalr1.cc:907
     {
     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)));
@@ -1247,8 +1247,8 @@ namespace isc { namespace d2 {
 #line 1248 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 117:
-#line 486 "d2_parser.yy" // lalr1.cc:907
+  case 118:
+#line 491 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dns-servers", l);
@@ -1258,8 +1258,8 @@ namespace isc { namespace d2 {
 #line 1259 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 118:
-#line 491 "d2_parser.yy" // lalr1.cc:907
+  case 119:
+#line 496 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1267,8 +1267,8 @@ namespace isc { namespace d2 {
 #line 1268 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 119:
-#line 496 "d2_parser.yy" // lalr1.cc:907
+  case 120:
+#line 501 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
@@ -1276,16 +1276,16 @@ namespace isc { namespace d2 {
 #line 1277 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 120:
-#line 499 "d2_parser.yy" // lalr1.cc:907
+  case 121:
+#line 504 "d2_parser.yy" // lalr1.cc:907
     {
     // parsing completed
 }
 #line 1285 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 123:
-#line 507 "d2_parser.yy" // lalr1.cc:907
+  case 124:
+#line 512 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -1294,16 +1294,16 @@ namespace isc { namespace d2 {
 #line 1295 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 124:
-#line 511 "d2_parser.yy" // lalr1.cc:907
+  case 125:
+#line 516 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
 }
 #line 1303 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 125:
-#line 515 "d2_parser.yy" // lalr1.cc:907
+  case 126:
+#line 520 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
@@ -1311,24 +1311,24 @@ namespace isc { namespace d2 {
 #line 1312 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 126:
-#line 518 "d2_parser.yy" // lalr1.cc:907
+  case 127:
+#line 523 "d2_parser.yy" // lalr1.cc:907
     {
     // parsing completed
 }
 #line 1320 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 135:
-#line 534 "d2_parser.yy" // lalr1.cc:907
+  case 136:
+#line 539 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1328 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 136:
-#line 536 "d2_parser.yy" // lalr1.cc:907
+  case 137:
+#line 541 "d2_parser.yy" // lalr1.cc:907
     {
     if (yystack_[0].value.as< std::string > () != "") {
         error(yystack_[1].location, "hostname is not yet supported");
@@ -1341,16 +1341,16 @@ namespace isc { namespace d2 {
 #line 1342 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 137:
-#line 546 "d2_parser.yy" // lalr1.cc:907
+  case 138:
+#line 551 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1350 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 138:
-#line 548 "d2_parser.yy" // lalr1.cc:907
+  case 139:
+#line 553 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-address", s);
@@ -1359,8 +1359,8 @@ namespace isc { namespace d2 {
 #line 1360 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 139:
-#line 554 "d2_parser.yy" // lalr1.cc:907
+  case 140:
+#line 559 "d2_parser.yy" // lalr1.cc:907
     {
     if (yystack_[0].value.as< int64_t > () <= 0 || yystack_[0].value.as< int64_t > () >= 65536 ) {
         error(yystack_[0].location, "port must be greater than zero but less than 65536");
@@ -1371,8 +1371,8 @@ namespace isc { namespace d2 {
 #line 1372 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 140:
-#line 568 "d2_parser.yy" // lalr1.cc:907
+  case 141:
+#line 573 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("tsig-keys", l);
@@ -1382,8 +1382,8 @@ namespace isc { namespace d2 {
 #line 1383 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 141:
-#line 573 "d2_parser.yy" // lalr1.cc:907
+  case 142:
+#line 578 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1391,8 +1391,8 @@ namespace isc { namespace d2 {
 #line 1392 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 142:
-#line 578 "d2_parser.yy" // lalr1.cc:907
+  case 143:
+#line 583 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
@@ -1400,16 +1400,16 @@ namespace isc { namespace d2 {
 #line 1401 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 143:
-#line 581 "d2_parser.yy" // lalr1.cc:907
+  case 144:
+#line 586 "d2_parser.yy" // lalr1.cc:907
     {
     // parsing completed
 }
 #line 1409 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 148:
-#line 593 "d2_parser.yy" // lalr1.cc:907
+  case 149:
+#line 598 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -1418,16 +1418,16 @@ namespace isc { namespace d2 {
 #line 1419 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 149:
-#line 597 "d2_parser.yy" // lalr1.cc:907
+  case 150:
+#line 602 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
 }
 #line 1427 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 150:
-#line 601 "d2_parser.yy" // lalr1.cc:907
+  case 151:
+#line 606 "d2_parser.yy" // lalr1.cc:907
     {
     // Parse tsig key list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1436,24 +1436,24 @@ namespace isc { namespace d2 {
 #line 1437 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 151:
-#line 605 "d2_parser.yy" // lalr1.cc:907
+  case 152:
+#line 610 "d2_parser.yy" // lalr1.cc:907
     {
     // parsing completed
 }
 #line 1445 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 161:
-#line 623 "d2_parser.yy" // lalr1.cc:907
+  case 162:
+#line 628 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1453 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 162:
-#line 625 "d2_parser.yy" // lalr1.cc:907
+  case 163:
+#line 630 "d2_parser.yy" // lalr1.cc:907
     {
     if (yystack_[0].value.as< std::string > () == "") {
         error(yystack_[1].location, "TSIG key name cannot be blank");
@@ -1466,16 +1466,16 @@ namespace isc { namespace d2 {
 #line 1467 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 163:
-#line 635 "d2_parser.yy" // lalr1.cc:907
+  case 164:
+#line 640 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1475 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 164:
-#line 637 "d2_parser.yy" // lalr1.cc:907
+  case 165:
+#line 642 "d2_parser.yy" // lalr1.cc:907
     {
     if (yystack_[0].value.as< std::string > () == "") {
         error(yystack_[1].location, "TSIG key algorithm cannot be blank");
@@ -1487,8 +1487,8 @@ namespace isc { namespace d2 {
 #line 1488 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 165:
-#line 646 "d2_parser.yy" // lalr1.cc:907
+  case 166:
+#line 651 "d2_parser.yy" // lalr1.cc:907
     {
     if (yystack_[0].value.as< int64_t > () < 0 || (yystack_[0].value.as< int64_t > () > 0  && (yystack_[0].value.as< int64_t > () % 8 != 0))) {
         error(yystack_[0].location, "TSIG key digest-bits must either be zero or a positive, multiple of eight");
@@ -1499,16 +1499,16 @@ namespace isc { namespace d2 {
 #line 1500 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 166:
-#line 654 "d2_parser.yy" // lalr1.cc:907
+  case 167:
+#line 659 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1508 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 167:
-#line 656 "d2_parser.yy" // lalr1.cc:907
+  case 168:
+#line 661 "d2_parser.yy" // lalr1.cc:907
     {
     if (yystack_[0].value.as< std::string > () == "") {
         error(yystack_[1].location, "TSIG key secret cannot be blank");
@@ -1520,245 +1520,301 @@ namespace isc { namespace d2 {
 #line 1521 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 168:
-#line 669 "d2_parser.yy" // lalr1.cc:907
+  case 169:
+#line 675 "d2_parser.yy" // lalr1.cc:907
+    {
+    ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("control-socket", m);
+    ctx.stack_.push_back(m);
+    ctx.enter(ctx.CONTROL_SOCKET);
+}
+#line 1532 "d2_parser.cc" // lalr1.cc:907
+    break;
+
+  case 170:
+#line 680 "d2_parser.yy" // lalr1.cc:907
+    {
+    ctx.stack_.pop_back();
+    ctx.leave();
+}
+#line 1541 "d2_parser.cc" // lalr1.cc:907
+    break;
+
+  case 178:
+#line 696 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1529 "d2_parser.cc" // lalr1.cc:907
+#line 1549 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 169:
-#line 671 "d2_parser.yy" // lalr1.cc:907
+  case 179:
+#line 698 "d2_parser.yy" // lalr1.cc:907
+    {
+    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 1559 "d2_parser.cc" // lalr1.cc:907
+    break;
+
+  case 180:
+#line 704 "d2_parser.yy" // lalr1.cc:907
+    {
+    ctx.enter(ctx.NO_KEYWORD);
+}
+#line 1567 "d2_parser.cc" // lalr1.cc:907
+    break;
+
+  case 181:
+#line 706 "d2_parser.yy" // lalr1.cc:907
+    {
+    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 1577 "d2_parser.cc" // lalr1.cc:907
+    break;
+
+  case 182:
+#line 714 "d2_parser.yy" // lalr1.cc:907
+    {
+    ctx.enter(ctx.NO_KEYWORD);
+}
+#line 1585 "d2_parser.cc" // lalr1.cc:907
+    break;
+
+  case 183:
+#line 716 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.back()->set("Dhcp6", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1538 "d2_parser.cc" // lalr1.cc:907
+#line 1594 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 170:
-#line 676 "d2_parser.yy" // lalr1.cc:907
+  case 184:
+#line 721 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1546 "d2_parser.cc" // lalr1.cc:907
+#line 1602 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 171:
-#line 678 "d2_parser.yy" // lalr1.cc:907
+  case 185:
+#line 723 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.back()->set("Dhcp4", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1555 "d2_parser.cc" // lalr1.cc:907
+#line 1611 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 172:
-#line 683 "d2_parser.yy" // lalr1.cc:907
+  case 186:
+#line 728 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1563 "d2_parser.cc" // lalr1.cc:907
+#line 1619 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 173:
-#line 685 "d2_parser.yy" // lalr1.cc:907
+  case 187:
+#line 730 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.back()->set("Control-agent", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1572 "d2_parser.cc" // lalr1.cc:907
+#line 1628 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 174:
-#line 695 "d2_parser.yy" // lalr1.cc:907
+  case 188:
+#line 740 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("Logging", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.LOGGING);
 }
-#line 1583 "d2_parser.cc" // lalr1.cc:907
+#line 1639 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 175:
-#line 700 "d2_parser.yy" // lalr1.cc:907
+  case 189:
+#line 745 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1592 "d2_parser.cc" // lalr1.cc:907
+#line 1648 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 179:
-#line 717 "d2_parser.yy" // lalr1.cc:907
+  case 193:
+#line 762 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("loggers", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.LOGGERS);
 }
-#line 1603 "d2_parser.cc" // lalr1.cc:907
+#line 1659 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 180:
-#line 722 "d2_parser.yy" // lalr1.cc:907
+  case 194:
+#line 767 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1612 "d2_parser.cc" // lalr1.cc:907
+#line 1668 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 183:
-#line 734 "d2_parser.yy" // lalr1.cc:907
+  case 197:
+#line 779 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 1622 "d2_parser.cc" // lalr1.cc:907
+#line 1678 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 184:
-#line 738 "d2_parser.yy" // lalr1.cc:907
+  case 198:
+#line 783 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
 }
-#line 1630 "d2_parser.cc" // lalr1.cc:907
+#line 1686 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 194:
-#line 755 "d2_parser.yy" // lalr1.cc:907
+  case 208:
+#line 800 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1638 "d2_parser.cc" // lalr1.cc:907
+#line 1694 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 195:
-#line 757 "d2_parser.yy" // lalr1.cc:907
+  case 209:
+#line 802 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("name", name);
     ctx.leave();
 }
-#line 1648 "d2_parser.cc" // lalr1.cc:907
+#line 1704 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 196:
-#line 763 "d2_parser.yy" // lalr1.cc:907
+  case 210:
+#line 808 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("debuglevel", dl);
 }
-#line 1657 "d2_parser.cc" // lalr1.cc:907
+#line 1713 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 197:
-#line 767 "d2_parser.yy" // lalr1.cc:907
+  case 211:
+#line 812 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1665 "d2_parser.cc" // lalr1.cc:907
+#line 1721 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 198:
-#line 769 "d2_parser.yy" // lalr1.cc:907
+  case 212:
+#line 814 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("severity", sev);
     ctx.leave();
 }
-#line 1675 "d2_parser.cc" // lalr1.cc:907
+#line 1731 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 199:
-#line 775 "d2_parser.yy" // lalr1.cc:907
+  case 213:
+#line 820 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output_options", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OUTPUT_OPTIONS);
 }
-#line 1686 "d2_parser.cc" // lalr1.cc:907
+#line 1742 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 200:
-#line 780 "d2_parser.yy" // lalr1.cc:907
+  case 214:
+#line 825 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1695 "d2_parser.cc" // lalr1.cc:907
+#line 1751 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 203:
-#line 789 "d2_parser.yy" // lalr1.cc:907
+  case 217:
+#line 834 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1705 "d2_parser.cc" // lalr1.cc:907
+#line 1761 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 204:
-#line 793 "d2_parser.yy" // lalr1.cc:907
+  case 218:
+#line 838 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
 }
-#line 1713 "d2_parser.cc" // lalr1.cc:907
+#line 1769 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 211:
-#line 807 "d2_parser.yy" // lalr1.cc:907
+  case 225:
+#line 852 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1721 "d2_parser.cc" // lalr1.cc:907
+#line 1777 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 212:
-#line 809 "d2_parser.yy" // lalr1.cc:907
+  case 226:
+#line 854 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output", sev);
     ctx.leave();
 }
-#line 1731 "d2_parser.cc" // lalr1.cc:907
+#line 1787 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 213:
-#line 815 "d2_parser.yy" // lalr1.cc:907
+  case 227:
+#line 860 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr flush(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush", flush);
 }
-#line 1740 "d2_parser.cc" // lalr1.cc:907
+#line 1796 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 214:
-#line 820 "d2_parser.yy" // lalr1.cc:907
+  case 228:
+#line 865 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr maxsize(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxsize", maxsize);
 }
-#line 1749 "d2_parser.cc" // lalr1.cc:907
+#line 1805 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 215:
-#line 825 "d2_parser.yy" // lalr1.cc:907
+  case 229:
+#line 870 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr maxver(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxver", maxver);
 }
-#line 1758 "d2_parser.cc" // lalr1.cc:907
+#line 1814 "d2_parser.cc" // lalr1.cc:907
     break;
 
 
-#line 1762 "d2_parser.cc" // lalr1.cc:907
+#line 1818 "d2_parser.cc" // lalr1.cc:907
             default:
               break;
             }
@@ -2016,49 +2072,52 @@ namespace isc { namespace d2 {
   }
 
 
-  const signed char D2Parser::yypact_ninf_ = -90;
+  const signed char D2Parser::yypact_ninf_ = -92;
 
   const signed char D2Parser::yytable_ninf_ = -1;
 
   const short
   D2Parser::yypact_[] =
   {
-      47,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
-      12,     2,     1,    23,    33,    11,    38,    58,    64,    73,
-     -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
-     -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
-     -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,     2,   -25,
-       8,     9,    15,    96,    37,   115,    21,   116,   -90,   124,
-     113,   127,   130,   137,   -90,   -90,   -90,   -90,   -90,   146,
-     -90,    19,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   148,
-     150,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,    46,
-     -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
-     -90,   -90,   152,   -90,   -90,   -90,   -90,   -90,    76,   -90,
-     -90,   -90,   -90,   -90,   -90,   151,   155,   -90,   -90,   -90,
-     -90,   -90,   -90,   -90,    77,   -90,   -90,   -90,   -90,   -90,
-     153,   157,   -90,   -90,   161,   -90,   -90,   -90,   -90,    78,
-     -90,   -90,   -90,   -90,   -90,   118,   -90,   -90,     2,     2,
-     -90,   108,   162,   163,   164,   165,   166,   -90,     8,   -90,
-     167,   119,   120,   168,   171,   172,   173,   174,   175,   176,
-       9,   -90,   177,   128,   179,   180,    15,   -90,    15,   -90,
-      96,   181,   182,   183,    37,   -90,    37,   -90,   115,   184,
-     135,   186,    21,   -90,    21,   116,   -90,   -90,   -90,   187,
-       2,     2,     2,   185,   188,   -90,   140,   -90,   -90,    70,
-     178,   189,   141,   190,   195,   198,   -90,   154,   -90,   156,
-     158,   -90,    79,   -90,   159,   199,   160,   -90,    97,   -90,
-     169,   -90,   170,   -90,    98,   -90,     2,   -90,   -90,   -90,
-       9,   191,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
-     -12,   -12,    96,   -90,   -90,   -90,   -90,   -90,   116,   -90,
-     -90,   -90,   -90,   -90,   -90,    99,   -90,   101,   -90,   -90,
-     -90,   -90,   109,   -90,   -90,   -90,   110,   200,   126,   -90,
-     201,   191,   -90,   204,   -12,   -90,   -90,   -90,   -90,   205,
-     -90,   209,   -90,   208,   115,   -90,   143,   -90,   210,    30,
-     208,   -90,   -90,   -90,   -90,   213,   -90,   -90,   -90,   -90,
-     111,   -90,   -90,   -90,   -90,   -90,   -90,   214,   215,   192,
-     216,    30,   -90,   194,   219,   -90,   197,   -90,   -90,   218,
-     -90,   -90,   145,   -90,    34,   218,   -90,   -90,   217,   223,
-     224,   112,   -90,   -90,   -90,   -90,   -90,   -90,   225,   196,
-     202,   203,    34,   -90,   206,   -90,   -90,   -90,   -90,   -90
+      50,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
+      12,     2,     1,    23,    42,    11,    44,    17,    59,    65,
+     -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
+     -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
+     -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,     2,    18,
+       8,     9,    15,    87,    40,    99,    13,   100,   -92,   102,
+     122,   129,   118,   131,   -92,   -92,   -92,   -92,   -92,   137,
+     -92,    49,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   139,
+     147,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
+      78,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
+     -92,   -92,   -92,   -92,   157,   -92,   -92,   -92,   -92,   -92,
+      79,   -92,   -92,   -92,   -92,   -92,   -92,   164,   132,   -92,
+     -92,   -92,   -92,   -92,   -92,   -92,    85,   -92,   -92,   -92,
+     -92,   -92,   167,   150,   -92,   -92,   158,   -92,   -92,   -92,
+     -92,   106,   -92,   -92,   -92,   -92,   -92,    47,   -92,   -92,
+       2,     2,   -92,   107,   170,   171,   172,   173,   174,   -92,
+       8,   -92,   175,   123,   125,   177,   179,   180,   181,   182,
+     183,   184,   185,     9,   -92,   186,   134,   188,   189,    15,
+     -92,    15,   -92,    87,   190,   191,   192,    40,   -92,    40,
+     -92,    99,   193,   141,   195,    13,   -92,    13,   100,   -92,
+     -92,   -92,   196,     2,     2,     2,   194,   201,   -92,   153,
+     -92,   -92,    22,   198,   203,   155,   205,   206,   209,   208,
+     -92,   160,   -92,   161,   168,   -92,   112,   -92,   169,   215,
+     176,   -92,   113,   -92,   178,   -92,   187,   -92,   114,   -92,
+       2,   -92,   -92,   -92,     9,   197,   -92,   -92,   -92,   -92,
+     -92,   -92,   -92,   -92,   -12,   -12,    87,    55,   -92,   -92,
+     -92,   -92,   -92,   100,   -92,   -92,   -92,   -92,   -92,   -92,
+     115,   -92,   116,   -92,   -92,   -92,   -92,   124,   -92,   -92,
+     -92,   146,   216,   -92,   -92,   -92,   -92,   -92,   149,   -92,
+     -92,   -92,    89,   -92,   199,   197,   -92,   217,   -12,   -92,
+     -92,   -92,   219,   222,    55,   -92,   -92,   223,   -92,   224,
+     -92,   200,   202,   -92,   220,    99,   -92,   -92,   -92,   165,
+     -92,   225,    33,   220,   -92,   -92,   -92,   -92,   226,   -92,
+     -92,   -92,   -92,   152,   -92,   -92,   -92,   -92,   -92,   -92,
+     229,   232,   204,   233,    33,   -92,   207,   234,   -92,   210,
+     -92,   -92,   231,   -92,   -92,   166,   -92,    39,   231,   -92,
+     -92,   236,   237,   238,   156,   -92,   -92,   -92,   -92,   -92,
+     -92,   240,   211,   212,   218,    39,   -92,   221,   -92,   -92,
+     -92,   -92,   -92
   };
 
   const unsigned char
@@ -2067,111 +2126,118 @@ namespace isc { namespace d2 {
        0,     2,     4,     6,     8,    10,    12,    14,    16,    18,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        1,    35,    28,    24,    23,    20,    21,    22,    27,     3,
-      25,    26,    42,     5,    54,     7,   150,     9,   142,    11,
-     103,    13,    95,    15,   125,    17,   119,    19,    37,    31,
-       0,     0,     0,   144,     0,    97,     0,     0,    39,     0,
-      38,     0,     0,    32,   168,   170,   172,    52,   174,     0,
-      51,     0,    44,    49,    46,    48,    50,    47,    69,     0,
-       0,    73,    77,    79,    81,    83,    85,   140,    68,     0,
-      56,    58,    59,    60,    61,    62,    66,    67,    63,    64,
-      65,   163,     0,   166,   161,   160,   158,   159,     0,   152,
-     154,   155,   156,   157,   148,     0,   145,   146,   115,   117,
-     113,   112,   110,   111,     0,   105,   107,   108,   109,   101,
-       0,    98,    99,   137,     0,   135,   134,   132,   133,     0,
-     127,   129,   130,   131,   123,     0,   121,    36,     0,     0,
-      29,     0,     0,     0,     0,     0,     0,    41,     0,    43,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    55,     0,     0,     0,     0,     0,   151,     0,   143,
-       0,     0,     0,     0,     0,   104,     0,    96,     0,     0,
-       0,     0,     0,   126,     0,     0,   120,    40,    33,     0,
-       0,     0,     0,     0,     0,    45,     0,    71,    72,     0,
-       0,     0,     0,     0,     0,     0,    57,     0,   165,     0,
-       0,   153,     0,   147,     0,     0,     0,   106,     0,   100,
-       0,   139,     0,   128,     0,   122,     0,   169,   171,   173,
-       0,     0,    70,    75,    76,    74,    78,    30,    80,    82,
-      87,    87,   144,   164,   167,   162,   149,   116,     0,   114,
-     102,   138,   136,   124,    34,     0,   179,     0,   176,   178,
-      93,    92,     0,    88,    89,    91,     0,     0,     0,    53,
-       0,     0,   175,     0,     0,    84,    86,   141,   118,     0,
-     177,     0,    90,     0,    97,   183,     0,   181,     0,     0,
-       0,   180,    94,   194,   199,     0,   197,   193,   191,   192,
-       0,   185,   187,   189,   190,   188,   182,     0,     0,     0,
-       0,     0,   184,     0,     0,   196,     0,   186,   195,     0,
-     198,   203,     0,   201,     0,     0,   200,   211,     0,     0,
-       0,     0,   205,   207,   208,   209,   210,   202,     0,     0,
-       0,     0,     0,   204,     0,   213,   214,   215,   206,   212
+      25,    26,    42,     5,    54,     7,   151,     9,   143,    11,
+     104,    13,    96,    15,   126,    17,   120,    19,    37,    31,
+       0,     0,     0,   145,     0,    98,     0,     0,    39,     0,
+      38,     0,     0,    32,   182,   184,   186,    52,   188,     0,
+      51,     0,    44,    49,    46,    48,    50,    47,    70,     0,
+       0,    74,    78,    80,    82,    84,    86,   141,   169,    69,
+       0,    56,    58,    59,    60,    61,    62,    67,    68,    63,
+      64,    65,    66,   164,     0,   167,   162,   161,   159,   160,
+       0,   153,   155,   156,   157,   158,   149,     0,   146,   147,
+     116,   118,   114,   113,   111,   112,     0,   106,   108,   109,
+     110,   102,     0,    99,   100,   138,     0,   136,   135,   133,
+     134,     0,   128,   130,   131,   132,   124,     0,   122,    36,
+       0,     0,    29,     0,     0,     0,     0,     0,     0,    41,
+       0,    43,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    55,     0,     0,     0,     0,     0,
+     152,     0,   144,     0,     0,     0,     0,     0,   105,     0,
+      97,     0,     0,     0,     0,     0,   127,     0,     0,   121,
+      40,    33,     0,     0,     0,     0,     0,     0,    45,     0,
+      72,    73,     0,     0,     0,     0,     0,     0,     0,     0,
+      57,     0,   166,     0,     0,   154,     0,   148,     0,     0,
+       0,   107,     0,   101,     0,   140,     0,   129,     0,   123,
+       0,   183,   185,   187,     0,     0,    71,    76,    77,    75,
+      79,    30,    81,    83,    88,    88,   145,     0,   165,   168,
+     163,   150,   117,     0,   115,   103,   139,   137,   125,    34,
+       0,   193,     0,   190,   192,    94,    93,     0,    89,    90,
+      92,     0,     0,   178,   180,   177,   175,   176,     0,   171,
+     173,   174,     0,    53,     0,     0,   189,     0,     0,    85,
+      87,   142,     0,     0,     0,   170,   119,     0,   191,     0,
+      91,     0,     0,   172,     0,    98,   179,   181,   197,     0,
+     195,     0,     0,     0,   194,    95,   208,   213,     0,   211,
+     207,   205,   206,     0,   199,   201,   203,   204,   202,   196,
+       0,     0,     0,     0,     0,   198,     0,     0,   210,     0,
+     200,   209,     0,   212,   217,     0,   215,     0,     0,   214,
+     225,     0,     0,     0,     0,   219,   221,   222,   223,   224,
+     216,     0,     0,     0,     0,     0,   218,     0,   227,   228,
+     229,   220,   226
   };
 
   const signed char
   D2Parser::yypgoto_[] =
   {
-     -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
-     -90,   -38,   -90,    20,   -90,   -90,   -90,   -90,   -90,   -90,
-     -90,   -90,   -50,   -90,   -90,   -90,    72,   -90,   -90,   -90,
-     -90,    -8,    63,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
-     -90,   -90,   -51,   -90,   -39,   -90,   -90,   -90,   -90,   -90,
-     -16,   -90,   -48,   -90,   -90,   -90,   -90,   -57,   -90,    50,
-     -90,   -90,   -90,    53,    56,   -90,   -90,   -90,   -90,   -90,
-     -90,   -90,   -90,   -17,    48,   -90,   -90,   -90,    51,    52,
-     -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -10,
-     -90,    71,   -90,   -90,   -90,    75,    82,   -90,   -90,   -90,
-     -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
-     -90,   -90,   -90,   -27,   -90,   -90,   -90,   -45,   -90,   -90,
-     -60,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -73,
-     -90,   -90,   -89,   -90,   -90,   -90,   -90,   -90
+     -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
+     -92,   -38,   -92,    31,   -92,   -92,   -92,   -92,   -92,   -92,
+     -92,   -92,   -50,   -92,   -92,   -92,    86,   -92,   -92,   -92,
+     -92,     3,    76,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
+     -92,   -92,   -51,   -92,   -39,   -92,   -92,   -92,   -92,   -92,
+      -5,   -92,   -47,   -92,   -92,   -92,   -92,   -63,   -92,    64,
+     -92,   -92,   -92,    68,    72,   -92,   -92,   -92,   -92,   -92,
+     -92,   -92,   -92,    -3,    66,   -92,   -92,   -92,    70,    67,
+     -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,    20,
+     -92,    90,   -92,   -92,   -92,    93,   101,   -92,   -92,   -92,
+     -92,   -92,   -92,   -92,   -92,   -92,   -92,   -36,   -92,   -92,
+     -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
+     -92,   -17,   -92,   -92,   -92,   -44,   -92,   -92,   -62,   -92,
+     -92,   -92,   -92,   -92,   -92,   -92,   -92,   -77,   -92,   -92,
+     -91,   -92,   -92,   -92,   -92,   -92
   };
 
   const short
   D2Parser::yydefgoto_[] =
   {
       -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    28,    29,    30,    49,   248,    62,    63,    31,    48,
-      59,    60,    88,    33,    50,    71,    72,    73,   155,    35,
-      51,    89,    90,    91,   160,    92,    93,    94,   163,   245,
-      95,   164,    96,   165,    97,   166,    98,   167,    99,   168,
-     272,   273,   274,   275,   283,    43,    55,   130,   131,   132,
-     186,    41,    54,   124,   125,   126,   183,   127,   181,   128,
-     182,    47,    57,   145,   146,   194,    45,    56,   139,   140,
-     141,   191,   142,   189,   143,   100,   169,    39,    53,   115,
-     116,   117,   178,    37,    52,   108,   109,   110,   175,   111,
-     172,   112,   113,   174,    74,   152,    75,   153,    76,   154,
-      77,   156,   267,   268,   269,   280,   296,   297,   299,   310,
-     311,   312,   317,   313,   314,   320,   315,   318,   332,   333,
-     334,   341,   342,   343,   348,   344,   345,   346
+      19,    28,    29,    30,    49,   252,    62,    63,    31,    48,
+      59,    60,    89,    33,    50,    71,    72,    73,   157,    35,
+      51,    90,    91,    92,   162,    93,    94,    95,   165,   249,
+      96,   166,    97,   167,    98,   168,    99,   169,   100,   170,
+     277,   278,   279,   280,   297,    43,    55,   132,   133,   134,
+     189,    41,    54,   126,   127,   128,   186,   129,   184,   130,
+     185,    47,    57,   147,   148,   197,    45,    56,   141,   142,
+     143,   194,   144,   192,   145,   101,   171,    39,    53,   117,
+     118,   119,   181,    37,    52,   110,   111,   112,   178,   113,
+     175,   114,   115,   177,   102,   172,   288,   289,   290,   302,
+     291,   303,    74,   154,    75,   155,    76,   156,    77,   158,
+     272,   273,   274,   294,   319,   320,   322,   333,   334,   335,
+     340,   336,   337,   343,   338,   341,   355,   356,   357,   364,
+     365,   366,   371,   367,   368,   369
   };
 
   const unsigned short
   D2Parser::yytable_[] =
   {
-      70,   106,   105,   122,   121,   137,   136,    21,    32,    22,
-      58,    23,    20,   107,   270,   123,    38,   138,    64,    65,
-      66,    67,   158,    78,    79,    80,    81,   159,    61,    82,
-      34,    83,    84,    85,    86,   133,   134,    83,    84,    87,
-      36,    69,    68,    83,    84,    40,   101,   102,   103,   170,
-     135,   104,    83,    84,   171,    24,    25,    26,    27,    83,
-      84,    69,    69,    42,   118,   119,   303,   304,    69,   305,
-     306,    44,   337,   120,    69,   338,   339,   340,    46,   176,
-     184,   192,   176,    69,   177,   185,   193,   256,   243,   244,
-      69,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-     184,   192,   170,   114,   281,   260,   263,   279,    70,   282,
-     197,   198,   284,   284,   321,   352,   148,   285,   286,   322,
-     353,   195,   129,   144,   196,   106,   105,   106,   105,   195,
-     147,   149,   288,   122,   121,   122,   121,   107,   150,   107,
-     151,   137,   136,   137,   136,   123,   300,   123,   335,   301,
-     157,   336,   161,   138,   162,   138,   173,   179,   180,   187,
-     188,   199,   237,   238,   239,   190,   200,   201,   202,   203,
-     204,   206,   209,   207,   208,   210,   211,   212,   213,   214,
-     215,   217,   218,   219,   220,   224,   225,   226,   230,   231,
-     232,   236,   240,   242,   249,   241,    22,   250,   264,   246,
-     271,   271,   251,   252,   258,   289,   287,   253,   291,   254,
-     293,   255,   257,   259,   294,   295,   302,   319,   323,   324,
-     326,   349,   261,   262,   329,   331,   266,   350,   351,   354,
-     205,   247,   265,   216,   271,   276,   292,   298,   229,   228,
-     227,   278,   277,   235,   233,   234,   325,   328,   308,   307,
-     330,   223,   355,   222,   290,   316,   356,   357,   221,   359,
-     309,   327,   347,   358,     0,     0,     0,     0,     0,     0,
-     308,   307,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   309
+      70,   108,   107,   124,   123,   139,   138,    21,    32,    22,
+      58,    23,    20,   109,   275,   125,    38,   140,    64,    65,
+      66,    67,    42,    78,    79,    80,    81,   135,   136,    82,
+      34,    83,    84,    85,    86,    83,    84,    83,    84,    87,
+     247,   248,   137,    88,    69,    68,   103,   104,   105,    36,
+     198,    40,   160,   199,   106,    83,    84,   161,    24,    25,
+      26,    27,    83,    84,    69,    69,    44,   120,   121,    69,
+      46,    69,   326,   327,    61,   328,   329,    83,    84,   122,
+     360,   173,   179,   361,   362,   363,   174,   180,   187,    69,
+     283,   284,   198,   188,   116,   306,    69,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,   131,   146,   149,   195,
+      70,    69,   200,   201,   196,   179,   187,   195,   173,   295,
+     261,   265,   268,   293,   296,   150,   152,   298,   108,   107,
+     108,   107,   299,   151,   153,   183,   124,   123,   124,   123,
+     109,   159,   109,   163,   139,   138,   139,   138,   125,   298,
+     125,   164,   304,   191,   300,   344,   140,   305,   140,   375,
+     345,   176,   193,   202,   376,   241,   242,   243,   323,   358,
+     182,   324,   359,   190,   203,   204,   205,   206,   207,   209,
+     210,   212,   211,   213,   214,   215,   216,   217,   218,   219,
+     221,   222,   223,   224,   228,   229,   230,   234,   235,   236,
+     240,   244,   269,   307,   276,   276,   286,   285,   245,   246,
+      22,   253,   254,   255,   256,   257,   258,   259,   287,   250,
+     263,   309,   301,   311,   260,   262,   312,   318,   314,   315,
+     342,   325,   264,   346,   266,   271,   347,   349,   354,   352,
+     372,   373,   374,   267,   377,   251,   208,   270,   276,   220,
+     281,   310,   321,   286,   285,   233,   316,   232,   317,   231,
+     292,   348,   237,   351,   239,   287,   353,   238,   313,   379,
+     378,   331,   330,   227,   226,   380,   282,   382,   308,   339,
+     225,   370,   350,   332,   381,     0,     0,     0,     0,     0,
+       0,     0,     0,   331,   330,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   332
   };
 
   const short
@@ -2179,101 +2245,107 @@ namespace isc { namespace d2 {
   {
       50,    52,    52,    54,    54,    56,    56,     5,     7,     7,
       48,     9,     0,    52,    26,    54,     5,    56,    10,    11,
-      12,    13,     3,    14,    15,    16,    17,     8,    53,    20,
-       7,    22,    23,    24,    25,    14,    15,    22,    23,    30,
-       7,    53,    34,    22,    23,     7,    31,    32,    33,     3,
-      29,    36,    22,    23,     8,    53,    54,    55,    56,    22,
-      23,    53,    53,     5,    27,    28,    36,    37,    53,    39,
-      40,     7,    38,    36,    53,    41,    42,    43,     5,     3,
-       3,     3,     3,    53,     8,     8,     8,     8,    18,    19,
-      53,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-       3,     3,     3,     7,     3,     8,     8,     8,   158,     8,
-     148,   149,     3,     3,     3,     3,     3,     8,     8,     8,
-       8,     3,     7,     7,     6,   176,   176,   178,   178,     3,
-       6,     4,     6,   184,   184,   186,   186,   176,     8,   178,
-       3,   192,   192,   194,   194,   184,     3,   186,     3,     6,
-       4,     6,     4,   192,     4,   194,     4,     6,     3,     6,
-       3,    53,   200,   201,   202,     4,     4,     4,     4,     4,
-       4,     4,     4,    54,    54,     4,     4,     4,     4,     4,
-       4,     4,    54,     4,     4,     4,     4,     4,     4,    54,
-       4,     4,     7,    53,    53,     7,     7,     7,   236,    21,
-     250,   251,     7,     5,     5,     4,     6,    53,     4,    53,
-       5,    53,    53,    53,     5,     7,     6,     4,     4,     4,
-       4,     4,    53,    53,     5,     7,    35,     4,     4,     4,
-     158,   211,   240,   170,   284,   251,   284,   294,   188,   186,
-     184,   258,   252,   195,   192,   194,    54,    53,   299,   299,
-      53,   180,    56,   178,   281,   300,    54,    54,   176,    53,
-     299,   321,   335,   352,    -1,    -1,    -1,    -1,    -1,    -1,
-     321,   321,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   321
+      12,    13,     5,    14,    15,    16,    17,    14,    15,    20,
+       7,    22,    23,    24,    25,    22,    23,    22,    23,    30,
+      18,    19,    29,    34,    56,    37,    31,    32,    33,     7,
+       3,     7,     3,     6,    39,    22,    23,     8,    56,    57,
+      58,    59,    22,    23,    56,    56,     7,    27,    28,    56,
+       5,    56,    39,    40,    56,    42,    43,    22,    23,    39,
+      41,     3,     3,    44,    45,    46,     8,     8,     3,    56,
+      35,    36,     3,     8,     7,     6,    56,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,     7,     7,     6,     3,
+     160,    56,   150,   151,     8,     3,     3,     3,     3,     3,
+       8,     8,     8,     8,     8,     3,     8,     3,   179,   179,
+     181,   181,     8,     4,     3,     3,   187,   187,   189,   189,
+     179,     4,   181,     4,   195,   195,   197,   197,   187,     3,
+     189,     4,     3,     3,     8,     3,   195,     8,   197,     3,
+       8,     4,     4,    56,     8,   203,   204,   205,     3,     3,
+       6,     6,     6,     6,     4,     4,     4,     4,     4,     4,
+      57,     4,    57,     4,     4,     4,     4,     4,     4,     4,
+       4,    57,     4,     4,     4,     4,     4,     4,    57,     4,
+       4,     7,   240,     4,   254,   255,   257,   257,     7,    56,
+       7,    56,     7,     7,     5,     7,    56,    56,   257,    21,
+       5,     4,     6,     4,    56,    56,     4,     7,     5,     5,
+       4,     6,    56,     4,    56,    38,     4,     4,     7,     5,
+       4,     4,     4,    56,     4,   214,   160,   244,   298,   173,
+     255,   298,   315,   304,   304,   191,    56,   189,    56,   187,
+     263,    57,   195,    56,   198,   304,    56,   197,   304,    57,
+      59,   322,   322,   183,   181,    57,   256,    56,   295,   323,
+     179,   358,   344,   322,   375,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   344,   344,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   344
   };
 
   const unsigned char
   D2Parser::yystos_[] =
   {
-       0,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-       0,     5,     7,     9,    53,    54,    55,    56,    68,    69,
-      70,    75,     7,    80,     7,    86,     7,   150,     5,   144,
-       7,   118,     5,   112,     7,   133,     5,   128,    76,    71,
-      81,    87,   151,   145,   119,   113,   134,   129,    68,    77,
-      78,    53,    73,    74,    10,    11,    12,    13,    34,    53,
-      79,    82,    83,    84,   161,   163,   165,   167,    14,    15,
-      16,    17,    20,    22,    23,    24,    25,    30,    79,    88,
-      89,    90,    92,    93,    94,    97,    99,   101,   103,   105,
-     142,    31,    32,    33,    36,    79,    99,   101,   152,   153,
-     154,   156,   158,   159,     7,   146,   147,   148,    27,    28,
-      36,    79,    99,   101,   120,   121,   122,   124,   126,     7,
-     114,   115,   116,    14,    15,    29,    79,    99,   101,   135,
-     136,   137,   139,   141,     7,   130,   131,     6,     3,     4,
-       8,     3,   162,   164,   166,    85,   168,     4,     3,     8,
-      91,     4,     4,    95,    98,   100,   102,   104,   106,   143,
-       3,     8,   157,     4,   160,   155,     3,     8,   149,     6,
-       3,   125,   127,   123,     3,     8,   117,     6,     3,   140,
-       4,   138,     3,     8,   132,     3,     6,    68,    68,    53,
-       4,     4,     4,     4,     4,    83,     4,    54,    54,     4,
-       4,     4,     4,     4,     4,     4,    89,     4,    54,     4,
-       4,   153,   152,   148,     4,     4,     4,   121,   120,   116,
-       4,    54,     4,   136,   135,   131,     4,    68,    68,    68,
-       7,     7,    53,    18,    19,    96,    21,    70,    72,    53,
-       7,     7,     5,    53,    53,    53,     8,    53,     5,    53,
-       8,    53,    53,     8,    68,    88,    35,   169,   170,   171,
-      26,    79,   107,   108,   109,   110,   107,   146,   130,     8,
-     172,     3,     8,   111,     3,     8,     8,     6,     6,     4,
-     170,     4,   109,     5,     5,     7,   173,   174,   114,   175,
-       3,     6,     6,    36,    37,    39,    40,    79,    99,   101,
-     176,   177,   178,   180,   181,   183,   174,   179,   184,     4,
-     182,     3,     8,     4,     4,    54,     4,   177,    53,     5,
-      53,     7,   185,   186,   187,     3,     6,    38,    41,    42,
-      43,   188,   189,   190,   192,   193,   194,   186,   191,     4,
-       4,     4,     3,     8,     4,    56,    54,    54,   189,    53
+       0,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+       0,     5,     7,     9,    56,    57,    58,    59,    71,    72,
+      73,    78,     7,    83,     7,    89,     7,   153,     5,   147,
+       7,   121,     5,   115,     7,   136,     5,   131,    79,    74,
+      84,    90,   154,   148,   122,   116,   137,   132,    71,    80,
+      81,    56,    76,    77,    10,    11,    12,    13,    37,    56,
+      82,    85,    86,    87,   172,   174,   176,   178,    14,    15,
+      16,    17,    20,    22,    23,    24,    25,    30,    34,    82,
+      91,    92,    93,    95,    96,    97,   100,   102,   104,   106,
+     108,   145,   164,    31,    32,    33,    39,    82,   102,   104,
+     155,   156,   157,   159,   161,   162,     7,   149,   150,   151,
+      27,    28,    39,    82,   102,   104,   123,   124,   125,   127,
+     129,     7,   117,   118,   119,    14,    15,    29,    82,   102,
+     104,   138,   139,   140,   142,   144,     7,   133,   134,     6,
+       3,     4,     8,     3,   173,   175,   177,    88,   179,     4,
+       3,     8,    94,     4,     4,    98,   101,   103,   105,   107,
+     109,   146,   165,     3,     8,   160,     4,   163,   158,     3,
+       8,   152,     6,     3,   128,   130,   126,     3,     8,   120,
+       6,     3,   143,     4,   141,     3,     8,   135,     3,     6,
+      71,    71,    56,     4,     4,     4,     4,     4,    86,     4,
+      57,    57,     4,     4,     4,     4,     4,     4,     4,     4,
+      92,     4,    57,     4,     4,   156,   155,   151,     4,     4,
+       4,   124,   123,   119,     4,    57,     4,   139,   138,   134,
+       4,    71,    71,    71,     7,     7,    56,    18,    19,    99,
+      21,    73,    75,    56,     7,     7,     5,     7,    56,    56,
+      56,     8,    56,     5,    56,     8,    56,    56,     8,    71,
+      91,    38,   180,   181,   182,    26,    82,   110,   111,   112,
+     113,   110,   149,    35,    36,    82,   102,   104,   166,   167,
+     168,   170,   133,     8,   183,     3,     8,   114,     3,     8,
+       8,     6,   169,   171,     3,     8,     6,     4,   181,     4,
+     112,     4,     4,   167,     5,     5,    56,    56,     7,   184,
+     185,   117,   186,     3,     6,     6,    39,    40,    42,    43,
+      82,   102,   104,   187,   188,   189,   191,   192,   194,   185,
+     190,   195,     4,   193,     3,     8,     4,     4,    57,     4,
+     188,    56,     5,    56,     7,   196,   197,   198,     3,     6,
+      41,    44,    45,    46,   199,   200,   201,   203,   204,   205,
+     197,   202,     4,     4,     4,     3,     8,     4,    59,    57,
+      57,   200,    56
   };
 
   const unsigned char
   D2Parser::yyr1_[] =
   {
-       0,    57,    59,    58,    60,    58,    61,    58,    62,    58,
-      63,    58,    64,    58,    65,    58,    66,    58,    67,    58,
-      68,    68,    68,    68,    68,    68,    68,    69,    71,    70,
-      72,    73,    73,    74,    74,    76,    75,    77,    77,    78,
-      78,    79,    81,    80,    82,    82,    83,    83,    83,    83,
-      83,    83,    85,    84,    87,    86,    88,    88,    89,    89,
-      89,    89,    89,    89,    89,    89,    89,    89,    89,    91,
-      90,    92,    93,    95,    94,    96,    96,    98,    97,   100,
-      99,   102,   101,   104,   103,   106,   105,   107,   107,   108,
-     108,   109,   109,   111,   110,   113,   112,   114,   114,   115,
-     115,   117,   116,   119,   118,   120,   120,   121,   121,   121,
-     121,   121,   121,   123,   122,   125,   124,   127,   126,   129,
-     128,   130,   130,   132,   131,   134,   133,   135,   135,   136,
-     136,   136,   136,   136,   136,   138,   137,   140,   139,   141,
-     143,   142,   145,   144,   146,   146,   147,   147,   149,   148,
-     151,   150,   152,   152,   153,   153,   153,   153,   153,   153,
-     153,   155,   154,   157,   156,   158,   160,   159,   162,   161,
-     164,   163,   166,   165,   168,   167,   169,   169,   170,   172,
-     171,   173,   173,   175,   174,   176,   176,   177,   177,   177,
-     177,   177,   177,   177,   179,   178,   180,   182,   181,   184,
-     183,   185,   185,   187,   186,   188,   188,   189,   189,   189,
-     189,   191,   190,   192,   193,   194
+       0,    60,    62,    61,    63,    61,    64,    61,    65,    61,
+      66,    61,    67,    61,    68,    61,    69,    61,    70,    61,
+      71,    71,    71,    71,    71,    71,    71,    72,    74,    73,
+      75,    76,    76,    77,    77,    79,    78,    80,    80,    81,
+      81,    82,    84,    83,    85,    85,    86,    86,    86,    86,
+      86,    86,    88,    87,    90,    89,    91,    91,    92,    92,
+      92,    92,    92,    92,    92,    92,    92,    92,    92,    92,
+      94,    93,    95,    96,    98,    97,    99,    99,   101,   100,
+     103,   102,   105,   104,   107,   106,   109,   108,   110,   110,
+     111,   111,   112,   112,   114,   113,   116,   115,   117,   117,
+     118,   118,   120,   119,   122,   121,   123,   123,   124,   124,
+     124,   124,   124,   124,   126,   125,   128,   127,   130,   129,
+     132,   131,   133,   133,   135,   134,   137,   136,   138,   138,
+     139,   139,   139,   139,   139,   139,   141,   140,   143,   142,
+     144,   146,   145,   148,   147,   149,   149,   150,   150,   152,
+     151,   154,   153,   155,   155,   156,   156,   156,   156,   156,
+     156,   156,   158,   157,   160,   159,   161,   163,   162,   165,
+     164,   166,   166,   167,   167,   167,   167,   167,   169,   168,
+     171,   170,   173,   172,   175,   174,   177,   176,   179,   178,
+     180,   180,   181,   183,   182,   184,   184,   186,   185,   187,
+     187,   188,   188,   188,   188,   188,   188,   188,   190,   189,
+     191,   193,   192,   195,   194,   196,   196,   198,   197,   199,
+     199,   200,   200,   200,   200,   202,   201,   203,   204,   205
   };
 
   const unsigned char
@@ -2285,22 +2357,23 @@ namespace isc { namespace d2 {
        1,     0,     1,     3,     5,     0,     4,     0,     1,     1,
        3,     2,     0,     4,     1,     3,     1,     1,     1,     1,
        1,     1,     0,     6,     0,     4,     1,     3,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
-       4,     3,     3,     0,     4,     1,     1,     0,     4,     0,
-       4,     0,     4,     0,     6,     0,     6,     0,     1,     1,
-       3,     1,     1,     0,     6,     0,     4,     0,     1,     1,
-       3,     0,     4,     0,     4,     1,     3,     1,     1,     1,
-       1,     1,     1,     0,     4,     0,     4,     0,     6,     0,
-       4,     1,     3,     0,     4,     0,     4,     1,     3,     1,
-       1,     1,     1,     1,     1,     0,     4,     0,     4,     3,
-       0,     6,     0,     4,     0,     1,     1,     3,     0,     4,
-       0,     4,     1,     3,     1,     1,     1,     1,     1,     1,
-       1,     0,     4,     0,     4,     3,     0,     4,     0,     4,
-       0,     4,     0,     4,     0,     6,     1,     3,     1,     0,
-       6,     1,     3,     0,     4,     1,     3,     1,     1,     1,
-       1,     1,     1,     1,     0,     4,     3,     0,     4,     0,
-       6,     1,     3,     0,     4,     1,     3,     1,     1,     1,
-       1,     0,     4,     3,     3,     3
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       0,     4,     3,     3,     0,     4,     1,     1,     0,     4,
+       0,     4,     0,     4,     0,     6,     0,     6,     0,     1,
+       1,     3,     1,     1,     0,     6,     0,     4,     0,     1,
+       1,     3,     0,     4,     0,     4,     1,     3,     1,     1,
+       1,     1,     1,     1,     0,     4,     0,     4,     0,     6,
+       0,     4,     1,     3,     0,     4,     0,     4,     1,     3,
+       1,     1,     1,     1,     1,     1,     0,     4,     0,     4,
+       3,     0,     6,     0,     4,     0,     1,     1,     3,     0,
+       4,     0,     4,     1,     3,     1,     1,     1,     1,     1,
+       1,     1,     0,     4,     0,     4,     3,     0,     4,     0,
+       6,     1,     3,     1,     1,     1,     1,     1,     0,     4,
+       0,     4,     0,     4,     0,     4,     0,     4,     0,     6,
+       1,     3,     1,     0,     6,     1,     3,     0,     4,     1,
+       3,     1,     1,     1,     1,     1,     1,     1,     0,     4,
+       3,     0,     4,     0,     6,     1,     3,     0,     4,     1,
+       3,     1,     1,     1,     1,     0,     4,     3,     3,     3
   };
 
 
@@ -2317,15 +2390,16 @@ namespace isc { namespace d2 {
   "\"ncr-format\"", "\"JSON\"", "\"user-context\"", "\"comment\"",
   "\"forward-ddns\"", "\"reverse-ddns\"", "\"ddns-domains\"",
   "\"key-name\"", "\"dns-servers\"", "\"hostname\"", "\"tsig-keys\"",
-  "\"algorithm\"", "\"digest-bits\"", "\"secret\"", "\"Logging\"",
-  "\"loggers\"", "\"name\"", "\"output_options\"", "\"output\"",
-  "\"debuglevel\"", "\"severity\"", "\"flush\"", "\"maxsize\"",
-  "\"maxver\"", "TOPLEVEL_JSON", "TOPLEVEL_DHCPDDNS", "SUB_DHCPDDNS",
-  "SUB_TSIG_KEY", "SUB_TSIG_KEYS", "SUB_DDNS_DOMAIN", "SUB_DDNS_DOMAINS",
-  "SUB_DNS_SERVER", "SUB_DNS_SERVERS", "\"constant string\"",
-  "\"integer\"", "\"floating point\"", "\"boolean\"", "$accept", "start",
-  "$@1", "$@2", "$@3", "$@4", "$@5", "$@6", "$@7", "$@8", "$@9", "value",
-  "sub_json", "map2", "$@10", "map_value", "map_content", "not_empty_map",
+  "\"algorithm\"", "\"digest-bits\"", "\"secret\"", "\"control-socket\"",
+  "\"socket-type\"", "\"socket-name\"", "\"Logging\"", "\"loggers\"",
+  "\"name\"", "\"output_options\"", "\"output\"", "\"debuglevel\"",
+  "\"severity\"", "\"flush\"", "\"maxsize\"", "\"maxver\"",
+  "TOPLEVEL_JSON", "TOPLEVEL_DHCPDDNS", "SUB_DHCPDDNS", "SUB_TSIG_KEY",
+  "SUB_TSIG_KEYS", "SUB_DDNS_DOMAIN", "SUB_DDNS_DOMAINS", "SUB_DNS_SERVER",
+  "SUB_DNS_SERVERS", "\"constant string\"", "\"integer\"",
+  "\"floating point\"", "\"boolean\"", "$accept", "start", "$@1", "$@2",
+  "$@3", "$@4", "$@5", "$@6", "$@7", "$@8", "$@9", "value", "sub_json",
+  "map2", "$@10", "map_value", "map_content", "not_empty_map",
   "list_generic", "$@11", "list_content", "not_empty_list",
   "unknown_map_entry", "syntax_map", "$@12", "global_objects",
   "global_object", "dhcpddns_object", "$@13", "sub_dhcpddns", "$@14",
@@ -2345,42 +2419,46 @@ namespace isc { namespace d2 {
   "tsig_keys_list", "not_empty_tsig_keys_list", "tsig_key", "$@36",
   "sub_tsig_key", "$@37", "tsig_key_params", "tsig_key_param",
   "tsig_key_name", "$@38", "tsig_key_algorithm", "$@39",
-  "tsig_key_digest_bits", "tsig_key_secret", "$@40", "dhcp6_json_object",
-  "$@41", "dhcp4_json_object", "$@42", "control_agent_json_object", "$@43",
-  "logging_object", "$@44", "logging_params", "logging_param", "loggers",
-  "$@45", "loggers_entries", "logger_entry", "$@46", "logger_params",
-  "logger_param", "name", "$@47", "debuglevel", "severity", "$@48",
-  "output_options_list", "$@49", "output_options_list_content",
-  "output_entry", "$@50", "output_params_list", "output_params", "output",
-  "$@51", "flush", "maxsize", "maxver", YY_NULLPTR
+  "tsig_key_digest_bits", "tsig_key_secret", "$@40", "control_socket",
+  "$@41", "control_socket_params", "control_socket_param",
+  "control_socket_type", "$@42", "control_socket_name", "$@43",
+  "dhcp6_json_object", "$@44", "dhcp4_json_object", "$@45",
+  "control_agent_json_object", "$@46", "logging_object", "$@47",
+  "logging_params", "logging_param", "loggers", "$@48", "loggers_entries",
+  "logger_entry", "$@49", "logger_params", "logger_param", "name", "$@50",
+  "debuglevel", "severity", "$@51", "output_options_list", "$@52",
+  "output_options_list_content", "output_entry", "$@53",
+  "output_params_list", "output_params", "output", "$@54", "flush",
+  "maxsize", "maxver", YY_NULLPTR
   };
 
 #if D2_PARSER_DEBUG
   const unsigned short
   D2Parser::yyrline_[] =
   {
-       0,   120,   120,   120,   121,   121,   122,   122,   123,   123,
-     124,   124,   125,   125,   126,   126,   127,   127,   128,   128,
-     136,   137,   138,   139,   140,   141,   142,   145,   150,   150,
-     161,   164,   165,   168,   172,   179,   179,   186,   187,   190,
-     194,   205,   215,   215,   227,   228,   232,   233,   234,   235,
-     236,   237,   242,   242,   252,   252,   260,   261,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   278,
-     278,   286,   294,   303,   303,   311,   312,   315,   315,   323,
-     323,   348,   348,   375,   375,   385,   385,   395,   396,   399,
-     400,   403,   404,   409,   409,   419,   419,   426,   427,   430,
-     431,   434,   434,   442,   442,   449,   450,   453,   454,   455,
-     456,   457,   458,   462,   462,   474,   474,   486,   486,   496,
-     496,   503,   504,   507,   507,   515,   515,   522,   523,   526,
-     527,   528,   529,   530,   531,   534,   534,   546,   546,   554,
-     568,   568,   578,   578,   585,   586,   589,   590,   593,   593,
-     601,   601,   610,   611,   614,   615,   616,   617,   618,   619,
-     620,   623,   623,   635,   635,   646,   654,   654,   669,   669,
-     676,   676,   683,   683,   695,   695,   708,   709,   713,   717,
-     717,   729,   730,   734,   734,   742,   743,   746,   747,   748,
-     749,   750,   751,   752,   755,   755,   763,   767,   767,   775,
-     775,   785,   786,   789,   789,   797,   798,   801,   802,   803,
-     804,   807,   807,   815,   820,   825
+       0,   124,   124,   124,   125,   125,   126,   126,   127,   127,
+     128,   128,   129,   129,   130,   130,   131,   131,   132,   132,
+     140,   141,   142,   143,   144,   145,   146,   149,   154,   154,
+     165,   168,   169,   172,   176,   183,   183,   190,   191,   194,
+     198,   209,   219,   219,   231,   232,   236,   237,   238,   239,
+     240,   241,   246,   246,   256,   256,   264,   265,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     283,   283,   291,   299,   308,   308,   316,   317,   320,   320,
+     328,   328,   353,   353,   380,   380,   390,   390,   400,   401,
+     404,   405,   408,   409,   414,   414,   424,   424,   431,   432,
+     435,   436,   439,   439,   447,   447,   454,   455,   458,   459,
+     460,   461,   462,   463,   467,   467,   479,   479,   491,   491,
+     501,   501,   508,   509,   512,   512,   520,   520,   527,   528,
+     531,   532,   533,   534,   535,   536,   539,   539,   551,   551,
+     559,   573,   573,   583,   583,   590,   591,   594,   595,   598,
+     598,   606,   606,   615,   616,   619,   620,   621,   622,   623,
+     624,   625,   628,   628,   640,   640,   651,   659,   659,   675,
+     675,   685,   686,   689,   690,   691,   692,   693,   696,   696,
+     704,   704,   714,   714,   721,   721,   728,   728,   740,   740,
+     753,   754,   758,   762,   762,   774,   775,   779,   779,   787,
+     788,   791,   792,   793,   794,   795,   796,   797,   800,   800,
+     808,   812,   812,   820,   820,   830,   831,   834,   834,   842,
+     843,   846,   847,   848,   849,   852,   852,   860,   865,   870
   };
 
   // Print the state stack on the debug stream.
@@ -2415,8 +2493,8 @@ namespace isc { namespace d2 {
 
 #line 14 "d2_parser.yy" // lalr1.cc:1218
 } } // isc::d2
-#line 2419 "d2_parser.cc" // lalr1.cc:1218
-#line 830 "d2_parser.yy" // lalr1.cc:1219
+#line 2497 "d2_parser.cc" // lalr1.cc:1218
+#line 875 "d2_parser.yy" // lalr1.cc:1219
 
 
 void
index c32be0d7c07b59a10492a75d1519ee3fe668274b..4ebefde7094e9c5c1b37a4c0b14e3c5b2a126607 100644 (file)
@@ -1,4 +1,4 @@
-// A Bison parser, made by GNU Bison 3.2.1.
+// A Bison parser, made by GNU Bison 3.2.4.
 
 // Skeleton interface for Bison LALR(1) parsers in C++
 
@@ -569,29 +569,32 @@ namespace isc { namespace d2 {
         TOKEN_ALGORITHM = 286,
         TOKEN_DIGEST_BITS = 287,
         TOKEN_SECRET = 288,
-        TOKEN_LOGGING = 289,
-        TOKEN_LOGGERS = 290,
-        TOKEN_NAME = 291,
-        TOKEN_OUTPUT_OPTIONS = 292,
-        TOKEN_OUTPUT = 293,
-        TOKEN_DEBUGLEVEL = 294,
-        TOKEN_SEVERITY = 295,
-        TOKEN_FLUSH = 296,
-        TOKEN_MAXSIZE = 297,
-        TOKEN_MAXVER = 298,
-        TOKEN_TOPLEVEL_JSON = 299,
-        TOKEN_TOPLEVEL_DHCPDDNS = 300,
-        TOKEN_SUB_DHCPDDNS = 301,
-        TOKEN_SUB_TSIG_KEY = 302,
-        TOKEN_SUB_TSIG_KEYS = 303,
-        TOKEN_SUB_DDNS_DOMAIN = 304,
-        TOKEN_SUB_DDNS_DOMAINS = 305,
-        TOKEN_SUB_DNS_SERVER = 306,
-        TOKEN_SUB_DNS_SERVERS = 307,
-        TOKEN_STRING = 308,
-        TOKEN_INTEGER = 309,
-        TOKEN_FLOAT = 310,
-        TOKEN_BOOLEAN = 311
+        TOKEN_CONTROL_SOCKET = 289,
+        TOKEN_SOCKET_TYPE = 290,
+        TOKEN_SOCKET_NAME = 291,
+        TOKEN_LOGGING = 292,
+        TOKEN_LOGGERS = 293,
+        TOKEN_NAME = 294,
+        TOKEN_OUTPUT_OPTIONS = 295,
+        TOKEN_OUTPUT = 296,
+        TOKEN_DEBUGLEVEL = 297,
+        TOKEN_SEVERITY = 298,
+        TOKEN_FLUSH = 299,
+        TOKEN_MAXSIZE = 300,
+        TOKEN_MAXVER = 301,
+        TOKEN_TOPLEVEL_JSON = 302,
+        TOKEN_TOPLEVEL_DHCPDDNS = 303,
+        TOKEN_SUB_DHCPDDNS = 304,
+        TOKEN_SUB_TSIG_KEY = 305,
+        TOKEN_SUB_TSIG_KEYS = 306,
+        TOKEN_SUB_DDNS_DOMAIN = 307,
+        TOKEN_SUB_DDNS_DOMAINS = 308,
+        TOKEN_SUB_DNS_SERVER = 309,
+        TOKEN_SUB_DNS_SERVERS = 310,
+        TOKEN_STRING = 311,
+        TOKEN_INTEGER = 312,
+        TOKEN_FLOAT = 313,
+        TOKEN_BOOLEAN = 314
       };
     };
 
@@ -622,8 +625,13 @@ namespace isc { namespace d2 {
       /// Default constructor.
       basic_symbol ();
 
-      /// Move or copy constructor.
-      basic_symbol (YY_RVREF (basic_symbol) other);
+#if 201103L <= YY_CPLUSPLUS
+      /// Move constructor.
+      basic_symbol (basic_symbol&& that);
+#endif
+
+      /// Copy constructor.
+      basic_symbol (const basic_symbol& that);
 
 
       /// Constructor for valueless symbols, and symbols from each type.
@@ -680,7 +688,7 @@ namespace isc { namespace d2 {
     private:
 #if YY_CPLUSPLUS < 201103L
       /// Assignment operator.
-      basic_symbol& operator= (const basic_symbol& other);
+      basic_symbol& operator= (const basic_symbol& that);
 #endif
     };
 
@@ -690,8 +698,13 @@ namespace isc { namespace d2 {
       /// Default constructor.
       by_type ();
 
+#if 201103L <= YY_CPLUSPLUS
+      /// Move constructor.
+      by_type (by_type&& that);
+#endif
+
       /// Copy constructor.
-      by_type (const by_type& other);
+      by_type (const by_type& that);
 
       /// The symbol type as needed by the constructor.
       typedef token_type kind_type;
@@ -756,1158 +769,1992 @@ namespace isc { namespace d2 {
     void error (const syntax_error& err);
 
     // Symbol constructors declarations.
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_END (YY_COPY (location_type) l);
-
+    make_END (location_type l);
+#else
     static
     symbol_type
-    make_COMMA (YY_COPY (location_type) l);
-
+    make_END (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_COLON (YY_COPY (location_type) l);
-
+    make_COMMA (location_type l);
+#else
     static
     symbol_type
-    make_LSQUARE_BRACKET (YY_COPY (location_type) l);
-
+    make_COMMA (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_RSQUARE_BRACKET (YY_COPY (location_type) l);
-
+    make_COLON (location_type l);
+#else
     static
     symbol_type
-    make_LCURLY_BRACKET (YY_COPY (location_type) l);
-
+    make_COLON (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_RCURLY_BRACKET (YY_COPY (location_type) l);
-
+    make_LSQUARE_BRACKET (location_type l);
+#else
     static
     symbol_type
-    make_NULL_TYPE (YY_COPY (location_type) l);
-
+    make_LSQUARE_BRACKET (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_DHCP6 (YY_COPY (location_type) l);
-
+    make_RSQUARE_BRACKET (location_type l);
+#else
     static
     symbol_type
-    make_DHCP4 (YY_COPY (location_type) l);
-
+    make_RSQUARE_BRACKET (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_CONTROL_AGENT (YY_COPY (location_type) l);
-
+    make_LCURLY_BRACKET (location_type l);
+#else
     static
     symbol_type
-    make_DHCPDDNS (YY_COPY (location_type) l);
-
+    make_LCURLY_BRACKET (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_IP_ADDRESS (YY_COPY (location_type) l);
-
+    make_RCURLY_BRACKET (location_type l);
+#else
     static
     symbol_type
-    make_PORT (YY_COPY (location_type) l);
-
+    make_RCURLY_BRACKET (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_DNS_SERVER_TIMEOUT (YY_COPY (location_type) l);
-
+    make_NULL_TYPE (location_type l);
+#else
     static
     symbol_type
-    make_NCR_PROTOCOL (YY_COPY (location_type) l);
-
+    make_NULL_TYPE (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_UDP (YY_COPY (location_type) l);
-
+    make_DHCP6 (location_type l);
+#else
     static
     symbol_type
-    make_TCP (YY_COPY (location_type) l);
-
+    make_DHCP6 (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_NCR_FORMAT (YY_COPY (location_type) l);
-
+    make_DHCP4 (location_type l);
+#else
     static
     symbol_type
-    make_JSON (YY_COPY (location_type) l);
-
+    make_DHCP4 (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_USER_CONTEXT (YY_COPY (location_type) l);
-
+    make_CONTROL_AGENT (location_type l);
+#else
     static
     symbol_type
-    make_COMMENT (YY_COPY (location_type) l);
-
+    make_CONTROL_AGENT (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_FORWARD_DDNS (YY_COPY (location_type) l);
-
+    make_DHCPDDNS (location_type l);
+#else
     static
     symbol_type
-    make_REVERSE_DDNS (YY_COPY (location_type) l);
-
+    make_DHCPDDNS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_DDNS_DOMAINS (YY_COPY (location_type) l);
-
+    make_IP_ADDRESS (location_type l);
+#else
     static
     symbol_type
-    make_KEY_NAME (YY_COPY (location_type) l);
-
+    make_IP_ADDRESS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_DNS_SERVERS (YY_COPY (location_type) l);
-
+    make_PORT (location_type l);
+#else
     static
     symbol_type
-    make_HOSTNAME (YY_COPY (location_type) l);
-
+    make_PORT (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_TSIG_KEYS (YY_COPY (location_type) l);
-
+    make_DNS_SERVER_TIMEOUT (location_type l);
+#else
     static
     symbol_type
-    make_ALGORITHM (YY_COPY (location_type) l);
-
+    make_DNS_SERVER_TIMEOUT (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_DIGEST_BITS (YY_COPY (location_type) l);
-
+    make_NCR_PROTOCOL (location_type l);
+#else
     static
     symbol_type
-    make_SECRET (YY_COPY (location_type) l);
-
+    make_NCR_PROTOCOL (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_LOGGING (YY_COPY (location_type) l);
-
+    make_UDP (location_type l);
+#else
     static
     symbol_type
-    make_LOGGERS (YY_COPY (location_type) l);
-
+    make_UDP (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_NAME (YY_COPY (location_type) l);
-
+    make_TCP (location_type l);
+#else
     static
     symbol_type
-    make_OUTPUT_OPTIONS (YY_COPY (location_type) l);
-
+    make_TCP (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_OUTPUT (YY_COPY (location_type) l);
-
+    make_NCR_FORMAT (location_type l);
+#else
     static
     symbol_type
-    make_DEBUGLEVEL (YY_COPY (location_type) l);
-
+    make_NCR_FORMAT (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_SEVERITY (YY_COPY (location_type) l);
-
+    make_JSON (location_type l);
+#else
     static
     symbol_type
-    make_FLUSH (YY_COPY (location_type) l);
-
+    make_JSON (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_MAXSIZE (YY_COPY (location_type) l);
-
+    make_USER_CONTEXT (location_type l);
+#else
     static
     symbol_type
-    make_MAXVER (YY_COPY (location_type) l);
-
+    make_USER_CONTEXT (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_TOPLEVEL_JSON (YY_COPY (location_type) l);
-
+    make_COMMENT (location_type l);
+#else
     static
     symbol_type
-    make_TOPLEVEL_DHCPDDNS (YY_COPY (location_type) l);
-
+    make_COMMENT (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_SUB_DHCPDDNS (YY_COPY (location_type) l);
-
+    make_FORWARD_DDNS (location_type l);
+#else
     static
     symbol_type
-    make_SUB_TSIG_KEY (YY_COPY (location_type) l);
-
+    make_FORWARD_DDNS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_SUB_TSIG_KEYS (YY_COPY (location_type) l);
-
+    make_REVERSE_DDNS (location_type l);
+#else
     static
     symbol_type
-    make_SUB_DDNS_DOMAIN (YY_COPY (location_type) l);
-
+    make_REVERSE_DDNS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_SUB_DDNS_DOMAINS (YY_COPY (location_type) l);
-
+    make_DDNS_DOMAINS (location_type l);
+#else
     static
     symbol_type
-    make_SUB_DNS_SERVER (YY_COPY (location_type) l);
-
+    make_DDNS_DOMAINS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_SUB_DNS_SERVERS (YY_COPY (location_type) l);
-
+    make_KEY_NAME (location_type l);
+#else
     static
     symbol_type
-    make_STRING (YY_COPY (std::string) v, YY_COPY (location_type) l);
-
+    make_KEY_NAME (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_INTEGER (YY_COPY (int64_t) v, YY_COPY (location_type) l);
-
+    make_DNS_SERVERS (location_type l);
+#else
     static
     symbol_type
-    make_FLOAT (YY_COPY (double) v, YY_COPY (location_type) l);
-
+    make_DNS_SERVERS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_BOOLEAN (YY_COPY (bool) v, YY_COPY (location_type) l);
-
-
-
-  private:
-    /// This class is not copyable.
-    D2Parser (const D2Parser&);
-    D2Parser& operator= (const D2Parser&);
-
-    /// State numbers.
-    typedef int state_type;
-
-    /// Generate an error message.
-    /// \param yystate   the state where the error occurred.
-    /// \param yyla      the lookahead token.
-    virtual std::string yysyntax_error_ (state_type yystate,
-                                         const symbol_type& yyla) const;
-
-    /// Compute post-reduction state.
-    /// \param yystate   the current state
-    /// \param yysym     the nonterminal to push on the stack
-    state_type yy_lr_goto_state_ (state_type yystate, int yysym);
-
-    /// Whether the given \c yypact_ value indicates a defaulted state.
-    /// \param yyvalue   the value to check
-    static bool yy_pact_value_is_default_ (int yyvalue);
-
-    /// Whether the given \c yytable_ value indicates a syntax error.
-    /// \param yyvalue   the value to check
-    static bool yy_table_value_is_error_ (int yyvalue);
-
-    static const signed char yypact_ninf_;
-    static const signed char yytable_ninf_;
-
-    /// Convert a scanner token number \a t to a symbol number.
-    static token_number_type yytranslate_ (token_type t);
-
-    // Tables.
-  // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-  // STATE-NUM.
-  static const short yypact_[];
-
-  // YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
-  // Performed when YYTABLE does not specify something else to do.  Zero
-  // means the default is an error.
-  static const unsigned char yydefact_[];
-
-  // YYPGOTO[NTERM-NUM].
-  static const signed char yypgoto_[];
-
-  // YYDEFGOTO[NTERM-NUM].
-  static const short yydefgoto_[];
-
-  // YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
-  // positive, shift that token.  If negative, reduce the rule whose
-  // number is the opposite.  If YYTABLE_NINF, syntax error.
-  static const unsigned short yytable_[];
-
-  static const short yycheck_[];
-
-  // YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-  // symbol of state STATE-NUM.
-  static const unsigned char yystos_[];
-
-  // YYR1[YYN] -- Symbol number of symbol that rule YYN derives.
-  static const unsigned char yyr1_[];
-
-  // YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.
-  static const unsigned char yyr2_[];
-
-
-    /// Convert the symbol name \a n to a form suitable for a diagnostic.
-    static std::string yytnamerr_ (const char *n);
-
-
-    /// For a symbol, its name in clear.
-    static const char* const yytname_[];
-#if D2_PARSER_DEBUG
-  // YYRLINE[YYN] -- Source line where rule number YYN was defined.
-  static const unsigned short yyrline_[];
-    /// Report on the debug stream that the rule \a r is going to be reduced.
-    virtual void yy_reduce_print_ (int r);
-    /// Print the state stack on the debug stream.
-    virtual void yystack_print_ ();
-
-    /// Debugging level.
-    int yydebug_;
-    /// Debug stream.
-    std::ostream* yycdebug_;
-
-    /// \brief Display a symbol type, value and location.
-    /// \param yyo    The output stream.
-    /// \param yysym  The symbol.
-    template <typename Base>
-    void yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const;
+    make_HOSTNAME (location_type l);
+#else
+    static
+    symbol_type
+    make_HOSTNAME (const location_type& l);
 #endif
-
-    /// \brief Reclaim the memory associated to a symbol.
-    /// \param yymsg     Why this token is reclaimed.
-    ///                  If null, print nothing.
-    /// \param yysym     The symbol.
-    template <typename Base>
-    void yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const;
-
-  private:
-    /// Type access provider for state based symbols.
-    struct by_state
-    {
-      /// Default constructor.
-      by_state ();
-
-      /// The symbol type as needed by the constructor.
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_TSIG_KEYS (location_type l);
+#else
+    static
+    symbol_type
+    make_TSIG_KEYS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_ALGORITHM (location_type l);
+#else
+    static
+    symbol_type
+    make_ALGORITHM (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_DIGEST_BITS (location_type l);
+#else
+    static
+    symbol_type
+    make_DIGEST_BITS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_SECRET (location_type l);
+#else
+    static
+    symbol_type
+    make_SECRET (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_CONTROL_SOCKET (location_type l);
+#else
+    static
+    symbol_type
+    make_CONTROL_SOCKET (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_SOCKET_TYPE (location_type l);
+#else
+    static
+    symbol_type
+    make_SOCKET_TYPE (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_SOCKET_NAME (location_type l);
+#else
+    static
+    symbol_type
+    make_SOCKET_NAME (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_LOGGING (location_type l);
+#else
+    static
+    symbol_type
+    make_LOGGING (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_LOGGERS (location_type l);
+#else
+    static
+    symbol_type
+    make_LOGGERS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_NAME (location_type l);
+#else
+    static
+    symbol_type
+    make_NAME (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_OUTPUT_OPTIONS (location_type l);
+#else
+    static
+    symbol_type
+    make_OUTPUT_OPTIONS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_OUTPUT (location_type l);
+#else
+    static
+    symbol_type
+    make_OUTPUT (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_DEBUGLEVEL (location_type l);
+#else
+    static
+    symbol_type
+    make_DEBUGLEVEL (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_SEVERITY (location_type l);
+#else
+    static
+    symbol_type
+    make_SEVERITY (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_FLUSH (location_type l);
+#else
+    static
+    symbol_type
+    make_FLUSH (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_MAXSIZE (location_type l);
+#else
+    static
+    symbol_type
+    make_MAXSIZE (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_MAXVER (location_type l);
+#else
+    static
+    symbol_type
+    make_MAXVER (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_TOPLEVEL_JSON (location_type l);
+#else
+    static
+    symbol_type
+    make_TOPLEVEL_JSON (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_TOPLEVEL_DHCPDDNS (location_type l);
+#else
+    static
+    symbol_type
+    make_TOPLEVEL_DHCPDDNS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_SUB_DHCPDDNS (location_type l);
+#else
+    static
+    symbol_type
+    make_SUB_DHCPDDNS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_SUB_TSIG_KEY (location_type l);
+#else
+    static
+    symbol_type
+    make_SUB_TSIG_KEY (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_SUB_TSIG_KEYS (location_type l);
+#else
+    static
+    symbol_type
+    make_SUB_TSIG_KEYS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_SUB_DDNS_DOMAIN (location_type l);
+#else
+    static
+    symbol_type
+    make_SUB_DDNS_DOMAIN (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_SUB_DDNS_DOMAINS (location_type l);
+#else
+    static
+    symbol_type
+    make_SUB_DDNS_DOMAINS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_SUB_DNS_SERVER (location_type l);
+#else
+    static
+    symbol_type
+    make_SUB_DNS_SERVER (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_SUB_DNS_SERVERS (location_type l);
+#else
+    static
+    symbol_type
+    make_SUB_DNS_SERVERS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_STRING (std::string v, location_type l);
+#else
+    static
+    symbol_type
+    make_STRING (const std::string& v, const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_INTEGER (int64_t v, location_type l);
+#else
+    static
+    symbol_type
+    make_INTEGER (const int64_t& v, const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_FLOAT (double v, location_type l);
+#else
+    static
+    symbol_type
+    make_FLOAT (const double& v, const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_BOOLEAN (bool v, location_type l);
+#else
+    static
+    symbol_type
+    make_BOOLEAN (const bool& v, const location_type& l);
+#endif
+
+
+  private:
+    /// This class is not copyable.
+    D2Parser (const D2Parser&);
+    D2Parser& operator= (const D2Parser&);
+
+    /// State numbers.
+    typedef int state_type;
+
+    /// Generate an error message.
+    /// \param yystate   the state where the error occurred.
+    /// \param yyla      the lookahead token.
+    virtual std::string yysyntax_error_ (state_type yystate,
+                                         const symbol_type& yyla) const;
+
+    /// Compute post-reduction state.
+    /// \param yystate   the current state
+    /// \param yysym     the nonterminal to push on the stack
+    state_type yy_lr_goto_state_ (state_type yystate, int yysym);
+
+    /// Whether the given \c yypact_ value indicates a defaulted state.
+    /// \param yyvalue   the value to check
+    static bool yy_pact_value_is_default_ (int yyvalue);
+
+    /// Whether the given \c yytable_ value indicates a syntax error.
+    /// \param yyvalue   the value to check
+    static bool yy_table_value_is_error_ (int yyvalue);
+
+    static const signed char yypact_ninf_;
+    static const signed char yytable_ninf_;
+
+    /// Convert a scanner token number \a t to a symbol number.
+    static token_number_type yytranslate_ (token_type t);
+
+    // Tables.
+  // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+  // STATE-NUM.
+  static const short yypact_[];
+
+  // YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+  // Performed when YYTABLE does not specify something else to do.  Zero
+  // means the default is an error.
+  static const unsigned char yydefact_[];
+
+  // YYPGOTO[NTERM-NUM].
+  static const signed char yypgoto_[];
+
+  // YYDEFGOTO[NTERM-NUM].
+  static const short yydefgoto_[];
+
+  // YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
+  // positive, shift that token.  If negative, reduce the rule whose
+  // number is the opposite.  If YYTABLE_NINF, syntax error.
+  static const unsigned short yytable_[];
+
+  static const short yycheck_[];
+
+  // YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+  // symbol of state STATE-NUM.
+  static const unsigned char yystos_[];
+
+  // YYR1[YYN] -- Symbol number of symbol that rule YYN derives.
+  static const unsigned char yyr1_[];
+
+  // YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.
+  static const unsigned char yyr2_[];
+
+
+    /// Convert the symbol name \a n to a form suitable for a diagnostic.
+    static std::string yytnamerr_ (const char *n);
+
+
+    /// For a symbol, its name in clear.
+    static const char* const yytname_[];
+#if D2_PARSER_DEBUG
+  // YYRLINE[YYN] -- Source line where rule number YYN was defined.
+  static const unsigned short yyrline_[];
+    /// Report on the debug stream that the rule \a r is going to be reduced.
+    virtual void yy_reduce_print_ (int r);
+    /// Print the state stack on the debug stream.
+    virtual void yystack_print_ ();
+
+    /// Debugging level.
+    int yydebug_;
+    /// Debug stream.
+    std::ostream* yycdebug_;
+
+    /// \brief Display a symbol type, value and location.
+    /// \param yyo    The output stream.
+    /// \param yysym  The symbol.
+    template <typename Base>
+    void yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const;
+#endif
+
+    /// \brief Reclaim the memory associated to a symbol.
+    /// \param yymsg     Why this token is reclaimed.
+    ///                  If null, print nothing.
+    /// \param yysym     The symbol.
+    template <typename Base>
+    void yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const;
+
+  private:
+    /// Type access provider for state based symbols.
+    struct by_state
+    {
+      /// Default constructor.
+      by_state ();
+
+      /// The symbol type as needed by the constructor.
       typedef state_type kind_type;
 
-      /// Constructor.
-      by_state (kind_type s);
+      /// Constructor.
+      by_state (kind_type s);
+
+      /// Copy constructor.
+      by_state (const by_state& other);
+
+      /// Record that this symbol is empty.
+      void clear ();
+
+      /// Steal the symbol type from \a that.
+      void move (by_state& that);
+
+      /// The (internal) type number (corresponding to \a state).
+      /// \a empty_symbol when empty.
+      symbol_number_type type_get () const;
+
+      /// The state number used to denote an empty symbol.
+      enum { empty_state = -1 };
+
+      /// The state.
+      /// \a empty when empty.
+      state_type state;
+    };
+
+    /// "Internal" symbol: element of the stack.
+    struct stack_symbol_type : basic_symbol<by_state>
+    {
+      /// Superclass.
+      typedef basic_symbol<by_state> super_type;
+      /// Construct an empty symbol.
+      stack_symbol_type ();
+      /// Move or copy construction.
+      stack_symbol_type (YY_RVREF (stack_symbol_type) that);
+      /// Steal the contents from \a sym to build this.
+      stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) sym);
+#if YY_CPLUSPLUS < 201103L
+      /// Assignment, needed by push_back by some old implementations.
+      /// Moves the contents of that.
+      stack_symbol_type& operator= (stack_symbol_type& that);
+#endif
+    };
+
+    /// Stack type.
+    typedef stack<stack_symbol_type> stack_type;
+
+    /// The stack.
+    stack_type yystack_;
+
+    /// Push a new state on the stack.
+    /// \param m    a debug message to display
+    ///             if null, no trace is output.
+    /// \param sym  the symbol
+    /// \warning the contents of \a s.value is stolen.
+    void yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym);
+
+    /// Push a new look ahead token on the state on the stack.
+    /// \param m    a debug message to display
+    ///             if null, no trace is output.
+    /// \param s    the state
+    /// \param sym  the symbol (for its value and location).
+    /// \warning the contents of \a sym.value is stolen.
+    void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym);
+
+    /// Pop \a n symbols from the stack.
+    void yypop_ (int n = 1);
+
+    /// Constants.
+    enum
+    {
+      yyeof_ = 0,
+      yylast_ = 305,     ///< Last index in yytable_.
+      yynnts_ = 146,  ///< Number of nonterminal symbols.
+      yyfinal_ = 20, ///< Termination state number.
+      yyterror_ = 1,
+      yyerrcode_ = 256,
+      yyntokens_ = 60  ///< Number of tokens.
+    };
+
+
+    // User arguments.
+    isc::d2::D2ParserContext& ctx;
+  };
+
+  // Symbol number corresponding to token number t.
+  inline
+  D2Parser::token_number_type
+  D2Parser::yytranslate_ (token_type t)
+  {
+    static
+    const token_number_type
+    translate_table[] =
+    {
+     0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59
+    };
+    const unsigned user_token_number_max_ = 314;
+    const token_number_type undef_token_ = 2;
+
+    if (static_cast<int> (t) <= yyeof_)
+      return yyeof_;
+    else if (static_cast<unsigned> (t) <= user_token_number_max_)
+      return translate_table[t];
+    else
+      return undef_token_;
+  }
+
+  inline
+  D2Parser::syntax_error::syntax_error (const location_type& l, const std::string& m)
+    : std::runtime_error (m)
+    , location (l)
+  {}
+
+  // basic_symbol.
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol ()
+    : value ()
+    , location ()
+  {}
 
-      /// Copy constructor.
-      by_state (const by_state& other);
+#if 201103L <= YY_CPLUSPLUS
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol (basic_symbol&& that)
+    : Base (std::move (that))
+    , value ()
+    , location (std::move (that.location))
+  {
+    switch (this->type_get ())
+    {
+      case 71: // value
+      case 75: // map_value
+      case 99: // ncr_protocol_value
+        value.move< ElementPtr > (std::move (that.value));
+        break;
 
-      /// Record that this symbol is empty.
-      void clear ();
+      case 59: // "boolean"
+        value.move< bool > (std::move (that.value));
+        break;
 
-      /// Steal the symbol type from \a that.
-      void move (by_state& that);
+      case 58: // "floating point"
+        value.move< double > (std::move (that.value));
+        break;
 
-      /// The (internal) type number (corresponding to \a state).
-      /// \a empty_symbol when empty.
-      symbol_number_type type_get () const;
+      case 57: // "integer"
+        value.move< int64_t > (std::move (that.value));
+        break;
 
-      /// The state number used to denote an empty symbol.
-      enum { empty_state = -1 };
+      case 56: // "constant string"
+        value.move< std::string > (std::move (that.value));
+        break;
 
-      /// The state.
-      /// \a empty when empty.
-      state_type state;
-    };
+      default:
+        break;
+    }
 
-    /// "Internal" symbol: element of the stack.
-    struct stack_symbol_type : basic_symbol<by_state>
+  }
+#endif
+
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol (const basic_symbol& that)
+    : Base (that)
+    , value ()
+    , location (that.location)
+  {
+    switch (this->type_get ())
     {
-      /// Superclass.
-      typedef basic_symbol<by_state> super_type;
-      /// Construct an empty symbol.
-      stack_symbol_type ();
-      /// Move or copy construction.
-      stack_symbol_type (YY_RVREF (stack_symbol_type) that);
-      /// Steal the contents from \a sym to build this.
-      stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) sym);
-#if YY_CPLUSPLUS < 201103L
-      /// Assignment, needed by push_back by some old implementations.
-      /// Moves the contents of that.
-      stack_symbol_type& operator= (stack_symbol_type& that);
+      case 71: // value
+      case 75: // map_value
+      case 99: // ncr_protocol_value
+        value.copy< ElementPtr > (that.value);
+        break;
+
+      case 59: // "boolean"
+        value.copy< bool > (that.value);
+        break;
+
+      case 58: // "floating point"
+        value.copy< double > (that.value);
+        break;
+
+      case 57: // "integer"
+        value.copy< int64_t > (that.value);
+        break;
+
+      case 56: // "constant string"
+        value.copy< std::string > (that.value);
+        break;
+
+      default:
+        break;
+    }
+
+  }
+
+
+  // Implementation of basic_symbol constructor for each type.
+# if 201103L <= YY_CPLUSPLUS
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, location_type&& l)
+    : Base (t)
+    , location (std::move (l))
+  {}
+#else
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const location_type& l)
+    : Base (t)
+    , location (l)
+  {}
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, ElementPtr&& v, location_type&& l)
+    : Base (t)
+    , value (std::move (v))
+    , location (std::move (l))
+  {}
+#else
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const ElementPtr& v, const location_type& l)
+    : Base (t)
+    , value (v)
+    , location (l)
+  {}
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, bool&& v, location_type&& l)
+    : Base (t)
+    , value (std::move (v))
+    , location (std::move (l))
+  {}
+#else
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const bool& v, const location_type& l)
+    : Base (t)
+    , value (v)
+    , location (l)
+  {}
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, double&& v, location_type&& l)
+    : Base (t)
+    , value (std::move (v))
+    , location (std::move (l))
+  {}
+#else
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const double& v, const location_type& l)
+    : Base (t)
+    , value (v)
+    , location (l)
+  {}
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, int64_t&& v, location_type&& l)
+    : Base (t)
+    , value (std::move (v))
+    , location (std::move (l))
+  {}
+#else
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const int64_t& v, const location_type& l)
+    : Base (t)
+    , value (v)
+    , location (l)
+  {}
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, std::string&& v, location_type&& l)
+    : Base (t)
+    , value (std::move (v))
+    , location (std::move (l))
+  {}
+#else
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const std::string& v, const location_type& l)
+    : Base (t)
+    , value (v)
+    , location (l)
+  {}
+#endif
+
+
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::~basic_symbol ()
+  {
+    clear ();
+  }
+
+  template <typename Base>
+  void
+  D2Parser::basic_symbol<Base>::clear ()
+  {
+    // User destructor.
+    symbol_number_type yytype = this->type_get ();
+    basic_symbol<Base>& yysym = *this;
+    (void) yysym;
+    switch (yytype)
+    {
+   default:
+      break;
+    }
+
+    // Type destructor.
+  switch (yytype)
+    {
+      case 71: // value
+      case 75: // map_value
+      case 99: // ncr_protocol_value
+        value.template destroy< ElementPtr > ();
+        break;
+
+      case 59: // "boolean"
+        value.template destroy< bool > ();
+        break;
+
+      case 58: // "floating point"
+        value.template destroy< double > ();
+        break;
+
+      case 57: // "integer"
+        value.template destroy< int64_t > ();
+        break;
+
+      case 56: // "constant string"
+        value.template destroy< std::string > ();
+        break;
+
+      default:
+        break;
+    }
+
+    Base::clear ();
+  }
+
+  template <typename Base>
+  bool
+  D2Parser::basic_symbol<Base>::empty () const
+  {
+    return Base::type_get () == empty_symbol;
+  }
+
+  template <typename Base>
+  void
+  D2Parser::basic_symbol<Base>::move (basic_symbol& s)
+  {
+    super_type::move (s);
+    switch (this->type_get ())
+    {
+      case 71: // value
+      case 75: // map_value
+      case 99: // ncr_protocol_value
+        value.move< ElementPtr > (YY_MOVE (s.value));
+        break;
+
+      case 59: // "boolean"
+        value.move< bool > (YY_MOVE (s.value));
+        break;
+
+      case 58: // "floating point"
+        value.move< double > (YY_MOVE (s.value));
+        break;
+
+      case 57: // "integer"
+        value.move< int64_t > (YY_MOVE (s.value));
+        break;
+
+      case 56: // "constant string"
+        value.move< std::string > (YY_MOVE (s.value));
+        break;
+
+      default:
+        break;
+    }
+
+    location = YY_MOVE (s.location);
+  }
+
+  // by_type.
+  inline
+  D2Parser::by_type::by_type ()
+    : type (empty_symbol)
+  {}
+
+#if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::by_type::by_type (by_type&& that)
+    : type (that.type)
+  {
+    that.clear ();
+  }
 #endif
-    };
 
-    /// Stack type.
-    typedef stack<stack_symbol_type> stack_type;
+  inline
+  D2Parser::by_type::by_type (const by_type& that)
+    : type (that.type)
+  {}
 
-    /// The stack.
-    stack_type yystack_;
+  inline
+  D2Parser::by_type::by_type (token_type t)
+    : type (yytranslate_ (t))
+  {}
 
-    /// Push a new state on the stack.
-    /// \param m    a debug message to display
-    ///             if null, no trace is output.
-    /// \param sym  the symbol
-    /// \warning the contents of \a s.value is stolen.
-    void yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym);
+  inline
+  void
+  D2Parser::by_type::clear ()
+  {
+    type = empty_symbol;
+  }
 
-    /// Push a new look ahead token on the state on the stack.
-    /// \param m    a debug message to display
-    ///             if null, no trace is output.
-    /// \param s    the state
-    /// \param sym  the symbol (for its value and location).
-    /// \warning the contents of \a sym.value is stolen.
-    void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym);
+  inline
+  void
+  D2Parser::by_type::move (by_type& that)
+  {
+    type = that.type;
+    that.clear ();
+  }
 
-    /// Pop \a n symbols from the stack.
-    void yypop_ (int n = 1);
+  inline
+  int
+  D2Parser::by_type::type_get () const
+  {
+    return type;
+  }
 
-    /// Constants.
-    enum
+  inline
+  D2Parser::token_type
+  D2Parser::by_type::token () const
+  {
+    // YYTOKNUM[NUM] -- (External) token number corresponding to the
+    // (internal) symbol number NUM (which must be that of a token).  */
+    static
+    const unsigned short
+    yytoken_number_[] =
     {
-      yyeof_ = 0,
-      yylast_ = 282,     ///< Last index in yytable_.
-      yynnts_ = 138,  ///< Number of nonterminal symbols.
-      yyfinal_ = 20, ///< Termination state number.
-      yyterror_ = 1,
-      yyerrcode_ = 256,
-      yyntokens_ = 57  ///< Number of tokens.
+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314
     };
+    return static_cast<token_type> (yytoken_number_[type]);
+  }
 
-
-    // User arguments.
-    isc::d2::D2ParserContext& ctx;
-  };
-
-  // Symbol number corresponding to token number t.
+  // Implementation of make_symbol for each symbol type.
+# if 201103L <= YY_CPLUSPLUS
   inline
-  D2Parser::token_number_type
-  D2Parser::yytranslate_ (token_type t)
+  D2Parser::symbol_type
+  D2Parser::make_END (location_type l)
+  {
+    return symbol_type (token::TOKEN_END, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_END (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_END, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_COMMA (location_type l)
+  {
+    return symbol_type (token::TOKEN_COMMA, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_COMMA (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_COMMA, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_COLON (location_type l)
+  {
+    return symbol_type (token::TOKEN_COLON, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_COLON (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_COLON, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_LSQUARE_BRACKET (location_type l)
+  {
+    return symbol_type (token::TOKEN_LSQUARE_BRACKET, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_LSQUARE_BRACKET (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_LSQUARE_BRACKET, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_RSQUARE_BRACKET (location_type l)
+  {
+    return symbol_type (token::TOKEN_RSQUARE_BRACKET, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_RSQUARE_BRACKET (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_RSQUARE_BRACKET, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_LCURLY_BRACKET (location_type l)
+  {
+    return symbol_type (token::TOKEN_LCURLY_BRACKET, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_LCURLY_BRACKET (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_LCURLY_BRACKET, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_RCURLY_BRACKET (location_type l)
+  {
+    return symbol_type (token::TOKEN_RCURLY_BRACKET, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_RCURLY_BRACKET (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_RCURLY_BRACKET, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_NULL_TYPE (location_type l)
+  {
+    return symbol_type (token::TOKEN_NULL_TYPE, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_NULL_TYPE (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_NULL_TYPE, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_DHCP6 (location_type l)
+  {
+    return symbol_type (token::TOKEN_DHCP6, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_DHCP6 (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_DHCP6, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_DHCP4 (location_type l)
+  {
+    return symbol_type (token::TOKEN_DHCP4, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_DHCP4 (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_DHCP4, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_CONTROL_AGENT (location_type l)
+  {
+    return symbol_type (token::TOKEN_CONTROL_AGENT, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_CONTROL_AGENT (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_CONTROL_AGENT, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_DHCPDDNS (location_type l)
+  {
+    return symbol_type (token::TOKEN_DHCPDDNS, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_DHCPDDNS (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_DHCPDDNS, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_IP_ADDRESS (location_type l)
+  {
+    return symbol_type (token::TOKEN_IP_ADDRESS, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_IP_ADDRESS (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_IP_ADDRESS, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_PORT (location_type l)
+  {
+    return symbol_type (token::TOKEN_PORT, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_PORT (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_PORT, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_DNS_SERVER_TIMEOUT (location_type l)
+  {
+    return symbol_type (token::TOKEN_DNS_SERVER_TIMEOUT, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_DNS_SERVER_TIMEOUT (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_DNS_SERVER_TIMEOUT, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_NCR_PROTOCOL (location_type l)
+  {
+    return symbol_type (token::TOKEN_NCR_PROTOCOL, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_NCR_PROTOCOL (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_NCR_PROTOCOL, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_UDP (location_type l)
   {
-    static
-    const token_number_type
-    translate_table[] =
-    {
-     0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56
-    };
-    const unsigned user_token_number_max_ = 311;
-    const token_number_type undef_token_ = 2;
-
-    if (static_cast<int> (t) <= yyeof_)
-      return yyeof_;
-    else if (static_cast<unsigned> (t) <= user_token_number_max_)
-      return translate_table[t];
-    else
-      return undef_token_;
+    return symbol_type (token::TOKEN_UDP, std::move (l));
   }
-
+#else
   inline
-  D2Parser::syntax_error::syntax_error (const location_type& l, const std::string& m)
-    : std::runtime_error (m)
-    , location (l)
-  {}
-
-  // basic_symbol.
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::basic_symbol ()
-    : value ()
-    , location ()
-  {}
-
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::basic_symbol (YY_RVREF (basic_symbol) other)
-    : Base (YY_MOVE (other))
-    , value ()
-    , location (YY_MOVE (other.location))
+  D2Parser::symbol_type
+  D2Parser::make_UDP (const location_type& l)
   {
-    switch (other.type_get ())
-    {
-      case 68: // value
-      case 72: // map_value
-      case 96: // ncr_protocol_value
-        value.YY_MOVE_OR_COPY< ElementPtr > (YY_MOVE (other.value));
-        break;
-
-      case 56: // "boolean"
-        value.YY_MOVE_OR_COPY< bool > (YY_MOVE (other.value));
-        break;
-
-      case 55: // "floating point"
-        value.YY_MOVE_OR_COPY< double > (YY_MOVE (other.value));
-        break;
-
-      case 54: // "integer"
-        value.YY_MOVE_OR_COPY< int64_t > (YY_MOVE (other.value));
-        break;
-
-      case 53: // "constant string"
-        value.YY_MOVE_OR_COPY< std::string > (YY_MOVE (other.value));
-        break;
-
-      default:
-        break;
-    }
-
+    return symbol_type (token::TOKEN_UDP, l);
   }
-
-
-  // Implementation of basic_symbol constructor for each type.
+#endif
 # if 201103L <= YY_CPLUSPLUS
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, location_type&& l)
-    : Base (t)
-    , location (std::move (l))
-  {}
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_TCP (location_type l)
+  {
+    return symbol_type (token::TOKEN_TCP, std::move (l));
+  }
 #else
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const location_type& l)
-    : Base (t)
-    , location (l)
-  {}
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_TCP (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_TCP, l);
+  }
 #endif
 # if 201103L <= YY_CPLUSPLUS
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, ElementPtr&& v, location_type&& l)
-    : Base (t)
-    , value (std::move (v))
-    , location (std::move (l))
-  {}
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_NCR_FORMAT (location_type l)
+  {
+    return symbol_type (token::TOKEN_NCR_FORMAT, std::move (l));
+  }
 #else
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const ElementPtr& v, const location_type& l)
-    : Base (t)
-    , value (v)
-    , location (l)
-  {}
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_NCR_FORMAT (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_NCR_FORMAT, l);
+  }
 #endif
 # if 201103L <= YY_CPLUSPLUS
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, bool&& v, location_type&& l)
-    : Base (t)
-    , value (std::move (v))
-    , location (std::move (l))
-  {}
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_JSON (location_type l)
+  {
+    return symbol_type (token::TOKEN_JSON, std::move (l));
+  }
 #else
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const bool& v, const location_type& l)
-    : Base (t)
-    , value (v)
-    , location (l)
-  {}
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_JSON (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_JSON, l);
+  }
 #endif
 # if 201103L <= YY_CPLUSPLUS
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, double&& v, location_type&& l)
-    : Base (t)
-    , value (std::move (v))
-    , location (std::move (l))
-  {}
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_USER_CONTEXT (location_type l)
+  {
+    return symbol_type (token::TOKEN_USER_CONTEXT, std::move (l));
+  }
 #else
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const double& v, const location_type& l)
-    : Base (t)
-    , value (v)
-    , location (l)
-  {}
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_USER_CONTEXT (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_USER_CONTEXT, l);
+  }
 #endif
 # if 201103L <= YY_CPLUSPLUS
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, int64_t&& v, location_type&& l)
-    : Base (t)
-    , value (std::move (v))
-    , location (std::move (l))
-  {}
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_COMMENT (location_type l)
+  {
+    return symbol_type (token::TOKEN_COMMENT, std::move (l));
+  }
 #else
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const int64_t& v, const location_type& l)
-    : Base (t)
-    , value (v)
-    , location (l)
-  {}
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_COMMENT (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_COMMENT, l);
+  }
 #endif
 # if 201103L <= YY_CPLUSPLUS
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, std::string&& v, location_type&& l)
-    : Base (t)
-    , value (std::move (v))
-    , location (std::move (l))
-  {}
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_FORWARD_DDNS (location_type l)
+  {
+    return symbol_type (token::TOKEN_FORWARD_DDNS, std::move (l));
+  }
 #else
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const std::string& v, const location_type& l)
-    : Base (t)
-    , value (v)
-    , location (l)
-  {}
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_FORWARD_DDNS (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_FORWARD_DDNS, l);
+  }
 #endif
-
-
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::~basic_symbol ()
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_REVERSE_DDNS (location_type l)
   {
-    clear ();
+    return symbol_type (token::TOKEN_REVERSE_DDNS, std::move (l));
   }
-
-  template <typename Base>
-  void
-  D2Parser::basic_symbol<Base>::clear ()
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_REVERSE_DDNS (const location_type& l)
   {
-    // User destructor.
-    symbol_number_type yytype = this->type_get ();
-    basic_symbol<Base>& yysym = *this;
-    (void) yysym;
-    switch (yytype)
-    {
-   default:
-      break;
-    }
-
-    // Type destructor.
-  switch (yytype)
-    {
-      case 68: // value
-      case 72: // map_value
-      case 96: // ncr_protocol_value
-        value.template destroy< ElementPtr > ();
-        break;
-
-      case 56: // "boolean"
-        value.template destroy< bool > ();
-        break;
-
-      case 55: // "floating point"
-        value.template destroy< double > ();
-        break;
-
-      case 54: // "integer"
-        value.template destroy< int64_t > ();
-        break;
-
-      case 53: // "constant string"
-        value.template destroy< std::string > ();
-        break;
-
-      default:
-        break;
-    }
-
-    Base::clear ();
+    return symbol_type (token::TOKEN_REVERSE_DDNS, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_DDNS_DOMAINS (location_type l)
+  {
+    return symbol_type (token::TOKEN_DDNS_DOMAINS, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_DDNS_DOMAINS (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_DDNS_DOMAINS, l);
   }
-
-  template <typename Base>
-  bool
-  D2Parser::basic_symbol<Base>::empty () const
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_KEY_NAME (location_type l)
   {
-    return Base::type_get () == empty_symbol;
+    return symbol_type (token::TOKEN_KEY_NAME, std::move (l));
   }
-
-  template <typename Base>
-  void
-  D2Parser::basic_symbol<Base>::move (basic_symbol& s)
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_KEY_NAME (const location_type& l)
   {
-    super_type::move (s);
-    switch (this->type_get ())
-    {
-      case 68: // value
-      case 72: // map_value
-      case 96: // ncr_protocol_value
-        value.move< ElementPtr > (YY_MOVE (s.value));
-        break;
-
-      case 56: // "boolean"
-        value.move< bool > (YY_MOVE (s.value));
-        break;
-
-      case 55: // "floating point"
-        value.move< double > (YY_MOVE (s.value));
-        break;
-
-      case 54: // "integer"
-        value.move< int64_t > (YY_MOVE (s.value));
-        break;
-
-      case 53: // "constant string"
-        value.move< std::string > (YY_MOVE (s.value));
-        break;
-
-      default:
-        break;
-    }
-
-    location = YY_MOVE (s.location);
+    return symbol_type (token::TOKEN_KEY_NAME, l);
   }
-
-  // by_type.
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
-  D2Parser::by_type::by_type ()
-    : type (empty_symbol)
-  {}
-
+  D2Parser::symbol_type
+  D2Parser::make_DNS_SERVERS (location_type l)
+  {
+    return symbol_type (token::TOKEN_DNS_SERVERS, std::move (l));
+  }
+#else
   inline
-  D2Parser::by_type::by_type (const by_type& other)
-    : type (other.type)
-  {}
-
+  D2Parser::symbol_type
+  D2Parser::make_DNS_SERVERS (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_DNS_SERVERS, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
-  D2Parser::by_type::by_type (token_type t)
-    : type (yytranslate_ (t))
-  {}
-
+  D2Parser::symbol_type
+  D2Parser::make_HOSTNAME (location_type l)
+  {
+    return symbol_type (token::TOKEN_HOSTNAME, std::move (l));
+  }
+#else
   inline
-  void
-  D2Parser::by_type::clear ()
+  D2Parser::symbol_type
+  D2Parser::make_HOSTNAME (const location_type& l)
   {
-    type = empty_symbol;
+    return symbol_type (token::TOKEN_HOSTNAME, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
-  void
-  D2Parser::by_type::move (by_type& that)
+  D2Parser::symbol_type
+  D2Parser::make_TSIG_KEYS (location_type l)
   {
-    type = that.type;
-    that.clear ();
+    return symbol_type (token::TOKEN_TSIG_KEYS, std::move (l));
   }
-
+#else
   inline
-  int
-  D2Parser::by_type::type_get () const
+  D2Parser::symbol_type
+  D2Parser::make_TSIG_KEYS (const location_type& l)
   {
-    return type;
+    return symbol_type (token::TOKEN_TSIG_KEYS, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
-  D2Parser::token_type
-  D2Parser::by_type::token () const
+  D2Parser::symbol_type
+  D2Parser::make_ALGORITHM (location_type l)
   {
-    // YYTOKNUM[NUM] -- (External) token number corresponding to the
-    // (internal) symbol number NUM (which must be that of a token).  */
-    static
-    const unsigned short
-    yytoken_number_[] =
-    {
-       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311
-    };
-    return static_cast<token_type> (yytoken_number_[type]);
+    return symbol_type (token::TOKEN_ALGORITHM, std::move (l));
   }
-
-  // Implementation of make_symbol for each symbol type.
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_END (YY_COPY (location_type) l)
+  D2Parser::make_ALGORITHM (const location_type& l)
   {
-    return symbol_type (token::TOKEN_END, YY_MOVE (l));
+    return symbol_type (token::TOKEN_ALGORITHM, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_COMMA (YY_COPY (location_type) l)
+  D2Parser::make_DIGEST_BITS (location_type l)
   {
-    return symbol_type (token::TOKEN_COMMA, YY_MOVE (l));
+    return symbol_type (token::TOKEN_DIGEST_BITS, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_COLON (YY_COPY (location_type) l)
+  D2Parser::make_DIGEST_BITS (const location_type& l)
   {
-    return symbol_type (token::TOKEN_COLON, YY_MOVE (l));
+    return symbol_type (token::TOKEN_DIGEST_BITS, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_LSQUARE_BRACKET (YY_COPY (location_type) l)
+  D2Parser::make_SECRET (location_type l)
   {
-    return symbol_type (token::TOKEN_LSQUARE_BRACKET, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SECRET, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_RSQUARE_BRACKET (YY_COPY (location_type) l)
+  D2Parser::make_SECRET (const location_type& l)
   {
-    return symbol_type (token::TOKEN_RSQUARE_BRACKET, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SECRET, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_LCURLY_BRACKET (YY_COPY (location_type) l)
+  D2Parser::make_CONTROL_SOCKET (location_type l)
   {
-    return symbol_type (token::TOKEN_LCURLY_BRACKET, YY_MOVE (l));
+    return symbol_type (token::TOKEN_CONTROL_SOCKET, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_RCURLY_BRACKET (YY_COPY (location_type) l)
+  D2Parser::make_CONTROL_SOCKET (const location_type& l)
   {
-    return symbol_type (token::TOKEN_RCURLY_BRACKET, YY_MOVE (l));
+    return symbol_type (token::TOKEN_CONTROL_SOCKET, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_NULL_TYPE (YY_COPY (location_type) l)
+  D2Parser::make_SOCKET_TYPE (location_type l)
   {
-    return symbol_type (token::TOKEN_NULL_TYPE, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SOCKET_TYPE, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_DHCP6 (YY_COPY (location_type) l)
+  D2Parser::make_SOCKET_TYPE (const location_type& l)
   {
-    return symbol_type (token::TOKEN_DHCP6, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SOCKET_TYPE, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_DHCP4 (YY_COPY (location_type) l)
+  D2Parser::make_SOCKET_NAME (location_type l)
   {
-    return symbol_type (token::TOKEN_DHCP4, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SOCKET_NAME, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_CONTROL_AGENT (YY_COPY (location_type) l)
+  D2Parser::make_SOCKET_NAME (const location_type& l)
   {
-    return symbol_type (token::TOKEN_CONTROL_AGENT, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SOCKET_NAME, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_DHCPDDNS (YY_COPY (location_type) l)
+  D2Parser::make_LOGGING (location_type l)
   {
-    return symbol_type (token::TOKEN_DHCPDDNS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_LOGGING, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_IP_ADDRESS (YY_COPY (location_type) l)
+  D2Parser::make_LOGGING (const location_type& l)
   {
-    return symbol_type (token::TOKEN_IP_ADDRESS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_LOGGING, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_PORT (YY_COPY (location_type) l)
+  D2Parser::make_LOGGERS (location_type l)
   {
-    return symbol_type (token::TOKEN_PORT, YY_MOVE (l));
+    return symbol_type (token::TOKEN_LOGGERS, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_DNS_SERVER_TIMEOUT (YY_COPY (location_type) l)
+  D2Parser::make_LOGGERS (const location_type& l)
   {
-    return symbol_type (token::TOKEN_DNS_SERVER_TIMEOUT, YY_MOVE (l));
+    return symbol_type (token::TOKEN_LOGGERS, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_NCR_PROTOCOL (YY_COPY (location_type) l)
+  D2Parser::make_NAME (location_type l)
   {
-    return symbol_type (token::TOKEN_NCR_PROTOCOL, YY_MOVE (l));
+    return symbol_type (token::TOKEN_NAME, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_UDP (YY_COPY (location_type) l)
+  D2Parser::make_NAME (const location_type& l)
   {
-    return symbol_type (token::TOKEN_UDP, YY_MOVE (l));
+    return symbol_type (token::TOKEN_NAME, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_TCP (YY_COPY (location_type) l)
+  D2Parser::make_OUTPUT_OPTIONS (location_type l)
   {
-    return symbol_type (token::TOKEN_TCP, YY_MOVE (l));
+    return symbol_type (token::TOKEN_OUTPUT_OPTIONS, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_NCR_FORMAT (YY_COPY (location_type) l)
+  D2Parser::make_OUTPUT_OPTIONS (const location_type& l)
   {
-    return symbol_type (token::TOKEN_NCR_FORMAT, YY_MOVE (l));
+    return symbol_type (token::TOKEN_OUTPUT_OPTIONS, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_JSON (YY_COPY (location_type) l)
+  D2Parser::make_OUTPUT (location_type l)
   {
-    return symbol_type (token::TOKEN_JSON, YY_MOVE (l));
+    return symbol_type (token::TOKEN_OUTPUT, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_USER_CONTEXT (YY_COPY (location_type) l)
+  D2Parser::make_OUTPUT (const location_type& l)
   {
-    return symbol_type (token::TOKEN_USER_CONTEXT, YY_MOVE (l));
+    return symbol_type (token::TOKEN_OUTPUT, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_COMMENT (YY_COPY (location_type) l)
+  D2Parser::make_DEBUGLEVEL (location_type l)
   {
-    return symbol_type (token::TOKEN_COMMENT, YY_MOVE (l));
+    return symbol_type (token::TOKEN_DEBUGLEVEL, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_FORWARD_DDNS (YY_COPY (location_type) l)
+  D2Parser::make_DEBUGLEVEL (const location_type& l)
   {
-    return symbol_type (token::TOKEN_FORWARD_DDNS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_DEBUGLEVEL, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_REVERSE_DDNS (YY_COPY (location_type) l)
+  D2Parser::make_SEVERITY (location_type l)
   {
-    return symbol_type (token::TOKEN_REVERSE_DDNS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SEVERITY, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_DDNS_DOMAINS (YY_COPY (location_type) l)
+  D2Parser::make_SEVERITY (const location_type& l)
   {
-    return symbol_type (token::TOKEN_DDNS_DOMAINS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SEVERITY, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_KEY_NAME (YY_COPY (location_type) l)
+  D2Parser::make_FLUSH (location_type l)
   {
-    return symbol_type (token::TOKEN_KEY_NAME, YY_MOVE (l));
+    return symbol_type (token::TOKEN_FLUSH, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_DNS_SERVERS (YY_COPY (location_type) l)
+  D2Parser::make_FLUSH (const location_type& l)
   {
-    return symbol_type (token::TOKEN_DNS_SERVERS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_FLUSH, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_HOSTNAME (YY_COPY (location_type) l)
+  D2Parser::make_MAXSIZE (location_type l)
   {
-    return symbol_type (token::TOKEN_HOSTNAME, YY_MOVE (l));
+    return symbol_type (token::TOKEN_MAXSIZE, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_TSIG_KEYS (YY_COPY (location_type) l)
+  D2Parser::make_MAXSIZE (const location_type& l)
   {
-    return symbol_type (token::TOKEN_TSIG_KEYS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_MAXSIZE, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_ALGORITHM (YY_COPY (location_type) l)
+  D2Parser::make_MAXVER (location_type l)
   {
-    return symbol_type (token::TOKEN_ALGORITHM, YY_MOVE (l));
+    return symbol_type (token::TOKEN_MAXVER, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_DIGEST_BITS (YY_COPY (location_type) l)
+  D2Parser::make_MAXVER (const location_type& l)
   {
-    return symbol_type (token::TOKEN_DIGEST_BITS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_MAXVER, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_SECRET (YY_COPY (location_type) l)
+  D2Parser::make_TOPLEVEL_JSON (location_type l)
   {
-    return symbol_type (token::TOKEN_SECRET, YY_MOVE (l));
+    return symbol_type (token::TOKEN_TOPLEVEL_JSON, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_LOGGING (YY_COPY (location_type) l)
+  D2Parser::make_TOPLEVEL_JSON (const location_type& l)
   {
-    return symbol_type (token::TOKEN_LOGGING, YY_MOVE (l));
+    return symbol_type (token::TOKEN_TOPLEVEL_JSON, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_LOGGERS (YY_COPY (location_type) l)
+  D2Parser::make_TOPLEVEL_DHCPDDNS (location_type l)
   {
-    return symbol_type (token::TOKEN_LOGGERS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_TOPLEVEL_DHCPDDNS, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_NAME (YY_COPY (location_type) l)
+  D2Parser::make_TOPLEVEL_DHCPDDNS (const location_type& l)
   {
-    return symbol_type (token::TOKEN_NAME, YY_MOVE (l));
+    return symbol_type (token::TOKEN_TOPLEVEL_DHCPDDNS, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_OUTPUT_OPTIONS (YY_COPY (location_type) l)
+  D2Parser::make_SUB_DHCPDDNS (location_type l)
   {
-    return symbol_type (token::TOKEN_OUTPUT_OPTIONS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SUB_DHCPDDNS, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_OUTPUT (YY_COPY (location_type) l)
+  D2Parser::make_SUB_DHCPDDNS (const location_type& l)
   {
-    return symbol_type (token::TOKEN_OUTPUT, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SUB_DHCPDDNS, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_DEBUGLEVEL (YY_COPY (location_type) l)
+  D2Parser::make_SUB_TSIG_KEY (location_type l)
   {
-    return symbol_type (token::TOKEN_DEBUGLEVEL, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SUB_TSIG_KEY, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_SEVERITY (YY_COPY (location_type) l)
+  D2Parser::make_SUB_TSIG_KEY (const location_type& l)
   {
-    return symbol_type (token::TOKEN_SEVERITY, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SUB_TSIG_KEY, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_FLUSH (YY_COPY (location_type) l)
+  D2Parser::make_SUB_TSIG_KEYS (location_type l)
   {
-    return symbol_type (token::TOKEN_FLUSH, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SUB_TSIG_KEYS, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_MAXSIZE (YY_COPY (location_type) l)
+  D2Parser::make_SUB_TSIG_KEYS (const location_type& l)
   {
-    return symbol_type (token::TOKEN_MAXSIZE, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SUB_TSIG_KEYS, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_MAXVER (YY_COPY (location_type) l)
+  D2Parser::make_SUB_DDNS_DOMAIN (location_type l)
   {
-    return symbol_type (token::TOKEN_MAXVER, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SUB_DDNS_DOMAIN, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_TOPLEVEL_JSON (YY_COPY (location_type) l)
+  D2Parser::make_SUB_DDNS_DOMAIN (const location_type& l)
   {
-    return symbol_type (token::TOKEN_TOPLEVEL_JSON, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SUB_DDNS_DOMAIN, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_TOPLEVEL_DHCPDDNS (YY_COPY (location_type) l)
+  D2Parser::make_SUB_DDNS_DOMAINS (location_type l)
   {
-    return symbol_type (token::TOKEN_TOPLEVEL_DHCPDDNS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SUB_DDNS_DOMAINS, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_SUB_DHCPDDNS (YY_COPY (location_type) l)
+  D2Parser::make_SUB_DDNS_DOMAINS (const location_type& l)
   {
-    return symbol_type (token::TOKEN_SUB_DHCPDDNS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SUB_DDNS_DOMAINS, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_SUB_TSIG_KEY (YY_COPY (location_type) l)
+  D2Parser::make_SUB_DNS_SERVER (location_type l)
   {
-    return symbol_type (token::TOKEN_SUB_TSIG_KEY, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SUB_DNS_SERVER, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_SUB_TSIG_KEYS (YY_COPY (location_type) l)
+  D2Parser::make_SUB_DNS_SERVER (const location_type& l)
   {
-    return symbol_type (token::TOKEN_SUB_TSIG_KEYS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SUB_DNS_SERVER, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_SUB_DDNS_DOMAIN (YY_COPY (location_type) l)
+  D2Parser::make_SUB_DNS_SERVERS (location_type l)
   {
-    return symbol_type (token::TOKEN_SUB_DDNS_DOMAIN, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SUB_DNS_SERVERS, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_SUB_DDNS_DOMAINS (YY_COPY (location_type) l)
+  D2Parser::make_SUB_DNS_SERVERS (const location_type& l)
   {
-    return symbol_type (token::TOKEN_SUB_DDNS_DOMAINS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SUB_DNS_SERVERS, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_SUB_DNS_SERVER (YY_COPY (location_type) l)
+  D2Parser::make_STRING (std::string v, location_type l)
   {
-    return symbol_type (token::TOKEN_SUB_DNS_SERVER, YY_MOVE (l));
+    return symbol_type (token::TOKEN_STRING, std::move (v), std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_SUB_DNS_SERVERS (YY_COPY (location_type) l)
+  D2Parser::make_STRING (const std::string& v, const location_type& l)
   {
-    return symbol_type (token::TOKEN_SUB_DNS_SERVERS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_STRING, v, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_STRING (YY_COPY (std::string) v, YY_COPY (location_type) l)
+  D2Parser::make_INTEGER (int64_t v, location_type l)
   {
-    return symbol_type (token::TOKEN_STRING, YY_MOVE (v), YY_MOVE (l));
+    return symbol_type (token::TOKEN_INTEGER, std::move (v), std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_INTEGER (YY_COPY (int64_t) v, YY_COPY (location_type) l)
+  D2Parser::make_INTEGER (const int64_t& v, const location_type& l)
   {
-    return symbol_type (token::TOKEN_INTEGER, YY_MOVE (v), YY_MOVE (l));
+    return symbol_type (token::TOKEN_INTEGER, v, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_FLOAT (YY_COPY (double) v, YY_COPY (location_type) l)
+  D2Parser::make_FLOAT (double v, location_type l)
   {
-    return symbol_type (token::TOKEN_FLOAT, YY_MOVE (v), YY_MOVE (l));
+    return symbol_type (token::TOKEN_FLOAT, std::move (v), std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_BOOLEAN (YY_COPY (bool) v, YY_COPY (location_type) l)
+  D2Parser::make_FLOAT (const double& v, const location_type& l)
   {
-    return symbol_type (token::TOKEN_BOOLEAN, YY_MOVE (v), YY_MOVE (l));
+    return symbol_type (token::TOKEN_FLOAT, v, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_BOOLEAN (bool v, location_type l)
+  {
+    return symbol_type (token::TOKEN_BOOLEAN, std::move (v), std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_BOOLEAN (const bool& v, const location_type& l)
+  {
+    return symbol_type (token::TOKEN_BOOLEAN, v, l);
+  }
+#endif
 
 #line 14 "d2_parser.yy" // lalr1.cc:404
 } } // isc::d2
-#line 1911 "d2_parser.h" // lalr1.cc:404
+#line 2758 "d2_parser.h" // lalr1.cc:404
 
 
 
index 0b7e416642d27bc5be85d4f7647a2aca1e63e8da..5af9a7b5143a325f946c565e977febd39c793b7e 100644 (file)
@@ -1,5 +1,5 @@
-// Generated 201811271344
-// A Bison parser, made by GNU Bison 3.2.1.
+// Generated 201812272324
+// A Bison parser, made by GNU Bison 3.2.4.
 
 // Locations for Bison parsers in C++
 
index 5a854e93340eba851eeb8e258b2fdf7395f23c8c..c3bce9a5946874187fa8dfeb24938828843bd1d7 100644 (file)
@@ -1,5 +1,5 @@
-// Generated 201811271344
-// A Bison parser, made by GNU Bison 3.2.1.
+// Generated 201812272324
+// A Bison parser, made by GNU Bison 3.2.4.
 
 // Starting with Bison 3.2, this file is useless: the structure it
 // used to define is now defined in "location.hh".
index 4fcda222f5ab82d1bb7eb92ca6c370ff7d57d9f6..e72ee252f310a6ae4b5d3eaffee8517153a2f07d 100644 (file)
@@ -1,5 +1,5 @@
-// Generated 201811271344
-// A Bison parser, made by GNU Bison 3.2.1.
+// Generated 201812272324
+// A Bison parser, made by GNU Bison 3.2.4.
 
 // Starting with Bison 3.2, this file is useless: the structure it
 // used to define is now defined with the parser itself.