]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[5017] flex/bison files regenerated
authorTomek Mrugalski <tomasz@isc.org>
Fri, 16 Dec 2016 17:47:27 +0000 (18:47 +0100)
committerTomek Mrugalski <tomasz@isc.org>
Fri, 16 Dec 2016 17:47:27 +0000 (18:47 +0100)
src/bin/dhcp4/dhcp4_lexer.cc
src/bin/dhcp4/dhcp4_parser.cc
src/bin/dhcp4/dhcp4_parser.h
src/bin/dhcp6/dhcp6_lexer.cc
src/bin/dhcp6/location.hh
src/bin/dhcp6/position.hh
src/bin/dhcp6/stack.hh

index 177c7025f265b530db3291c8413055af9045d733..a8e0690ceb005b9c3869e89cd0fd59f2e6e0b50a 100644 (file)
@@ -482,8 +482,8 @@ static void yy_fatal_error (yyconst char msg[]  );
        (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 99
-#define YY_END_OF_BUFFER 100
+#define YY_NUM_RULES 105
+#define YY_END_OF_BUFFER 106
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -491,85 +491,91 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[692] =
+static yyconst flex_int16_t yy_accept[761] =
     {   0,
-       95,   95,    0,    0,    0,    0,    0,    0,    0,    0,
-      100,   98,   10,   11,   98,    1,   95,   92,   95,   95,
-       98,   94,   93,   98,   98,   88,   89,   98,   98,   98,
-       90,   91,    5,    5,    5,   98,   98,   98,   10,   11,
-        0,    0,   84,    0,    0,    0,    0,    0,    0,    0,
+      101,  101,    0,    0,    0,    0,    0,    0,    0,    0,
+      106,  104,   10,   11,  104,    1,  101,   98,  101,  101,
+      104,  100,   99,  104,  104,   94,   95,  104,  104,  104,
+       96,   97,    5,    5,    5,  104,  104,  104,   10,   11,
+        0,    0,   90,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    1,   95,   95,    0,   94,   95,    3,    2,
-        6,    0,   95,    0,    0,    0,    4,    0,    0,    9,
-        0,   85,    0,    0,    0,    0,    0,   87,    0,    0,
+        0,    0,    0,    0,    1,  101,  101,    0,  100,  101,
+        3,    2,    6,    0,  101,    0,    0,    0,    4,    0,
+        0,    9,    0,   91,    0,    0,    0,    0,    0,   93,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    2,    0,
-        0,    0,    0,    8,    0,    0,    0,    0,    0,   86,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   38,
+        0,    0,    0,    0,    2,    0,    0,    0,    0,    8,
+        0,    0,    0,    0,    0,   92,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   38,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   97,   96,    0,    0,    0,    0,    0,
 
+        0,    0,    0,  103,  102,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   41,    0,    0,   32,    0,    0,    0,
-        0,   53,    0,    0,    0,    0,   21,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   31,
-        0,    0,    0,    0,    0,   34,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   51,
-       71,   18,   19,    0,    0,    0,    0,    0,    0,   80,
-       12,    0,    0,   62,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   41,    0,
+        0,   32,    0,    0,    0,    0,   53,    0,    0,    0,
+        0,    0,   21,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,   31,    0,    0,    0,
+        0,    0,    0,   34,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   51,   71,   18,
+       19,    0,    0,    0,    0,    0,    0,   80,   12,    0,
+        0,   62,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,   70,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   33,    0,    0,    0,    0,   63,    0,
-        0,    0,    0,    0,   58,    0,    0,    0,    7,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   46,    0,    0,
+        0,    0,    0,    0,    0,   33,    0,    0,    0,    0,
+       63,    0,    0,    0,    0,    0,   58,    0,    0,    0,
+        7,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   35,    0,    0,    0,    0,    0,    0,   43,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   46,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   35,    0,    0,
+        0,    0,    0,    0,   43,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   67,   44,    0,    0,    0,    0,   22,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   28,    0,
-       75,    0,    0,   81,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   57,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   67,
+       44,    0,    0,    0,    0,    0,    0,   22,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   28,
+        0,   75,    0,    0,   81,    0,    0,    0,    0,    0,
+
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       20,    0,   17,    0,    0,    0,    0,    0,   48,    0,
-
-        0,    0,    0,    0,    0,    0,   55,    0,    0,    0,
-        0,   79,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   36,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   68,    0,    0,    0,
-        0,   83,   56,    0,    0,   59,   47,    0,    0,    0,
-        0,    0,    0,    0,    0,   54,   69,    0,   14,    0,
-       64,    0,    0,    0,   29,    0,   66,    0,    0,    0,
+        0,   57,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   20,    0,   17,    0,    0,
+        0,    0,    0,    0,   48,    0,    0,    0,    0,    0,
+        0,    0,    0,   55,    0,    0,    0,    0,   79,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   36,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       61,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       30,    0,    0,    0,    0,   25,    0,    0,   78,   77,
-
-        0,    0,   50,    0,    0,    0,   74,    0,    0,    0,
-        0,    0,   37,    0,    0,   23,    0,   39,   26,   60,
-        0,   52,    0,   82,    0,    0,    0,   72,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   49,   76,    0,
-        0,    0,    0,   16,    0,   15,   45,    0,   24,    0,
-        0,   65,    0,    0,    0,    0,    0,    0,    0,   40,
-        0,    0,    0,   13,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   68,    0,    0,
+        0,    0,   84,    0,   56,    0,    0,   59,   47,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   54,   69,
+
+        0,   14,    0,   64,    0,    0,    0,    0,    0,   29,
+        0,   66,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   61,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   87,
+       30,    0,    0,    0,    0,   25,    0,    0,    0,   78,
+       77,    0,    0,    0,   50,    0,    0,    0,   74,    0,
+        0,    0,    0,    0,    0,   37,    0,    0,   23,    0,
+        0,   39,   26,   60,    0,   52,    0,    0,   82,    0,
+        0,    0,    0,    0,    0,   72,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   89,   49,
+
+       76,    0,   85,    0,    0,    0,   16,    0,   15,    0,
+       45,    0,    0,   24,    0,    0,    0,   65,    0,    0,
+       86,    0,   88,   83,    0,    0,    0,    0,   40,    0,
+        0,    0,   13,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   27,    0,    0,   73,    0,    0,    0,   42,
-        0
-
+        0,   27,    0,    0,   73,    0,    0,    0,   42,    0
     } ;
 
 static yyconst YY_CHAR yy_ec[256] =
@@ -614,171 +620,185 @@ static yyconst YY_CHAR yy_meta[54] =
         3,    3,    3
     } ;
 
-static yyconst flex_uint16_t yy_base[704] =
+static yyconst flex_uint16_t yy_base[773] =
     {   0,
         0,    0,   52,   55,   58,    0,   56,   60,   41,   57,
-      954,  955,   78,  950,  111,    0,  153,  955,  158,   73,
-       71,  173,  955,  932,  168,  955,  955,  922,  903,  905,
-      955,  955,  955,   96,  935,  906,    0,  927,   99,  942,
-      169,  192,  955,  902,  907,  900,  235,  897,  155,  172,
-      130,  169,  161,  209,  911,   43,  170,   76,  211,  176,
-      894,  193,    0,  241,  271,  257,  276,  282,  955,    0,
-      955,  286,  292,  899,  898,  889,  955,  904,  928,  955,
-      172,  955,  886,  916,  900,  895,  923,    0,  302,  884,
-      883,  889,  218,  877,  878,   77,  892,  885,  186,  878,
-
-      207,  869,  908,  214,  872,  906,  887,  884,  884,  878,
-      872,  865,  864,  218,  865,  866,  864,  281,  236,  875,
-      876,  874,  858,  862,  858,  867,  860,  854,    0,  852,
-      857,  862,  855,  955,    0,  882,  849,  856,  884,  955,
-      323,  860,  857,  854,  853,  839,  873,  854,  835,  842,
-      837,  847,  849,  844,  839,  837,  828,  830,  843,  955,
-      830,  837,  840,  823,  856,  822,  830,  831,  826,  819,
-      832,  815,  814,  819,  820,  824,  818,  812,  824,  819,
-      818,  802,  816,  810,  816,  805,  799,  811,  810,  798,
-      804,  795,  806,  955,  955,  791,    0,  230,  325,  800,
-
-      344,  785,  788,  793,  827,  788,  797,  824,  794,  791,
-      278,  821,  783,  781,  780,  778,  357,  789,  789,  774,
-      775,  786,  784,  779,  786,  781,  807,  770,  764,  770,
-      760,  771,  297,  775,  764,  764,  760,  752,  753,  757,
-      767,  755,  765,  764,  763,  789,  788,  787,  786,  759,
-      753,  757,    0,  747,  740,  780,  779,  752,  742,  389,
-      776,  744,  734,  955,  737,  736,  955,  738,  735,  743,
-      732,  955,  728,  729,  738,  759,  955,  725,  739,  756,
-      760,  733,  727,  729,  730,  750,  719,  715,  714,  955,
-      716,  710,  722,  712,  708,  955,  746,  740,  709,  717,
-
-      716,  741,  735,  697,  700,  706,  696,  735,  694,  955,
-      955,  955,  955,  728,  696,  704,    0,  690,  705,  955,
-      955,  693,  698,  955,  686,  720,  691,  685,  695,  694,
-      694,  709,  677,  679,  690,  682,  687,  679,  686,  955,
-      673,  682,  686,  670,  681,  666,  660,  665,  698,  315,
-      662,  663,  660,  955,  674,  665,  692,  691,  955,  655,
-      671,  688,  652,  686,  955,  313,  657,  654,  955,  661,
-      652,  647,  685,  679,  333,  678,  648,  639,  675,  644,
-      673,  644,  645,  670,  643,  634,  645,  648,  643,  638,
-      643,  640,  643,  638,  664,  663,  636,  955,  625,  633,
-
-      633,  658,  621,  611,  615,  614,  622,  612,  620,  605,
-      338,  955,  649,  617,  647,  608,  618,  644,  955,  612,
-      609,  615,  601,  616,  611,  600,  597,  598,  611,  594,
-      599,  607,  603,  629,  588,  588,  599,  598,  585,  583,
-      584,  955,  955,  352,  584,  582,  619,  955,  584,  617,
-      585,  570,  580,  582,  586,  611,  587,  564,  955,  580,
-      955,  579,  566,  955,  579,  581,  603,  566,  561,  567,
-      561,  598,  561,  556,  568,  567,  555,  554,  955,  568,
-      551,  551,  380,  549,  564,  544,  545,  556,  543,  543,
-      955,  547,  955,  546,  542,  551,  541,  576,  955,  541,
-
-      537,  546,  549,  571,  570,  530,  955,  543,  567,  566,
-      529,  955,  526,  536,  557,  538,  537,  517,  534,  557,
-      556,  955,  524,  376,  554,  529,  529,  528,  550,  518,
-      548,  516,  519,  518,  506,  508,  955,  515,  514,  500,
-      514,  955,  955,  499,  505,  955,  955,  512,  495,  534,
-      502,  493,  493,  507,  506,  955,  955,  502,  955,  502,
-      955,  503,  492,  524,  955,  487,  955,  482,  483,  481,
-      519,  284,  518,  517,  485,  488,  355,  487,  490,  512,
-      955,  485,  483,  478,  468,  468,  506,  469,  465,  503,
-      955,  467,  501,  500,  499,  955,  464,  497,  955,  955,
-
-      462,  495,  955,  455,  453,  452,  955,  491,  451,  462,
-      457,  460,  955,  451,  458,  955,  445,  955,  955,  955,
-      447,  955,  455,  955,  481,  480,  448,  955,  459,  417,
-      401,  435,  400,  418,  411,  384,  409,  955,  955,  372,
-      370,  403,  367,  955,  370,  955,  955,  373,  955,  360,
-      356,  955,  388,  362,  390,  384,  352,  356,  386,  955,
-      347,  358,  351,  955,  347,  339,   69,  122,  145,  169,
-      193,  200,  214,  228,  240,  241,  281,  273,  293,  324,
-      313,  312,  955,  344,  318,  955,  318,  324,  365,  955,
-      955,  425,  432,  439,  446,  453,  460,  464,  469,  471,
-
-      473,  475,  477
+     1023, 1024,   78, 1019,  111,    0,  153, 1024,  158,   73,
+       71,  173, 1024, 1001,  168, 1024, 1024,  991,  972,  974,
+     1024, 1024, 1024,   96, 1004,  975,    0,  996,   99, 1011,
+      169,  192, 1024,  971,  976,  969,  235,  966,  967,  155,
+      172,  149,  169,  161,  209,  979,   57,   62,  184,  216,
+      211,  219,  962,  226,    0,  252,  272,  282,  287,  257,
+     1024,    0, 1024,  248,  292,  967,  966,  957, 1024,  972,
+      996, 1024,  172, 1024,  954,  984,  968,  963,  991,    0,
+      307,  952,  953,  950,  956,  171,  944,  945,   77,  959,
+
+      952,  952,  243,  944,  185,  935,  974,  214,  938,  972,
+      953,  950,  950,  944,  932,  937,  926,  929,  928,  165,
+      929,  930,  928,  286,  256,  939,  940,  938,  922,  926,
+      922,  931,  924,  918,    0,  916,  921,  926,  919, 1024,
+        0,  946,  913,  920,  948, 1024,  328,  924,  906,  920,
+      917,  916,  902,  936,  917,  898,  905,  900,  910,  899,
+      911,  906,  901,  899,  890,  892,  905, 1024,  892,  899,
+      902,  885,  918,  884,  892,  895,  892,  878,  886,  879,
+      892,  875,  874,  879,  880,  884,  878,  872,  884,  879,
+      878,  862,  876,  870,  876,  865,  859,  871,  870,  858,
+
+      864,  855,  866, 1024, 1024,  851,    0,  274,  330,  860,
+      349,  845,  884,  847,  852,  886,  847,  856,  883,  853,
+      850,  298,  880,  874,  841,  839,  838,  836,  362,  847,
+      847,  832,  833,  844,  842,  837,  844,  839,  835,  864,
+      858,  826,  820,  826,  816,  827,  288,  831,  820,  820,
+      816,  808,  809,  813,  823,  811,  821,  820,  819,  845,
+      844,  843,  842,  815,  809,  813,    0,  803,  796,  836,
+      835,  808,  798,  394,  832,  803,  799,  789, 1024,  792,
+      791, 1024,  793,  790,  798,  787, 1024,  797,  782,  783,
+      792,  813, 1024,  779,  793,  810,  814,  787,  781,  783,
+
+      784,  804,  773,  769,  768,  800, 1024,  765,  768,  762,
+      774,  764,  760, 1024,  798,  792,  761,  769,  768,  793,
+      787,  749,  752,  758,  748,  787,  746, 1024, 1024, 1024,
+     1024,  780,  748,  756,    0,  742,  757, 1024, 1024,  745,
+      750, 1024,  747,  737,  771,  742,  736,  746,  745,  745,
+      760,  736,  727,  729,  740,  732,  737,  729,  736, 1024,
+      723,  732,  736,  720,  731,  716,  710,  715,  728,  725,
+      746,  286,  710,  711,  708, 1024,  722,  713,  740,  739,
+     1024,  703,  719,  736,  700,  734, 1024,  320,  705,  702,
+     1024,  709,  700,  695,  733,  699,  726,  246,  725,  695,
+
+      686,  722,  691,  720,  693,  690,  691,  716,  689,  680,
+      691,  694,  689,  684,  689,  686,  689,  684,  710,  709,
+      675,  669,  680, 1024,  669,  677,  677,  702,  665,  655,
+      659,  658,  666,  656,  311,  650,  125, 1024,  694,  662,
+      692,  653,  663,  689, 1024,  661,  656,  653,  659,  645,
+      660,  655,  644,  641,  642,  651,  654,  637,  642,  650,
+      646,  672,  631,  631,  642,  641,  628,  626,  627, 1024,
+     1024,  633,  621,  355,  625,  623,  660, 1024,  625,  658,
+      626,  611,  621,  623,  617,  626,  651,  627,  604, 1024,
+      620, 1024,  619,  606, 1024,  640,  618,  620,  642,  605,
+
+      600,  606,  600,  637,  600,  600,  594,  606,  605,  593,
+      592, 1024,  606,  589,  589,  384,  587,  602,  582,  596,
+      595,  581,  592,  579,  579, 1024,  583, 1024,  582,  578,
+      587,  577,  573,  611, 1024,  576,  572,  581,  584,  606,
+      570,  604,  564, 1024,  577,  601,  600,  563, 1024,  560,
+      557,  569,  590,  571,  570,  550,  567,  590,  589, 1024,
+      557,  363,  587,  562,  562,  549,  545,  559,  581,  549,
+      579,  547,  550,  549,  537,  539,  533, 1024,  545,  544,
+      530,  544, 1024,  545, 1024,  528,  534, 1024, 1024,  541,
+      524,  558,  562,  530,  521,  521,  535,  534, 1024, 1024,
+
+      530, 1024,  530, 1024,  531,  520,  512,  551,  550, 1024,
+      513, 1024,  508,  509,  507,  545,  267,  509,  543,  542,
+      510,  513,  505,  360,  511,  514,  536,  504, 1024,  508,
+      506,  501,  491,  491,  529,  492,  488,  526,  520, 1024,
+     1024,  489,  509,  501,  482, 1024,  446,  473,   73, 1024,
+     1024,  210,  380,  224, 1024,  215,  272,  278, 1024,  300,
+      328,  308,  321,  318,  323, 1024,  326,  342, 1024,  339,
+      332, 1024, 1024, 1024,  343, 1024,  347,  356, 1024,  355,
+      388,  390,  391,  361,  393, 1024,  389,  356,  360,  398,
+      371,  400,  379,  406,  381,  381,  412,  387, 1024, 1024,
+
+     1024,  378, 1024,  378,  416,  389, 1024,  394, 1024,  426,
+     1024,  400,  428, 1024,  429,  395,  393, 1024,  427,  404,
+     1024,  434, 1024, 1024,  430,  400,  406,  438, 1024,  402,
+      415,  415, 1024,  415,  416,  417,  407,  407,  412,  417,
+      410,  410,  415,  421,  422,  428,  420,  428,  457,  429,
+      428, 1024,  460,  434, 1024,  424,  424,  464, 1024, 1024,
+      470,  477,  484,  491,  498,  505,  509,  514,  516,  518,
+      520,  522
     } ;
 
-static yyconst flex_int16_t yy_def[704] =
+static yyconst flex_int16_t yy_def[773] =
     {   0,
-      691,    1,  692,  692,    1,    5,    5,    5,    5,    5,
-      691,  691,  691,  691,  691,  693,  691,  691,  691,  691,
-      691,  691,  691,  691,  691,  691,  691,  691,  691,  691,
-      691,  691,  691,  691,  691,  691,  694,  691,  691,  691,
-      695,   15,  691,   42,   42,   42,  696,   42,   42,   42,
-       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-       42,   42,  693,  691,  691,  691,  691,  691,  691,  697,
-      691,  691,  691,  691,  691,  691,  691,  691,  694,  691,
-      695,  691,  698,   42,   42,   42,  699,   42,  696,   42,
+      760,    1,  761,  761,    1,    5,    5,    5,    5,    5,
+      760,  760,  760,  760,  760,  762,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  763,  760,  760,  760,
+      764,   15,  760,   42,   42,   42,  765,   42,   42,   42,
        42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,   42,  762,  760,  760,  760,  760,  760,
+      760,  766,  760,  760,  760,  760,  760,  760,  760,  760,
+      763,  760,  764,  760,  767,   42,   42,   42,  768,   42,
+      765,   42,   42,   42,   42,   42,   42,   42,   42,   42,
 
        42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
        42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-       42,   42,   42,   42,   42,   42,   42,   42,  697,  691,
-      691,  691,  691,  691,  700,   42,   42,   42,  699,  691,
-      696,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-       42,   42,   42,   42,   42,   42,   42,   42,   42,  691,
        42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,   42,  766,  760,  760,  760,  760,  760,
+      769,   42,   42,   42,  768,  760,  765,   42,   42,   42,
        42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,   42,   42,   42,   42,  760,   42,   42,
        42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-       42,   42,  691,  691,  691,  691,  701,   42,   42,   42,
-
-      696,   42,   42,   42,   42,   42,   42,   42,   42,   42,
        42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
        42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+
+       42,   42,  760,  760,  760,  760,  770,   42,   42,   42,
+      765,   42,   42,   42,   42,   42,   42,   42,   42,   42,
        42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
        42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-       42,  691,  702,   42,   42,   42,   42,   42,   42,  696,
-       42,   42,   42,  691,   42,   42,  691,   42,   42,   42,
-       42,  691,   42,   42,   42,   42,  691,   42,   42,   42,
-       42,   42,   42,   42,   42,   42,   42,   42,   42,  691,
-       42,   42,   42,   42,   42,  691,   42,   42,   42,   42,
-
-       42,   42,   42,   42,   42,   42,   42,   42,   42,  691,
-      691,  691,  691,   42,   42,  691,  703,   42,   42,  691,
-      691,   42,   42,  691,   42,   42,   42,   42,   42,   42,
-       42,   42,   42,   42,   42,   42,   42,   42,   42,  691,
        42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-       42,   42,   42,  691,   42,   42,   42,   42,  691,   42,
-       42,   42,   42,   42,  691,   42,   42,   42,  691,   42,
        42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,   42,   42,  760,  771,   42,   42,   42,
+       42,   42,   42,  765,   42,   42,   42,   42,  760,   42,
+       42,  760,   42,   42,   42,   42,  760,   42,   42,   42,
+       42,   42,  760,   42,   42,   42,   42,   42,   42,   42,
+
+       42,   42,   42,   42,   42,   42,  760,   42,   42,   42,
+       42,   42,   42,  760,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,   42,   42,   42,   42,  760,  760,  760,
+      760,   42,   42,  760,  772,   42,   42,  760,  760,   42,
+       42,  760,   42,   42,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,   42,   42,   42,   42,   42,   42,  760,
        42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-       42,   42,   42,   42,   42,   42,   42,  691,   42,   42,
+       42,   42,   42,   42,   42,  760,   42,   42,   42,   42,
+      760,   42,   42,   42,   42,   42,  760,   42,   42,   42,
+      760,   42,   42,   42,   42,   42,   42,   42,   42,   42,
 
        42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-       42,  691,   42,   42,   42,   42,   42,   42,  691,   42,
        42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,  760,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,   42,   42,   42,   42,  760,   42,   42,
+       42,   42,   42,   42,  760,   42,   42,   42,   42,   42,
        42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-       42,  691,  691,   42,   42,   42,   42,  691,   42,   42,
-       42,   42,   42,   42,   42,   42,   42,   42,  691,   42,
-      691,   42,   42,  691,   42,   42,   42,   42,   42,   42,
-       42,   42,   42,   42,   42,   42,   42,   42,  691,   42,
+       42,   42,   42,   42,   42,   42,   42,   42,   42,  760,
+      760,   42,   42,   42,   42,   42,   42,  760,   42,   42,
+       42,   42,   42,   42,   42,   42,   42,   42,   42,  760,
+       42,  760,   42,   42,  760,   42,   42,   42,   42,   42,
+
        42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-      691,   42,  691,   42,   42,   42,   42,   42,  691,   42,
-
-       42,   42,   42,   42,   42,   42,  691,   42,   42,   42,
-       42,  691,   42,   42,   42,   42,   42,   42,   42,   42,
-       42,  691,   42,   42,   42,   42,   42,   42,   42,   42,
-       42,   42,   42,   42,   42,   42,  691,   42,   42,   42,
-       42,  691,  691,   42,   42,  691,  691,   42,   42,   42,
-       42,   42,   42,   42,   42,  691,  691,   42,  691,   42,
-      691,   42,   42,   42,  691,   42,  691,   42,   42,   42,
+       42,  760,   42,   42,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,   42,   42,  760,   42,  760,   42,   42,
+       42,   42,   42,   42,  760,   42,   42,   42,   42,   42,
+       42,   42,   42,  760,   42,   42,   42,   42,  760,   42,
+       42,   42,   42,   42,   42,   42,   42,   42,   42,  760,
        42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-      691,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-      691,   42,   42,   42,   42,  691,   42,   42,  691,  691,
-
-       42,   42,  691,   42,   42,   42,  691,   42,   42,   42,
-       42,   42,  691,   42,   42,  691,   42,  691,  691,  691,
-       42,  691,   42,  691,   42,   42,   42,  691,   42,   42,
-       42,   42,   42,   42,   42,   42,   42,  691,  691,   42,
-       42,   42,   42,  691,   42,  691,  691,   42,  691,   42,
-       42,  691,   42,   42,   42,   42,   42,   42,   42,  691,
-       42,   42,   42,  691,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,   42,   42,   42,   42,  760,   42,   42,
+       42,   42,  760,   42,  760,   42,   42,  760,  760,   42,
+       42,   42,   42,   42,   42,   42,   42,   42,  760,  760,
+
+       42,  760,   42,  760,   42,   42,   42,   42,   42,  760,
+       42,  760,   42,   42,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,   42,   42,   42,   42,   42,  760,   42,
+       42,   42,   42,   42,   42,   42,   42,   42,   42,  760,
+      760,   42,   42,   42,   42,  760,   42,   42,   42,  760,
+      760,   42,   42,   42,  760,   42,   42,   42,  760,   42,
+       42,   42,   42,   42,   42,  760,   42,   42,  760,   42,
+       42,  760,  760,  760,   42,  760,   42,   42,  760,   42,
+       42,   42,   42,   42,   42,  760,   42,   42,   42,   42,
+       42,   42,   42,   42,   42,   42,   42,   42,  760,  760,
+
+      760,   42,  760,   42,   42,   42,  760,   42,  760,   42,
+      760,   42,   42,  760,   42,   42,   42,  760,   42,   42,
+      760,   42,  760,  760,   42,   42,   42,   42,  760,   42,
+       42,   42,  760,   42,   42,   42,   42,   42,   42,   42,
        42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-       42,   42,  691,   42,   42,  691,   42,   42,   42,  691,
-        0,  691,  691,  691,  691,  691,  691,  691,  691,  691,
-
-      691,  691,  691
+       42,  760,   42,   42,  760,   42,   42,   42,  760,    0,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760
     } ;
 
-static yyconst flex_uint16_t yy_nxt[1009] =
+static yyconst flex_uint16_t yy_nxt[1078] =
     {   0,
        12,   13,   14,   13,   12,   15,   16,   12,   17,   18,
        19,   20,   21,   22,   22,   22,   23,   24,   12,   12,
@@ -787,113 +807,120 @@ static yyconst flex_uint16_t yy_nxt[1009] =
        29,   12,   12,   12,   12,   30,   12,   12,   12,   12,
        12,   31,   32,   34,   14,   34,   34,   14,   34,   35,
        38,   37,   35,   12,   12,   37,   12,   12,   12,   12,
-       12,   12,   12,   12,   12,   12,   38,   12,   69,   39,
-       12,   39,   12,   70,   12,  112,   68,   68,   68,  113,
-       12,   12,   12,   12,   36,   66,   12,   39,   12,   39,
+       12,   12,   12,   12,   12,   12,   38,   12,   71,   39,
+       12,   39,   12,   72,   12,  116,   70,   70,   70,  117,
+       12,   12,   12,   12,   36,   68,   12,   39,   12,   39,
 
-       39,  670,   39,   12,  117,   66,  149,  150,  118,   12,
+       39,  677,   39,   12,  118,   68,  156,  157,  119,   12,
        12,   41,   41,   41,   42,   42,   43,   42,   42,   42,
        42,   42,   42,   42,   42,   44,   42,   42,   42,   42,
        42,   42,   45,   42,   46,   42,   47,   42,   42,   48,
-       42,   49,   50,   51,   42,   42,   52,   53,   42,   54,
-       42,   55,   56,   57,   58,   59,   60,   61,   62,   42,
-       42,   42,   42,   42,   64,  671,   65,   65,   65,   64,
-       99,   67,   67,   67,   82,   66,   72,   82,   72,  100,
-       66,   73,   73,   73,   64,   66,   67,   67,   67,  672,
-       66,   91,  104,   92,   83,   66,   93,   83,  114,   94,
-
-       95,  105,  115,  106,   96,   66,   42,   97,  123,  673,
-      101,  116,  124,   42,  102,   42,  153,  103,   98,  160,
-       42,  127,   42,   42,   42,  128,  125,   42,   42,  674,
-       42,  154,   42,   42,   42,   42,   42,   42,   42,   42,
-       88,  107,  108,  119,  675,  109,  161,   42,  156,  145,
-      110,  157,  120,  121,   68,   68,   68,  122,  146,  676,
-       42,  171,  172,   66,   42,   72,  254,   72,   42,  677,
-       73,   73,   73,   66,  255,   42,  678,  679,   42,  182,
-       42,   89,   64,  183,   65,   65,   65,   64,  270,   67,
-       67,   67,  271,   66,  597,   68,   68,   68,   66,   73,
-
-       73,   73,  296,   66,   66,   73,   73,   73,   66,  176,
-      177,  178,  680,  681,   66,  141,  141,  141,  412,  179,
-      398,  180,  141,  141,  141,  181,  682,  413,  598,  683,
-      141,  141,  141,  141,  141,  141,  201,  201,  201,  256,
-      257,  297,  399,  201,  201,  201,  258,  684,  685,  686,
-      687,  201,  201,  201,  201,  201,  201,  260,  260,  260,
-      603,  688,  277,  421,  260,  260,  260,  278,  689,  422,
-      690,  669,  260,  260,  260,  260,  260,  260,  457,  668,
-      487,  559,  667,  458,  488,  522,  560,  604,  666,  665,
-      523,  664,  663,  662,  661,  660,  659,  279,  658,  657,
-
-      656,  280,   42,   42,   42,  655,  654,  653,  652,   42,
-       42,   42,  651,  650,  649,  648,  647,   42,   42,   42,
-       42,   42,   42,  646,  524,   33,   33,   33,   33,   33,
-       33,   33,   63,  645,   63,   63,   63,   63,   63,   79,
-      644,   79,  643,   79,   79,   79,   81,   81,   81,   81,
-       81,   81,   81,   87,   87,   87,   87,   87,   87,   87,
-      129,  642,  129,  129,  129,  129,  129,   81,   81,  641,
-       81,  139,  139,  139,  139,  139,  197,  197,  253,  253,
-      317,  317,   81,   81,  640,  639,  638,  637,  636,  635,
-      634,  633,  632,  631,  630,  629,  628,  627,  626,  625,
-
-      624,  623,  622,  621,  620,  619,  618,  617,  616,  615,
-      614,  613,  612,  611,  610,  609,  608,  607,  606,  605,
-      602,  601,  600,  599,  596,  595,  594,  593,  592,  591,
-      590,  589,  588,  587,  586,  585,  584,  583,  582,  581,
-      580,  579,  578,  577,  576,  575,  574,  573,  572,  571,
-      570,  569,  568,  567,  566,  565,  564,  563,  562,  561,
-      558,  557,  556,  555,  554,  553,  552,  551,  550,  549,
-      548,  547,  546,  545,  544,  543,  542,  541,  540,  539,
-      538,  537,  536,  535,  534,  533,  532,  531,  530,  529,
-      528,  527,  526,  525,  521,  520,  519,  518,  517,  516,
-
-      515,  514,  513,  512,  511,  510,  509,  508,  507,  506,
-      505,  504,  503,  502,  501,  500,  499,  498,  497,  496,
-      495,  494,  493,  492,  491,  490,  489,  486,  485,  484,
-      483,  482,  481,  480,  479,  478,  477,  476,  475,  474,
-      473,  472,  471,  470,  469,  468,  467,  466,  465,  464,
-      463,  462,  461,  460,  459,  456,  455,  454,  453,  452,
-      451,  450,  449,  448,  447,  446,  445,  444,  443,  442,
-      441,  440,  439,  438,  437,  436,  435,  434,  433,  432,
-      431,  430,  429,  428,  427,  426,  425,  424,  423,  420,
-      419,  418,  417,  416,  415,  414,  411,  410,  409,  408,
-
-      407,  406,  405,  404,  403,  402,  401,  400,  397,  396,
-      395,  394,  393,  392,  391,  390,  389,  388,  387,  386,
-      385,  384,  383,  382,  381,  380,  379,  378,  377,  376,
-      375,  374,  373,  372,  371,  370,  369,  368,  367,  366,
-      365,  364,  363,  362,  361,  360,  359,  358,  357,  356,
-      355,  354,  353,  352,  351,  350,  349,  348,  347,  346,
-      345,  344,  343,  342,  341,  340,  339,  338,  337,  336,
-      335,  334,  333,  332,  331,  330,  329,  328,  327,  326,
-      325,  324,  323,  322,  321,  320,  319,  318,  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,  276,  275,  274,  273,  272,  269,  268,  267,
-      266,  265,  264,  263,  262,  261,  259,  252,  195,  251,
-      250,  249,  248,  247,  246,  245,  244,  243,  242,  241,
-      240,  239,  238,  237,  236,  235,  234,  233,  232,  231,
-      230,  229,  228,  227,  226,  225,  224,  223,  222,  221,
-      220,  219,  218,  217,  216,  215,  214,  213,  212,  211,
-      210,  209,  208,  207,  206,  205,  204,  203,  202,  140,
-      200,  199,  198,  196,  195,  194,  193,  192,  191,  190,
-
-      189,  188,  187,  186,  185,  184,  175,  174,  173,  170,
-      169,  168,  167,  166,  165,  164,  163,  162,  159,  158,
-      155,  152,  151,  148,  147,  144,  143,  142,  140,  138,
-      137,  136,  135,  134,  133,  132,  131,  130,  126,  111,
-       90,   86,   85,   84,   40,   80,   78,   77,   76,   75,
-       74,   71,   40,  691,   11,  691,  691,  691,  691,  691,
-      691,  691,  691,  691,  691,  691,  691,  691,  691,  691,
-      691,  691,  691,  691,  691,  691,  691,  691,  691,  691,
-      691,  691,  691,  691,  691,  691,  691,  691,  691,  691,
-      691,  691,  691,  691,  691,  691,  691,  691,  691,  691,
-
-      691,  691,  691,  691,  691,  691,  691,  691
+       49,   50,   51,   52,   42,   42,   53,   54,   42,   55,
+       56,   57,   58,   59,   60,   61,   62,   63,   64,   42,
+       42,   42,   42,   42,   66,  488,   67,   67,   67,   66,
+      489,   69,   69,   69,   84,   68,   74,   84,   74,  102,
+       68,   75,   75,   75,   66,   68,   69,   69,   69,  103,
+       68,   94,  108,   95,   85,   68,   96,   85,  104,   97,
+
+       98,  109,  152,  110,   99,   68,   42,  100,  181,  182,
+      105,  153,  120,   42,  106,   42,  121,  107,  101,  168,
+       42,   42,   42,   42,   42,  122,  164,   42,   42,  165,
+       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+       90,  111,  112,  125,  123,  113,  169,   42,  124,  678,
+      114,  129,  126,  127,  133,  130,  681,  128,  134,  682,
+       42,   75,   75,   75,   42,   70,   70,   70,   42,  131,
+       70,   70,   70,  161,   68,   42,  448,  647,   42,   68,
+       42,   91,  449,   66,   68,   67,   67,   67,  162,   68,
+       74,  424,   74,  314,   68,   75,   75,   75,   66,  192,
+
+       69,   69,   69,  193,   68,   75,   75,   75,  285,   68,
+      268,  648,  286,  425,  186,  187,  188,  683,  269,   68,
+      147,  147,  147,  684,  189,  438,  190,  147,  147,  147,
+      191,  685,  315,  686,  439,  147,  147,  147,  147,  147,
+      147,  211,  211,  211,  270,  271,  485,  486,  211,  211,
+      211,  272,  687,  688,  689,  690,  211,  211,  211,  211,
+      211,  211,  274,  274,  274,  655,  691,  293,  602,  274,
+      274,  274,  294,  603,  692,  693,  694,  274,  274,  274,
+      274,  274,  274,  522,  695,  679,  696,  523,  697,  560,
+      680,  698,  656,  699,  561,  700,  701,  702,  703,  704,
+
+      705,  706,  295,  707,  708,  709,  296,   42,   42,   42,
+      710,  711,  712,  713,   42,   42,   42,  714,  715,  716,
+      717,  718,   42,   42,   42,   42,   42,   42,  562,  719,
+      720,  721,  722,  723,  724,  725,  726,  727,  728,  729,
+      730,  731,  732,  733,  734,  735,  736,  737,  738,  739,
+      740,  741,  742,  743,  744,  745,  746,  747,  748,  749,
+      750,  751,  752,  753,  754,  755,  756,  757,  758,  759,
+       33,   33,   33,   33,   33,   33,   33,   65,  676,   65,
+       65,   65,   65,   65,   81,  675,   81,  674,   81,   81,
+       81,   83,   83,   83,   83,   83,   83,   83,   89,   89,
+
+       89,   89,   89,   89,   89,  135,  673,  135,  135,  135,
+      135,  135,   83,   83,  672,   83,  145,  145,  145,  145,
+      145,  207,  207,  267,  267,  335,  335,   83,   83,  671,
+      670,  669,  668,  667,  666,  665,  664,  663,  662,  661,
+      660,  659,  658,  657,  654,  653,  652,  651,  650,  649,
+      646,  645,  644,  643,  642,  641,  640,  639,  638,  637,
+      636,  635,  634,  633,  632,  631,  630,  629,  628,  627,
+      626,  625,  624,  623,  622,  621,  620,  619,  618,  617,
+      616,  615,  614,  613,  612,  611,  610,  609,  608,  607,
+      606,  605,  604,  601,  600,  599,  598,  597,  596,  595,
+
+      594,  593,  592,  591,  590,  589,  588,  587,  586,  585,
+      584,  583,  582,  581,  580,  579,  578,  577,  576,  575,
+      574,  573,  572,  571,  570,  569,  568,  567,  566,  565,
+      564,  563,  559,  558,  557,  556,  555,  554,  553,  552,
+      551,  550,  549,  548,  547,  546,  545,  544,  543,  542,
+      541,  540,  539,  538,  537,  536,  535,  534,  533,  532,
+      531,  530,  529,  528,  527,  526,  525,  524,  521,  520,
+      519,  518,  517,  516,  515,  514,  513,  512,  511,  510,
+      509,  508,  507,  506,  505,  504,  503,  502,  501,  500,
+      499,  498,  497,  496,  495,  494,  493,  492,  491,  490,
+
+      487,  484,  483,  482,  481,  480,  479,  478,  477,  476,
+      475,  474,  473,  472,  471,  470,  469,  468,  467,  466,
+      465,  464,  463,  462,  461,  460,  459,  458,  457,  456,
+      455,  454,  453,  452,  451,  450,  447,  446,  445,  444,
+      443,  442,  441,  440,  437,  436,  435,  434,  433,  432,
+      431,  430,  429,  428,  427,  426,  423,  422,  421,  420,
+      419,  418,  417,  416,  415,  414,  413,  412,  411,  410,
+      409,  408,  407,  406,  405,  404,  403,  402,  401,  400,
+      399,  398,  397,  396,  395,  394,  393,  392,  391,  390,
+      389,  388,  387,  386,  385,  384,  383,  382,  381,  380,
+
+      379,  378,  377,  376,  375,  374,  373,  372,  371,  370,
+      369,  368,  367,  366,  365,  364,  363,  362,  361,  360,
+      359,  358,  357,  356,  355,  354,  353,  352,  351,  350,
+      349,  348,  347,  346,  345,  344,  343,  342,  341,  340,
+      339,  338,  337,  336,  334,  333,  332,  331,  330,  329,
+      328,  327,  326,  325,  324,  323,  322,  321,  320,  319,
+      318,  317,  316,  313,  312,  311,  310,  309,  308,  307,
+      306,  305,  304,  303,  302,  301,  300,  299,  298,  297,
+      292,  291,  290,  289,  288,  287,  284,  283,  282,  281,
+      280,  279,  278,  277,  276,  275,  273,  266,  205,  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,  239,  238,  237,  236,  235,
+      234,  233,  232,  231,  230,  229,  228,  227,  226,  225,
+      224,  223,  222,  221,  220,  219,  218,  217,  216,  215,
+      214,  213,  212,  146,  210,  209,  208,  206,  205,  204,
+      203,  202,  201,  200,  199,  198,  197,  196,  195,  194,
+      185,  184,  183,  180,  179,  178,  177,  176,  175,  174,
+      173,  172,  171,  170,  167,  166,  163,  160,  159,  158,
+      155,  154,  151,  150,  149,  148,  146,  144,  143,  142,
+
+      141,  140,  139,  138,  137,  136,  132,  115,   93,   92,
+       88,   87,   86,   40,   82,   80,   79,   78,   77,   76,
+       73,   40,  760,   11,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760
     } ;
 
-static yyconst flex_int16_t yy_chk[1009] =
+static yyconst flex_int16_t yy_chk[1078] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -903,109 +930,116 @@ static yyconst flex_int16_t yy_chk[1009] =
         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,    9,   21,   13,
-        5,   13,    5,   21,    5,   56,   20,   20,   20,   56,
+        5,   13,    5,   21,    5,   57,   20,   20,   20,   57,
         5,    5,    7,   10,    5,   20,    8,   34,    5,   34,
 
-       39,  667,   39,    5,   58,   20,   96,   96,   58,    5,
+       39,  649,   39,    5,   58,   20,   99,   99,   58,    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,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-       15,   15,   15,   15,   17,  668,   17,   17,   17,   19,
-       51,   19,   19,   19,   41,   17,   25,   81,   25,   51,
-       19,   25,   25,   25,   22,   17,   22,   22,   22,  669,
-       19,   49,   53,   49,   41,   22,   49,   81,   57,   49,
-
-       50,   53,   57,   53,   50,   22,   42,   50,   60,  670,
-       52,   57,   60,   42,   52,   42,   99,   52,   50,  104,
-       42,   62,   42,   42,   42,   62,   60,   42,   42,  671,
-       42,   99,   42,   42,   42,   42,   42,   42,   42,   42,
-       47,   54,   54,   59,  672,   54,  104,   47,  101,   93,
-       54,  101,   59,   59,   64,   64,   64,   59,   93,  673,
-       47,  114,  114,   64,   47,   66,  198,   66,   47,  674,
-       66,   66,   66,   64,  198,   47,  675,  676,   47,  119,
-       47,   47,   65,  119,   65,   65,   65,   67,  211,   67,
-       67,   67,  211,   65,  572,   68,   68,   68,   67,   72,
-
-       72,   72,  233,   65,   68,   73,   73,   73,   67,  118,
-      118,  118,  677,  678,   68,   89,   89,   89,  366,  118,
-      350,  118,   89,   89,   89,  118,  679,  366,  572,  680,
-       89,   89,   89,   89,   89,   89,  141,  141,  141,  199,
-      199,  233,  350,  141,  141,  141,  199,  681,  682,  684,
-      685,  141,  141,  141,  141,  141,  141,  201,  201,  201,
-      577,  687,  217,  375,  201,  201,  201,  217,  688,  375,
-      689,  666,  201,  201,  201,  201,  201,  201,  411,  665,
-      444,  524,  663,  411,  444,  483,  524,  577,  662,  661,
-      483,  659,  658,  657,  656,  655,  654,  217,  653,  651,
-
-      650,  217,  260,  260,  260,  648,  645,  643,  642,  260,
-      260,  260,  641,  640,  637,  636,  635,  260,  260,  260,
-      260,  260,  260,  634,  483,  692,  692,  692,  692,  692,
-      692,  692,  693,  633,  693,  693,  693,  693,  693,  694,
-      632,  694,  631,  694,  694,  694,  695,  695,  695,  695,
-      695,  695,  695,  696,  696,  696,  696,  696,  696,  696,
-      697,  630,  697,  697,  697,  697,  697,  698,  698,  629,
-      698,  699,  699,  699,  699,  699,  700,  700,  701,  701,
-      702,  702,  703,  703,  627,  626,  625,  623,  621,  617,
-      615,  614,  612,  611,  610,  609,  608,  606,  605,  604,
-
-      602,  601,  598,  597,  595,  594,  593,  592,  590,  589,
-      588,  587,  586,  585,  584,  583,  582,  580,  579,  578,
-      576,  575,  574,  573,  571,  570,  569,  568,  566,  564,
-      563,  562,  560,  558,  555,  554,  553,  552,  551,  550,
-      549,  548,  545,  544,  541,  540,  539,  538,  536,  535,
-      534,  533,  532,  531,  530,  529,  528,  527,  526,  525,
-      523,  521,  520,  519,  518,  517,  516,  515,  514,  513,
-      511,  510,  509,  508,  506,  505,  504,  503,  502,  501,
-      500,  498,  497,  496,  495,  494,  492,  490,  489,  488,
-      487,  486,  485,  484,  482,  481,  480,  478,  477,  476,
-
-      475,  474,  473,  472,  471,  470,  469,  468,  467,  466,
-      465,  463,  462,  460,  458,  457,  456,  455,  454,  453,
-      452,  451,  450,  449,  447,  446,  445,  441,  440,  439,
-      438,  437,  436,  435,  434,  433,  432,  431,  430,  429,
-      428,  427,  426,  425,  424,  423,  422,  421,  420,  418,
-      417,  416,  415,  414,  413,  410,  409,  408,  407,  406,
-      405,  404,  403,  402,  401,  400,  399,  397,  396,  395,
-      394,  393,  392,  391,  390,  389,  388,  387,  386,  385,
-      384,  383,  382,  381,  380,  379,  378,  377,  376,  374,
-      373,  372,  371,  370,  368,  367,  364,  363,  362,  361,
-
-      360,  358,  357,  356,  355,  353,  352,  351,  349,  348,
-      347,  346,  345,  344,  343,  342,  341,  339,  338,  337,
-      336,  335,  334,  333,  332,  331,  330,  329,  328,  327,
-      326,  325,  323,  322,  319,  318,  316,  315,  314,  309,
-      308,  307,  306,  305,  304,  303,  302,  301,  300,  299,
-      298,  297,  295,  294,  293,  292,  291,  289,  288,  287,
-      286,  285,  284,  283,  282,  281,  280,  279,  278,  276,
-      275,  274,  273,  271,  270,  269,  268,  266,  265,  263,
-      262,  261,  259,  258,  257,  256,  255,  254,  252,  251,
-      250,  249,  248,  247,  246,  245,  244,  243,  242,  241,
-
-      240,  239,  238,  237,  236,  235,  234,  232,  231,  230,
-      229,  228,  227,  226,  225,  224,  223,  222,  221,  220,
-      219,  218,  216,  215,  214,  213,  212,  210,  209,  208,
-      207,  206,  205,  204,  203,  202,  200,  196,  193,  192,
+       15,   15,   15,   15,   17,  437,   17,   17,   17,   19,
+      437,   19,   19,   19,   41,   17,   25,   83,   25,   52,
+       19,   25,   25,   25,   22,   17,   22,   22,   22,   52,
+       19,   50,   54,   50,   41,   22,   50,   83,   52,   50,
+
+       51,   54,   96,   54,   51,   22,   42,   51,  120,  120,
+       53,   96,   59,   42,   53,   42,   59,   53,   51,  108,
+       42,   42,   42,   42,   42,   59,  105,   42,   42,  105,
+       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+       47,   55,   55,   61,   60,   55,  108,   47,   60,  652,
+       55,   62,   61,   61,   64,   62,  654,   61,   64,  656,
+       47,   74,   74,   74,   47,   66,   66,   66,   47,   62,
+       70,   70,   70,  103,   66,   47,  398,  617,   47,   70,
+       47,   47,  398,   67,   66,   67,   67,   67,  103,   70,
+       68,  372,   68,  247,   67,   68,   68,   68,   69,  125,
+
+       69,   69,   69,  125,   67,   75,   75,   75,  222,   69,
+      208,  617,  222,  372,  124,  124,  124,  657,  208,   69,
+       91,   91,   91,  658,  124,  388,  124,   91,   91,   91,
+      124,  660,  247,  661,  388,   91,   91,   91,   91,   91,
+       91,  147,  147,  147,  209,  209,  435,  435,  147,  147,
+      147,  209,  662,  663,  664,  665,  147,  147,  147,  147,
+      147,  147,  211,  211,  211,  624,  667,  229,  562,  211,
+      211,  211,  229,  562,  668,  670,  671,  211,  211,  211,
+      211,  211,  211,  474,  675,  653,  677,  474,  678,  516,
+      653,  680,  624,  681,  516,  682,  683,  684,  685,  687,
+
+      688,  689,  229,  690,  691,  692,  229,  274,  274,  274,
+      693,  694,  695,  696,  274,  274,  274,  697,  698,  702,
+      704,  705,  274,  274,  274,  274,  274,  274,  516,  706,
+      708,  710,  712,  713,  715,  716,  717,  719,  720,  722,
+      725,  726,  727,  728,  730,  731,  732,  734,  735,  736,
+      737,  738,  739,  740,  741,  742,  743,  744,  745,  746,
+      747,  748,  749,  750,  751,  753,  754,  756,  757,  758,
+      761,  761,  761,  761,  761,  761,  761,  762,  648,  762,
+      762,  762,  762,  762,  763,  647,  763,  645,  763,  763,
+      763,  764,  764,  764,  764,  764,  764,  764,  765,  765,
+
+      765,  765,  765,  765,  765,  766,  644,  766,  766,  766,
+      766,  766,  767,  767,  643,  767,  768,  768,  768,  768,
+      768,  769,  769,  770,  770,  771,  771,  772,  772,  642,
+      639,  638,  637,  636,  635,  634,  633,  632,  631,  630,
+      628,  627,  626,  625,  623,  622,  621,  620,  619,  618,
+      616,  615,  614,  613,  611,  609,  608,  607,  606,  605,
+      603,  601,  598,  597,  596,  595,  594,  593,  592,  591,
+      590,  587,  586,  584,  582,  581,  580,  579,  577,  576,
+      575,  574,  573,  572,  571,  570,  569,  568,  567,  566,
+      565,  564,  563,  561,  559,  558,  557,  556,  555,  554,
+
+      553,  552,  551,  550,  548,  547,  546,  545,  543,  542,
+      541,  540,  539,  538,  537,  536,  534,  533,  532,  531,
+      530,  529,  527,  525,  524,  523,  522,  521,  520,  519,
+      518,  517,  515,  514,  513,  511,  510,  509,  508,  507,
+      506,  505,  504,  503,  502,  501,  500,  499,  498,  497,
+      496,  494,  493,  491,  489,  488,  487,  486,  485,  484,
+      483,  482,  481,  480,  479,  477,  476,  475,  473,  472,
+      469,  468,  467,  466,  465,  464,  463,  462,  461,  460,
+      459,  458,  457,  456,  455,  454,  453,  452,  451,  450,
+      449,  448,  447,  446,  444,  443,  442,  441,  440,  439,
+
+      436,  434,  433,  432,  431,  430,  429,  428,  427,  426,
+      425,  423,  422,  421,  420,  419,  418,  417,  416,  415,
+      414,  413,  412,  411,  410,  409,  408,  407,  406,  405,
+      404,  403,  402,  401,  400,  399,  397,  396,  395,  394,
+      393,  392,  390,  389,  386,  385,  384,  383,  382,  380,
+      379,  378,  377,  375,  374,  373,  371,  370,  369,  368,
+      367,  366,  365,  364,  363,  362,  361,  359,  358,  357,
+      356,  355,  354,  353,  352,  351,  350,  349,  348,  347,
+      346,  345,  344,  343,  341,  340,  337,  336,  334,  333,
+      332,  327,  326,  325,  324,  323,  322,  321,  320,  319,
+
+      318,  317,  316,  315,  313,  312,  311,  310,  309,  308,
+      306,  305,  304,  303,  302,  301,  300,  299,  298,  297,
+      296,  295,  294,  292,  291,  290,  289,  288,  286,  285,
+      284,  283,  281,  280,  278,  277,  276,  275,  273,  272,
+      271,  270,  269,  268,  266,  265,  264,  263,  262,  261,
+      260,  259,  258,  257,  256,  255,  254,  253,  252,  251,
+      250,  249,  248,  246,  245,  244,  243,  242,  241,  240,
+      239,  238,  237,  236,  235,  234,  233,  232,  231,  230,
+      228,  227,  226,  225,  224,  223,  221,  220,  219,  218,
+      217,  216,  215,  214,  213,  212,  210,  206,  203,  202,
+
+      201,  200,  199,  198,  197,  196,  195,  194,  193,  192,
       191,  190,  189,  188,  187,  186,  185,  184,  183,  182,
       181,  180,  179,  178,  177,  176,  175,  174,  173,  172,
-      171,  170,  169,  168,  167,  166,  165,  164,  163,  162,
-      161,  159,  158,  157,  156,  155,  154,  153,  152,  151,
-      150,  149,  148,  147,  146,  145,  144,  143,  142,  139,
-      138,  137,  136,  133,  132,  131,  130,  128,  127,  126,
-
-      125,  124,  123,  122,  121,  120,  117,  116,  115,  113,
-      112,  111,  110,  109,  108,  107,  106,  105,  103,  102,
-      100,   98,   97,   95,   94,   92,   91,   90,   87,   86,
-       85,   84,   83,   79,   78,   76,   75,   74,   61,   55,
-       48,   46,   45,   44,   40,   38,   36,   35,   30,   29,
-       28,   24,   14,   11,  691,  691,  691,  691,  691,  691,
-      691,  691,  691,  691,  691,  691,  691,  691,  691,  691,
-      691,  691,  691,  691,  691,  691,  691,  691,  691,  691,
-      691,  691,  691,  691,  691,  691,  691,  691,  691,  691,
-      691,  691,  691,  691,  691,  691,  691,  691,  691,  691,
-
-      691,  691,  691,  691,  691,  691,  691,  691
+      171,  170,  169,  167,  166,  165,  164,  163,  162,  161,
+      160,  159,  158,  157,  156,  155,  154,  153,  152,  151,
+      150,  149,  148,  145,  144,  143,  142,  139,  138,  137,
+      136,  134,  133,  132,  131,  130,  129,  128,  127,  126,
+      123,  122,  121,  119,  118,  117,  116,  115,  114,  113,
+      112,  111,  110,  109,  107,  106,  104,  102,  101,  100,
+       98,   97,   95,   94,   93,   92,   89,   88,   87,   86,
+
+       85,   81,   80,   78,   77,   76,   63,   56,   49,   48,
+       46,   45,   44,   40,   38,   36,   35,   30,   29,   28,
+       24,   14,   11,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1014,7 +1048,7 @@ static char *yy_last_accepting_cpos;
 extern int parser4__flex_debug;
 int parser4__flex_debug = 1;
 
-static yyconst flex_int16_t yy_rule_linenum[99] =
+static yyconst flex_int16_t yy_rule_linenum[105] =
     {   0,
       128,  130,  132,  137,  138,  143,  144,  145,  157,  160,
       165,  172,  181,  190,  199,  208,  217,  226,  238,  248,
@@ -1024,9 +1058,10 @@ static yyconst flex_int16_t yy_rule_linenum[99] =
       549,  559,  568,  578,  588,  598,  608,  617,  627,  636,
       645,  654,  663,  672,  682,  692,  701,  710,  719,  728,
       737,  746,  755,  764,  773,  782,  791,  800,  809,  818,
-      827,  836,  845,  855,  918,  923,  928,  933,  934,  935,
-      936,  937,  938,  940,  958,  971,  976,  980
+      827,  836,  845,  854,  863,  872,  881,  892,  903,  916,
+      979,  984,  989,  994,  995,  996,  997,  998,  999, 1001,
 
+     1019, 1032, 1037, 1041
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -1038,7 +1073,7 @@ static yyconst flex_int16_t yy_rule_linenum[99] =
 #define YY_RESTORE_YY_MORE_OFFSET
 char *parser4_text;
 #line 1 "dhcp4_lexer.ll"
-/* Copyright (C) 2015-2016 Internet Systems Consortium, Inc. ("ISC")
+/* Copyright (C) 2016 Internet Systems Consortium, Inc. ("ISC")
 
    This Source Code Form is subject to the terms of the Mozilla Public
    License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -1097,7 +1132,7 @@ unsigned int comment_start_line = 0;
 // by moving it ahead by parser4_leng bytes. parser4_leng specifies the length of the
 // currently matched token.
 #define YY_USER_ACTION  driver.loc_.columns(parser4_leng);
-#line 1101 "dhcp4_lexer.cc"
+#line 1136 "dhcp4_lexer.cc"
 
 #define INITIAL 0
 #define COMMENT 1
@@ -1421,7 +1456,7 @@ YY_DECL
     }
 
 
-#line 1425 "dhcp4_lexer.cc"
+#line 1460 "dhcp4_lexer.cc"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@ -1450,13 +1485,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 >= 692 )
+                               if ( yy_current_state >= 761 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_current_state != 691 );
+               while ( yy_current_state != 760 );
                yy_cp = (yy_last_accepting_cpos);
                yy_current_state = (yy_last_accepting_state);
 
@@ -1475,13 +1510,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 < 99 )
+                       else if ( yy_act < 105 )
                                fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
                                         (long)yy_rule_linenum[yy_act], parser4_text );
-                       else if ( yy_act == 99 )
+                       else if ( yy_act == 105 )
                                fprintf( stderr, "--accepting default rule (\"%s\")\n",
                                         parser4_text );
-                       else if ( yy_act == 100 )
+                       else if ( yy_act == 106 )
                                fprintf( stderr, "--(end of buffer or a NUL)\n" );
                        else
                                fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -2473,6 +2508,18 @@ YY_RULE_SETUP
 case 83:
 YY_RULE_SETUP
 #line 845 "dhcp4_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::SUBNET4:
+        return isc::dhcp::Dhcp4Parser::make_SUBNET_4O6_INTERFACE_ID(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("4o6-interface-id", driver.loc_);
+    }
+}
+       YY_BREAK
+case 84:
+YY_RULE_SETUP
+#line 854 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2482,9 +2529,75 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 84:
+case 85:
 YY_RULE_SETUP
-#line 855 "dhcp4_lexer.ll"
+#line 863 "dhcp4_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::SUBNET4:
+        return isc::dhcp::Dhcp4Parser::make_ECHO_CLIENT_ID(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("echo-client-id", driver.loc_);
+    }
+}
+       YY_BREAK
+case 86:
+YY_RULE_SETUP
+#line 872 "dhcp4_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::SUBNET4:
+        return isc::dhcp::Dhcp4Parser::make_MATCH_CLIENT_ID(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("match-client-id", driver.loc_);
+    }
+}
+       YY_BREAK
+case 87:
+YY_RULE_SETUP
+#line 881 "dhcp4_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::SUBNET4:
+    case isc::dhcp::Parser4Context::RESERVATIONS:
+    case isc::dhcp::Parser4Context::CLIENT_CLASSES:
+        return isc::dhcp::Dhcp4Parser::make_NEXT_SERVER(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("next-server", driver.loc_);
+    }
+}
+       YY_BREAK
+case 88:
+YY_RULE_SETUP
+#line 892 "dhcp4_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::SUBNET4:
+    case isc::dhcp::Parser4Context::RESERVATIONS:
+    case isc::dhcp::Parser4Context::CLIENT_CLASSES:
+        return isc::dhcp::Dhcp4Parser::make_SERVER_HOSTNAME(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("server-hostname", driver.loc_);
+    }
+}
+       YY_BREAK
+case 89:
+YY_RULE_SETUP
+#line 903 "dhcp4_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::SUBNET4:
+    case isc::dhcp::Parser4Context::RESERVATIONS:
+    case isc::dhcp::Parser4Context::CLIENT_CLASSES:
+        return isc::dhcp::Dhcp4Parser::make_BOOT_FILE_NAME(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("boot-file-name", driver.loc_);
+    }
+}
+       YY_BREAK
+case 90:
+YY_RULE_SETUP
+#line 916 "dhcp4_lexer.ll"
 {
     // A string has been matched. It contains the actual string and single quotes.
     // We need to get those quotes out of the way and just use its content, e.g.
@@ -2548,65 +2661,65 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(decoded, driver.loc_);
 }
        YY_BREAK
-case 85:
-/* rule 85 can match eol */
+case 91:
+/* rule 91 can match eol */
 YY_RULE_SETUP
-#line 918 "dhcp4_lexer.ll"
+#line 979 "dhcp4_lexer.ll"
 {
     // Bad string with a forbidden control character inside
     driver.error(driver.loc_, "Invalid control in " + std::string(parser4_text));
 }
        YY_BREAK
-case 86:
-/* rule 86 can match eol */
+case 92:
+/* rule 92 can match eol */
 YY_RULE_SETUP
-#line 923 "dhcp4_lexer.ll"
+#line 984 "dhcp4_lexer.ll"
 {
     // Bad string with a bad escape inside
     driver.error(driver.loc_, "Bad escape in " + std::string(parser4_text));
 }
        YY_BREAK
-case 87:
+case 93:
 YY_RULE_SETUP
-#line 928 "dhcp4_lexer.ll"
+#line 989 "dhcp4_lexer.ll"
 {
     // Bad string with an open escape at the end
     driver.error(driver.loc_, "Overflow escape in " + std::string(parser4_text));
 }
        YY_BREAK
-case 88:
+case 94:
 YY_RULE_SETUP
-#line 933 "dhcp4_lexer.ll"
+#line 994 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_LSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 89:
+case 95:
 YY_RULE_SETUP
-#line 934 "dhcp4_lexer.ll"
+#line 995 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_RSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 90:
+case 96:
 YY_RULE_SETUP
-#line 935 "dhcp4_lexer.ll"
+#line 996 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_LCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 91:
+case 97:
 YY_RULE_SETUP
-#line 936 "dhcp4_lexer.ll"
+#line 997 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_RCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 92:
+case 98:
 YY_RULE_SETUP
-#line 937 "dhcp4_lexer.ll"
+#line 998 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_COMMA(driver.loc_); }
        YY_BREAK
-case 93:
+case 99:
 YY_RULE_SETUP
-#line 938 "dhcp4_lexer.ll"
+#line 999 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_COLON(driver.loc_); }
        YY_BREAK
-case 94:
+case 100:
 YY_RULE_SETUP
-#line 940 "dhcp4_lexer.ll"
+#line 1001 "dhcp4_lexer.ll"
 {
     // An integer was found.
     std::string tmp(parser4_text);
@@ -2625,9 +2738,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_INTEGER(integer, driver.loc_);
 }
        YY_BREAK
-case 95:
+case 101:
 YY_RULE_SETUP
-#line 958 "dhcp4_lexer.ll"
+#line 1019 "dhcp4_lexer.ll"
 {
     // A floating point was found.
     std::string tmp(parser4_text);
@@ -2641,28 +2754,28 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_FLOAT(fp, driver.loc_);
 }
        YY_BREAK
-case 96:
+case 102:
 YY_RULE_SETUP
-#line 971 "dhcp4_lexer.ll"
+#line 1032 "dhcp4_lexer.ll"
 {
     string tmp(parser4_text);
     return isc::dhcp::Dhcp4Parser::make_BOOLEAN(tmp == "true", driver.loc_);
 }
        YY_BREAK
-case 97:
+case 103:
 YY_RULE_SETUP
-#line 976 "dhcp4_lexer.ll"
+#line 1037 "dhcp4_lexer.ll"
 {
    return isc::dhcp::Dhcp4Parser::make_NULL_TYPE(driver.loc_);
 }
        YY_BREAK
-case 98:
+case 104:
 YY_RULE_SETUP
-#line 980 "dhcp4_lexer.ll"
+#line 1041 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "Invalid character: " + std::string(parser4_text));
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 982 "dhcp4_lexer.ll"
+#line 1043 "dhcp4_lexer.ll"
 {
     if (driver.states_.empty()) {
         return isc::dhcp::Dhcp4Parser::make_END(driver.loc_);
@@ -2686,12 +2799,12 @@ case YY_STATE_EOF(INITIAL):
     BEGIN(DIR_EXIT);
 }
        YY_BREAK
-case 99:
+case 105:
 YY_RULE_SETUP
-#line 1005 "dhcp4_lexer.ll"
+#line 1066 "dhcp4_lexer.ll"
 ECHO;
        YY_BREAK
-#line 2695 "dhcp4_lexer.cc"
+#line 2808 "dhcp4_lexer.cc"
 
        case YY_END_OF_BUFFER:
                {
@@ -3008,7 +3121,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 >= 692 )
+                       if ( yy_current_state >= 761 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -3041,11 +3154,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 >= 692 )
+               if ( yy_current_state >= 761 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 691);
+       yy_is_jam = (yy_current_state == 760);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
@@ -3794,7 +3907,7 @@ void parser4_free (void * ptr )
 
 /* %ok-for-header */
 
-#line 1005 "dhcp4_lexer.ll"
+#line 1066 "dhcp4_lexer.ll"
 
 
 
index e9555d0c0bf9891ed418795634d618745d5d6b22..580cca71951fd58b1123de1be50adeab8274e0d6 100644 (file)
@@ -253,24 +253,24 @@ namespace isc { namespace dhcp {
   {
       switch (that.type_get ())
     {
-      case 108: // value
-      case 315: // version_value
+      case 114: // value
+      case 331: // version_value
         value.move< ElementPtr > (that.value);
         break;
 
-      case 95: // "boolean"
+      case 101: // "boolean"
         value.move< bool > (that.value);
         break;
 
-      case 94: // "floating point"
+      case 100: // "floating point"
         value.move< double > (that.value);
         break;
 
-      case 93: // "integer"
+      case 99: // "integer"
         value.move< int64_t > (that.value);
         break;
 
-      case 92: // "constant string"
+      case 98: // "constant string"
         value.move< std::string > (that.value);
         break;
 
@@ -289,24 +289,24 @@ namespace isc { namespace dhcp {
     state = that.state;
       switch (that.type_get ())
     {
-      case 108: // value
-      case 315: // version_value
+      case 114: // value
+      case 331: // version_value
         value.copy< ElementPtr > (that.value);
         break;
 
-      case 95: // "boolean"
+      case 101: // "boolean"
         value.copy< bool > (that.value);
         break;
 
-      case 94: // "floating point"
+      case 100: // "floating point"
         value.copy< double > (that.value);
         break;
 
-      case 93: // "integer"
+      case 99: // "integer"
         value.copy< int64_t > (that.value);
         break;
 
-      case 92: // "constant string"
+      case 98: // "constant string"
         value.copy< std::string > (that.value);
         break;
 
@@ -346,44 +346,44 @@ namespace isc { namespace dhcp {
         << yysym.location << ": ";
     switch (yytype)
     {
-            case 92: // "constant string"
+            case 98: // "constant string"
 
-#line 183 "dhcp4_parser.yy" // lalr1.cc:636
+#line 190 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< std::string > (); }
 #line 354 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 93: // "integer"
+      case 99: // "integer"
 
-#line 183 "dhcp4_parser.yy" // lalr1.cc:636
+#line 190 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< int64_t > (); }
 #line 361 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 94: // "floating point"
+      case 100: // "floating point"
 
-#line 183 "dhcp4_parser.yy" // lalr1.cc:636
+#line 190 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< double > (); }
 #line 368 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 95: // "boolean"
+      case 101: // "boolean"
 
-#line 183 "dhcp4_parser.yy" // lalr1.cc:636
+#line 190 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< bool > (); }
 #line 375 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 108: // value
+      case 114: // value
 
-#line 183 "dhcp4_parser.yy" // lalr1.cc:636
+#line 190 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 382 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 315: // version_value
+      case 331: // version_value
 
-#line 183 "dhcp4_parser.yy" // lalr1.cc:636
+#line 190 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 389 "dhcp4_parser.cc" // lalr1.cc:636
         break;
@@ -585,24 +585,24 @@ namespace isc { namespace dhcp {
          when using variants.  */
         switch (yyr1_[yyn])
     {
-      case 108: // value
-      case 315: // version_value
+      case 114: // value
+      case 331: // version_value
         yylhs.value.build< ElementPtr > ();
         break;
 
-      case 95: // "boolean"
+      case 101: // "boolean"
         yylhs.value.build< bool > ();
         break;
 
-      case 94: // "floating point"
+      case 100: // "floating point"
         yylhs.value.build< double > ();
         break;
 
-      case 93: // "integer"
+      case 99: // "integer"
         yylhs.value.build< int64_t > ();
         break;
 
-      case 92: // "constant string"
+      case 98: // "constant string"
         yylhs.value.build< std::string > ();
         break;
 
@@ -624,109 +624,109 @@ namespace isc { namespace dhcp {
           switch (yyn)
             {
   case 2:
-#line 192 "dhcp4_parser.yy" // lalr1.cc:859
+#line 199 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.NO_KEYWORD; }
 #line 630 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 4:
-#line 193 "dhcp4_parser.yy" // lalr1.cc:859
+#line 200 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.CONFIG; }
 #line 636 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 6:
-#line 194 "dhcp4_parser.yy" // lalr1.cc:859
+#line 201 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.DHCP4; }
 #line 642 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 8:
-#line 195 "dhcp4_parser.yy" // lalr1.cc:859
+#line 202 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.INTERFACES_CONFIG; }
 #line 648 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 10:
-#line 196 "dhcp4_parser.yy" // lalr1.cc:859
+#line 203 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.SUBNET4; }
 #line 654 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 12:
-#line 197 "dhcp4_parser.yy" // lalr1.cc:859
+#line 204 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.POOLS; }
 #line 660 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 14:
-#line 198 "dhcp4_parser.yy" // lalr1.cc:859
+#line 205 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.RESERVATIONS; }
 #line 666 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 16:
-#line 199 "dhcp4_parser.yy" // lalr1.cc:859
+#line 206 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.OPTION_DEF; }
 #line 672 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 18:
-#line 200 "dhcp4_parser.yy" // lalr1.cc:859
+#line 207 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.OPTION_DATA; }
 #line 678 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 20:
-#line 201 "dhcp4_parser.yy" // lalr1.cc:859
+#line 208 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
 #line 684 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 22:
-#line 209 "dhcp4_parser.yy" // lalr1.cc:859
+#line 216 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
 #line 690 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 23:
-#line 210 "dhcp4_parser.yy" // lalr1.cc:859
+#line 217 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
 #line 696 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 24:
-#line 211 "dhcp4_parser.yy" // lalr1.cc:859
+#line 218 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
 #line 702 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 25:
-#line 212 "dhcp4_parser.yy" // lalr1.cc:859
+#line 219 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
 #line 708 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 26:
-#line 213 "dhcp4_parser.yy" // lalr1.cc:859
+#line 220 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
 #line 714 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 27:
-#line 214 "dhcp4_parser.yy" // lalr1.cc:859
+#line 221 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 720 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 28:
-#line 215 "dhcp4_parser.yy" // lalr1.cc:859
+#line 222 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 726 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 29:
-#line 218 "dhcp4_parser.yy" // lalr1.cc:859
+#line 225 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Push back the JSON value on the stack
     ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ());
@@ -735,7 +735,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 30:
-#line 223 "dhcp4_parser.yy" // lalr1.cc:859
+#line 230 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -746,7 +746,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 31:
-#line 228 "dhcp4_parser.yy" // lalr1.cc:859
+#line 235 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -756,7 +756,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 34:
-#line 239 "dhcp4_parser.yy" // lalr1.cc:859
+#line 246 "dhcp4_parser.yy" // lalr1.cc:859
     {
                   // map containing a single entry
                   ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
@@ -765,7 +765,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 35:
-#line 243 "dhcp4_parser.yy" // lalr1.cc:859
+#line 250 "dhcp4_parser.yy" // lalr1.cc:859
     {
                   // map consisting of a shorter map followed by
                   // comma and string:value
@@ -775,7 +775,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 36:
-#line 250 "dhcp4_parser.yy" // lalr1.cc:859
+#line 257 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
@@ -784,7 +784,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 37:
-#line 253 "dhcp4_parser.yy" // lalr1.cc:859
+#line 260 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // list parsing complete. Put any sanity checking here
 }
@@ -792,7 +792,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 38:
-#line 258 "dhcp4_parser.yy" // lalr1.cc:859
+#line 265 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // List parsing about to start
 }
@@ -800,7 +800,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 39:
-#line 260 "dhcp4_parser.yy" // lalr1.cc:859
+#line 267 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // list parsing complete. Put any sanity checking here
     //ctx.stack_.pop_back();
@@ -809,7 +809,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 42:
-#line 269 "dhcp4_parser.yy" // lalr1.cc:859
+#line 276 "dhcp4_parser.yy" // lalr1.cc:859
     {
                   // List consisting of a single element.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
@@ -818,7 +818,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 43:
-#line 273 "dhcp4_parser.yy" // lalr1.cc:859
+#line 280 "dhcp4_parser.yy" // lalr1.cc:859
     {
                   // List ending with , and a value.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
@@ -827,7 +827,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 44:
-#line 284 "dhcp4_parser.yy" // lalr1.cc:859
+#line 291 "dhcp4_parser.yy" // lalr1.cc:859
     {
     const std::string& where = ctx.contextName();
     const std::string& keyword = yystack_[1].value.as< std::string > ();
@@ -838,7 +838,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 45:
-#line 294 "dhcp4_parser.yy" // lalr1.cc:859
+#line 301 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -849,7 +849,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 46:
-#line 299 "dhcp4_parser.yy" // lalr1.cc:859
+#line 306 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -859,7 +859,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 54:
-#line 318 "dhcp4_parser.yy" // lalr1.cc:859
+#line 325 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -872,7 +872,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 55:
-#line 325 "dhcp4_parser.yy" // lalr1.cc:859
+#line 332 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -884,7 +884,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 56:
-#line 335 "dhcp4_parser.yy" // lalr1.cc:859
+#line 342 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the Dhcp6 map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -894,15 +894,15 @@ namespace isc { namespace dhcp {
     break;
 
   case 57:
-#line 339 "dhcp4_parser.yy" // lalr1.cc:859
+#line 346 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
 #line 902 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 80:
-#line 371 "dhcp4_parser.yy" // lalr1.cc:859
+  case 83:
+#line 381 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("valid-lifetime", prf);
@@ -910,8 +910,8 @@ namespace isc { namespace dhcp {
 #line 911 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 81:
-#line 376 "dhcp4_parser.yy" // lalr1.cc:859
+  case 84:
+#line 386 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("renew-timer", prf);
@@ -919,8 +919,8 @@ namespace isc { namespace dhcp {
 #line 920 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 82:
-#line 381 "dhcp4_parser.yy" // lalr1.cc:859
+  case 85:
+#line 391 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rebind-timer", prf);
@@ -928,8 +928,8 @@ namespace isc { namespace dhcp {
 #line 929 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 83:
-#line 386 "dhcp4_parser.yy" // lalr1.cc:859
+  case 86:
+#line 396 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr dpp(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("decline-probation-period", dpp);
@@ -937,429 +937,447 @@ namespace isc { namespace dhcp {
 #line 938 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 84:
-#line 391 "dhcp4_parser.yy" // lalr1.cc:859
+  case 87:
+#line 401 "dhcp4_parser.yy" // lalr1.cc:859
+    {
+    ElementPtr echo(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[2].location)));
+    ctx.stack_.back()->set("echo-client-id", echo);
+}
+#line 947 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 88:
+#line 406 "dhcp4_parser.yy" // lalr1.cc:859
+    {
+    ElementPtr match(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[2].location)));
+    ctx.stack_.back()->set("match-client-id", match);
+}
+#line 956 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 89:
+#line 412 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interfaces-config", i);
     ctx.stack_.push_back(i);
     ctx.enter(ctx.INTERFACES_CONFIG);
 }
-#line 949 "dhcp4_parser.cc" // lalr1.cc:859
+#line 967 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 85:
-#line 396 "dhcp4_parser.yy" // lalr1.cc:859
+  case 90:
+#line 417 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 958 "dhcp4_parser.cc" // lalr1.cc:859
+#line 976 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 86:
-#line 401 "dhcp4_parser.yy" // lalr1.cc:859
+  case 91:
+#line 422 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the interfaces-config map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 968 "dhcp4_parser.cc" // lalr1.cc:859
+#line 986 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 87:
-#line 405 "dhcp4_parser.yy" // lalr1.cc:859
+  case 92:
+#line 426 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 976 "dhcp4_parser.cc" // lalr1.cc:859
+#line 994 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 88:
-#line 409 "dhcp4_parser.yy" // lalr1.cc:859
+  case 93:
+#line 430 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interfaces", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 987 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1005 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 89:
-#line 414 "dhcp4_parser.yy" // lalr1.cc:859
+  case 94:
+#line 435 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 996 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1014 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 90:
-#line 419 "dhcp4_parser.yy" // lalr1.cc:859
+  case 95:
+#line 440 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lease-database", i);
     ctx.stack_.push_back(i);
     ctx.enter(ctx.LEASE_DATABASE);
 }
-#line 1007 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1025 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 91:
-#line 424 "dhcp4_parser.yy" // lalr1.cc:859
+  case 96:
+#line 445 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1016 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1034 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 92:
-#line 429 "dhcp4_parser.yy" // lalr1.cc:859
+  case 97:
+#line 450 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hosts-database", i);
     ctx.stack_.push_back(i);
     ctx.enter(ctx.HOSTS_DATABASE);
 }
-#line 1027 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1045 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 93:
-#line 434 "dhcp4_parser.yy" // lalr1.cc:859
+  case 98:
+#line 455 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1036 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1054 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 105:
-#line 454 "dhcp4_parser.yy" // lalr1.cc:859
+  case 110:
+#line 475 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1044 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1062 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 106:
-#line 456 "dhcp4_parser.yy" // lalr1.cc:859
+  case 111:
+#line 477 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("type", prf);
     ctx.leave();
 }
-#line 1054 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1072 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 107:
-#line 462 "dhcp4_parser.yy" // lalr1.cc:859
+  case 112:
+#line 483 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1062 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1080 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 108:
-#line 464 "dhcp4_parser.yy" // lalr1.cc:859
+  case 113:
+#line 485 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("user", user);
     ctx.leave();
 }
-#line 1072 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1090 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 109:
-#line 470 "dhcp4_parser.yy" // lalr1.cc:859
+  case 114:
+#line 491 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1080 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1098 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 110:
-#line 472 "dhcp4_parser.yy" // lalr1.cc:859
+  case 115:
+#line 493 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr pwd(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("password", pwd);
     ctx.leave();
 }
-#line 1090 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1108 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 111:
-#line 478 "dhcp4_parser.yy" // lalr1.cc:859
+  case 116:
+#line 499 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1098 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1116 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 112:
-#line 480 "dhcp4_parser.yy" // lalr1.cc:859
+  case 117:
+#line 501 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr h(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host", h);
     ctx.leave();
 }
-#line 1108 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1126 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 113:
-#line 486 "dhcp4_parser.yy" // lalr1.cc:859
+  case 118:
+#line 507 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1116 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1134 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 114:
-#line 488 "dhcp4_parser.yy" // lalr1.cc:859
+  case 119:
+#line 509 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("name", name);
     ctx.leave();
 }
-#line 1126 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1144 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 115:
-#line 494 "dhcp4_parser.yy" // lalr1.cc:859
+  case 120:
+#line 515 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("persist", n);
 }
-#line 1135 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1153 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 116:
-#line 499 "dhcp4_parser.yy" // lalr1.cc:859
+  case 121:
+#line 520 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lfc-interval", n);
 }
-#line 1144 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1162 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 117:
-#line 504 "dhcp4_parser.yy" // lalr1.cc:859
+  case 122:
+#line 525 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("readonly", n);
 }
-#line 1153 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1171 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 118:
-#line 509 "dhcp4_parser.yy" // lalr1.cc:859
+  case 123:
+#line 530 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
 }
-#line 1162 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1180 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 119:
-#line 514 "dhcp4_parser.yy" // lalr1.cc:859
+  case 124:
+#line 535 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host-reservation-identifiers", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS);
 }
-#line 1173 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1191 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 120:
-#line 519 "dhcp4_parser.yy" // lalr1.cc:859
+  case 125:
+#line 540 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1182 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1200 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 127:
-#line 534 "dhcp4_parser.yy" // lalr1.cc:859
+  case 132:
+#line 555 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(hwaddr);
 }
-#line 1191 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1209 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 128:
-#line 539 "dhcp4_parser.yy" // lalr1.cc:859
+  case 133:
+#line 560 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr circuit(new StringElement("circuit-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(circuit);
 }
-#line 1200 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1218 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 129:
-#line 544 "dhcp4_parser.yy" // lalr1.cc:859
+  case 134:
+#line 565 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr client(new StringElement("client-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(client);
 }
-#line 1209 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1227 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 130:
-#line 549 "dhcp4_parser.yy" // lalr1.cc:859
+  case 135:
+#line 570 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hooks-libraries", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOOKS_LIBRARIES);
 }
-#line 1220 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1238 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 131:
-#line 554 "dhcp4_parser.yy" // lalr1.cc:859
+  case 136:
+#line 575 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1229 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1247 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 136:
-#line 567 "dhcp4_parser.yy" // lalr1.cc:859
+  case 141:
+#line 588 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1239 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1257 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 137:
-#line 571 "dhcp4_parser.yy" // lalr1.cc:859
+  case 142:
+#line 592 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 1247 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1265 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 138:
-#line 575 "dhcp4_parser.yy" // lalr1.cc:859
+  case 143:
+#line 596 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the hooks-libraries list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1257 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1275 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 139:
-#line 579 "dhcp4_parser.yy" // lalr1.cc:859
+  case 144:
+#line 600 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1265 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1283 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 145:
-#line 592 "dhcp4_parser.yy" // lalr1.cc:859
+  case 150:
+#line 613 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1273 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1291 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 146:
-#line 594 "dhcp4_parser.yy" // lalr1.cc:859
+  case 151:
+#line 615 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr lib(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("library", lib);
     ctx.leave();
 }
-#line 1283 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1301 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 147:
-#line 600 "dhcp4_parser.yy" // lalr1.cc:859
+  case 152:
+#line 621 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1291 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1309 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 148:
-#line 602 "dhcp4_parser.yy" // lalr1.cc:859
+  case 153:
+#line 623 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("parameters", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1300 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1318 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 149:
-#line 608 "dhcp4_parser.yy" // lalr1.cc:859
+  case 154:
+#line 629 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("expired-leases-processing", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1311 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1329 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 150:
-#line 613 "dhcp4_parser.yy" // lalr1.cc:859
+  case 155:
+#line 634 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1320 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1338 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 153:
-#line 625 "dhcp4_parser.yy" // lalr1.cc:859
+  case 158:
+#line 646 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), value);
 }
-#line 1329 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1347 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 154:
-#line 633 "dhcp4_parser.yy" // lalr1.cc:859
+  case 159:
+#line 654 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet4", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.SUBNET4);
 }
-#line 1340 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1358 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 155:
-#line 638 "dhcp4_parser.yy" // lalr1.cc:859
+  case 160:
+#line 659 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1349 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1367 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 160:
-#line 658 "dhcp4_parser.yy" // lalr1.cc:859
+  case 165:
+#line 679 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1359 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1377 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 161:
-#line 662 "dhcp4_parser.yy" // lalr1.cc:859
+  case 166:
+#line 683 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Once we reached this place, the subnet parsing is now complete.
     // If we want to, we can implement default values here.
@@ -1378,1094 +1396,1168 @@ namespace isc { namespace dhcp {
     // }
     ctx.stack_.pop_back();
 }
-#line 1382 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1400 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 162:
-#line 681 "dhcp4_parser.yy" // lalr1.cc:859
+  case 167:
+#line 702 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the subnet6 list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1392 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1410 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 163:
-#line 685 "dhcp4_parser.yy" // lalr1.cc:859
+  case 168:
+#line 706 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1400 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1418 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 183:
-#line 714 "dhcp4_parser.yy" // lalr1.cc:859
+  case 191:
+#line 738 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1408 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1426 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 184:
-#line 716 "dhcp4_parser.yy" // lalr1.cc:859
+  case 192:
+#line 740 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr subnet(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet", subnet);
     ctx.leave();
 }
-#line 1418 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1436 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 185:
-#line 722 "dhcp4_parser.yy" // lalr1.cc:859
+  case 193:
+#line 746 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1426 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1444 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 186:
-#line 724 "dhcp4_parser.yy" // lalr1.cc:859
+  case 194:
+#line 748 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("4o6-interface", iface);
     ctx.leave();
 }
-#line 1436 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1454 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 187:
-#line 730 "dhcp4_parser.yy" // lalr1.cc:859
+  case 195:
+#line 754 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1444 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1462 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 196:
+#line 756 "dhcp4_parser.yy" // lalr1.cc:859
+    {
+    ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("4o6-interface-id", iface);
+    ctx.leave();
+}
+#line 1472 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 188:
-#line 732 "dhcp4_parser.yy" // lalr1.cc:859
+  case 197:
+#line 762 "dhcp4_parser.yy" // lalr1.cc:859
+    {
+    ctx.enter(ctx.NO_KEYWORD);
+}
+#line 1480 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 198:
+#line 764 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("4o6-subnet", iface);
     ctx.leave();
 }
-#line 1454 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1490 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 189:
-#line 738 "dhcp4_parser.yy" // lalr1.cc:859
+  case 199:
+#line 770 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1462 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1498 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 190:
-#line 740 "dhcp4_parser.yy" // lalr1.cc:859
+  case 200:
+#line 772 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface", iface);
     ctx.leave();
 }
-#line 1472 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1508 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 191:
-#line 746 "dhcp4_parser.yy" // lalr1.cc:859
+  case 201:
+#line 778 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1480 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1516 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 192:
-#line 748 "dhcp4_parser.yy" // lalr1.cc:859
+  case 202:
+#line 780 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface-id", iface);
     ctx.leave();
 }
-#line 1490 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1526 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 193:
-#line 754 "dhcp4_parser.yy" // lalr1.cc:859
+  case 203:
+#line 786 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.CLIENT_CLASS);
 }
-#line 1498 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1534 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 194:
-#line 756 "dhcp4_parser.yy" // lalr1.cc:859
+  case 204:
+#line 788 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr cls(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-class", cls);
     ctx.leave();
 }
-#line 1508 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1544 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 195:
-#line 762 "dhcp4_parser.yy" // lalr1.cc:859
+  case 205:
+#line 794 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1516 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1552 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 196:
-#line 764 "dhcp4_parser.yy" // lalr1.cc:859
+  case 206:
+#line 796 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr rm(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservation-mode", rm);
     ctx.leave();
 }
-#line 1526 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1562 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 197:
-#line 770 "dhcp4_parser.yy" // lalr1.cc:859
+  case 207:
+#line 802 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr id(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("id", id);
 }
-#line 1535 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1571 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 198:
-#line 775 "dhcp4_parser.yy" // lalr1.cc:859
+  case 208:
+#line 807 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr rc(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rapid-commit", rc);
 }
-#line 1544 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1580 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 199:
-#line 784 "dhcp4_parser.yy" // lalr1.cc:859
+  case 209:
+#line 816 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("option-def", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DEF);
 }
-#line 1555 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1591 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 200:
-#line 789 "dhcp4_parser.yy" // lalr1.cc:859
+  case 210:
+#line 821 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1564 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1600 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 205:
-#line 806 "dhcp4_parser.yy" // lalr1.cc:859
+  case 215:
+#line 838 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1574 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1610 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 206:
-#line 810 "dhcp4_parser.yy" // lalr1.cc:859
+  case 216:
+#line 842 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 1582 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1618 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 207:
-#line 817 "dhcp4_parser.yy" // lalr1.cc:859
+  case 217:
+#line 849 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the option-def list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1592 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1628 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 208:
-#line 821 "dhcp4_parser.yy" // lalr1.cc:859
+  case 218:
+#line 853 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1600 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1636 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 222:
-#line 847 "dhcp4_parser.yy" // lalr1.cc:859
+  case 232:
+#line 879 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr code(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("code", code);
 }
-#line 1609 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1645 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 225:
-#line 856 "dhcp4_parser.yy" // lalr1.cc:859
+  case 235:
+#line 888 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1617 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1653 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 226:
-#line 858 "dhcp4_parser.yy" // lalr1.cc:859
+  case 236:
+#line 890 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr rtypes(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("record-types", rtypes);
     ctx.leave();
 }
-#line 1627 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1663 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 227:
-#line 864 "dhcp4_parser.yy" // lalr1.cc:859
+  case 237:
+#line 896 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1635 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1671 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 228:
-#line 866 "dhcp4_parser.yy" // lalr1.cc:859
+  case 238:
+#line 898 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr space(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("space", space);
     ctx.leave();
 }
-#line 1645 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1681 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 230:
-#line 874 "dhcp4_parser.yy" // lalr1.cc:859
+  case 240:
+#line 906 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1653 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1689 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 231:
-#line 876 "dhcp4_parser.yy" // lalr1.cc:859
+  case 241:
+#line 908 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr encap(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("encapsulate", encap);
     ctx.leave();
 }
-#line 1663 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1699 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 232:
-#line 882 "dhcp4_parser.yy" // lalr1.cc:859
+  case 242:
+#line 914 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr array(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("array", array);
 }
-#line 1672 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1708 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 233:
-#line 891 "dhcp4_parser.yy" // lalr1.cc:859
+  case 243:
+#line 923 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("option-data", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DATA);
 }
-#line 1683 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1719 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 234:
-#line 896 "dhcp4_parser.yy" // lalr1.cc:859
+  case 244:
+#line 928 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1692 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1728 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 239:
-#line 915 "dhcp4_parser.yy" // lalr1.cc:859
+  case 249:
+#line 947 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1702 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1738 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 240:
-#line 919 "dhcp4_parser.yy" // lalr1.cc:859
+  case 250:
+#line 951 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 1710 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1746 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 241:
-#line 926 "dhcp4_parser.yy" // lalr1.cc:859
+  case 251:
+#line 958 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the option-data list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1720 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1756 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 242:
-#line 930 "dhcp4_parser.yy" // lalr1.cc:859
+  case 252:
+#line 962 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1728 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1764 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 254:
-#line 959 "dhcp4_parser.yy" // lalr1.cc:859
+  case 264:
+#line 991 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1736 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1772 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 255:
-#line 961 "dhcp4_parser.yy" // lalr1.cc:859
+  case 265:
+#line 993 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr data(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("data", data);
     ctx.leave();
 }
-#line 1746 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1782 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 258:
-#line 971 "dhcp4_parser.yy" // lalr1.cc:859
+  case 268:
+#line 1003 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr space(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("csv-format", space);
 }
-#line 1755 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1791 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 259:
-#line 979 "dhcp4_parser.yy" // lalr1.cc:859
+  case 269:
+#line 1011 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pools", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.POOLS);
 }
-#line 1766 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1802 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 260:
-#line 984 "dhcp4_parser.yy" // lalr1.cc:859
+  case 270:
+#line 1016 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1775 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1811 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 265:
-#line 999 "dhcp4_parser.yy" // lalr1.cc:859
+  case 275:
+#line 1031 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1785 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1821 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 266:
-#line 1003 "dhcp4_parser.yy" // lalr1.cc:859
+  case 276:
+#line 1035 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 1793 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1829 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 267:
-#line 1007 "dhcp4_parser.yy" // lalr1.cc:859
+  case 277:
+#line 1039 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1803 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1839 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 268:
-#line 1011 "dhcp4_parser.yy" // lalr1.cc:859
+  case 278:
+#line 1043 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1811 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1847 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 274:
-#line 1024 "dhcp4_parser.yy" // lalr1.cc:859
+  case 284:
+#line 1056 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1819 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1855 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 275:
-#line 1026 "dhcp4_parser.yy" // lalr1.cc:859
+  case 285:
+#line 1058 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr pool(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pool", pool);
     ctx.leave();
 }
-#line 1829 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1865 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 276:
-#line 1035 "dhcp4_parser.yy" // lalr1.cc:859
+  case 286:
+#line 1067 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.RESERVATIONS);
 }
-#line 1840 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1876 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 277:
-#line 1040 "dhcp4_parser.yy" // lalr1.cc:859
+  case 287:
+#line 1072 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1849 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1885 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 282:
-#line 1053 "dhcp4_parser.yy" // lalr1.cc:859
+  case 292:
+#line 1085 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1859 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1895 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 283:
-#line 1057 "dhcp4_parser.yy" // lalr1.cc:859
+  case 293:
+#line 1089 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 1867 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1903 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 284:
-#line 1061 "dhcp4_parser.yy" // lalr1.cc:859
+  case 294:
+#line 1093 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the reservations list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1877 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1913 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 285:
-#line 1065 "dhcp4_parser.yy" // lalr1.cc:859
+  case 295:
+#line 1097 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1885 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1921 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 299:
-#line 1089 "dhcp4_parser.yy" // lalr1.cc:859
+  case 312:
+#line 1124 "dhcp4_parser.yy" // lalr1.cc:859
+    {
+    ctx.enter(ctx.NO_KEYWORD);
+}
+#line 1929 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 313:
+#line 1126 "dhcp4_parser.yy" // lalr1.cc:859
+    {
+    ElementPtr next_server(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[3].location)));
+    ctx.stack_.back()->set("next-server", next_server);
+    ctx.leave();
+}
+#line 1939 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 314:
+#line 1132 "dhcp4_parser.yy" // lalr1.cc:859
+    {
+    ctx.enter(ctx.NO_KEYWORD);
+}
+#line 1947 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 315:
+#line 1134 "dhcp4_parser.yy" // lalr1.cc:859
     {
+    ElementPtr srv(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[3].location)));
+    ctx.stack_.back()->set("server-hostname", srv);
+    ctx.leave();
 }
-#line 1892 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1957 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 300:
-#line 1090 "dhcp4_parser.yy" // lalr1.cc:859
+  case 316:
+#line 1140 "dhcp4_parser.yy" // lalr1.cc:859
+    {
+    ctx.enter(ctx.NO_KEYWORD);
+}
+#line 1965 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 317:
+#line 1142 "dhcp4_parser.yy" // lalr1.cc:859
+    {
+    ElementPtr bootfile(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[3].location)));
+    ctx.stack_.back()->set("boot-file-name", bootfile);
+    ctx.leave();
+}
+#line 1975 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 318:
+#line 1148 "dhcp4_parser.yy" // lalr1.cc:859
+    {
+    ctx.enter(ctx.NO_KEYWORD);
+}
+#line 1983 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 319:
+#line 1150 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr addr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[3].location)));
     ctx.stack_.back()->set("ip-address", addr);
+    ctx.leave();
 }
-#line 1901 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1993 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 301:
-#line 1095 "dhcp4_parser.yy" // lalr1.cc:859
+  case 320:
+#line 1156 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1909 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2001 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 302:
-#line 1097 "dhcp4_parser.yy" // lalr1.cc:859
+  case 321:
+#line 1158 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("duid", d);
     ctx.leave();
 }
-#line 1919 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2011 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 303:
-#line 1103 "dhcp4_parser.yy" // lalr1.cc:859
+  case 322:
+#line 1164 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1927 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2019 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 304:
-#line 1105 "dhcp4_parser.yy" // lalr1.cc:859
+  case 323:
+#line 1166 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hw-address", hw);
     ctx.leave();
 }
-#line 1937 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2029 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 305:
-#line 1111 "dhcp4_parser.yy" // lalr1.cc:859
+  case 324:
+#line 1172 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1945 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2037 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 306:
-#line 1113 "dhcp4_parser.yy" // lalr1.cc:859
+  case 325:
+#line 1174 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-id", hw);
     ctx.leave();
 }
-#line 1955 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2047 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 307:
-#line 1119 "dhcp4_parser.yy" // lalr1.cc:859
+  case 326:
+#line 1180 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1963 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2055 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 308:
-#line 1121 "dhcp4_parser.yy" // lalr1.cc:859
+  case 327:
+#line 1182 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("circuit-id", hw);
     ctx.leave();
 }
-#line 1973 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2065 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 309:
-#line 1128 "dhcp4_parser.yy" // lalr1.cc:859
+  case 328:
+#line 1189 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1981 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2073 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 310:
-#line 1130 "dhcp4_parser.yy" // lalr1.cc:859
+  case 329:
+#line 1191 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname", host);
     ctx.leave();
 }
-#line 1991 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2083 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 311:
-#line 1136 "dhcp4_parser.yy" // lalr1.cc:859
+  case 330:
+#line 1197 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", c);
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2002 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2094 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 312:
-#line 1141 "dhcp4_parser.yy" // lalr1.cc:859
+  case 331:
+#line 1202 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2011 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2103 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 313:
-#line 1149 "dhcp4_parser.yy" // lalr1.cc:859
+  case 332:
+#line 1210 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("relay", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.RELAY);
 }
-#line 2022 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2114 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 314:
-#line 1154 "dhcp4_parser.yy" // lalr1.cc:859
+  case 333:
+#line 1215 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2031 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2123 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 315:
-#line 1159 "dhcp4_parser.yy" // lalr1.cc:859
+  case 334:
+#line 1220 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2039 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2131 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 316:
-#line 1161 "dhcp4_parser.yy" // lalr1.cc:859
+  case 335:
+#line 1222 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr ip(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-address", ip);
     ctx.leave();
 }
-#line 2049 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2141 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 317:
-#line 1170 "dhcp4_parser.yy" // lalr1.cc:859
+  case 336:
+#line 1231 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CLIENT_CLASSES);
 }
-#line 2060 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2152 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 318:
-#line 1175 "dhcp4_parser.yy" // lalr1.cc:859
+  case 337:
+#line 1236 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2069 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2161 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 321:
-#line 1184 "dhcp4_parser.yy" // lalr1.cc:859
+  case 340:
+#line 1245 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2079 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2171 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 322:
-#line 1188 "dhcp4_parser.yy" // lalr1.cc:859
+  case 341:
+#line 1249 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 2087 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2179 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 332:
-#line 1208 "dhcp4_parser.yy" // lalr1.cc:859
+  case 354:
+#line 1272 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2095 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2187 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 333:
-#line 1210 "dhcp4_parser.yy" // lalr1.cc:859
+  case 355:
+#line 1274 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr test(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("test", test);
     ctx.leave();
 }
-#line 2105 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2197 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 334:
-#line 1219 "dhcp4_parser.yy" // lalr1.cc:859
+  case 356:
+#line 1283 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-id", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SERVER_ID);
 }
-#line 2116 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2208 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 335:
-#line 1224 "dhcp4_parser.yy" // lalr1.cc:859
+  case 357:
+#line 1288 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2125 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2217 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 345:
-#line 1242 "dhcp4_parser.yy" // lalr1.cc:859
+  case 367:
+#line 1306 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr htype(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("htype", htype);
 }
-#line 2134 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2226 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 346:
-#line 1247 "dhcp4_parser.yy" // lalr1.cc:859
+  case 368:
+#line 1311 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2142 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2234 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 347:
-#line 1249 "dhcp4_parser.yy" // lalr1.cc:859
+  case 369:
+#line 1313 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr id(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("identifier", id);
     ctx.leave();
 }
-#line 2152 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2244 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 348:
-#line 1255 "dhcp4_parser.yy" // lalr1.cc:859
+  case 370:
+#line 1319 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("time", time);
 }
-#line 2161 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2253 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 349:
-#line 1260 "dhcp4_parser.yy" // lalr1.cc:859
+  case 371:
+#line 1324 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enterprise-id", time);
 }
-#line 2170 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2262 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 350:
-#line 1267 "dhcp4_parser.yy" // lalr1.cc:859
+  case 372:
+#line 1331 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp4o6-port", time);
 }
-#line 2179 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2271 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 351:
-#line 1273 "dhcp4_parser.yy" // lalr1.cc:859
+  case 373:
+#line 1337 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2187 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2279 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 352:
-#line 1275 "dhcp4_parser.yy" // lalr1.cc:859
+  case 374:
+#line 1339 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("version", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2196 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2288 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 353:
-#line 1281 "dhcp4_parser.yy" // lalr1.cc:859
+  case 375:
+#line 1345 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
-#line 2202 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2294 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 354:
-#line 1282 "dhcp4_parser.yy" // lalr1.cc:859
+  case 376:
+#line 1346 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
-#line 2208 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2300 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 355:
-#line 1283 "dhcp4_parser.yy" // lalr1.cc:859
+  case 377:
+#line 1347 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
-#line 2214 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2306 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 356:
-#line 1288 "dhcp4_parser.yy" // lalr1.cc:859
+  case 378:
+#line 1352 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("control-socket", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.CONTROL_SOCKET);
 }
-#line 2225 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2317 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 357:
-#line 1293 "dhcp4_parser.yy" // lalr1.cc:859
+  case 379:
+#line 1357 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2234 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2326 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 362:
-#line 1306 "dhcp4_parser.yy" // lalr1.cc:859
+  case 384:
+#line 1370 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2242 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2334 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 363:
-#line 1308 "dhcp4_parser.yy" // lalr1.cc:859
+  case 385:
+#line 1372 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr stype(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-type", stype);
     ctx.leave();
 }
-#line 2252 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2344 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 364:
-#line 1314 "dhcp4_parser.yy" // lalr1.cc:859
+  case 386:
+#line 1378 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2260 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2352 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 365:
-#line 1316 "dhcp4_parser.yy" // lalr1.cc:859
+  case 387:
+#line 1380 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-name", name);
     ctx.leave();
 }
-#line 2270 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2362 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 366:
-#line 1324 "dhcp4_parser.yy" // lalr1.cc:859
+  case 388:
+#line 1388 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp-ddns", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2281 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2373 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 367:
-#line 1329 "dhcp4_parser.yy" // lalr1.cc:859
+  case 389:
+#line 1393 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2290 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2382 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 368:
-#line 1336 "dhcp4_parser.yy" // lalr1.cc:859
+  case 390:
+#line 1400 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2298 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2390 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 369:
-#line 1338 "dhcp4_parser.yy" // lalr1.cc:859
+  case 391:
+#line 1402 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Dhcp6", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2307 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2399 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 370:
-#line 1343 "dhcp4_parser.yy" // lalr1.cc:859
+  case 392:
+#line 1407 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2315 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2407 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 371:
-#line 1345 "dhcp4_parser.yy" // lalr1.cc:859
+  case 393:
+#line 1409 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2324 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2416 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 372:
-#line 1355 "dhcp4_parser.yy" // lalr1.cc:859
+  case 394:
+#line 1419 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("Logging", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.LOGGING);
 }
-#line 2335 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2427 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 373:
-#line 1360 "dhcp4_parser.yy" // lalr1.cc:859
+  case 395:
+#line 1424 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2344 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2436 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 377:
-#line 1377 "dhcp4_parser.yy" // lalr1.cc:859
+  case 399:
+#line 1441 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("loggers", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.LOGGERS);
 }
-#line 2355 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2447 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 378:
-#line 1382 "dhcp4_parser.yy" // lalr1.cc:859
+  case 400:
+#line 1446 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2364 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2456 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 381:
-#line 1394 "dhcp4_parser.yy" // lalr1.cc:859
+  case 403:
+#line 1458 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 2374 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2466 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 382:
-#line 1398 "dhcp4_parser.yy" // lalr1.cc:859
+  case 404:
+#line 1462 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 2382 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2474 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 390:
-#line 1413 "dhcp4_parser.yy" // lalr1.cc:859
+  case 412:
+#line 1477 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("debuglevel", dl);
 }
-#line 2391 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2483 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 391:
-#line 1417 "dhcp4_parser.yy" // lalr1.cc:859
+  case 413:
+#line 1481 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2399 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2491 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 392:
-#line 1419 "dhcp4_parser.yy" // lalr1.cc:859
+  case 414:
+#line 1483 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("severity", sev);
     ctx.leave();
 }
-#line 2409 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2501 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 393:
-#line 1425 "dhcp4_parser.yy" // lalr1.cc:859
+  case 415:
+#line 1489 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output_options", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OUTPUT_OPTIONS);
 }
-#line 2420 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2512 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 394:
-#line 1430 "dhcp4_parser.yy" // lalr1.cc:859
+  case 416:
+#line 1494 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2429 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2521 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 397:
-#line 1439 "dhcp4_parser.yy" // lalr1.cc:859
+  case 419:
+#line 1503 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2439 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2531 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 398:
-#line 1443 "dhcp4_parser.yy" // lalr1.cc:859
+  case 420:
+#line 1507 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 2447 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2539 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 401:
-#line 1451 "dhcp4_parser.yy" // lalr1.cc:859
+  case 423:
+#line 1515 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2455 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2547 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 402:
-#line 1453 "dhcp4_parser.yy" // lalr1.cc:859
+  case 424:
+#line 1517 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output", sev);
     ctx.leave();
 }
-#line 2465 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2557 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
 
-#line 2469 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2561 "dhcp4_parser.cc" // lalr1.cc:859
             default:
               break;
             }
@@ -2720,80 +2812,84 @@ namespace isc { namespace dhcp {
   }
 
 
-  const short int Dhcp4Parser::yypact_ninf_ = -376;
+  const short int Dhcp4Parser::yypact_ninf_ = -410;
 
   const signed char Dhcp4Parser::yytable_ninf_ = -1;
 
   const short int
   Dhcp4Parser::yypact_[] =
   {
-     169,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,
-    -376,    29,    16,    26,    46,    57,    77,    84,   107,   113,
-     120,   121,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,
-    -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,
-    -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,
-    -376,  -376,    16,   -65,    20,    56,    43,    15,    -4,    91,
-      59,   132,   -29,  -376,    92,   127,   134,   123,   147,  -376,
-    -376,  -376,  -376,   173,  -376,    32,  -376,  -376,  -376,  -376,
-    -376,  -376,  -376,  -376,   174,   189,   191,   199,  -376,  -376,
-    -376,  -376,  -376,  -376,  -376,  -376,   207,  -376,  -376,  -376,
-    -376,   114,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,
-    -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,
-    -376,  -376,  -376,   161,  -376,  -376,  -376,  -376,  -376,  -376,
-    -376,   211,   213,  -376,  -376,  -376,  -376,  -376,  -376,  -376,
-    -376,   149,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,
-    -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,   150,
-    -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,
-    -376,   164,   216,  -376,  -376,  -376,  -376,  -376,  -376,  -376,
-    -376,  -376,  -376,   218,  -376,  -376,  -376,   219,  -376,  -376,
-    -376,   212,   223,  -376,  -376,  -376,  -376,  -376,  -376,  -376,
-    -376,  -376,  -376,  -376,   226,  -376,  -376,  -376,  -376,   227,
-     224,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,
-     151,  -376,  -376,  -376,  -376,    16,    16,  -376,   144,   233,
-     237,   238,   239,  -376,    20,  -376,   241,   243,   244,   156,
-     170,   171,   172,   257,   258,   262,   263,   264,   265,   266,
-     267,   179,   269,   270,   271,    56,  -376,   272,  -376,   106,
-     273,   274,   275,   276,   277,   278,   190,   192,   280,   281,
-     282,   284,    15,  -376,   285,    -4,  -376,   286,   287,   288,
-     289,   290,   291,   292,  -376,    91,   293,   294,   206,   296,
-     297,   298,   208,  -376,    59,   300,   210,  -376,   132,   302,
-     303,    45,  -376,  -376,  -376,   304,   305,   306,    16,    16,
-    -376,   307,   308,   311,  -376,  -376,  -376,  -376,   314,   315,
-     316,   317,   318,   319,   320,   321,  -376,    48,   322,   325,
-    -376,   328,  -376,  -376,  -376,  -376,   301,   331,  -376,  -376,
-    -376,   245,   246,   330,   248,   249,   250,  -376,  -376,   251,
-     252,   341,   329,  -376,   255,  -376,   328,   256,   259,   260,
-     261,   268,   279,  -376,   283,   295,  -376,   299,   309,   310,
-    -376,  -376,   312,  -376,  -376,   313,    16,  -376,    16,    56,
-     235,  -376,  -376,    43,    31,    31,   342,   347,   348,   155,
-      27,   349,   323,    68,  -376,  -376,  -376,  -376,   142,   -65,
-    -376,  -376,   354,  -376,   106,  -376,  -376,   352,  -376,  -376,
-    -376,  -376,  -376,   355,   253,  -376,  -376,  -376,  -376,  -376,
-    -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,
-    -376,  -376,   153,  -376,   165,  -376,  -376,   353,  -376,  -376,
-    -376,   359,   360,   361,  -376,   167,  -376,  -376,  -376,  -376,
-    -376,  -376,  -376,  -376,  -376,   168,  -376,   362,   363,  -376,
-    -376,   364,   366,  -376,  -376,   367,   369,  -376,  -376,  -376,
-    -376,  -376,  -376,    38,  -376,  -376,  -376,  -376,  -376,    65,
-    -376,   368,   373,  -376,   374,   176,  -376,  -376,   375,   376,
-     377,  -376,  -376,  -376,   178,  -376,  -376,  -376,  -376,  -376,
-    -376,  -376,   182,  -376,  -376,  -376,   184,    16,   324,  -376,
-    -376,   371,   379,  -376,  -376,   382,   380,  -376,  -376,   381,
-    -376,   386,   235,  -376,  -376,   388,   389,   390,   326,   327,
-     332,    31,  -376,  -376,    15,  -376,   342,    59,  -376,   347,
-     132,  -376,   348,   155,  -376,    27,  -376,   -29,  -376,   349,
-     333,   323,  -376,   391,   335,   336,   337,    68,  -376,   392,
-     393,   142,  -376,  -376,   394,  -376,    -4,  -376,   352,    91,
-    -376,   355,   395,  -376,   398,  -376,   339,   340,   343,  -376,
-    -376,  -376,  -376,   186,  -376,   399,  -376,   400,  -376,  -376,
-    -376,   188,  -376,  -376,  -376,   344,  -376,  -376,  -376,  -376,
-     345,   346,  -376,  -376,   194,  -376,   401,  -376,   350,   378,
-    -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,
-    -376,  -376,  -376,  -376,    96,  -376,    -3,   378,  -376,  -376,
-     402,  -376,  -376,  -376,   196,  -376,  -376,  -376,  -376,  -376,
-     406,   351,   407,    -3,  -376,   408,  -376,   356,  -376,   405,
-    -376,  -376,   110,  -376,   357,   405,  -376,  -376,   198,  -376,
-    -376,   410,   357,  -376,   358,  -376,  -376
+     188,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,
+    -410,    29,    23,    30,    44,    55,    57,    77,    86,    92,
+     113,   135,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,
+    -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,
+    -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,
+    -410,  -410,    23,   -32,    14,   134,   144,    20,     0,    27,
+      91,    76,    -6,  -410,    33,   155,   156,   159,   174,  -410,
+    -410,  -410,  -410,   175,  -410,    37,  -410,  -410,  -410,  -410,
+    -410,  -410,   187,   190,  -410,  -410,  -410,   200,   212,   217,
+     220,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,   221,
+    -410,  -410,  -410,  -410,    47,  -410,  -410,  -410,  -410,  -410,
+    -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,
+    -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,   185,
+    -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,   227,   229,
+    -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,    72,
+    -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,
+    -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,    87,
+    -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,
+    -410,  -410,  -410,   207,   233,  -410,  -410,  -410,  -410,  -410,
+    -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,   234,  -410,
+    -410,  -410,   235,  -410,  -410,  -410,   237,   238,  -410,  -410,
+    -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,   239,
+    -410,  -410,  -410,  -410,   247,   243,  -410,  -410,  -410,  -410,
+    -410,  -410,  -410,  -410,  -410,   124,  -410,  -410,  -410,  -410,
+      23,    23,  -410,   158,   253,   254,   258,   260,  -410,    14,
+    -410,   262,   141,   167,   265,   266,   282,   191,   192,   194,
+     195,   283,   284,   285,   288,   291,   292,   293,   294,   205,
+     295,   297,   298,   134,  -410,   299,  -410,    42,   301,   302,
+     303,   304,   305,   306,   307,   213,   215,   309,   310,   311,
+     313,    20,  -410,   314,     0,  -410,   315,   316,   317,   318,
+     319,   320,   321,   322,   323,  -410,    27,   324,   325,   231,
+     327,   328,   329,   236,  -410,    91,   330,   240,  -410,    76,
+     331,   332,     7,  -410,  -410,  -410,   336,   335,   337,    23,
+      23,  -410,   338,  -410,  -410,   245,   339,   340,  -410,  -410,
+    -410,  -410,   343,   344,   345,   346,   347,   348,   351,   352,
+    -410,   129,   353,   356,  -410,   349,  -410,  -410,  -410,  -410,
+    -410,  -410,  -410,   357,   361,  -410,  -410,  -410,   257,   268,
+     269,   363,   271,   273,   274,  -410,  -410,   275,   276,   370,
+     371,  -410,   279,  -410,   281,   286,   349,   287,   289,   296,
+     300,   308,   312,  -410,   326,   333,  -410,   334,   341,   342,
+    -410,  -410,   350,  -410,  -410,   354,    23,  -410,    23,   134,
+     355,  -410,  -410,   144,  -410,    82,    82,   373,   375,   376,
+      78,    26,   379,   358,   202,  -410,  -410,  -410,  -410,    32,
+     -32,  -410,  -410,   385,  -410,    42,  -410,  -410,  -410,   383,
+    -410,  -410,  -410,  -410,  -410,   384,   359,  -410,  -410,  -410,
+    -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,
+    -410,  -410,  -410,  -410,  -410,  -410,   143,  -410,   147,  -410,
+    -410,   387,  -410,  -410,  -410,   389,   392,   393,  -410,   151,
+    -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,   163,
+    -410,   394,   396,  -410,  -410,   395,   399,  -410,  -410,   397,
+     401,  -410,  -410,  -410,  -410,  -410,  -410,    35,  -410,  -410,
+    -410,  -410,  -410,   123,  -410,   402,   404,  -410,   405,   165,
+    -410,  -410,   407,   408,   409,  -410,  -410,  -410,   178,  -410,
+    -410,  -410,  -410,  -410,  -410,  -410,   182,  -410,  -410,  -410,
+     189,    23,   360,  -410,  -410,   410,   411,  -410,  -410,   412,
+     416,  -410,  -410,   413,  -410,   418,   355,  -410,  -410,   421,
+     422,   423,   362,   365,   364,    82,  -410,  -410,    20,  -410,
+     373,    91,  -410,   375,    76,  -410,   376,    78,  -410,    26,
+    -410,    -6,  -410,   379,   367,   358,  -410,   424,   368,   369,
+     372,   202,  -410,   425,   426,    32,  -410,  -410,   414,  -410,
+       0,  -410,   383,    27,  -410,   384,   429,  -410,   400,  -410,
+     374,   377,   378,  -410,  -410,  -410,  -410,   193,  -410,   427,
+    -410,   430,  -410,  -410,  -410,   197,  -410,  -410,  -410,   380,
+    -410,  -410,  -410,  -410,   381,   382,  -410,  -410,   203,  -410,
+     433,  -410,   386,   435,  -410,  -410,  -410,  -410,  -410,  -410,
+    -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,   172,  -410,
+      59,   435,  -410,  -410,   439,  -410,  -410,  -410,   204,  -410,
+    -410,  -410,  -410,  -410,   440,   388,   441,    59,  -410,   432,
+    -410,   390,  -410,   442,  -410,  -410,   214,  -410,   391,   442,
+    -410,  -410,   211,  -410,  -410,   443,   391,  -410,   398,  -410,
+    -410
   };
 
   const unsigned short int
@@ -2802,101 +2898,106 @@ namespace isc { namespace dhcp {
        0,     2,     4,     6,     8,    10,    12,    14,    16,    18,
       20,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     1,    36,    30,    26,    25,    22,    23,    24,
-      29,     3,    27,    28,    45,     5,    56,     7,    86,     9,
-     162,    11,   267,    13,   284,    15,   207,    17,   241,    19,
-     138,    21,    40,    32,     0,     0,     0,     0,     0,   286,
-     209,   243,     0,    42,     0,    41,     0,     0,    33,    54,
-     372,   368,   370,     0,    53,     0,    47,    49,    51,    52,
-      50,    84,    90,    92,     0,     0,     0,     0,   154,   199,
-     233,   119,   317,   130,   149,   334,     0,   351,   356,   366,
-      79,     0,    58,    60,    61,    62,    63,    65,    66,    67,
-      68,    72,    73,    64,    70,    71,    69,    74,    75,    76,
-      77,    78,    88,     0,   321,   185,   187,   259,   183,   189,
-     191,     0,     0,   195,   193,   276,   313,   182,   166,   167,
-     168,     0,   164,   171,   180,   181,   172,   173,   176,   178,
-     174,   175,   169,   170,   177,   179,   274,   273,   272,     0,
-     269,   271,   311,   301,   303,   307,   305,   309,   299,   298,
-     297,     0,   287,   288,   294,   290,   295,   292,   293,   296,
-     291,   105,   113,     0,   227,   225,   230,     0,   220,   224,
-     221,     0,   210,   211,   213,   223,   214,   215,   216,   229,
-     217,   218,   219,   254,     0,   252,   253,   256,   257,     0,
-     244,   245,   247,   248,   249,   250,   251,   145,   147,   142,
-       0,   140,   143,   144,    37,     0,     0,    31,     0,     0,
-       0,     0,     0,    44,     0,    46,     0,     0,     0,     0,
+      29,     3,    27,    28,    45,     5,    56,     7,    91,     9,
+     167,    11,   277,    13,   294,    15,   217,    17,   251,    19,
+     143,    21,    40,    32,     0,     0,     0,     0,     0,   296,
+     219,   253,     0,    42,     0,    41,     0,     0,    33,    54,
+     394,   390,   392,     0,    53,     0,    47,    49,    51,    52,
+      50,    89,     0,     0,   312,    95,    97,     0,     0,     0,
+       0,   159,   209,   243,   124,   336,   135,   154,   356,     0,
+     373,   378,   388,    82,     0,    58,    60,    61,    62,    63,
+      79,    80,    65,    66,    67,    68,    72,    73,    64,    70,
+      71,    81,    69,    74,    75,    76,    77,    78,    93,     0,
+     340,   193,   195,   197,   269,   191,   199,   201,     0,     0,
+     205,   203,   286,   332,   190,   171,   172,   173,   185,     0,
+     169,   176,   187,   188,   189,   177,   178,   181,   183,   179,
+     180,   174,   175,   182,   186,   184,   284,   283,   282,     0,
+     279,   281,   314,   316,   330,   320,   322,   326,   324,   328,
+     318,   311,   307,     0,   297,   298,   308,   309,   310,   304,
+     300,   305,   302,   303,   306,   301,   110,   118,     0,   237,
+     235,   240,     0,   230,   234,   231,     0,   220,   221,   223,
+     233,   224,   225,   226,   239,   227,   228,   229,   264,     0,
+     262,   263,   266,   267,     0,   254,   255,   257,   258,   259,
+     260,   261,   150,   152,   147,     0,   145,   148,   149,    37,
+       0,     0,    31,     0,     0,     0,     0,     0,    44,     0,
+      46,     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,    57,     0,    87,   323,
+       0,     0,     0,     0,    57,     0,    92,   342,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   163,     0,     0,   268,     0,     0,     0,
-       0,     0,     0,     0,   285,     0,     0,     0,     0,     0,
-       0,     0,     0,   208,     0,     0,     0,   242,     0,     0,
-       0,     0,   139,    43,    34,     0,     0,     0,     0,     0,
-      48,     0,     0,     0,    80,    81,    82,    83,     0,     0,
-       0,     0,     0,     0,     0,     0,   350,     0,     0,     0,
-      59,     0,   332,   330,   331,   329,     0,   324,   325,   327,
-     328,     0,     0,     0,     0,     0,     0,   197,   198,     0,
-       0,     0,     0,   165,     0,   270,     0,     0,     0,     0,
-       0,     0,     0,   289,     0,     0,   222,     0,     0,     0,
-     232,   212,     0,   258,   246,     0,     0,   141,     0,     0,
-       0,   369,   371,     0,     0,     0,   156,   201,   235,     0,
-       0,   132,     0,     0,   355,   353,   354,   352,     0,     0,
-      38,    89,     0,   322,     0,   186,   188,   261,   184,   190,
-     192,   196,   194,   278,     0,   275,   312,   302,   304,   308,
-     306,   310,   300,   106,   114,   228,   226,   231,   255,   146,
-     148,    35,     0,   377,     0,   374,   376,     0,   107,   109,
-     111,     0,     0,     0,   104,     0,    94,    96,    97,    98,
-      99,   100,   101,   102,   103,     0,   160,     0,   157,   158,
-     205,     0,   202,   203,   239,     0,   236,   237,   118,   127,
-     128,   129,   123,     0,   121,   124,   125,   126,   319,     0,
-     136,     0,   133,   134,     0,     0,   151,   346,     0,     0,
-       0,   344,   338,   343,     0,   336,   341,   339,   340,   342,
-     362,   364,     0,   358,   360,   361,     0,    40,     0,   326,
-     265,     0,   262,   263,   282,     0,   279,   280,   315,     0,
-      55,     0,     0,   373,    85,     0,     0,     0,     0,     0,
-       0,     0,    91,    93,     0,   155,     0,   209,   200,     0,
-     243,   234,     0,     0,   120,     0,   318,     0,   131,     0,
-       0,     0,   150,     0,     0,     0,     0,     0,   335,     0,
-       0,     0,   357,   367,     0,   333,     0,   260,     0,   286,
-     277,     0,     0,   314,     0,   375,     0,     0,     0,   115,
-     116,   117,    95,     0,   159,     0,   204,     0,   238,   122,
-     320,     0,   135,   153,   152,     0,   345,   348,   349,   337,
-       0,     0,   359,    39,     0,   264,     0,   281,     0,     0,
-     108,   110,   112,   161,   206,   240,   137,   347,   363,   365,
-     266,   283,   316,   381,     0,   379,     0,     0,   378,   393,
-       0,   391,   389,   385,     0,   383,   387,   388,   386,   380,
-       0,     0,     0,     0,   382,     0,   390,     0,   384,     0,
-     392,   397,     0,   395,     0,     0,   394,   401,     0,   399,
-     396,     0,     0,   398,     0,   400,   402
+       0,     0,   168,     0,     0,   278,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   295,     0,     0,     0,     0,
+       0,     0,     0,     0,   218,     0,     0,     0,   252,     0,
+       0,     0,     0,   144,    43,    34,     0,     0,     0,     0,
+       0,    48,     0,    87,    88,     0,     0,     0,    83,    84,
+      85,    86,     0,     0,     0,     0,     0,     0,     0,     0,
+     372,     0,     0,     0,    59,     0,   354,   352,   353,   348,
+     349,   350,   351,     0,   343,   344,   346,   347,     0,     0,
+       0,     0,     0,     0,     0,   207,   208,     0,     0,     0,
+       0,   170,     0,   280,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   299,     0,     0,   232,     0,     0,     0,
+     242,   222,     0,   268,   256,     0,     0,   146,     0,     0,
+       0,   391,   393,     0,   313,     0,     0,   161,   211,   245,
+       0,     0,   137,     0,     0,   377,   375,   376,   374,     0,
+       0,    38,    94,     0,   341,     0,   194,   196,   198,   271,
+     192,   200,   202,   206,   204,   288,     0,   285,   315,   317,
+     331,   321,   323,   327,   325,   329,   319,   111,   119,   238,
+     236,   241,   265,   151,   153,    35,     0,   399,     0,   396,
+     398,     0,   112,   114,   116,     0,     0,     0,   109,     0,
+      99,   101,   102,   103,   104,   105,   106,   107,   108,     0,
+     165,     0,   162,   163,   215,     0,   212,   213,   249,     0,
+     246,   247,   123,   132,   133,   134,   128,     0,   126,   129,
+     130,   131,   338,     0,   141,     0,   138,   139,     0,     0,
+     156,   368,     0,     0,     0,   366,   360,   365,     0,   358,
+     363,   361,   362,   364,   384,   386,     0,   380,   382,   383,
+       0,    40,     0,   345,   275,     0,   272,   273,   292,     0,
+     289,   290,   334,     0,    55,     0,     0,   395,    90,     0,
+       0,     0,     0,     0,     0,     0,    96,    98,     0,   160,
+       0,   219,   210,     0,   253,   244,     0,     0,   125,     0,
+     337,     0,   136,     0,     0,     0,   155,     0,     0,     0,
+       0,     0,   357,     0,     0,     0,   379,   389,     0,   355,
+       0,   270,     0,   296,   287,     0,     0,   333,     0,   397,
+       0,     0,     0,   120,   121,   122,   100,     0,   164,     0,
+     214,     0,   248,   127,   339,     0,   140,   158,   157,     0,
+     367,   370,   371,   359,     0,     0,   381,    39,     0,   274,
+       0,   291,     0,     0,   113,   115,   117,   166,   216,   250,
+     142,   369,   385,   387,   276,   293,   335,   403,     0,   401,
+       0,     0,   400,   415,     0,   413,   411,   407,     0,   405,
+     409,   410,   408,   402,     0,     0,     0,     0,   404,     0,
+     412,     0,   406,     0,   414,   419,     0,   417,     0,     0,
+     416,   423,     0,   421,   418,     0,     0,   420,     0,   422,
+     424
   };
 
   const short int
   Dhcp4Parser::yypgoto_[] =
   {
-    -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,
-    -376,  -376,     8,  -376,  -376,  -376,  -376,   -32,  -376,  -376,
-      42,  -376,   -90,  -376,   -54,  -376,  -376,  -376,   185,  -376,
-    -376,  -376,  -376,    39,   197,   -56,   -43,   -40,  -376,  -376,
-    -376,  -376,  -376,    40,  -376,  -376,  -376,  -376,  -376,    37,
-    -107,  -369,  -376,  -376,  -376,  -376,  -376,  -376,  -376,   -59,
-    -376,  -375,  -376,  -376,  -376,  -376,  -376,  -376,  -118,  -376,
-    -376,  -376,  -376,  -376,  -376,  -376,  -116,  -376,  -376,  -376,
-    -108,   139,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -110,
-    -376,  -376,  -376,  -376,   -93,  -376,  -376,  -376,   -89,   175,
-    -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,
-    -371,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,
-     -88,  -376,  -376,  -376,   -91,  -376,   159,  -376,   -52,  -376,
-    -376,  -376,  -376,   -48,  -376,  -376,  -376,  -376,  -376,   -47,
-    -376,  -376,  -376,   -87,  -376,  -376,  -376,   -86,  -376,   158,
-    -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,
-    -119,  -376,  -376,  -376,  -109,   183,  -376,  -376,  -376,  -376,
-    -376,  -376,  -112,  -376,  -376,  -376,  -106,  -376,   177,  -376,
-    -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,
-    -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,
-    -376,  -376,  -376,    60,  -376,  -376,  -376,  -376,  -376,  -376,
-     -97,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,  -376,
-    -376,  -376,  -376,  -100,  -376,  -376,  -376,  -376,  -376,  -376,
-    -376,  -376,  -376,  -376,  -376,  -376,  -376,   -57,  -376,  -376,
-    -376,  -161,  -376,  -376,  -176,  -376,  -376,  -376,  -376,  -376,
-    -376,  -187,  -376,  -376,  -193,  -376
+    -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,
+    -410,  -410,     9,  -410,  -410,  -410,  -410,     4,  -410,  -410,
+      60,  -410,   -91,  -410,   -54,  -410,  -410,  -410,   206,  -410,
+    -410,  -410,  -410,    45,   180,   -56,   -40,   -38,  -410,  -410,
+     -37,  -410,  -410,  -410,  -410,    38,  -410,  -410,  -410,  -410,
+    -410,    41,  -106,  -393,  -410,  -410,  -410,  -410,  -410,  -410,
+    -410,   -59,  -410,  -409,  -410,  -410,  -410,  -410,  -410,  -410,
+    -117,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -122,  -410,
+    -410,  -410,  -119,   148,  -410,  -410,  -410,  -410,  -410,  -410,
+    -410,  -116,  -410,  -410,  -410,  -410,   -97,  -410,  -410,  -410,
+     -87,   186,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,
+    -410,  -410,  -410,  -410,  -403,  -410,  -410,  -410,  -410,  -410,
+    -410,  -410,  -410,  -410,   -90,  -410,  -410,  -410,   -89,  -410,
+     170,  -410,   -52,  -410,  -410,  -410,  -410,   -48,  -410,  -410,
+    -410,  -410,  -410,   -47,  -410,  -410,  -410,   -86,  -410,  -410,
+    -410,   -88,  -410,   173,  -410,  -410,  -410,  -410,  -410,  -410,
+    -410,  -410,  -410,  -410,  -113,  -410,  -410,  -410,  -109,   199,
+    -410,  -410,  -410,  -410,  -410,  -410,  -111,  -410,  -410,  -410,
+    -108,  -410,   196,   -43,  -410,  -252,  -410,  -251,  -410,  -410,
+    -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,
+    -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,
+    -410,  -410,  -410,    62,  -410,  -410,  -410,  -410,  -410,  -410,
+     -93,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,  -410,
+    -410,  -410,  -410,   -96,  -410,  -410,  -410,  -410,  -410,  -410,
+    -410,  -410,  -410,  -410,  -410,  -410,  -410,   -55,  -410,  -410,
+    -410,  -161,  -410,  -410,  -174,  -410,  -410,  -410,  -410,  -410,
+    -410,  -185,  -410,  -410,  -191,  -410
   };
 
   const short int
@@ -2904,276 +3005,291 @@ namespace isc { namespace dhcp {
   {
       -1,    11,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    63,    31,    32,    53,    67,    68,    33,    52,
-     401,   507,    64,    65,   100,    35,    54,    75,    76,    77,
-     229,    37,    55,   101,   102,   103,   104,   105,   106,   107,
-     236,    39,    56,   123,   257,   108,   237,   109,   238,   445,
-     446,   189,   286,   448,   525,   449,   526,   450,   527,   190,
-     287,   452,   453,   454,   472,   110,   246,   473,   474,   475,
-     476,   477,   111,   248,   481,   482,   483,   547,    51,    62,
-     220,   221,   222,   299,   223,   300,   112,   249,   485,   486,
-     113,   243,   457,   458,   459,   534,    41,    57,   141,   142,
-     143,   263,   144,   260,   145,   261,   146,   264,   147,   265,
-     148,   269,   149,   268,   150,   151,   114,   244,   461,   462,
-     463,   537,    47,    60,   191,   192,   193,   194,   195,   196,
-     197,   198,   290,   199,   289,   200,   201,   291,   202,   115,
-     245,   465,   466,   467,   540,    49,    61,   209,   210,   211,
-     212,   213,   295,   214,   215,   216,   153,   262,   511,   512,
-     513,   566,    43,    58,   159,   160,   161,   274,   154,   270,
-     515,   516,   517,   569,    45,    59,   171,   172,   173,   174,
-     283,   175,   278,   176,   279,   177,   281,   178,   280,   179,
-     282,   180,   277,   155,   271,   519,   572,   116,   247,   479,
-     259,   336,   337,   338,   339,   340,   402,   117,   250,   494,
-     495,   496,   497,   553,   498,   499,   118,   119,   252,   397,
-     120,   253,   502,   503,   504,   559,   505,   560,   121,   254,
-      78,   231,    79,   232,    80,   230,   434,   435,   436,   521,
-     624,   625,   626,   634,   635,   636,   637,   642,   638,   640,
-     652,   653,   654,   658,   659,   661
+     432,   541,    64,    65,   103,    35,    54,    75,    76,    77,
+     244,    37,    55,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   251,    39,    56,   129,   275,   113,   255,   114,
+     256,   479,   480,   204,   307,   482,   559,   483,   560,   484,
+     561,   205,   308,   486,   487,   488,   506,   115,   264,   507,
+     508,   509,   510,   511,   116,   266,   515,   516,   517,   581,
+      51,    62,   235,   236,   237,   320,   238,   321,   117,   267,
+     519,   520,   118,   261,   491,   492,   493,   568,    41,    57,
+     149,   150,   151,   282,   152,   278,   153,   279,   154,   280,
+     155,   283,   156,   284,   157,   288,   158,   287,   159,   160,
+     119,   262,   495,   496,   497,   571,    47,    60,   206,   207,
+     208,   209,   210,   211,   212,   213,   311,   214,   310,   215,
+     216,   312,   217,   120,   263,   499,   500,   501,   574,    49,
+      61,   224,   225,   226,   227,   228,   316,   229,   230,   231,
+     162,   281,   545,   546,   547,   600,    43,    58,   169,   170,
+     171,   293,   163,   289,   549,   550,   551,   603,    45,    59,
+     183,   184,   185,   121,   254,   187,   296,   188,   297,   189,
+     304,   190,   299,   191,   300,   192,   302,   193,   301,   194,
+     303,   195,   298,   165,   290,   553,   606,   122,   265,   513,
+     277,   363,   364,   365,   366,   367,   433,   123,   268,   528,
+     529,   530,   531,   587,   532,   533,   124,   125,   270,   428,
+     126,   271,   536,   537,   538,   593,   539,   594,   127,   272,
+      78,   246,    79,   247,    80,   245,   468,   469,   470,   555,
+     658,   659,   660,   668,   669,   670,   671,   676,   672,   674,
+     686,   687,   688,   692,   693,   695
   };
 
   const unsigned short int
   Dhcp4Parser::yytable_[] =
   {
-      74,   138,   206,   137,   157,   169,   188,   205,   219,   207,
-     152,   158,   170,   208,   139,   447,   447,   140,   493,   478,
-      30,    23,   124,    24,   492,    25,    90,    66,   182,    22,
-      69,   217,   218,    34,   124,   234,   156,    84,    85,    86,
-     235,   543,   125,   126,   544,    90,   181,   438,   439,   440,
-     441,   442,   443,    36,   127,   122,   128,   129,   130,   131,
-     132,   133,   182,    73,    38,   134,   135,    81,   545,    82,
-      83,   546,   136,   629,   181,   630,   631,   134,    84,    85,
-      86,    87,    88,   181,    40,    89,    90,   441,    73,    73,
-     182,    42,   183,   184,    70,   185,   186,   187,   224,   627,
-      71,    72,   628,    91,    92,   217,   218,    73,    26,    27,
-      28,    29,    73,   655,    44,    93,   656,   255,    94,    95,
-      46,    90,   256,    73,    96,    97,    98,    48,    50,    99,
-     225,   227,   487,   488,   489,   490,    90,   182,   226,   162,
-     394,   395,   396,   163,   164,   165,   166,   167,    73,   168,
-     228,    73,   272,   275,   301,   332,   255,   273,   276,   302,
-      73,   520,   447,   182,   203,   183,   184,   204,   522,   258,
-     531,   531,   284,   523,   590,   532,   533,   233,   239,   551,
-      74,   557,   493,    73,   552,   561,   558,   228,   492,   272,
-     562,   301,   563,   240,   613,   241,   616,   275,    73,   643,
-     334,   662,   620,   242,   644,   333,   663,   468,   469,   470,
-     471,   251,   335,   500,   501,   266,   138,   267,   137,   285,
-     293,   157,   288,   292,    73,   152,   294,   298,   158,   139,
-     296,   169,   140,   303,   304,   297,   305,   306,   170,   206,
-     188,   307,   308,   309,   205,   311,   207,   312,   313,   314,
-     208,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,   318,   319,   315,   316,   317,   320,   321,   322,   323,
-     324,   325,   326,   327,   328,   329,   331,   341,   342,   343,
-     344,   345,   346,   347,   349,   350,   351,   348,   352,   354,
-     356,   357,   358,   359,   360,   361,   362,   364,   365,   366,
-     367,   368,   369,   370,   372,   373,   375,   376,   378,   403,
-     433,   518,   379,   380,   383,   384,   381,   382,   385,   386,
-     387,   388,   389,   390,   391,   451,   451,   392,   393,   398,
-     444,   444,   399,   400,   404,   407,   414,   405,   406,   491,
-     408,   409,   410,   411,   412,   334,   413,   415,   417,   456,
-     333,   418,   419,   420,   460,   464,   480,   335,   508,   510,
-     421,   524,   514,   528,   529,   530,   536,   506,   535,   539,
-     538,   422,   542,   541,   548,   423,   549,   567,   550,   554,
-     555,   556,   568,   571,   430,   623,   431,   424,   570,   573,
-     574,   425,   576,   577,   578,   595,   600,   601,   416,   608,
-     603,   426,   427,   609,   428,   429,   641,   614,   615,   621,
-     645,   647,   651,   649,   664,   484,   565,   564,   432,   310,
-     580,   579,   455,   437,   582,   589,   593,   581,   596,   597,
-     598,   610,   611,   592,   657,   612,   617,   618,   619,   591,
-     377,   594,   622,   584,   646,   583,   585,   353,   650,   605,
-     666,   586,   330,   371,   587,   588,   374,   604,   355,   607,
-     599,   602,   363,   606,   509,   575,   639,   648,   660,   665,
-       0,     0,   451,     0,     0,     0,     0,   444,   138,     0,
-     137,   206,     0,   188,     0,     0,   205,   152,   207,     0,
-       0,   139,   208,   219,   140,     0,     0,     0,     0,     0,
-       0,     0,     0,   491,     0,     0,     0,     0,     0,     0,
-       0,     0,   157,     0,     0,   169,     0,     0,     0,   158,
-       0,     0,   170,     0,     0,     0,     0,     0,     0,     0,
+      74,   145,   221,   144,   167,   181,   203,   220,   234,   222,
+     161,   168,   182,   223,   164,   527,   186,   146,   512,   147,
+     148,    30,   481,   481,    69,   361,   362,   130,    23,    22,
+      24,   526,    25,   130,    83,    84,    93,    34,   577,   239,
+     249,   578,    84,   172,   173,   250,   166,    87,    88,    89,
+     273,    36,   131,   132,   133,   274,    93,    84,   172,   173,
+     232,   233,    38,    93,    40,   134,    66,   135,   136,   137,
+     138,   139,   140,   232,   233,   291,   141,   142,    93,   197,
+     292,   174,   141,   143,    42,   175,   176,   177,   178,   179,
+     294,   180,    73,    44,    70,   295,   197,   356,    73,    46,
+      71,    72,   196,   472,   473,   474,   475,   476,   477,   534,
+     535,   196,    73,   197,   218,   198,   199,   219,    73,   197,
+      48,    26,    27,    28,    29,    73,   579,   322,   197,   580,
+     198,   199,   323,   200,   201,   202,   502,   503,   504,   505,
+      73,   663,    50,   664,   665,    81,   273,    82,    83,    84,
+     556,   554,    85,    86,   565,   557,   128,    73,   240,   566,
+     241,    87,    88,    89,    90,    91,   565,   242,   585,    92,
+      93,   567,   481,   586,    73,   661,   624,   243,   662,   248,
+      73,   591,   527,   361,   362,   595,   592,    94,    95,    73,
+     596,   252,   243,   276,   253,    74,   291,   597,   526,    96,
+     322,   647,    97,    98,   257,   650,   294,   677,    99,   100,
+     101,   654,   678,   102,   696,   305,   258,   689,   358,   697,
+     690,   259,   196,   357,   260,   269,   475,   425,   426,   427,
+     359,   285,    73,   286,   360,   145,   306,   144,   309,   313,
+     167,   315,   333,   317,   161,   314,   319,   168,   164,   324,
+     325,   146,   181,   147,   148,   318,   326,   327,   328,   182,
+     221,   203,   329,   186,   330,   220,   332,   222,   334,   335,
+     336,   223,   521,   522,   523,   524,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,   337,   342,   343,   344,
+     338,   339,   345,   340,   341,   346,   347,   348,   349,   351,
+      73,   352,   353,   355,   350,   368,   369,   370,   371,   372,
+     373,   374,   375,   377,   378,   379,   376,   380,   382,   384,
+     385,   386,   387,   388,   389,   390,   391,   392,   394,   395,
+     396,   397,   398,   399,   402,   405,   406,   400,   411,   412,
+     408,   403,   409,   414,   410,   413,   415,   416,   417,   418,
+     419,   420,   421,   422,   431,   436,   485,   485,   423,   424,
+     429,   478,   478,   430,   435,   434,   437,   438,   439,   440,
+     525,   441,   442,   443,   444,   445,   358,   447,   446,   448,
+     490,   357,   494,   498,   449,   451,   514,   452,   359,   542,
+     544,   548,   360,   562,   453,   558,   563,   564,   454,   570,
+     569,   572,   573,   575,   576,   643,   455,   583,   582,   584,
+     456,   588,   589,   590,   602,   464,   601,   465,   604,   605,
+     637,   607,   608,   552,   457,   610,   611,   612,   629,   634,
+     635,   458,   459,   642,   540,   648,   467,   683,   649,   460,
+     461,   655,   657,   675,   679,   681,   450,   698,   462,   685,
+     598,   471,   463,   354,   466,   331,   518,   489,   599,   616,
+     623,   626,   625,   613,   614,   615,   627,   630,   631,   628,
+     407,   632,   644,   618,   691,   645,   646,   381,   651,   652,
+     653,   617,   619,   620,   656,   401,   621,   680,   684,   639,
+     622,   638,   404,   383,   641,   640,   700,   543,   633,   636,
+     673,   609,   393,   682,   694,   699,   485,     0,     0,     0,
+       0,   478,   145,     0,   144,   221,     0,   203,     0,     0,
+     220,   161,   222,     0,     0,   164,   223,   234,   146,     0,
+     147,   148,     0,     0,     0,     0,     0,   525,     0,     0,
+       0,     0,     0,     0,     0,     0,   167,     0,     0,   181,
+       0,     0,     0,   168,     0,     0,   182,     0,     0,     0,
+     186,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   633,     0,     0,
-       0,     0,   632,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   633,     0,     0,     0,     0,   632
+       0,   667,     0,     0,     0,     0,   666,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   667,     0,
+       0,     0,     0,   666
   };
 
   const short int
   Dhcp4Parser::yycheck_[] =
   {
       54,    57,    61,    57,    58,    59,    60,    61,    62,    61,
-      57,    58,    59,    61,    57,   384,   385,    57,   393,   390,
-      12,     5,     7,     7,   393,     9,    30,    92,    31,     0,
-      10,    60,    61,     7,     7,     3,    40,    22,    23,    24,
-       8,     3,    27,    28,     6,    30,    15,    16,    17,    18,
-      19,    20,    21,     7,    39,    12,    41,    42,    43,    44,
-      45,    46,    31,    92,     7,    50,    51,    11,     3,    13,
-      14,     6,    57,    76,    15,    78,    79,    50,    22,    23,
-      24,    25,    26,    15,     7,    29,    30,    19,    92,    92,
-      31,     7,    33,    34,    74,    36,    37,    38,     6,     3,
-      80,    81,     6,    47,    48,    60,    61,    92,    92,    93,
-      94,    95,    92,     3,     7,    59,     6,     3,    62,    63,
-       7,    30,     8,    92,    68,    69,    70,     7,     7,    73,
-       3,     8,    64,    65,    66,    67,    30,    31,     4,    48,
-      92,    93,    94,    52,    53,    54,    55,    56,    92,    58,
-       3,    92,     3,     3,     3,    49,     3,     8,     8,     8,
-      92,     8,   531,    31,    32,    33,    34,    35,     3,     8,
-       3,     3,     8,     8,   545,     8,     8,     4,     4,     3,
-     234,     3,   557,    92,     8,     3,     8,     3,   557,     3,
-       8,     3,     8,     4,     8,     4,     8,     3,    92,     3,
-     259,     3,     8,     4,     8,   259,     8,    52,    53,    54,
-      55,     4,   259,    71,    72,     4,   272,     4,   272,     3,
-       8,   275,     4,     4,    92,   272,     3,     3,   275,   272,
-       4,   285,   272,   225,   226,     8,    92,     4,   285,   298,
-     294,     4,     4,     4,   298,     4,   298,     4,     4,    93,
-     298,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,     4,     4,    93,    93,    93,     4,     4,     4,     4,
-       4,     4,    93,     4,     4,     4,     4,     4,     4,     4,
-       4,     4,     4,    93,     4,     4,     4,    95,     4,     4,
-       4,     4,     4,     4,     4,     4,     4,     4,     4,    93,
-       4,     4,     4,    95,     4,    95,     4,     4,     4,     8,
-      75,    58,     7,     7,     7,     7,   308,   309,     7,     5,
-       5,     5,     5,     5,     5,   384,   385,     7,     7,     7,
-     384,   385,     7,     5,     3,     5,     7,    92,    92,   393,
-      92,    92,    92,    92,    92,   404,     5,    92,    92,     7,
-     404,    92,    92,    92,     7,     7,     7,   404,     4,     7,
-      92,     8,     7,     4,     4,     4,     3,   399,     6,     3,
-       6,    92,     3,     6,     6,    92,     3,     6,     4,     4,
-       4,     4,     3,     3,   376,     7,   378,    92,     6,     8,
-       4,    92,     4,     4,     4,     4,     4,     4,   356,     4,
-       6,    92,    92,     5,    92,    92,     4,     8,     8,     8,
-       4,     4,     7,     5,     4,    92,    92,   507,   379,   234,
-      93,    95,   385,   383,   531,   543,    93,    95,    93,    93,
-      93,    92,    92,   549,    77,    92,    92,    92,    92,   547,
-     301,   551,    92,   536,    93,   534,   537,   272,    92,   568,
-      92,   539,   255,   294,   540,   542,   298,   566,   275,   571,
-     557,   561,   285,   569,   404,   522,   627,   643,   655,   662,
-      -1,    -1,   531,    -1,    -1,    -1,    -1,   531,   534,    -1,
-     534,   540,    -1,   537,    -1,    -1,   540,   534,   540,    -1,
-      -1,   534,   540,   547,   534,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   557,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   566,    -1,    -1,   569,    -1,    -1,    -1,   566,
-      -1,    -1,   569,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      57,    58,    59,    61,    57,   424,    59,    57,   421,    57,
+      57,    12,   415,   416,    10,   277,   277,     7,     5,     0,
+       7,   424,     9,     7,    14,    15,    36,     7,     3,     6,
+       3,     6,    15,    16,    17,     8,    46,    27,    28,    29,
+       3,     7,    32,    33,    34,     8,    36,    15,    16,    17,
+      66,    67,     7,    36,     7,    45,    98,    47,    48,    49,
+      50,    51,    52,    66,    67,     3,    56,    57,    36,    37,
+       8,    54,    56,    63,     7,    58,    59,    60,    61,    62,
+       3,    64,    98,     7,    80,     8,    37,    55,    98,     7,
+      86,    87,    20,    21,    22,    23,    24,    25,    26,    77,
+      78,    20,    98,    37,    38,    39,    40,    41,    98,    37,
+       7,    98,    99,   100,   101,    98,     3,     3,    37,     6,
+      39,    40,     8,    42,    43,    44,    58,    59,    60,    61,
+      98,    82,     7,    84,    85,    11,     3,    13,    14,    15,
+       3,     8,    18,    19,     3,     8,    12,    98,     3,     8,
+       4,    27,    28,    29,    30,    31,     3,     8,     3,    35,
+      36,     8,   565,     8,    98,     3,   579,     3,     6,     4,
+      98,     3,   591,   435,   435,     3,     8,    53,    54,    98,
+       8,     4,     3,     8,     4,   249,     3,     8,   591,    65,
+       3,     8,    68,    69,     4,     8,     3,     3,    74,    75,
+      76,     8,     8,    79,     3,     8,     4,     3,   277,     8,
+       6,     4,    20,   277,     4,     4,    24,    98,    99,   100,
+     277,     4,    98,     4,   277,   291,     3,   291,     4,     4,
+     294,     3,   101,     4,   291,     8,     3,   294,   291,   240,
+     241,   291,   306,   291,   291,     8,    98,     4,     4,   306,
+     319,   315,     4,   306,     4,   319,     4,   319,   101,     4,
+       4,   319,    70,    71,    72,    73,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,     4,     4,     4,     4,
+      99,    99,     4,    99,    99,     4,     4,     4,     4,     4,
+      98,     4,     4,     4,    99,     4,     4,     4,     4,     4,
+       4,     4,    99,     4,     4,     4,   101,     4,     4,     4,
+       4,     4,     4,     4,     4,     4,     4,     4,     4,     4,
+      99,     4,     4,     4,     4,     4,     4,   101,   329,   330,
+       4,   101,     7,    98,     7,     7,     7,     7,     5,     5,
+       5,     5,     5,     5,     5,    98,   415,   416,     7,     7,
+       7,   415,   416,     7,     3,     8,    98,    98,     5,    98,
+     424,    98,    98,    98,    98,     5,   435,    98,     7,    98,
+       7,   435,     7,     7,    98,    98,     7,    98,   435,     4,
+       7,     7,   435,     4,    98,     8,     4,     4,    98,     3,
+       6,     6,     3,     6,     3,     5,    98,     3,     6,     4,
+      98,     4,     4,     4,     3,   406,     6,   408,     6,     3,
+       6,     8,     4,    64,    98,     4,     4,     4,     4,     4,
+       4,    98,    98,     4,   430,     8,    81,     5,     8,    98,
+      98,     8,     7,     4,     4,     4,   386,     4,    98,     7,
+     541,   413,    98,   273,   409,   249,    98,   416,    98,   565,
+     577,   583,   581,   101,    99,   101,    99,    99,    99,   585,
+     322,    99,    98,   570,    83,    98,    98,   291,    98,    98,
+      98,   568,   571,   573,    98,   315,   574,    99,    98,   602,
+     576,   600,   319,   294,   605,   603,    98,   435,   591,   595,
+     661,   556,   306,   677,   689,   696,   565,    -1,    -1,    -1,
+      -1,   565,   568,    -1,   568,   574,    -1,   571,    -1,    -1,
+     574,   568,   574,    -1,    -1,   568,   574,   581,   568,    -1,
+     568,   568,    -1,    -1,    -1,    -1,    -1,   591,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   600,    -1,    -1,   603,
+      -1,    -1,    -1,   600,    -1,    -1,   603,    -1,    -1,    -1,
+     603,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   626,    -1,    -1,
-      -1,    -1,   626,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   643,    -1,    -1,    -1,    -1,   643
+      -1,   660,    -1,    -1,    -1,    -1,   660,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   677,    -1,
+      -1,    -1,    -1,   677
   };
 
   const unsigned short int
   Dhcp4Parser::yystos_[] =
   {
-       0,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,     0,     5,     7,     9,    92,    93,    94,    95,
-     108,   109,   110,   114,     7,   121,     7,   127,     7,   137,
-       7,   192,     7,   258,     7,   270,     7,   218,     7,   241,
-       7,   174,   115,   111,   122,   128,   138,   193,   259,   271,
-     219,   242,   175,   108,   118,   119,    92,   112,   113,    10,
-      74,    80,    81,    92,   120,   123,   124,   125,   326,   328,
-     330,    11,    13,    14,    22,    23,    24,    25,    26,    29,
-      30,    47,    48,    59,    62,    63,    68,    69,    70,    73,
-     120,   129,   130,   131,   132,   133,   134,   135,   141,   143,
-     161,   168,   182,   186,   212,   235,   293,   303,   312,   313,
-     316,   324,    12,   139,     7,    27,    28,    39,    41,    42,
-      43,    44,    45,    46,    50,    51,    57,   120,   131,   132,
-     133,   194,   195,   196,   198,   200,   202,   204,   206,   208,
-     210,   211,   235,   252,   264,   289,    40,   120,   235,   260,
-     261,   262,    48,    52,    53,    54,    55,    56,    58,   120,
-     235,   272,   273,   274,   275,   277,   279,   281,   283,   285,
-     287,    15,    31,    33,    34,    36,    37,    38,   120,   147,
-     155,   220,   221,   222,   223,   224,   225,   226,   227,   229,
-     231,   232,   234,    32,    35,   120,   155,   224,   229,   243,
-     244,   245,   246,   247,   249,   250,   251,    60,    61,   120,
-     176,   177,   178,   180,     6,     3,     4,     8,     3,   126,
-     331,   327,   329,     4,     3,     8,   136,   142,   144,     4,
-       4,     4,     4,   187,   213,   236,   162,   294,   169,   183,
-     304,     4,   314,   317,   325,     3,     8,   140,     8,   296,
-     199,   201,   253,   197,   203,   205,     4,     4,   209,   207,
-     265,   290,     3,     8,   263,     3,     8,   288,   278,   280,
-     284,   282,   286,   276,     8,     3,   148,   156,     4,   230,
-     228,   233,     4,     8,     3,   248,     4,     8,     3,   179,
-     181,     3,     8,   108,   108,    92,     4,     4,     4,     4,
-     124,     4,     4,     4,    93,    93,    93,    93,     4,     4,
-       4,     4,     4,     4,     4,     4,    93,     4,     4,     4,
-     130,     4,    49,   120,   155,   235,   297,   298,   299,   300,
-     301,     4,     4,     4,     4,     4,     4,    93,    95,     4,
-       4,     4,     4,   195,     4,   261,     4,     4,     4,     4,
-       4,     4,     4,   274,     4,     4,    93,     4,     4,     4,
-      95,   222,     4,    95,   245,     4,     4,   177,     4,     7,
-       7,   108,   108,     7,     7,     7,     5,     5,     5,     5,
-       5,     5,     7,     7,    92,    93,    94,   315,     7,     7,
-       5,   116,   302,     8,     3,    92,    92,     5,    92,    92,
-      92,    92,    92,     5,     7,    92,   116,    92,    92,    92,
-      92,    92,    92,    92,    92,    92,    92,    92,    92,    92,
-     108,   108,   129,    75,   332,   333,   334,   139,    16,    17,
-      18,    19,    20,    21,   120,   145,   146,   147,   149,   151,
-     153,   155,   157,   158,   159,   145,     7,   188,   189,   190,
-       7,   214,   215,   216,     7,   237,   238,   239,    52,    53,
-      54,    55,   160,   163,   164,   165,   166,   167,   206,   295,
-       7,   170,   171,   172,    92,   184,   185,    64,    65,    66,
-      67,   120,   147,   157,   305,   306,   307,   308,   310,   311,
-      71,    72,   318,   319,   320,   322,   113,   117,     4,   299,
-       7,   254,   255,   256,     7,   266,   267,   268,    58,   291,
-       8,   335,     3,     8,     8,   150,   152,   154,     4,     4,
-       4,     3,     8,     8,   191,     6,     3,   217,     6,     3,
-     240,     6,     3,     3,     6,     3,     6,   173,     6,     3,
-       4,     3,     8,   309,     4,     4,     4,     3,     8,   321,
-     323,     3,     8,     8,   118,    92,   257,     6,     3,   269,
-       6,     3,   292,     8,     4,   333,     4,     4,     4,    95,
-      93,    95,   146,   194,   190,   220,   216,   243,   239,   164,
-     206,   176,   172,    93,   185,     4,    93,    93,    93,   306,
-       4,     4,   319,     6,   260,   256,   272,   268,     4,     5,
-      92,    92,    92,     8,     8,     8,     8,    92,    92,    92,
-       8,     8,    92,     7,   336,   337,   338,     3,     6,    76,
-      78,    79,   120,   155,   339,   340,   341,   342,   344,   337,
-     345,     4,   343,     3,     8,     4,    93,     4,   340,     5,
-      92,     7,   346,   347,   348,     3,     6,    77,   349,   350,
-     347,   351,     3,     8,     4,   350,    92
+       0,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,     0,     5,     7,     9,    98,    99,   100,   101,
+     114,   115,   116,   120,     7,   127,     7,   133,     7,   145,
+       7,   200,     7,   268,     7,   280,     7,   228,     7,   251,
+       7,   182,   121,   117,   128,   134,   146,   201,   269,   281,
+     229,   252,   183,   114,   124,   125,    98,   118,   119,    10,
+      80,    86,    87,    98,   126,   129,   130,   131,   342,   344,
+     346,    11,    13,    14,    15,    18,    19,    27,    28,    29,
+      30,    31,    35,    36,    53,    54,    65,    68,    69,    74,
+      75,    76,    79,   126,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   149,   151,   169,   176,   190,   194,   222,
+     245,   285,   309,   319,   328,   329,   332,   340,    12,   147,
+       7,    32,    33,    34,    45,    47,    48,    49,    50,    51,
+      52,    56,    57,    63,   126,   137,   138,   139,   142,   202,
+     203,   204,   206,   208,   210,   212,   214,   216,   218,   220,
+     221,   245,   262,   274,   285,   305,    46,   126,   245,   270,
+     271,   272,    16,    17,    54,    58,    59,    60,    61,    62,
+      64,   126,   245,   282,   283,   284,   285,   287,   289,   291,
+     293,   295,   297,   299,   301,   303,    20,    37,    39,    40,
+      42,    43,    44,   126,   155,   163,   230,   231,   232,   233,
+     234,   235,   236,   237,   239,   241,   242,   244,    38,    41,
+     126,   163,   234,   239,   253,   254,   255,   256,   257,   259,
+     260,   261,    66,    67,   126,   184,   185,   186,   188,     6,
+       3,     4,     8,     3,   132,   347,   343,   345,     4,     3,
+       8,   144,     4,     4,   286,   150,   152,     4,     4,     4,
+       4,   195,   223,   246,   170,   310,   177,   191,   320,     4,
+     330,   333,   341,     3,     8,   148,     8,   312,   207,   209,
+     211,   263,   205,   213,   215,     4,     4,   219,   217,   275,
+     306,     3,     8,   273,     3,     8,   288,   290,   304,   294,
+     296,   300,   298,   302,   292,     8,     3,   156,   164,     4,
+     240,   238,   243,     4,     8,     3,   258,     4,     8,     3,
+     187,   189,     3,     8,   114,   114,    98,     4,     4,     4,
+       4,   130,     4,   101,   101,     4,     4,     4,    99,    99,
+      99,    99,     4,     4,     4,     4,     4,     4,     4,     4,
+      99,     4,     4,     4,   136,     4,    55,   126,   163,   245,
+     285,   287,   289,   313,   314,   315,   316,   317,     4,     4,
+       4,     4,     4,     4,     4,    99,   101,     4,     4,     4,
+       4,   203,     4,   271,     4,     4,     4,     4,     4,     4,
+       4,     4,     4,   284,     4,     4,    99,     4,     4,     4,
+     101,   232,     4,   101,   255,     4,     4,   185,     4,     7,
+       7,   114,   114,     7,    98,     7,     7,     5,     5,     5,
+       5,     5,     5,     7,     7,    98,    99,   100,   331,     7,
+       7,     5,   122,   318,     8,     3,    98,    98,    98,     5,
+      98,    98,    98,    98,    98,     5,     7,    98,    98,    98,
+     122,    98,    98,    98,    98,    98,    98,    98,    98,    98,
+      98,    98,    98,    98,   114,   114,   135,    81,   348,   349,
+     350,   147,    21,    22,    23,    24,    25,    26,   126,   153,
+     154,   155,   157,   159,   161,   163,   165,   166,   167,   153,
+       7,   196,   197,   198,     7,   224,   225,   226,     7,   247,
+     248,   249,    58,    59,    60,    61,   168,   171,   172,   173,
+     174,   175,   216,   311,     7,   178,   179,   180,    98,   192,
+     193,    70,    71,    72,    73,   126,   155,   165,   321,   322,
+     323,   324,   326,   327,    77,    78,   334,   335,   336,   338,
+     119,   123,     4,   315,     7,   264,   265,   266,     7,   276,
+     277,   278,    64,   307,     8,   351,     3,     8,     8,   158,
+     160,   162,     4,     4,     4,     3,     8,     8,   199,     6,
+       3,   227,     6,     3,   250,     6,     3,     3,     6,     3,
+       6,   181,     6,     3,     4,     3,     8,   325,     4,     4,
+       4,     3,     8,   337,   339,     3,     8,     8,   124,    98,
+     267,     6,     3,   279,     6,     3,   308,     8,     4,   349,
+       4,     4,     4,   101,    99,   101,   154,   202,   198,   230,
+     226,   253,   249,   172,   216,   184,   180,    99,   193,     4,
+      99,    99,    99,   322,     4,     4,   335,     6,   270,   266,
+     282,   278,     4,     5,    98,    98,    98,     8,     8,     8,
+       8,    98,    98,    98,     8,     8,    98,     7,   352,   353,
+     354,     3,     6,    82,    84,    85,   126,   163,   355,   356,
+     357,   358,   360,   353,   361,     4,   359,     3,     8,     4,
+      99,     4,   356,     5,    98,     7,   362,   363,   364,     3,
+       6,    83,   365,   366,   363,   367,     3,     8,     4,   366,
+      98
   };
 
   const unsigned short int
   Dhcp4Parser::yyr1_[] =
   {
-       0,    96,    98,    97,    99,    97,   100,    97,   101,    97,
-     102,    97,   103,    97,   104,    97,   105,    97,   106,    97,
-     107,    97,   108,   108,   108,   108,   108,   108,   108,   109,
-     111,   110,   112,   112,   113,   113,   115,   114,   117,   116,
-     118,   118,   119,   119,   120,   122,   121,   123,   123,   124,
-     124,   124,   124,   124,   126,   125,   128,   127,   129,   129,
-     130,   130,   130,   130,   130,   130,   130,   130,   130,   130,
-     130,   130,   130,   130,   130,   130,   130,   130,   130,   130,
-     131,   132,   133,   134,   136,   135,   138,   137,   140,   139,
-     142,   141,   144,   143,   145,   145,   146,   146,   146,   146,
-     146,   146,   146,   146,   146,   148,   147,   150,   149,   152,
-     151,   154,   153,   156,   155,   157,   158,   159,   160,   162,
-     161,   163,   163,   164,   164,   164,   164,   165,   166,   167,
-     169,   168,   170,   170,   171,   171,   173,   172,   175,   174,
-     176,   176,   176,   177,   177,   179,   178,   181,   180,   183,
-     182,   184,   184,   185,   187,   186,   188,   188,   189,   189,
-     191,   190,   193,   192,   194,   194,   195,   195,   195,   195,
-     195,   195,   195,   195,   195,   195,   195,   195,   195,   195,
-     195,   195,   195,   197,   196,   199,   198,   201,   200,   203,
-     202,   205,   204,   207,   206,   209,   208,   210,   211,   213,
-     212,   214,   214,   215,   215,   217,   216,   219,   218,   220,
-     220,   221,   221,   222,   222,   222,   222,   222,   222,   222,
-     222,   223,   224,   225,   226,   228,   227,   230,   229,   231,
-     233,   232,   234,   236,   235,   237,   237,   238,   238,   240,
-     239,   242,   241,   243,   243,   244,   244,   245,   245,   245,
-     245,   245,   245,   246,   248,   247,   249,   250,   251,   253,
-     252,   254,   254,   255,   255,   257,   256,   259,   258,   260,
-     260,   261,   261,   261,   263,   262,   265,   264,   266,   266,
-     267,   267,   269,   268,   271,   270,   272,   272,   273,   273,
-     274,   274,   274,   274,   274,   274,   274,   274,   274,   276,
-     275,   278,   277,   280,   279,   282,   281,   284,   283,   286,
-     285,   288,   287,   290,   289,   292,   291,   294,   293,   295,
-     295,   296,   206,   297,   297,   298,   298,   299,   299,   299,
-     299,   300,   302,   301,   304,   303,   305,   305,   306,   306,
-     306,   306,   306,   306,   306,   307,   309,   308,   310,   311,
-     312,   314,   313,   315,   315,   315,   317,   316,   318,   318,
-     319,   319,   321,   320,   323,   322,   325,   324,   327,   326,
-     329,   328,   331,   330,   332,   332,   333,   335,   334,   336,
-     336,   338,   337,   339,   339,   340,   340,   340,   340,   340,
-     341,   343,   342,   345,   344,   346,   346,   348,   347,   349,
-     349,   351,   350
+       0,   102,   104,   103,   105,   103,   106,   103,   107,   103,
+     108,   103,   109,   103,   110,   103,   111,   103,   112,   103,
+     113,   103,   114,   114,   114,   114,   114,   114,   114,   115,
+     117,   116,   118,   118,   119,   119,   121,   120,   123,   122,
+     124,   124,   125,   125,   126,   128,   127,   129,   129,   130,
+     130,   130,   130,   130,   132,   131,   134,   133,   135,   135,
+     136,   136,   136,   136,   136,   136,   136,   136,   136,   136,
+     136,   136,   136,   136,   136,   136,   136,   136,   136,   136,
+     136,   136,   136,   137,   138,   139,   140,   141,   142,   144,
+     143,   146,   145,   148,   147,   150,   149,   152,   151,   153,
+     153,   154,   154,   154,   154,   154,   154,   154,   154,   154,
+     156,   155,   158,   157,   160,   159,   162,   161,   164,   163,
+     165,   166,   167,   168,   170,   169,   171,   171,   172,   172,
+     172,   172,   173,   174,   175,   177,   176,   178,   178,   179,
+     179,   181,   180,   183,   182,   184,   184,   184,   185,   185,
+     187,   186,   189,   188,   191,   190,   192,   192,   193,   195,
+     194,   196,   196,   197,   197,   199,   198,   201,   200,   202,
+     202,   203,   203,   203,   203,   203,   203,   203,   203,   203,
+     203,   203,   203,   203,   203,   203,   203,   203,   203,   203,
+     203,   205,   204,   207,   206,   209,   208,   211,   210,   213,
+     212,   215,   214,   217,   216,   219,   218,   220,   221,   223,
+     222,   224,   224,   225,   225,   227,   226,   229,   228,   230,
+     230,   231,   231,   232,   232,   232,   232,   232,   232,   232,
+     232,   233,   234,   235,   236,   238,   237,   240,   239,   241,
+     243,   242,   244,   246,   245,   247,   247,   248,   248,   250,
+     249,   252,   251,   253,   253,   254,   254,   255,   255,   255,
+     255,   255,   255,   256,   258,   257,   259,   260,   261,   263,
+     262,   264,   264,   265,   265,   267,   266,   269,   268,   270,
+     270,   271,   271,   271,   273,   272,   275,   274,   276,   276,
+     277,   277,   279,   278,   281,   280,   282,   282,   283,   283,
+     284,   284,   284,   284,   284,   284,   284,   284,   284,   284,
+     284,   284,   286,   285,   288,   287,   290,   289,   292,   291,
+     294,   293,   296,   295,   298,   297,   300,   299,   302,   301,
+     304,   303,   306,   305,   308,   307,   310,   309,   311,   311,
+     312,   216,   313,   313,   314,   314,   315,   315,   315,   315,
+     315,   315,   315,   316,   318,   317,   320,   319,   321,   321,
+     322,   322,   322,   322,   322,   322,   322,   323,   325,   324,
+     326,   327,   328,   330,   329,   331,   331,   331,   333,   332,
+     334,   334,   335,   335,   337,   336,   339,   338,   341,   340,
+     343,   342,   345,   344,   347,   346,   348,   348,   349,   351,
+     350,   352,   352,   354,   353,   355,   355,   356,   356,   356,
+     356,   356,   357,   359,   358,   361,   360,   362,   362,   364,
+     363,   365,   365,   367,   366
   };
 
   const unsigned char
@@ -3187,17 +3303,18 @@ namespace isc { namespace dhcp {
        1,     1,     1,     1,     0,     6,     0,     4,     1,     3,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       3,     3,     3,     3,     0,     6,     0,     4,     0,     4,
-       0,     6,     0,     6,     1,     3,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     0,     4,     0,     4,     0,
-       4,     0,     4,     0,     4,     3,     3,     3,     1,     0,
-       6,     1,     3,     1,     1,     1,     1,     1,     1,     1,
-       0,     6,     0,     1,     1,     3,     0,     4,     0,     4,
-       1,     3,     1,     1,     1,     0,     4,     0,     4,     0,
-       6,     1,     3,     3,     0,     6,     0,     1,     1,     3,
-       0,     4,     0,     4,     1,     3,     1,     1,     1,     1,
+       1,     1,     1,     3,     3,     3,     3,     3,     3,     0,
+       6,     0,     4,     0,     4,     0,     6,     0,     6,     1,
+       3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       0,     4,     0,     4,     0,     4,     0,     4,     0,     4,
+       3,     3,     3,     1,     0,     6,     1,     3,     1,     1,
+       1,     1,     1,     1,     1,     0,     6,     0,     1,     1,
+       3,     0,     4,     0,     4,     1,     3,     1,     1,     1,
+       0,     4,     0,     4,     0,     6,     1,     3,     3,     0,
+       6,     0,     1,     1,     3,     0,     4,     0,     4,     1,
+       3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     0,     4,     0,     4,     0,     4,     0,
+       1,     0,     4,     0,     4,     0,     4,     0,     4,     0,
        4,     0,     4,     0,     4,     0,     4,     3,     3,     0,
        6,     0,     1,     1,     3,     0,     4,     0,     4,     0,
        1,     1,     3,     1,     1,     1,     1,     1,     1,     1,
@@ -3208,18 +3325,19 @@ namespace isc { namespace dhcp {
        6,     0,     1,     1,     3,     0,     4,     0,     4,     1,
        3,     1,     1,     1,     0,     4,     0,     6,     0,     1,
        1,     3,     0,     4,     0,     4,     0,     1,     1,     3,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
-       4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
-       4,     0,     4,     0,     6,     0,     4,     0,     6,     1,
-       3,     0,     4,     0,     1,     1,     3,     1,     1,     1,
-       1,     1,     0,     4,     0,     6,     1,     3,     1,     1,
-       1,     1,     1,     1,     1,     3,     0,     4,     3,     3,
-       3,     0,     4,     1,     1,     1,     0,     6,     1,     3,
-       1,     1,     0,     4,     0,     4,     0,     6,     0,     4,
-       0,     4,     0,     6,     1,     3,     1,     0,     6,     1,
-       3,     0,     4,     1,     3,     1,     1,     1,     1,     1,
-       3,     0,     4,     0,     6,     1,     3,     0,     4,     1,
-       3,     0,     4
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     0,     4,     0,     4,     0,     4,     0,     4,
+       0,     4,     0,     4,     0,     4,     0,     4,     0,     4,
+       0,     4,     0,     6,     0,     4,     0,     6,     1,     3,
+       0,     4,     0,     1,     1,     3,     1,     1,     1,     1,
+       1,     1,     1,     1,     0,     4,     0,     6,     1,     3,
+       1,     1,     1,     1,     1,     1,     1,     3,     0,     4,
+       3,     3,     3,     0,     4,     1,     1,     1,     0,     6,
+       1,     3,     1,     1,     0,     4,     0,     4,     0,     6,
+       0,     4,     0,     4,     0,     6,     1,     3,     1,     0,
+       6,     1,     3,     0,     4,     1,     3,     1,     1,     1,
+       1,     1,     3,     0,     4,     0,     6,     1,     3,     0,
+       4,     1,     3,     0,     4
   };
 
 
@@ -3231,15 +3349,18 @@ namespace isc { namespace dhcp {
   {
   "\"end of file\"", "error", "$undefined", "\",\"", "\":\"", "\"[\"",
   "\"]\"", "\"{\"", "\"}\"", "\"null\"", "\"Dhcp4\"",
-  "\"interfaces-config\"", "\"interfaces\"", "\"lease-database\"",
-  "\"hosts-database\"", "\"type\"", "\"user\"", "\"password\"", "\"host\"",
-  "\"persist\"", "\"lfc-interval\"", "\"readonly\"", "\"valid-lifetime\"",
+  "\"interfaces-config\"", "\"interfaces\"", "\"echo-client-id\"",
+  "\"match-client-id\"", "\"next-server\"", "\"server-hostname\"",
+  "\"boot-file-name\"", "\"lease-database\"", "\"hosts-database\"",
+  "\"type\"", "\"user\"", "\"password\"", "\"host\"", "\"persist\"",
+  "\"lfc-interval\"", "\"readonly\"", "\"valid-lifetime\"",
   "\"renew-timer\"", "\"rebind-timer\"", "\"decline-probation-period\"",
-  "\"subnet4\"", "\"4o6-interface\"", "\"4o6-subnet\"", "\"option-def\"",
-  "\"option-data\"", "\"name\"", "\"data\"", "\"code\"", "\"space\"",
-  "\"csv-format\"", "\"record-types\"", "\"encapsulate\"", "\"array\"",
-  "\"pools\"", "\"pool\"", "\"subnet\"", "\"interface\"",
-  "\"interface-id\"", "\"id\"", "\"rapid-commit\"", "\"reservation-mode\"",
+  "\"subnet4\"", "\"4o6-interface\"", "\"4o6-interface-id\"",
+  "\"4o6-subnet\"", "\"option-def\"", "\"option-data\"", "\"name\"",
+  "\"data\"", "\"code\"", "\"space\"", "\"csv-format\"",
+  "\"record-types\"", "\"encapsulate\"", "\"array\"", "\"pools\"",
+  "\"pool\"", "\"subnet\"", "\"interface\"", "\"interface-id\"", "\"id\"",
+  "\"rapid-commit\"", "\"reservation-mode\"",
   "\"host-reservation-identifiers\"", "\"client-classes\"", "\"test\"",
   "\"client-class\"", "\"reservations\"", "\"duid\"", "\"hw-address\"",
   "\"circuit-id\"", "\"client-id\"", "\"hostname\"", "\"relay\"",
@@ -3260,105 +3381,110 @@ namespace isc { namespace dhcp {
   "not_empty_list", "unknown_map_entry", "syntax_map", "$@14",
   "global_objects", "global_object", "dhcp4_object", "$@15", "sub_dhcp4",
   "$@16", "global_params", "global_param", "valid_lifetime", "renew_timer",
-  "rebind_timer", "decline_probation_period", "interfaces_config", "$@17",
-  "sub_interfaces4", "$@18", "interface_config_map", "$@19",
-  "lease_database", "$@20", "hosts_database", "$@21",
-  "database_map_params", "database_map_param", "type", "$@22", "user",
-  "$@23", "password", "$@24", "host", "$@25", "name", "$@26", "persist",
-  "lfc_interval", "readonly", "duid_id", "host_reservation_identifiers",
-  "$@27", "host_reservation_identifiers_list",
-  "host_reservation_identifier", "hw_address_id", "circuit_id",
-  "client_id", "hooks_libraries", "$@28", "hooks_libraries_list",
-  "not_empty_hooks_libraries_list", "hooks_library", "$@29",
-  "sub_hooks_library", "$@30", "hooks_params", "hooks_param", "library",
-  "$@31", "parameters", "$@32", "expired_leases_processing", "$@33",
-  "expired_leases_params", "expired_leases_param", "subnet4_list", "$@34",
-  "subnet4_list_content", "not_empty_subnet4_list", "subnet4", "$@35",
-  "sub_subnet4", "$@36", "subnet4_params", "subnet4_param", "subnet",
-  "$@37", "subnet_4o6_interface", "$@38", "subnet_4o6_subnet", "$@39",
-  "interface", "$@40", "interface_id", "$@41", "client_class", "$@42",
-  "reservation_mode", "$@43", "id", "rapid_commit", "option_def_list",
-  "$@44", "option_def_list_content", "not_empty_option_def_list",
-  "option_def_entry", "$@45", "sub_option_def", "$@46",
-  "option_def_params", "not_empty_option_def_params", "option_def_param",
-  "option_def_name", "code", "option_def_code", "option_def_type",
-  "option_def_record_types", "$@47", "space", "$@48", "option_def_space",
-  "option_def_encapsulate", "$@49", "option_def_array", "option_data_list",
-  "$@50", "option_data_list_content", "not_empty_option_data_list",
-  "option_data_entry", "$@51", "sub_option_data", "$@52",
+  "rebind_timer", "decline_probation_period", "echo_client_id",
+  "match_client_id", "interfaces_config", "$@17", "sub_interfaces4",
+  "$@18", "interface_config_map", "$@19", "lease_database", "$@20",
+  "hosts_database", "$@21", "database_map_params", "database_map_param",
+  "type", "$@22", "user", "$@23", "password", "$@24", "host", "$@25",
+  "name", "$@26", "persist", "lfc_interval", "readonly", "duid_id",
+  "host_reservation_identifiers", "$@27",
+  "host_reservation_identifiers_list", "host_reservation_identifier",
+  "hw_address_id", "circuit_id", "client_id", "hooks_libraries", "$@28",
+  "hooks_libraries_list", "not_empty_hooks_libraries_list",
+  "hooks_library", "$@29", "sub_hooks_library", "$@30", "hooks_params",
+  "hooks_param", "library", "$@31", "parameters", "$@32",
+  "expired_leases_processing", "$@33", "expired_leases_params",
+  "expired_leases_param", "subnet4_list", "$@34", "subnet4_list_content",
+  "not_empty_subnet4_list", "subnet4", "$@35", "sub_subnet4", "$@36",
+  "subnet4_params", "subnet4_param", "subnet", "$@37",
+  "subnet_4o6_interface", "$@38", "subnet_4o6_interface_id", "$@39",
+  "subnet_4o6_subnet", "$@40", "interface", "$@41", "interface_id", "$@42",
+  "client_class", "$@43", "reservation_mode", "$@44", "id", "rapid_commit",
+  "option_def_list", "$@45", "option_def_list_content",
+  "not_empty_option_def_list", "option_def_entry", "$@46",
+  "sub_option_def", "$@47", "option_def_params",
+  "not_empty_option_def_params", "option_def_param", "option_def_name",
+  "code", "option_def_code", "option_def_type", "option_def_record_types",
+  "$@48", "space", "$@49", "option_def_space", "option_def_encapsulate",
+  "$@50", "option_def_array", "option_data_list", "$@51",
+  "option_data_list_content", "not_empty_option_data_list",
+  "option_data_entry", "$@52", "sub_option_data", "$@53",
   "option_data_params", "not_empty_option_data_params",
-  "option_data_param", "option_data_name", "option_data_data", "$@53",
+  "option_data_param", "option_data_name", "option_data_data", "$@54",
   "option_data_code", "option_data_space", "option_data_csv_format",
-  "pools_list", "$@54", "pools_list_content", "not_empty_pools_list",
-  "pool_list_entry", "$@55", "sub_pool4", "$@56", "pool_params",
-  "pool_param", "pool_entry", "$@57", "reservations", "$@58",
+  "pools_list", "$@55", "pools_list_content", "not_empty_pools_list",
+  "pool_list_entry", "$@56", "sub_pool4", "$@57", "pool_params",
+  "pool_param", "pool_entry", "$@58", "reservations", "$@59",
   "reservations_list", "not_empty_reservations_list", "reservation",
-  "$@59", "sub_reservation", "$@60", "reservation_params",
-  "not_empty_reservation_params", "reservation_param", "ip_address",
-  "$@61", "duid", "$@62", "hw_address", "$@63", "client_id_value", "$@64",
-  "circuit_id_value", "$@65", "hostname", "$@66",
-  "reservation_client_classes", "$@67", "relay", "$@68", "relay_map",
-  "$@69", "client_classes", "$@70", "client_classes_list", "$@71",
-  "client_class_params", "not_empty_client_class_params",
-  "client_class_param", "client_class_name", "client_class_test", "$@72",
-  "server_id", "$@73", "server_id_params", "server_id_param", "htype",
-  "identifier", "$@74", "time", "enterprise_id", "dhcp4o6_port", "version",
-  "$@75", "version_value", "control_socket", "$@76",
-  "control_socket_params", "control_socket_param", "socket_type", "$@77",
-  "socket_name", "$@78", "dhcp_ddns", "$@79", "dhcp6_json_object", "$@80",
-  "dhcpddns_json_object", "$@81", "logging_object", "$@82",
-  "logging_params", "logging_param", "loggers", "$@83", "loggers_entries",
-  "logger_entry", "$@84", "logger_params", "logger_param", "debuglevel",
-  "severity", "$@85", "output_options_list", "$@86",
-  "output_options_list_content", "output_entry", "$@87", "output_params",
-  "output_param", "$@88", YY_NULLPTR
+  "$@60", "sub_reservation", "$@61", "reservation_params",
+  "not_empty_reservation_params", "reservation_param", "next_server",
+  "$@62", "server_hostname", "$@63", "boot_file_name", "$@64",
+  "ip_address", "$@65", "duid", "$@66", "hw_address", "$@67",
+  "client_id_value", "$@68", "circuit_id_value", "$@69", "hostname",
+  "$@70", "reservation_client_classes", "$@71", "relay", "$@72",
+  "relay_map", "$@73", "client_classes", "$@74", "client_classes_list",
+  "$@75", "client_class_params", "not_empty_client_class_params",
+  "client_class_param", "client_class_name", "client_class_test", "$@76",
+  "server_id", "$@77", "server_id_params", "server_id_param", "htype",
+  "identifier", "$@78", "time", "enterprise_id", "dhcp4o6_port", "version",
+  "$@79", "version_value", "control_socket", "$@80",
+  "control_socket_params", "control_socket_param", "socket_type", "$@81",
+  "socket_name", "$@82", "dhcp_ddns", "$@83", "dhcp6_json_object", "$@84",
+  "dhcpddns_json_object", "$@85", "logging_object", "$@86",
+  "logging_params", "logging_param", "loggers", "$@87", "loggers_entries",
+  "logger_entry", "$@88", "logger_params", "logger_param", "debuglevel",
+  "severity", "$@89", "output_options_list", "$@90",
+  "output_options_list_content", "output_entry", "$@91", "output_params",
+  "output_param", "$@92", YY_NULLPTR
   };
 
 #if PARSER4_DEBUG
   const unsigned short int
   Dhcp4Parser::yyrline_[] =
   {
-       0,   192,   192,   192,   193,   193,   194,   194,   195,   195,
-     196,   196,   197,   197,   198,   198,   199,   199,   200,   200,
-     201,   201,   209,   210,   211,   212,   213,   214,   215,   218,
-     223,   223,   235,   236,   239,   243,   250,   250,   258,   258,
-     265,   266,   269,   273,   284,   294,   294,   306,   307,   311,
-     312,   313,   314,   315,   318,   318,   335,   335,   343,   344,
-     349,   350,   351,   352,   353,   354,   355,   356,   357,   358,
-     359,   360,   361,   362,   363,   364,   365,   366,   367,   368,
-     371,   376,   381,   386,   391,   391,   401,   401,   409,   409,
-     419,   419,   429,   429,   439,   440,   443,   444,   445,   446,
-     447,   448,   449,   450,   451,   454,   454,   462,   462,   470,
-     470,   478,   478,   486,   486,   494,   499,   504,   509,   514,
-     514,   524,   525,   528,   529,   530,   531,   534,   539,   544,
-     549,   549,   559,   560,   563,   564,   567,   567,   575,   575,
-     583,   584,   585,   588,   589,   592,   592,   600,   600,   608,
-     608,   618,   619,   625,   633,   633,   646,   647,   650,   651,
-     658,   658,   681,   681,   690,   691,   695,   696,   697,   698,
-     699,   700,   701,   702,   703,   704,   705,   706,   707,   708,
-     709,   710,   711,   714,   714,   722,   722,   730,   730,   738,
-     738,   746,   746,   754,   754,   762,   762,   770,   775,   784,
-     784,   796,   797,   800,   801,   806,   806,   817,   817,   827,
-     828,   831,   832,   835,   836,   837,   838,   839,   840,   841,
-     842,   845,   847,   852,   854,   856,   856,   864,   864,   872,
-     874,   874,   882,   891,   891,   903,   904,   909,   910,   915,
-     915,   926,   926,   937,   938,   943,   944,   949,   950,   951,
-     952,   953,   954,   957,   959,   959,   967,   969,   971,   979,
-     979,   991,   992,   995,   996,   999,   999,  1007,  1007,  1015,
-    1016,  1019,  1020,  1021,  1024,  1024,  1035,  1035,  1045,  1046,
-    1049,  1050,  1053,  1053,  1061,  1061,  1069,  1070,  1073,  1074,
-    1078,  1079,  1080,  1081,  1082,  1083,  1084,  1085,  1086,  1089,
-    1089,  1095,  1095,  1103,  1103,  1111,  1111,  1119,  1119,  1128,
-    1128,  1136,  1136,  1149,  1149,  1159,  1159,  1170,  1170,  1180,
-    1181,  1184,  1184,  1192,  1193,  1196,  1197,  1200,  1201,  1202,
-    1203,  1206,  1208,  1208,  1219,  1219,  1229,  1230,  1233,  1234,
-    1235,  1236,  1237,  1238,  1239,  1242,  1247,  1247,  1255,  1260,
-    1267,  1273,  1273,  1281,  1282,  1283,  1288,  1288,  1298,  1299,
-    1302,  1303,  1306,  1306,  1314,  1314,  1324,  1324,  1336,  1336,
-    1343,  1343,  1355,  1355,  1368,  1369,  1373,  1377,  1377,  1389,
-    1390,  1394,  1394,  1402,  1403,  1406,  1407,  1408,  1409,  1410,
-    1413,  1417,  1417,  1425,  1425,  1435,  1436,  1439,  1439,  1447,
-    1448,  1451,  1451
+       0,   199,   199,   199,   200,   200,   201,   201,   202,   202,
+     203,   203,   204,   204,   205,   205,   206,   206,   207,   207,
+     208,   208,   216,   217,   218,   219,   220,   221,   222,   225,
+     230,   230,   242,   243,   246,   250,   257,   257,   265,   265,
+     272,   273,   276,   280,   291,   301,   301,   313,   314,   318,
+     319,   320,   321,   322,   325,   325,   342,   342,   350,   351,
+     356,   357,   358,   359,   360,   361,   362,   363,   364,   365,
+     366,   367,   368,   369,   370,   371,   372,   373,   374,   375,
+     376,   377,   378,   381,   386,   391,   396,   401,   406,   412,
+     412,   422,   422,   430,   430,   440,   440,   450,   450,   460,
+     461,   464,   465,   466,   467,   468,   469,   470,   471,   472,
+     475,   475,   483,   483,   491,   491,   499,   499,   507,   507,
+     515,   520,   525,   530,   535,   535,   545,   546,   549,   550,
+     551,   552,   555,   560,   565,   570,   570,   580,   581,   584,
+     585,   588,   588,   596,   596,   604,   605,   606,   609,   610,
+     613,   613,   621,   621,   629,   629,   639,   640,   646,   654,
+     654,   667,   668,   671,   672,   679,   679,   702,   702,   711,
+     712,   716,   717,   718,   719,   720,   721,   722,   723,   724,
+     725,   726,   727,   728,   729,   730,   731,   732,   733,   734,
+     735,   738,   738,   746,   746,   754,   754,   762,   762,   770,
+     770,   778,   778,   786,   786,   794,   794,   802,   807,   816,
+     816,   828,   829,   832,   833,   838,   838,   849,   849,   859,
+     860,   863,   864,   867,   868,   869,   870,   871,   872,   873,
+     874,   877,   879,   884,   886,   888,   888,   896,   896,   904,
+     906,   906,   914,   923,   923,   935,   936,   941,   942,   947,
+     947,   958,   958,   969,   970,   975,   976,   981,   982,   983,
+     984,   985,   986,   989,   991,   991,   999,  1001,  1003,  1011,
+    1011,  1023,  1024,  1027,  1028,  1031,  1031,  1039,  1039,  1047,
+    1048,  1051,  1052,  1053,  1056,  1056,  1067,  1067,  1077,  1078,
+    1081,  1082,  1085,  1085,  1093,  1093,  1101,  1102,  1105,  1106,
+    1110,  1111,  1112,  1113,  1114,  1115,  1116,  1117,  1118,  1119,
+    1120,  1121,  1124,  1124,  1132,  1132,  1140,  1140,  1148,  1148,
+    1156,  1156,  1164,  1164,  1172,  1172,  1180,  1180,  1189,  1189,
+    1197,  1197,  1210,  1210,  1220,  1220,  1231,  1231,  1241,  1242,
+    1245,  1245,  1253,  1254,  1257,  1258,  1261,  1262,  1263,  1264,
+    1265,  1266,  1267,  1270,  1272,  1272,  1283,  1283,  1293,  1294,
+    1297,  1298,  1299,  1300,  1301,  1302,  1303,  1306,  1311,  1311,
+    1319,  1324,  1331,  1337,  1337,  1345,  1346,  1347,  1352,  1352,
+    1362,  1363,  1366,  1367,  1370,  1370,  1378,  1378,  1388,  1388,
+    1400,  1400,  1407,  1407,  1419,  1419,  1432,  1433,  1437,  1441,
+    1441,  1453,  1454,  1458,  1458,  1466,  1467,  1470,  1471,  1472,
+    1473,  1474,  1477,  1481,  1481,  1489,  1489,  1499,  1500,  1503,
+    1503,  1511,  1512,  1515,  1515
   };
 
   // Print the state stack on the debug stream.
@@ -3393,8 +3519,8 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp4_parser.yy" // lalr1.cc:1167
 } } // isc::dhcp
-#line 3397 "dhcp4_parser.cc" // lalr1.cc:1167
-#line 1459 "dhcp4_parser.yy" // lalr1.cc:1168
+#line 3523 "dhcp4_parser.cc" // lalr1.cc:1167
+#line 1523 "dhcp4_parser.yy" // lalr1.cc:1168
 
 
 void
index 803869603fbe98575a06422af7083a23e22c7a14..b954310eabd1e4180d360bbd59cfcab6e0038e2e 100644 (file)
@@ -352,89 +352,95 @@ namespace isc { namespace dhcp {
         TOKEN_DHCP4 = 265,
         TOKEN_INTERFACES_CONFIG = 266,
         TOKEN_INTERFACES = 267,
-        TOKEN_LEASE_DATABASE = 268,
-        TOKEN_HOSTS_DATABASE = 269,
-        TOKEN_TYPE = 270,
-        TOKEN_USER = 271,
-        TOKEN_PASSWORD = 272,
-        TOKEN_HOST = 273,
-        TOKEN_PERSIST = 274,
-        TOKEN_LFC_INTERVAL = 275,
-        TOKEN_READONLY = 276,
-        TOKEN_VALID_LIFETIME = 277,
-        TOKEN_RENEW_TIMER = 278,
-        TOKEN_REBIND_TIMER = 279,
-        TOKEN_DECLINE_PROBATION_PERIOD = 280,
-        TOKEN_SUBNET4 = 281,
-        TOKEN_SUBNET_4O6_INTERFACE = 282,
-        TOKEN_SUBNET_4O6_SUBNET = 283,
-        TOKEN_OPTION_DEF = 284,
-        TOKEN_OPTION_DATA = 285,
-        TOKEN_NAME = 286,
-        TOKEN_DATA = 287,
-        TOKEN_CODE = 288,
-        TOKEN_SPACE = 289,
-        TOKEN_CSV_FORMAT = 290,
-        TOKEN_RECORD_TYPES = 291,
-        TOKEN_ENCAPSULATE = 292,
-        TOKEN_ARRAY = 293,
-        TOKEN_POOLS = 294,
-        TOKEN_POOL = 295,
-        TOKEN_SUBNET = 296,
-        TOKEN_INTERFACE = 297,
-        TOKEN_INTERFACE_ID = 298,
-        TOKEN_ID = 299,
-        TOKEN_RAPID_COMMIT = 300,
-        TOKEN_RESERVATION_MODE = 301,
-        TOKEN_HOST_RESERVATION_IDENTIFIERS = 302,
-        TOKEN_CLIENT_CLASSES = 303,
-        TOKEN_TEST = 304,
-        TOKEN_CLIENT_CLASS = 305,
-        TOKEN_RESERVATIONS = 306,
-        TOKEN_DUID = 307,
-        TOKEN_HW_ADDRESS = 308,
-        TOKEN_CIRCUIT_ID = 309,
-        TOKEN_CLIENT_ID = 310,
-        TOKEN_HOSTNAME = 311,
-        TOKEN_RELAY = 312,
-        TOKEN_IP_ADDRESS = 313,
-        TOKEN_HOOKS_LIBRARIES = 314,
-        TOKEN_LIBRARY = 315,
-        TOKEN_PARAMETERS = 316,
-        TOKEN_EXPIRED_LEASES_PROCESSING = 317,
-        TOKEN_SERVER_ID = 318,
-        TOKEN_IDENTIFIER = 319,
-        TOKEN_HTYPE = 320,
-        TOKEN_TIME = 321,
-        TOKEN_ENTERPRISE_ID = 322,
-        TOKEN_DHCP4O6_PORT = 323,
-        TOKEN_VERSION = 324,
-        TOKEN_CONTROL_SOCKET = 325,
-        TOKEN_SOCKET_TYPE = 326,
-        TOKEN_SOCKET_NAME = 327,
-        TOKEN_DHCP_DDNS = 328,
-        TOKEN_LOGGING = 329,
-        TOKEN_LOGGERS = 330,
-        TOKEN_OUTPUT_OPTIONS = 331,
-        TOKEN_OUTPUT = 332,
-        TOKEN_DEBUGLEVEL = 333,
-        TOKEN_SEVERITY = 334,
-        TOKEN_DHCP6 = 335,
-        TOKEN_DHCPDDNS = 336,
-        TOKEN_TOPLEVEL_JSON = 337,
-        TOKEN_TOPLEVEL_DHCP4 = 338,
-        TOKEN_SUB_DHCP4 = 339,
-        TOKEN_SUB_INTERFACES4 = 340,
-        TOKEN_SUB_SUBNET4 = 341,
-        TOKEN_SUB_POOL4 = 342,
-        TOKEN_SUB_RESERVATION = 343,
-        TOKEN_SUB_OPTION_DEF = 344,
-        TOKEN_SUB_OPTION_DATA = 345,
-        TOKEN_SUB_HOOKS_LIBRARY = 346,
-        TOKEN_STRING = 347,
-        TOKEN_INTEGER = 348,
-        TOKEN_FLOAT = 349,
-        TOKEN_BOOLEAN = 350
+        TOKEN_ECHO_CLIENT_ID = 268,
+        TOKEN_MATCH_CLIENT_ID = 269,
+        TOKEN_NEXT_SERVER = 270,
+        TOKEN_SERVER_HOSTNAME = 271,
+        TOKEN_BOOT_FILE_NAME = 272,
+        TOKEN_LEASE_DATABASE = 273,
+        TOKEN_HOSTS_DATABASE = 274,
+        TOKEN_TYPE = 275,
+        TOKEN_USER = 276,
+        TOKEN_PASSWORD = 277,
+        TOKEN_HOST = 278,
+        TOKEN_PERSIST = 279,
+        TOKEN_LFC_INTERVAL = 280,
+        TOKEN_READONLY = 281,
+        TOKEN_VALID_LIFETIME = 282,
+        TOKEN_RENEW_TIMER = 283,
+        TOKEN_REBIND_TIMER = 284,
+        TOKEN_DECLINE_PROBATION_PERIOD = 285,
+        TOKEN_SUBNET4 = 286,
+        TOKEN_SUBNET_4O6_INTERFACE = 287,
+        TOKEN_SUBNET_4O6_INTERFACE_ID = 288,
+        TOKEN_SUBNET_4O6_SUBNET = 289,
+        TOKEN_OPTION_DEF = 290,
+        TOKEN_OPTION_DATA = 291,
+        TOKEN_NAME = 292,
+        TOKEN_DATA = 293,
+        TOKEN_CODE = 294,
+        TOKEN_SPACE = 295,
+        TOKEN_CSV_FORMAT = 296,
+        TOKEN_RECORD_TYPES = 297,
+        TOKEN_ENCAPSULATE = 298,
+        TOKEN_ARRAY = 299,
+        TOKEN_POOLS = 300,
+        TOKEN_POOL = 301,
+        TOKEN_SUBNET = 302,
+        TOKEN_INTERFACE = 303,
+        TOKEN_INTERFACE_ID = 304,
+        TOKEN_ID = 305,
+        TOKEN_RAPID_COMMIT = 306,
+        TOKEN_RESERVATION_MODE = 307,
+        TOKEN_HOST_RESERVATION_IDENTIFIERS = 308,
+        TOKEN_CLIENT_CLASSES = 309,
+        TOKEN_TEST = 310,
+        TOKEN_CLIENT_CLASS = 311,
+        TOKEN_RESERVATIONS = 312,
+        TOKEN_DUID = 313,
+        TOKEN_HW_ADDRESS = 314,
+        TOKEN_CIRCUIT_ID = 315,
+        TOKEN_CLIENT_ID = 316,
+        TOKEN_HOSTNAME = 317,
+        TOKEN_RELAY = 318,
+        TOKEN_IP_ADDRESS = 319,
+        TOKEN_HOOKS_LIBRARIES = 320,
+        TOKEN_LIBRARY = 321,
+        TOKEN_PARAMETERS = 322,
+        TOKEN_EXPIRED_LEASES_PROCESSING = 323,
+        TOKEN_SERVER_ID = 324,
+        TOKEN_IDENTIFIER = 325,
+        TOKEN_HTYPE = 326,
+        TOKEN_TIME = 327,
+        TOKEN_ENTERPRISE_ID = 328,
+        TOKEN_DHCP4O6_PORT = 329,
+        TOKEN_VERSION = 330,
+        TOKEN_CONTROL_SOCKET = 331,
+        TOKEN_SOCKET_TYPE = 332,
+        TOKEN_SOCKET_NAME = 333,
+        TOKEN_DHCP_DDNS = 334,
+        TOKEN_LOGGING = 335,
+        TOKEN_LOGGERS = 336,
+        TOKEN_OUTPUT_OPTIONS = 337,
+        TOKEN_OUTPUT = 338,
+        TOKEN_DEBUGLEVEL = 339,
+        TOKEN_SEVERITY = 340,
+        TOKEN_DHCP6 = 341,
+        TOKEN_DHCPDDNS = 342,
+        TOKEN_TOPLEVEL_JSON = 343,
+        TOKEN_TOPLEVEL_DHCP4 = 344,
+        TOKEN_SUB_DHCP4 = 345,
+        TOKEN_SUB_INTERFACES4 = 346,
+        TOKEN_SUB_SUBNET4 = 347,
+        TOKEN_SUB_POOL4 = 348,
+        TOKEN_SUB_RESERVATION = 349,
+        TOKEN_SUB_OPTION_DEF = 350,
+        TOKEN_SUB_OPTION_DATA = 351,
+        TOKEN_SUB_HOOKS_LIBRARY = 352,
+        TOKEN_STRING = 353,
+        TOKEN_INTEGER = 354,
+        TOKEN_FLOAT = 355,
+        TOKEN_BOOLEAN = 356
       };
     };
 
@@ -593,6 +599,26 @@ namespace isc { namespace dhcp {
     symbol_type
     make_INTERFACES (const location_type& l);
 
+    static inline
+    symbol_type
+    make_ECHO_CLIENT_ID (const location_type& l);
+
+    static inline
+    symbol_type
+    make_MATCH_CLIENT_ID (const location_type& l);
+
+    static inline
+    symbol_type
+    make_NEXT_SERVER (const location_type& l);
+
+    static inline
+    symbol_type
+    make_SERVER_HOSTNAME (const location_type& l);
+
+    static inline
+    symbol_type
+    make_BOOT_FILE_NAME (const location_type& l);
+
     static inline
     symbol_type
     make_LEASE_DATABASE (const location_type& l);
@@ -653,6 +679,10 @@ namespace isc { namespace dhcp {
     symbol_type
     make_SUBNET_4O6_INTERFACE (const location_type& l);
 
+    static inline
+    symbol_type
+    make_SUBNET_4O6_INTERFACE_ID (const location_type& l);
+
     static inline
     symbol_type
     make_SUBNET_4O6_SUBNET (const location_type& l);
@@ -1130,12 +1160,12 @@ namespace isc { namespace dhcp {
     enum
     {
       yyeof_ = 0,
-      yylast_ = 589,     ///< Last index in yytable_.
-      yynnts_ = 256,  ///< Number of nonterminal symbols.
+      yylast_ = 623,     ///< Last index in yytable_.
+      yynnts_ = 266,  ///< Number of nonterminal symbols.
       yyfinal_ = 22, ///< Termination state number.
       yyterror_ = 1,
       yyerrcode_ = 256,
-      yyntokens_ = 96  ///< Number of tokens.
+      yyntokens_ = 102  ///< Number of tokens.
     };
 
 
@@ -1187,9 +1217,9 @@ namespace isc { namespace dhcp {
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95
+      95,    96,    97,    98,    99,   100,   101
     };
-    const unsigned int user_token_number_max_ = 350;
+    const unsigned int user_token_number_max_ = 356;
     const token_number_type undef_token_ = 2;
 
     if (static_cast<int>(t) <= yyeof_)
@@ -1222,24 +1252,24 @@ namespace isc { namespace dhcp {
   {
       switch (other.type_get ())
     {
-      case 108: // value
-      case 315: // version_value
+      case 114: // value
+      case 331: // version_value
         value.copy< ElementPtr > (other.value);
         break;
 
-      case 95: // "boolean"
+      case 101: // "boolean"
         value.copy< bool > (other.value);
         break;
 
-      case 94: // "floating point"
+      case 100: // "floating point"
         value.copy< double > (other.value);
         break;
 
-      case 93: // "integer"
+      case 99: // "integer"
         value.copy< int64_t > (other.value);
         break;
 
-      case 92: // "constant string"
+      case 98: // "constant string"
         value.copy< std::string > (other.value);
         break;
 
@@ -1260,24 +1290,24 @@ namespace isc { namespace dhcp {
     (void) v;
       switch (this->type_get ())
     {
-      case 108: // value
-      case 315: // version_value
+      case 114: // value
+      case 331: // version_value
         value.copy< ElementPtr > (v);
         break;
 
-      case 95: // "boolean"
+      case 101: // "boolean"
         value.copy< bool > (v);
         break;
 
-      case 94: // "floating point"
+      case 100: // "floating point"
         value.copy< double > (v);
         break;
 
-      case 93: // "integer"
+      case 99: // "integer"
         value.copy< int64_t > (v);
         break;
 
-      case 92: // "constant string"
+      case 98: // "constant string"
         value.copy< std::string > (v);
         break;
 
@@ -1357,24 +1387,24 @@ namespace isc { namespace dhcp {
     // Type destructor.
     switch (yytype)
     {
-      case 108: // value
-      case 315: // version_value
+      case 114: // value
+      case 331: // version_value
         value.template destroy< ElementPtr > ();
         break;
 
-      case 95: // "boolean"
+      case 101: // "boolean"
         value.template destroy< bool > ();
         break;
 
-      case 94: // "floating point"
+      case 100: // "floating point"
         value.template destroy< double > ();
         break;
 
-      case 93: // "integer"
+      case 99: // "integer"
         value.template destroy< int64_t > ();
         break;
 
-      case 92: // "constant string"
+      case 98: // "constant string"
         value.template destroy< std::string > ();
         break;
 
@@ -1401,24 +1431,24 @@ namespace isc { namespace dhcp {
     super_type::move(s);
       switch (this->type_get ())
     {
-      case 108: // value
-      case 315: // version_value
+      case 114: // value
+      case 331: // version_value
         value.move< ElementPtr > (s.value);
         break;
 
-      case 95: // "boolean"
+      case 101: // "boolean"
         value.move< bool > (s.value);
         break;
 
-      case 94: // "floating point"
+      case 100: // "floating point"
         value.move< double > (s.value);
         break;
 
-      case 93: // "integer"
+      case 99: // "integer"
         value.move< int64_t > (s.value);
         break;
 
-      case 92: // "constant string"
+      case 98: // "constant string"
         value.move< std::string > (s.value);
         break;
 
@@ -1486,7 +1516,8 @@ namespace isc { namespace dhcp {
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
-     345,   346,   347,   348,   349,   350
+     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
+     355,   356
     };
     return static_cast<token_type> (yytoken_number_[type]);
   }
@@ -1557,6 +1588,36 @@ namespace isc { namespace dhcp {
     return symbol_type (token::TOKEN_INTERFACES, l);
   }
 
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_ECHO_CLIENT_ID (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_ECHO_CLIENT_ID, l);
+  }
+
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_MATCH_CLIENT_ID (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_MATCH_CLIENT_ID, l);
+  }
+
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_NEXT_SERVER (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_NEXT_SERVER, l);
+  }
+
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SERVER_HOSTNAME (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_SERVER_HOSTNAME, l);
+  }
+
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_BOOT_FILE_NAME (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_BOOT_FILE_NAME, l);
+  }
+
   Dhcp4Parser::symbol_type
   Dhcp4Parser::make_LEASE_DATABASE (const location_type& l)
   {
@@ -1647,6 +1708,12 @@ namespace isc { namespace dhcp {
     return symbol_type (token::TOKEN_SUBNET_4O6_INTERFACE, l);
   }
 
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_SUBNET_4O6_INTERFACE_ID (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_SUBNET_4O6_INTERFACE_ID, l);
+  }
+
   Dhcp4Parser::symbol_type
   Dhcp4Parser::make_SUBNET_4O6_SUBNET (const location_type& l)
   {
@@ -2058,7 +2125,7 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp4_parser.yy" // lalr1.cc:377
 } } // isc::dhcp
-#line 2062 "dhcp4_parser.h" // lalr1.cc:377
+#line 2129 "dhcp4_parser.h" // lalr1.cc:377
 
 
 
index 02bad281aadb8c04ec2ab8b80dd9508282ae16f6..3780d53d4eb5be63f5e66eb65e5c66517e073fe2 100644 (file)
@@ -36,7 +36,7 @@
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 6
-#define YY_FLEX_SUBMINOR_VERSION 1
+#define YY_FLEX_SUBMINOR_VERSION 0
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -136,13 +136,25 @@ typedef unsigned int flex_uint32_t;
 /* %if-c++-only */
 /* %endif */
 
-/* TODO: this is always defined, so inline it */
-#define yyconst const
+#ifdef __cplusplus
 
-#if defined(__GNUC__) && __GNUC__ >= 3
-#define yynoreturn __attribute__((__noreturn__))
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else  /* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif /* defined (__STDC__) */
+#endif /* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
 #else
-#define yynoreturn
+#define yyconst
 #endif
 
 /* %not-for-header */
@@ -217,7 +229,7 @@ typedef size_t yy_size_t;
 #endif
 
 /* %if-not-reentrant */
-extern int parser6_leng;
+extern yy_size_t parser6_leng;
 /* %endif */
 
 /* %if-c-only */
@@ -266,7 +278,7 @@ struct yy_buffer_state
        /* Size of input buffer in bytes, not including room for EOB
         * characters.
         */
-       int yy_buf_size;
+       yy_size_t yy_buf_size;
 
        /* Number of characters read into yy_ch_buf, not including EOB
         * characters.
@@ -327,7 +339,7 @@ struct yy_buffer_state
 /* Stack of input buffers. */
 static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
 static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
-static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
 /* %endif */
 /* %ok-for-header */
 
@@ -356,10 +368,10 @@ static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
 /* yy_hold_char holds the character lost when parser6_text is formed. */
 static char yy_hold_char;
 static int yy_n_chars;         /* number of characters read into yy_ch_buf */
-int parser6_leng;
+yy_size_t parser6_leng;
 
 /* Points to current character in buffer. */
-static char *yy_c_buf_p = NULL;
+static char *yy_c_buf_p = (char *) 0;
 static int yy_init = 0;                /* whether we need to initialize */
 static int yy_start = 0;       /* start state number */
 
@@ -387,7 +399,7 @@ static void parser6__init_buffer (YY_BUFFER_STATE b,FILE *file  );
 
 YY_BUFFER_STATE parser6__scan_buffer (char *base,yy_size_t size  );
 YY_BUFFER_STATE parser6__scan_string (yyconst char *yy_str  );
-YY_BUFFER_STATE parser6__scan_bytes (yyconst char *bytes,int len  );
+YY_BUFFER_STATE parser6__scan_bytes (yyconst char *bytes,yy_size_t len  );
 
 /* %endif */
 
@@ -429,7 +441,7 @@ void parser6_free (void *  );
 
 typedef unsigned char YY_CHAR;
 
-FILE *parser6_in = NULL, *parser6_out = NULL;
+FILE *parser6_in = (FILE *) 0, *parser6_out = (FILE *) 0;
 
 typedef int yy_state_type;
 
@@ -450,7 +462,10 @@ extern char *parser6_text;
 static yy_state_type yy_get_previous_state (void );
 static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
 static int yy_get_next_buffer (void );
-static void yynoreturn yy_fatal_error (yyconst char* msg  );
+#if defined(__GNUC__) && __GNUC__ >= 3
+__attribute__((__noreturn__))
+#endif
+static void yy_fatal_error (yyconst char msg[]  );
 
 /* %endif */
 
@@ -460,7 +475,7 @@ static void yynoreturn yy_fatal_error (yyconst char* msg  );
 #define YY_DO_BEFORE_ACTION \
        (yytext_ptr) = yy_bp; \
 /* %% [2.0] code to fiddle parser6_text and parser6_leng for yymore() goes here \ */\
-       parser6_leng = (int) (yy_cp - yy_bp); \
+       parser6_leng = (size_t) (yy_cp - yy_bp); \
        (yy_hold_char) = *yy_cp; \
        *yy_cp = '\0'; \
 /* %% [3.0] code to copy yytext_ptr to parser6_text[] goes here, if %array \ */\
@@ -1056,7 +1071,7 @@ static yyconst flex_int16_t yy_rule_linenum[106] =
 #define YY_RESTORE_YY_MORE_OFFSET
 char *parser6_text;
 #line 1 "dhcp6_lexer.ll"
-/* Copyright (C) 2015-2016 Internet Systems Consortium, Inc. ("ISC")
+/* Copyright (C) 2016 Internet Systems Consortium, Inc. ("ISC")
 
    This Source Code Form is subject to the terms of the Mozilla Public
    License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -1115,7 +1130,7 @@ unsigned int comment_start_line = 0;
 // by moving it ahead by parser6_leng bytes. parser6_leng specifies the length of the
 // currently matched token.
 #define YY_USER_ACTION  driver.loc_.columns(parser6_leng);
-#line 1119 "dhcp6_lexer.cc"
+#line 1134 "dhcp6_lexer.cc"
 
 #define INITIAL 0
 #define COMMENT 1
@@ -1171,7 +1186,7 @@ FILE *parser6_get_out (void );
 
 void parser6_set_out  (FILE * _out_str  );
 
-                       int parser6_get_leng (void );
+yy_size_t parser6_get_leng (void );
 
 char *parser6_get_text (void );
 
@@ -1245,7 +1260,7 @@ static int input (void );
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO do { if (fwrite( parser6_text, (size_t) parser6_leng, 1, parser6_out )) {} } while (0)
+#define ECHO do { if (fwrite( parser6_text, parser6_leng, 1, parser6_out )) {} } while (0)
 /* %endif */
 /* %if-c++-only C++ definition */
 /* %endif */
@@ -1273,7 +1288,7 @@ static int input (void );
        else \
                { \
                errno=0; \
-               while ( (result = (int) fread(buf, 1, max_size, parser6_in))==0 && ferror(parser6_in)) \
+               while ( (result = fread(buf, 1, max_size, parser6_in))==0 && ferror(parser6_in)) \
                        { \
                        if( errno != EINTR) \
                                { \
@@ -1441,7 +1456,7 @@ YY_DECL
     }
 
 
-#line 1445 "dhcp6_lexer.cc"
+#line 1460 "dhcp6_lexer.cc"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@ -1473,7 +1488,7 @@ yy_match:
                                if ( yy_current_state >= 759 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
-                       yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
+                       yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
                while ( yy_current_state != 758 );
@@ -2641,7 +2656,7 @@ YY_RULE_SETUP
             }
             break;
         default:
-            if ((c > 0) && (c < 0x20)) {
+            if ((c >= 0) && (c < 0x20)) {
                 // impossible condition
                 driver.error(driver.loc_, "Invalid control in \"" + raw + "\"");
             }
@@ -2795,7 +2810,7 @@ YY_RULE_SETUP
 #line 1069 "dhcp6_lexer.ll"
 ECHO;
        YY_BREAK
-#line 2799 "dhcp6_lexer.cc"
+#line 2814 "dhcp6_lexer.cc"
 
        case YY_END_OF_BUFFER:
                {
@@ -2998,7 +3013,7 @@ static int yy_get_next_buffer (void)
 
        else
                {
-                       int num_to_read =
+                       yy_size_t num_to_read =
                        YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
 
                while ( num_to_read <= 0 )
@@ -3012,7 +3027,7 @@ static int yy_get_next_buffer (void)
 
                        if ( b->yy_is_our_buffer )
                                {
-                               int new_size = b->yy_buf_size * 2;
+                               yy_size_t new_size = b->yy_buf_size * 2;
 
                                if ( new_size <= 0 )
                                        b->yy_buf_size += b->yy_buf_size / 8;
@@ -3025,7 +3040,7 @@ static int yy_get_next_buffer (void)
                                }
                        else
                                /* Can't grow it, we don't own it. */
-                               b->yy_ch_buf = NULL;
+                               b->yy_ch_buf = 0;
 
                        if ( ! b->yy_ch_buf )
                                YY_FATAL_ERROR(
@@ -3115,7 +3130,7 @@ static int yy_get_next_buffer (void)
                        if ( yy_current_state >= 759 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
-               yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
+               yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                }
 
        return yy_current_state;
@@ -3148,7 +3163,7 @@ static int yy_get_next_buffer (void)
                if ( yy_current_state >= 759 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
-       yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
+       yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
        yy_is_jam = (yy_current_state == 758);
 
                return yy_is_jam ? 0 : yy_current_state;
@@ -3188,7 +3203,7 @@ static int yy_get_next_buffer (void)
 
                else
                        { /* need more input */
-                       int offset = (yy_c_buf_p) - (yytext_ptr);
+                       yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
                        ++(yy_c_buf_p);
 
                        switch ( yy_get_next_buffer(  ) )
@@ -3212,7 +3227,7 @@ static int yy_get_next_buffer (void)
                                case EOB_ACT_END_OF_FILE:
                                        {
                                        if ( parser6_wrap( ) )
-                                               return 0;
+                                               return EOF;
 
                                        if ( ! (yy_did_buffer_switch_on_eof) )
                                                YY_NEW_FILE;
@@ -3528,7 +3543,7 @@ static void parser6_ensure_buffer_stack (void)
 /* %if-c++-only */
 /* %endif */
 {
-       int num_to_alloc;
+       yy_size_t num_to_alloc;
     
        if (!(yy_buffer_stack)) {
 
@@ -3536,7 +3551,7 @@ static void parser6_ensure_buffer_stack (void)
                 * scanner will even need a stack. We use 2 instead of 1 to avoid an
                 * immediate realloc on the next call.
          */
-      num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
+               num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
                (yy_buffer_stack) = (struct yy_buffer_state**)parser6_alloc
                                                                (num_to_alloc * sizeof(struct yy_buffer_state*)
                                                                );
@@ -3585,7 +3600,7 @@ YY_BUFFER_STATE parser6__scan_buffer  (char * base, yy_size_t  size )
             base[size-2] != YY_END_OF_BUFFER_CHAR ||
             base[size-1] != YY_END_OF_BUFFER_CHAR )
                /* They forgot to leave room for the EOB's. */
-               return NULL;
+               return 0;
 
        b = (YY_BUFFER_STATE) parser6_alloc(sizeof( struct yy_buffer_state )  );
        if ( ! b )
@@ -3594,7 +3609,7 @@ YY_BUFFER_STATE parser6__scan_buffer  (char * base, yy_size_t  size )
        b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
        b->yy_buf_pos = b->yy_ch_buf = base;
        b->yy_is_our_buffer = 0;
-       b->yy_input_file = NULL;
+       b->yy_input_file = 0;
        b->yy_n_chars = b->yy_buf_size;
        b->yy_is_interactive = 0;
        b->yy_at_bol = 1;
@@ -3619,7 +3634,7 @@ YY_BUFFER_STATE parser6__scan_buffer  (char * base, yy_size_t  size )
 YY_BUFFER_STATE parser6__scan_string (yyconst char * yystr )
 {
     
-       return parser6__scan_bytes(yystr,(int) strlen(yystr) );
+       return parser6__scan_bytes(yystr,strlen(yystr) );
 }
 /* %endif */
 
@@ -3631,7 +3646,7 @@ YY_BUFFER_STATE parser6__scan_string (yyconst char * yystr )
  * 
  * @return the newly allocated buffer state object.
  */
-YY_BUFFER_STATE parser6__scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
+YY_BUFFER_STATE parser6__scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
 {
        YY_BUFFER_STATE b;
        char *buf;
@@ -3639,7 +3654,7 @@ YY_BUFFER_STATE parser6__scan_bytes  (yyconst char * yybytes, int  _yybytes_len
        yy_size_t i;
     
        /* Get memory for full buffer, including space for trailing EOB's. */
-       n = (yy_size_t) _yybytes_len + 2;
+       n = _yybytes_len + 2;
        buf = (char *) parser6_alloc(n  );
        if ( ! buf )
                YY_FATAL_ERROR( "out of dynamic memory in parser6__scan_bytes()" );
@@ -3667,7 +3682,7 @@ YY_BUFFER_STATE parser6__scan_bytes  (yyconst char * yybytes, int  _yybytes_len
 #endif
 
 /* %if-c-only */
-static void yynoreturn yy_fatal_error (yyconst char* msg )
+static void yy_fatal_error (yyconst char* msg )
 {
                        (void) fprintf( stderr, "%s\n", msg );
        exit( YY_EXIT_FAILURE );
@@ -3727,7 +3742,7 @@ FILE *parser6_get_out  (void)
 /** Get the length of the current token.
  * 
  */
-int parser6_get_leng  (void)
+yy_size_t parser6_get_leng  (void)
 {
         return parser6_leng;
 }
@@ -3794,10 +3809,10 @@ static int yy_init_globals (void)
      * This function is called from parser6_lex_destroy(), so don't allocate here.
      */
 
-    (yy_buffer_stack) = NULL;
+    (yy_buffer_stack) = 0;
     (yy_buffer_stack_top) = 0;
     (yy_buffer_stack_max) = 0;
-    (yy_c_buf_p) = NULL;
+    (yy_c_buf_p) = (char *) 0;
     (yy_init) = 0;
     (yy_start) = 0;
 
@@ -3806,8 +3821,8 @@ static int yy_init_globals (void)
     parser6_in = stdin;
     parser6_out = stdout;
 #else
-    parser6_in = NULL;
-    parser6_out = NULL;
+    parser6_in = (FILE *) 0;
+    parser6_out = (FILE *) 0;
 #endif
 
     /* For future reference: Set errno on error, since we are called by
@@ -3870,7 +3885,7 @@ static int yy_flex_strlen (yyconst char * s )
 
 void *parser6_alloc (yy_size_t  size )
 {
-                       return malloc(size);
+                       return (void *) malloc( size );
 }
 
 void *parser6_realloc  (void * ptr, yy_size_t  size )
@@ -3883,7 +3898,7 @@ void *parser6_realloc  (void * ptr, yy_size_t  size )
         * any pointer type to void*, and deal with argument conversions
         * as though doing an assignment.
         */
-       return realloc(ptr, size);
+       return (void *) realloc( (char *) ptr, size );
 }
 
 void parser6_free (void * ptr )
index 0aeca55fb1e35939732d0b91bf52a91c3bbbb5ed..239704683c8fa2193dfd7c1bd8641c8df96d8a39 100644 (file)
@@ -1,4 +1,3 @@
-// Generated 201612101015
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Locations for Bison parsers in C++
index c92778712032016a3e7f94eb06d31bbcf59ae2f6..2ee80e6d0a22726887dabd52d10789130b8e5d56 100644 (file)
@@ -1,4 +1,3 @@
-// Generated 201612101015
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Positions for Bison parsers in C++
index 534eec0ebf3089368c08e7b6bc0056ac2c85257f..db2863a06ef4a89243bf39cc72557573857e8cf7 100644 (file)
@@ -1,4 +1,3 @@
-// Generated 201612101015
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Stack handling for Bison parsers in C++