diff --git a/doc/examples/kea6/all-keys.json b/doc/examples/kea6/all-keys.json
index 9be4be0d72..1504d5f75f 100644
--- a/doc/examples/kea6/all-keys.json
+++ b/doc/examples/kea6/all-keys.json
@@ -22,7 +22,25 @@
// Class selection expression. The DHCP packet is assigned to this
// class when the given expression evaluates to true.
- "test": "member('HA_server1')"
+ "test": "member('HA_server1')",
+
+ // Class valid lifetime.
+ "valid-lifetime": 6000,
+
+ // Class min valid lifetime.
+ "min-valid-lifetime": 4000,
+
+ // Class max valid lifetime.
+ "max-valid-lifetime": 8000,
+
+ // Class preferred lifetime.
+ "preferred-lifetime": 7000,
+
+ // Class min preferred lifetime.
+ "min-preferred-lifetime": 5000,
+
+ // Class max preferred lifetime.
+ "max-preferred-lifetime": 9000
},
{
// Second class name.
diff --git a/src/bin/dhcp6/dhcp6_lexer.cc b/src/bin/dhcp6/dhcp6_lexer.cc
index d51aafd919..36da1ac651 100644
--- a/src/bin/dhcp6/dhcp6_lexer.cc
+++ b/src/bin/dhcp6/dhcp6_lexer.cc
@@ -1,6 +1,6 @@
-#line 1 "dhcp6_lexer.cc"
+#line 2 "dhcp6_lexer.cc"
-#line 3 "dhcp6_lexer.cc"
+#line 4 "dhcp6_lexer.cc"
#define YY_INT_ALIGNED short int
@@ -1996,23 +1996,23 @@ static const flex_int16_t yy_rule_linenum[219] =
468, 477, 486, 495, 504, 513, 522, 531, 540, 549,
558, 571, 580, 589, 598, 607, 618, 629, 640, 651,
663, 674, 685, 696, 707, 718, 729, 740, 749, 758,
- 767, 778, 789, 800, 811, 822, 831, 842, 853, 864,
- 875, 886, 897, 908, 919, 928, 937, 946, 955, 966,
- 977, 988, 999, 1010, 1021, 1032, 1044, 1054, 1065, 1074,
+ 767, 778, 789, 800, 811, 822, 831, 843, 855, 867,
+ 879, 891, 903, 914, 925, 934, 943, 952, 961, 972,
+ 983, 994, 1005, 1016, 1027, 1038, 1050, 1060, 1071, 1080,
- 1083, 1098, 1114, 1123, 1132, 1141, 1150, 1159, 1168, 1177,
- 1186, 1195, 1204, 1228, 1252, 1261, 1271, 1281, 1290, 1300,
- 1311, 1320, 1329, 1338, 1347, 1356, 1367, 1378, 1389, 1399,
- 1408, 1417, 1426, 1437, 1448, 1459, 1470, 1481, 1490, 1499,
- 1508, 1517, 1526, 1535, 1544, 1553, 1562, 1572, 1584, 1597,
- 1606, 1615, 1625, 1635, 1644, 1655, 1665, 1674, 1684, 1694,
- 1703, 1712, 1721, 1730, 1740, 1749, 1758, 1767, 1776, 1785,
- 1794, 1803, 1812, 1821, 1830, 1839, 1848, 1857, 1866, 1875,
- 1884, 1893, 1902, 1911, 1920, 1929, 1938, 1947, 1956, 1965,
- 1974, 1983, 1992, 2001, 2010, 2019, 2028, 2037, 2046, 2055,
+ 1089, 1104, 1120, 1129, 1138, 1147, 1156, 1165, 1174, 1183,
+ 1192, 1201, 1210, 1234, 1258, 1267, 1277, 1287, 1296, 1306,
+ 1317, 1326, 1335, 1344, 1353, 1362, 1373, 1384, 1395, 1405,
+ 1414, 1423, 1432, 1443, 1454, 1465, 1476, 1487, 1496, 1505,
+ 1514, 1523, 1532, 1541, 1550, 1559, 1568, 1578, 1590, 1603,
+ 1612, 1621, 1631, 1641, 1650, 1661, 1671, 1680, 1690, 1700,
+ 1709, 1718, 1727, 1736, 1746, 1755, 1764, 1773, 1782, 1791,
+ 1800, 1809, 1818, 1827, 1836, 1845, 1854, 1863, 1872, 1881,
+ 1890, 1899, 1908, 1917, 1926, 1935, 1944, 1953, 1962, 1971,
+ 1980, 1989, 1998, 2007, 2016, 2025, 2034, 2043, 2052, 2061,
- 2156, 2172, 2221, 2229, 2244, 2245, 2246, 2247, 2248, 2249,
- 2251, 2269, 2282, 2287, 2291, 2293, 2295, 2297
+ 2162, 2178, 2227, 2235, 2250, 2251, 2252, 2253, 2254, 2255,
+ 2257, 2275, 2288, 2293, 2297, 2299, 2301, 2303
} ;
/* The intent behind this definition is that it'll catch
@@ -2066,7 +2066,7 @@ using namespace isc::dhcp;
/* To avoid the call to exit... oops! */
#define YY_FATAL_ERROR(msg) isc::dhcp::Parser6Context::fatal(msg)
-#line 2069 "dhcp6_lexer.cc"
+#line 2070 "dhcp6_lexer.cc"
/* noyywrap disables automatic rewinding for the next file to parse. Since we
always parse only a single string, there's no need to do any wraps. And
using yywrap requires linking with -lfl, which provides the default yywrap
@@ -2092,8 +2092,8 @@ using namespace isc::dhcp;
by moving it ahead by yyleng bytes. yyleng specifies the length of the
currently matched token. */
#define YY_USER_ACTION driver.loc_.columns(yyleng);
-#line 2095 "dhcp6_lexer.cc"
#line 2096 "dhcp6_lexer.cc"
+#line 2097 "dhcp6_lexer.cc"
#define INITIAL 0
#define COMMENT 1
@@ -2423,7 +2423,7 @@ YY_DECL
}
-#line 2426 "dhcp6_lexer.cc"
+#line 2427 "dhcp6_lexer.cc"
while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
{
@@ -3429,6 +3429,7 @@ YY_RULE_SETUP
case isc::dhcp::Parser6Context::DHCP6:
case isc::dhcp::Parser6Context::SUBNET6:
case isc::dhcp::Parser6Context::SHARED_NETWORK:
+ case isc::dhcp::Parser6Context::CLIENT_CLASSES:
return isc::dhcp::Dhcp6Parser::make_PREFERRED_LIFETIME(driver.loc_);
default:
return isc::dhcp::Dhcp6Parser::make_STRING("preferred-lifetime", driver.loc_);
@@ -3437,12 +3438,13 @@ YY_RULE_SETUP
YY_BREAK
case 78:
YY_RULE_SETUP
-#line 842 "dhcp6_lexer.ll"
+#line 843 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
case isc::dhcp::Parser6Context::SUBNET6:
case isc::dhcp::Parser6Context::SHARED_NETWORK:
+ case isc::dhcp::Parser6Context::CLIENT_CLASSES:
return isc::dhcp::Dhcp6Parser::make_MIN_PREFERRED_LIFETIME(driver.loc_);
default:
return isc::dhcp::Dhcp6Parser::make_STRING("min-preferred-lifetime", driver.loc_);
@@ -3451,12 +3453,13 @@ YY_RULE_SETUP
YY_BREAK
case 79:
YY_RULE_SETUP
-#line 853 "dhcp6_lexer.ll"
+#line 855 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
case isc::dhcp::Parser6Context::SUBNET6:
case isc::dhcp::Parser6Context::SHARED_NETWORK:
+ case isc::dhcp::Parser6Context::CLIENT_CLASSES:
return isc::dhcp::Dhcp6Parser::make_MAX_PREFERRED_LIFETIME(driver.loc_);
default:
return isc::dhcp::Dhcp6Parser::make_STRING("max-preferred-lifetime", driver.loc_);
@@ -3465,12 +3468,13 @@ YY_RULE_SETUP
YY_BREAK
case 80:
YY_RULE_SETUP
-#line 864 "dhcp6_lexer.ll"
+#line 867 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
case isc::dhcp::Parser6Context::SUBNET6:
case isc::dhcp::Parser6Context::SHARED_NETWORK:
+ case isc::dhcp::Parser6Context::CLIENT_CLASSES:
return isc::dhcp::Dhcp6Parser::make_VALID_LIFETIME(driver.loc_);
default:
return isc::dhcp::Dhcp6Parser::make_STRING("valid-lifetime", driver.loc_);
@@ -3479,12 +3483,13 @@ YY_RULE_SETUP
YY_BREAK
case 81:
YY_RULE_SETUP
-#line 875 "dhcp6_lexer.ll"
+#line 879 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
case isc::dhcp::Parser6Context::SUBNET6:
case isc::dhcp::Parser6Context::SHARED_NETWORK:
+ case isc::dhcp::Parser6Context::CLIENT_CLASSES:
return isc::dhcp::Dhcp6Parser::make_MIN_VALID_LIFETIME(driver.loc_);
default:
return isc::dhcp::Dhcp6Parser::make_STRING("min-valid-lifetime", driver.loc_);
@@ -3493,12 +3498,13 @@ YY_RULE_SETUP
YY_BREAK
case 82:
YY_RULE_SETUP
-#line 886 "dhcp6_lexer.ll"
+#line 891 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
case isc::dhcp::Parser6Context::SUBNET6:
case isc::dhcp::Parser6Context::SHARED_NETWORK:
+ case isc::dhcp::Parser6Context::CLIENT_CLASSES:
return isc::dhcp::Dhcp6Parser::make_MAX_VALID_LIFETIME(driver.loc_);
default:
return isc::dhcp::Dhcp6Parser::make_STRING("max-valid-lifetime", driver.loc_);
@@ -3507,7 +3513,7 @@ YY_RULE_SETUP
YY_BREAK
case 83:
YY_RULE_SETUP
-#line 897 "dhcp6_lexer.ll"
+#line 903 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -3521,7 +3527,7 @@ YY_RULE_SETUP
YY_BREAK
case 84:
YY_RULE_SETUP
-#line 908 "dhcp6_lexer.ll"
+#line 914 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -3535,7 +3541,7 @@ YY_RULE_SETUP
YY_BREAK
case 85:
YY_RULE_SETUP
-#line 919 "dhcp6_lexer.ll"
+#line 925 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -3547,7 +3553,7 @@ YY_RULE_SETUP
YY_BREAK
case 86:
YY_RULE_SETUP
-#line 928 "dhcp6_lexer.ll"
+#line 934 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -3559,7 +3565,7 @@ YY_RULE_SETUP
YY_BREAK
case 87:
YY_RULE_SETUP
-#line 937 "dhcp6_lexer.ll"
+#line 943 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -3571,7 +3577,7 @@ YY_RULE_SETUP
YY_BREAK
case 88:
YY_RULE_SETUP
-#line 946 "dhcp6_lexer.ll"
+#line 952 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -3583,7 +3589,7 @@ YY_RULE_SETUP
YY_BREAK
case 89:
YY_RULE_SETUP
-#line 955 "dhcp6_lexer.ll"
+#line 961 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -3597,7 +3603,7 @@ YY_RULE_SETUP
YY_BREAK
case 90:
YY_RULE_SETUP
-#line 966 "dhcp6_lexer.ll"
+#line 972 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -3611,7 +3617,7 @@ YY_RULE_SETUP
YY_BREAK
case 91:
YY_RULE_SETUP
-#line 977 "dhcp6_lexer.ll"
+#line 983 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -3625,7 +3631,7 @@ YY_RULE_SETUP
YY_BREAK
case 92:
YY_RULE_SETUP
-#line 988 "dhcp6_lexer.ll"
+#line 994 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -3639,7 +3645,7 @@ YY_RULE_SETUP
YY_BREAK
case 93:
YY_RULE_SETUP
-#line 999 "dhcp6_lexer.ll"
+#line 1005 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -3653,7 +3659,7 @@ YY_RULE_SETUP
YY_BREAK
case 94:
YY_RULE_SETUP
-#line 1010 "dhcp6_lexer.ll"
+#line 1016 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -3667,7 +3673,7 @@ YY_RULE_SETUP
YY_BREAK
case 95:
YY_RULE_SETUP
-#line 1021 "dhcp6_lexer.ll"
+#line 1027 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -3681,7 +3687,7 @@ YY_RULE_SETUP
YY_BREAK
case 96:
YY_RULE_SETUP
-#line 1032 "dhcp6_lexer.ll"
+#line 1038 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -3695,7 +3701,7 @@ YY_RULE_SETUP
YY_BREAK
case 97:
YY_RULE_SETUP
-#line 1044 "dhcp6_lexer.ll"
+#line 1050 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -3708,7 +3714,7 @@ YY_RULE_SETUP
YY_BREAK
case 98:
YY_RULE_SETUP
-#line 1054 "dhcp6_lexer.ll"
+#line 1060 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -3722,7 +3728,7 @@ YY_RULE_SETUP
YY_BREAK
case 99:
YY_RULE_SETUP
-#line 1065 "dhcp6_lexer.ll"
+#line 1071 "dhcp6_lexer.ll"
{
switch (driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -3734,7 +3740,7 @@ YY_RULE_SETUP
YY_BREAK
case 100:
YY_RULE_SETUP
-#line 1074 "dhcp6_lexer.ll"
+#line 1080 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -3746,7 +3752,7 @@ YY_RULE_SETUP
YY_BREAK
case 101:
YY_RULE_SETUP
-#line 1083 "dhcp6_lexer.ll"
+#line 1089 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -3764,7 +3770,7 @@ YY_RULE_SETUP
YY_BREAK
case 102:
YY_RULE_SETUP
-#line 1098 "dhcp6_lexer.ll"
+#line 1104 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -3783,7 +3789,7 @@ YY_RULE_SETUP
YY_BREAK
case 103:
YY_RULE_SETUP
-#line 1114 "dhcp6_lexer.ll"
+#line 1120 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::OPTION_DATA:
@@ -3795,7 +3801,7 @@ YY_RULE_SETUP
YY_BREAK
case 104:
YY_RULE_SETUP
-#line 1123 "dhcp6_lexer.ll"
+#line 1129 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::OPTION_DATA:
@@ -3807,7 +3813,7 @@ YY_RULE_SETUP
YY_BREAK
case 105:
YY_RULE_SETUP
-#line 1132 "dhcp6_lexer.ll"
+#line 1138 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SUBNET6:
@@ -3819,7 +3825,7 @@ YY_RULE_SETUP
YY_BREAK
case 106:
YY_RULE_SETUP
-#line 1141 "dhcp6_lexer.ll"
+#line 1147 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SUBNET6:
@@ -3831,7 +3837,7 @@ YY_RULE_SETUP
YY_BREAK
case 107:
YY_RULE_SETUP
-#line 1150 "dhcp6_lexer.ll"
+#line 1156 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::PD_POOLS:
@@ -3843,7 +3849,7 @@ YY_RULE_SETUP
YY_BREAK
case 108:
YY_RULE_SETUP
-#line 1159 "dhcp6_lexer.ll"
+#line 1165 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::PD_POOLS:
@@ -3855,7 +3861,7 @@ YY_RULE_SETUP
YY_BREAK
case 109:
YY_RULE_SETUP
-#line 1168 "dhcp6_lexer.ll"
+#line 1174 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::PD_POOLS:
@@ -3867,7 +3873,7 @@ YY_RULE_SETUP
YY_BREAK
case 110:
YY_RULE_SETUP
-#line 1177 "dhcp6_lexer.ll"
+#line 1183 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::PD_POOLS:
@@ -3879,7 +3885,7 @@ YY_RULE_SETUP
YY_BREAK
case 111:
YY_RULE_SETUP
-#line 1186 "dhcp6_lexer.ll"
+#line 1192 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::PD_POOLS:
@@ -3891,7 +3897,7 @@ YY_RULE_SETUP
YY_BREAK
case 112:
YY_RULE_SETUP
-#line 1195 "dhcp6_lexer.ll"
+#line 1201 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::POOLS:
@@ -3903,7 +3909,7 @@ YY_RULE_SETUP
YY_BREAK
case 113:
YY_RULE_SETUP
-#line 1204 "dhcp6_lexer.ll"
+#line 1210 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -3930,7 +3936,7 @@ YY_RULE_SETUP
YY_BREAK
case 114:
YY_RULE_SETUP
-#line 1228 "dhcp6_lexer.ll"
+#line 1234 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -3957,7 +3963,7 @@ YY_RULE_SETUP
YY_BREAK
case 115:
YY_RULE_SETUP
-#line 1252 "dhcp6_lexer.ll"
+#line 1258 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SUBNET6:
@@ -3969,7 +3975,7 @@ YY_RULE_SETUP
YY_BREAK
case 116:
YY_RULE_SETUP
-#line 1261 "dhcp6_lexer.ll"
+#line 1267 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SUBNET6:
@@ -3982,7 +3988,7 @@ YY_RULE_SETUP
YY_BREAK
case 117:
YY_RULE_SETUP
-#line 1271 "dhcp6_lexer.ll"
+#line 1277 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SUBNET6:
@@ -3995,7 +4001,7 @@ YY_RULE_SETUP
YY_BREAK
case 118:
YY_RULE_SETUP
-#line 1281 "dhcp6_lexer.ll"
+#line 1287 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SUBNET6:
@@ -4007,7 +4013,7 @@ YY_RULE_SETUP
YY_BREAK
case 119:
YY_RULE_SETUP
-#line 1290 "dhcp6_lexer.ll"
+#line 1296 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SUBNET6:
@@ -4020,7 +4026,7 @@ YY_RULE_SETUP
YY_BREAK
case 120:
YY_RULE_SETUP
-#line 1300 "dhcp6_lexer.ll"
+#line 1306 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -4034,7 +4040,7 @@ YY_RULE_SETUP
YY_BREAK
case 121:
YY_RULE_SETUP
-#line 1311 "dhcp6_lexer.ll"
+#line 1317 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -4046,7 +4052,7 @@ YY_RULE_SETUP
YY_BREAK
case 122:
YY_RULE_SETUP
-#line 1320 "dhcp6_lexer.ll"
+#line 1326 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -4058,7 +4064,7 @@ YY_RULE_SETUP
YY_BREAK
case 123:
YY_RULE_SETUP
-#line 1329 "dhcp6_lexer.ll"
+#line 1335 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -4070,7 +4076,7 @@ YY_RULE_SETUP
YY_BREAK
case 124:
YY_RULE_SETUP
-#line 1338 "dhcp6_lexer.ll"
+#line 1344 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -4082,7 +4088,7 @@ YY_RULE_SETUP
YY_BREAK
case 125:
YY_RULE_SETUP
-#line 1347 "dhcp6_lexer.ll"
+#line 1353 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -4094,7 +4100,7 @@ YY_RULE_SETUP
YY_BREAK
case 126:
YY_RULE_SETUP
-#line 1356 "dhcp6_lexer.ll"
+#line 1362 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -4108,7 +4114,7 @@ YY_RULE_SETUP
YY_BREAK
case 127:
YY_RULE_SETUP
-#line 1367 "dhcp6_lexer.ll"
+#line 1373 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -4122,7 +4128,7 @@ YY_RULE_SETUP
YY_BREAK
case 128:
YY_RULE_SETUP
-#line 1378 "dhcp6_lexer.ll"
+#line 1384 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -4136,7 +4142,7 @@ YY_RULE_SETUP
YY_BREAK
case 129:
YY_RULE_SETUP
-#line 1389 "dhcp6_lexer.ll"
+#line 1395 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -4149,7 +4155,7 @@ YY_RULE_SETUP
YY_BREAK
case 130:
YY_RULE_SETUP
-#line 1399 "dhcp6_lexer.ll"
+#line 1405 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -4161,7 +4167,7 @@ YY_RULE_SETUP
YY_BREAK
case 131:
YY_RULE_SETUP
-#line 1408 "dhcp6_lexer.ll"
+#line 1414 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -4173,7 +4179,7 @@ YY_RULE_SETUP
YY_BREAK
case 132:
YY_RULE_SETUP
-#line 1417 "dhcp6_lexer.ll"
+#line 1423 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -4185,7 +4191,7 @@ YY_RULE_SETUP
YY_BREAK
case 133:
YY_RULE_SETUP
-#line 1426 "dhcp6_lexer.ll"
+#line 1432 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -4199,7 +4205,7 @@ YY_RULE_SETUP
YY_BREAK
case 134:
YY_RULE_SETUP
-#line 1437 "dhcp6_lexer.ll"
+#line 1443 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -4213,7 +4219,7 @@ YY_RULE_SETUP
YY_BREAK
case 135:
YY_RULE_SETUP
-#line 1448 "dhcp6_lexer.ll"
+#line 1454 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -4227,7 +4233,7 @@ YY_RULE_SETUP
YY_BREAK
case 136:
YY_RULE_SETUP
-#line 1459 "dhcp6_lexer.ll"
+#line 1465 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -4241,7 +4247,7 @@ YY_RULE_SETUP
YY_BREAK
case 137:
YY_RULE_SETUP
-#line 1470 "dhcp6_lexer.ll"
+#line 1476 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -4255,7 +4261,7 @@ YY_RULE_SETUP
YY_BREAK
case 138:
YY_RULE_SETUP
-#line 1481 "dhcp6_lexer.ll"
+#line 1487 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -4267,7 +4273,7 @@ YY_RULE_SETUP
YY_BREAK
case 139:
YY_RULE_SETUP
-#line 1490 "dhcp6_lexer.ll"
+#line 1496 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::LOGGERS:
@@ -4279,7 +4285,7 @@ YY_RULE_SETUP
YY_BREAK
case 140:
YY_RULE_SETUP
-#line 1499 "dhcp6_lexer.ll"
+#line 1505 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -4291,7 +4297,7 @@ YY_RULE_SETUP
YY_BREAK
case 141:
YY_RULE_SETUP
-#line 1508 "dhcp6_lexer.ll"
+#line 1514 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -4303,7 +4309,7 @@ YY_RULE_SETUP
YY_BREAK
case 142:
YY_RULE_SETUP
-#line 1517 "dhcp6_lexer.ll"
+#line 1523 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -4315,7 +4321,7 @@ YY_RULE_SETUP
YY_BREAK
case 143:
YY_RULE_SETUP
-#line 1526 "dhcp6_lexer.ll"
+#line 1532 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -4327,7 +4333,7 @@ YY_RULE_SETUP
YY_BREAK
case 144:
YY_RULE_SETUP
-#line 1535 "dhcp6_lexer.ll"
+#line 1541 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -4339,7 +4345,7 @@ YY_RULE_SETUP
YY_BREAK
case 145:
YY_RULE_SETUP
-#line 1544 "dhcp6_lexer.ll"
+#line 1550 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::LOGGERS:
@@ -4351,7 +4357,7 @@ YY_RULE_SETUP
YY_BREAK
case 146:
YY_RULE_SETUP
-#line 1553 "dhcp6_lexer.ll"
+#line 1559 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::LOGGERS:
@@ -4363,7 +4369,7 @@ YY_RULE_SETUP
YY_BREAK
case 147:
YY_RULE_SETUP
-#line 1562 "dhcp6_lexer.ll"
+#line 1568 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -4376,7 +4382,7 @@ YY_RULE_SETUP
YY_BREAK
case 148:
YY_RULE_SETUP
-#line 1572 "dhcp6_lexer.ll"
+#line 1578 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SUBNET6:
@@ -4391,7 +4397,7 @@ YY_RULE_SETUP
YY_BREAK
case 149:
YY_RULE_SETUP
-#line 1584 "dhcp6_lexer.ll"
+#line 1590 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SUBNET6:
@@ -4407,7 +4413,7 @@ YY_RULE_SETUP
YY_BREAK
case 150:
YY_RULE_SETUP
-#line 1597 "dhcp6_lexer.ll"
+#line 1603 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::CLIENT_CLASSES:
@@ -4419,7 +4425,7 @@ YY_RULE_SETUP
YY_BREAK
case 151:
YY_RULE_SETUP
-#line 1606 "dhcp6_lexer.ll"
+#line 1612 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::CLIENT_CLASSES:
@@ -4431,7 +4437,7 @@ YY_RULE_SETUP
YY_BREAK
case 152:
YY_RULE_SETUP
-#line 1615 "dhcp6_lexer.ll"
+#line 1621 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -4444,7 +4450,7 @@ YY_RULE_SETUP
YY_BREAK
case 153:
YY_RULE_SETUP
-#line 1625 "dhcp6_lexer.ll"
+#line 1631 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::RESERVATIONS:
@@ -4457,7 +4463,7 @@ YY_RULE_SETUP
YY_BREAK
case 154:
YY_RULE_SETUP
-#line 1635 "dhcp6_lexer.ll"
+#line 1641 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::RESERVATIONS:
@@ -4469,7 +4475,7 @@ YY_RULE_SETUP
YY_BREAK
case 155:
YY_RULE_SETUP
-#line 1644 "dhcp6_lexer.ll"
+#line 1650 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::MAC_SOURCES:
@@ -4483,7 +4489,7 @@ YY_RULE_SETUP
YY_BREAK
case 156:
YY_RULE_SETUP
-#line 1655 "dhcp6_lexer.ll"
+#line 1661 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS:
@@ -4496,7 +4502,7 @@ YY_RULE_SETUP
YY_BREAK
case 157:
YY_RULE_SETUP
-#line 1665 "dhcp6_lexer.ll"
+#line 1671 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::RESERVATIONS:
@@ -4508,7 +4514,7 @@ YY_RULE_SETUP
YY_BREAK
case 158:
YY_RULE_SETUP
-#line 1674 "dhcp6_lexer.ll"
+#line 1680 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS:
@@ -4521,7 +4527,7 @@ YY_RULE_SETUP
YY_BREAK
case 159:
YY_RULE_SETUP
-#line 1684 "dhcp6_lexer.ll"
+#line 1690 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -4534,7 +4540,7 @@ YY_RULE_SETUP
YY_BREAK
case 160:
YY_RULE_SETUP
-#line 1694 "dhcp6_lexer.ll"
+#line 1700 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::OPTION_DATA:
@@ -4546,7 +4552,7 @@ YY_RULE_SETUP
YY_BREAK
case 161:
YY_RULE_SETUP
-#line 1703 "dhcp6_lexer.ll"
+#line 1709 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -4558,7 +4564,7 @@ YY_RULE_SETUP
YY_BREAK
case 162:
YY_RULE_SETUP
-#line 1712 "dhcp6_lexer.ll"
+#line 1718 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -4570,7 +4576,7 @@ YY_RULE_SETUP
YY_BREAK
case 163:
YY_RULE_SETUP
-#line 1721 "dhcp6_lexer.ll"
+#line 1727 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -4582,7 +4588,7 @@ YY_RULE_SETUP
YY_BREAK
case 164:
YY_RULE_SETUP
-#line 1730 "dhcp6_lexer.ll"
+#line 1736 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SUBNET6:
@@ -4595,7 +4601,7 @@ YY_RULE_SETUP
YY_BREAK
case 165:
YY_RULE_SETUP
-#line 1740 "dhcp6_lexer.ll"
+#line 1746 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::RELAY:
@@ -4607,7 +4613,7 @@ YY_RULE_SETUP
YY_BREAK
case 166:
YY_RULE_SETUP
-#line 1749 "dhcp6_lexer.ll"
+#line 1755 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -4619,7 +4625,7 @@ YY_RULE_SETUP
YY_BREAK
case 167:
YY_RULE_SETUP
-#line 1758 "dhcp6_lexer.ll"
+#line 1764 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::HOOKS_LIBRARIES:
@@ -4631,7 +4637,7 @@ YY_RULE_SETUP
YY_BREAK
case 168:
YY_RULE_SETUP
-#line 1767 "dhcp6_lexer.ll"
+#line 1773 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::HOOKS_LIBRARIES:
@@ -4643,7 +4649,7 @@ YY_RULE_SETUP
YY_BREAK
case 169:
YY_RULE_SETUP
-#line 1776 "dhcp6_lexer.ll"
+#line 1782 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -4655,7 +4661,7 @@ YY_RULE_SETUP
YY_BREAK
case 170:
YY_RULE_SETUP
-#line 1785 "dhcp6_lexer.ll"
+#line 1791 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DUID_TYPE:
@@ -4667,7 +4673,7 @@ YY_RULE_SETUP
YY_BREAK
case 171:
YY_RULE_SETUP
-#line 1794 "dhcp6_lexer.ll"
+#line 1800 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DUID_TYPE:
@@ -4679,7 +4685,7 @@ YY_RULE_SETUP
YY_BREAK
case 172:
YY_RULE_SETUP
-#line 1803 "dhcp6_lexer.ll"
+#line 1809 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DUID_TYPE:
@@ -4691,7 +4697,7 @@ YY_RULE_SETUP
YY_BREAK
case 173:
YY_RULE_SETUP
-#line 1812 "dhcp6_lexer.ll"
+#line 1818 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SERVER_ID:
@@ -4703,7 +4709,7 @@ YY_RULE_SETUP
YY_BREAK
case 174:
YY_RULE_SETUP
-#line 1821 "dhcp6_lexer.ll"
+#line 1827 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SERVER_ID:
@@ -4715,7 +4721,7 @@ YY_RULE_SETUP
YY_BREAK
case 175:
YY_RULE_SETUP
-#line 1830 "dhcp6_lexer.ll"
+#line 1836 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SERVER_ID:
@@ -4727,7 +4733,7 @@ YY_RULE_SETUP
YY_BREAK
case 176:
YY_RULE_SETUP
-#line 1839 "dhcp6_lexer.ll"
+#line 1845 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SERVER_ID:
@@ -4739,7 +4745,7 @@ YY_RULE_SETUP
YY_BREAK
case 177:
YY_RULE_SETUP
-#line 1848 "dhcp6_lexer.ll"
+#line 1854 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -4751,7 +4757,7 @@ YY_RULE_SETUP
YY_BREAK
case 178:
YY_RULE_SETUP
-#line 1857 "dhcp6_lexer.ll"
+#line 1863 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -4763,7 +4769,7 @@ YY_RULE_SETUP
YY_BREAK
case 179:
YY_RULE_SETUP
-#line 1866 "dhcp6_lexer.ll"
+#line 1872 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -4775,7 +4781,7 @@ YY_RULE_SETUP
YY_BREAK
case 180:
YY_RULE_SETUP
-#line 1875 "dhcp6_lexer.ll"
+#line 1881 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -4787,7 +4793,7 @@ YY_RULE_SETUP
YY_BREAK
case 181:
YY_RULE_SETUP
-#line 1884 "dhcp6_lexer.ll"
+#line 1890 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -4799,7 +4805,7 @@ YY_RULE_SETUP
YY_BREAK
case 182:
YY_RULE_SETUP
-#line 1893 "dhcp6_lexer.ll"
+#line 1899 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -4811,7 +4817,7 @@ YY_RULE_SETUP
YY_BREAK
case 183:
YY_RULE_SETUP
-#line 1902 "dhcp6_lexer.ll"
+#line 1908 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -4823,7 +4829,7 @@ YY_RULE_SETUP
YY_BREAK
case 184:
YY_RULE_SETUP
-#line 1911 "dhcp6_lexer.ll"
+#line 1917 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -4835,7 +4841,7 @@ YY_RULE_SETUP
YY_BREAK
case 185:
YY_RULE_SETUP
-#line 1920 "dhcp6_lexer.ll"
+#line 1926 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -4847,7 +4853,7 @@ YY_RULE_SETUP
YY_BREAK
case 186:
YY_RULE_SETUP
-#line 1929 "dhcp6_lexer.ll"
+#line 1935 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP_MULTI_THREADING:
@@ -4859,7 +4865,7 @@ YY_RULE_SETUP
YY_BREAK
case 187:
YY_RULE_SETUP
-#line 1938 "dhcp6_lexer.ll"
+#line 1944 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP_MULTI_THREADING:
@@ -4871,7 +4877,7 @@ YY_RULE_SETUP
YY_BREAK
case 188:
YY_RULE_SETUP
-#line 1947 "dhcp6_lexer.ll"
+#line 1953 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP_MULTI_THREADING:
@@ -4883,7 +4889,7 @@ YY_RULE_SETUP
YY_BREAK
case 189:
YY_RULE_SETUP
-#line 1956 "dhcp6_lexer.ll"
+#line 1962 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -4895,7 +4901,7 @@ YY_RULE_SETUP
YY_BREAK
case 190:
YY_RULE_SETUP
-#line 1965 "dhcp6_lexer.ll"
+#line 1971 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::CONTROL_SOCKET:
@@ -4907,7 +4913,7 @@ YY_RULE_SETUP
YY_BREAK
case 191:
YY_RULE_SETUP
-#line 1974 "dhcp6_lexer.ll"
+#line 1980 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::CONTROL_SOCKET:
@@ -4919,7 +4925,7 @@ YY_RULE_SETUP
YY_BREAK
case 192:
YY_RULE_SETUP
-#line 1983 "dhcp6_lexer.ll"
+#line 1989 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -4931,7 +4937,7 @@ YY_RULE_SETUP
YY_BREAK
case 193:
YY_RULE_SETUP
-#line 1992 "dhcp6_lexer.ll"
+#line 1998 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP_QUEUE_CONTROL:
@@ -4943,7 +4949,7 @@ YY_RULE_SETUP
YY_BREAK
case 194:
YY_RULE_SETUP
-#line 2001 "dhcp6_lexer.ll"
+#line 2007 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP_QUEUE_CONTROL:
@@ -4955,7 +4961,7 @@ YY_RULE_SETUP
YY_BREAK
case 195:
YY_RULE_SETUP
-#line 2010 "dhcp6_lexer.ll"
+#line 2016 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP_QUEUE_CONTROL:
@@ -4967,7 +4973,7 @@ YY_RULE_SETUP
YY_BREAK
case 196:
YY_RULE_SETUP
-#line 2019 "dhcp6_lexer.ll"
+#line 2025 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -4979,7 +4985,7 @@ YY_RULE_SETUP
YY_BREAK
case 197:
YY_RULE_SETUP
-#line 2028 "dhcp6_lexer.ll"
+#line 2034 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -4991,7 +4997,7 @@ YY_RULE_SETUP
YY_BREAK
case 198:
YY_RULE_SETUP
-#line 2037 "dhcp6_lexer.ll"
+#line 2043 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
@@ -5003,7 +5009,7 @@ YY_RULE_SETUP
YY_BREAK
case 199:
YY_RULE_SETUP
-#line 2046 "dhcp6_lexer.ll"
+#line 2052 "dhcp6_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::COMPATIBILITY:
@@ -5015,7 +5021,7 @@ YY_RULE_SETUP
YY_BREAK
case 200:
YY_RULE_SETUP
-#line 2055 "dhcp6_lexer.ll"
+#line 2061 "dhcp6_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.
@@ -5120,7 +5126,7 @@ YY_RULE_SETUP
case 201:
/* rule 201 can match eol */
YY_RULE_SETUP
-#line 2156 "dhcp6_lexer.ll"
+#line 2162 "dhcp6_lexer.ll"
{
/* Bad string with a forbidden control character inside */
std::string raw(yytext+1);
@@ -5140,7 +5146,7 @@ YY_RULE_SETUP
case 202:
/* rule 202 can match eol */
YY_RULE_SETUP
-#line 2172 "dhcp6_lexer.ll"
+#line 2178 "dhcp6_lexer.ll"
{
/* Bad string with a bad escape inside */
std::string raw(yytext+1);
@@ -5192,7 +5198,7 @@ YY_RULE_SETUP
YY_BREAK
case 203:
YY_RULE_SETUP
-#line 2221 "dhcp6_lexer.ll"
+#line 2227 "dhcp6_lexer.ll"
{
/* Bad string with an open escape at the end */
std::string raw(yytext+1);
@@ -5203,7 +5209,7 @@ YY_RULE_SETUP
YY_BREAK
case 204:
YY_RULE_SETUP
-#line 2229 "dhcp6_lexer.ll"
+#line 2235 "dhcp6_lexer.ll"
{
/* Bad string with an open unicode escape at the end */
std::string raw(yytext+1);
@@ -5221,37 +5227,37 @@ YY_RULE_SETUP
YY_BREAK
case 205:
YY_RULE_SETUP
-#line 2244 "dhcp6_lexer.ll"
+#line 2250 "dhcp6_lexer.ll"
{ return isc::dhcp::Dhcp6Parser::make_LSQUARE_BRACKET(driver.loc_); }
YY_BREAK
case 206:
YY_RULE_SETUP
-#line 2245 "dhcp6_lexer.ll"
+#line 2251 "dhcp6_lexer.ll"
{ return isc::dhcp::Dhcp6Parser::make_RSQUARE_BRACKET(driver.loc_); }
YY_BREAK
case 207:
YY_RULE_SETUP
-#line 2246 "dhcp6_lexer.ll"
+#line 2252 "dhcp6_lexer.ll"
{ return isc::dhcp::Dhcp6Parser::make_LCURLY_BRACKET(driver.loc_); }
YY_BREAK
case 208:
YY_RULE_SETUP
-#line 2247 "dhcp6_lexer.ll"
+#line 2253 "dhcp6_lexer.ll"
{ return isc::dhcp::Dhcp6Parser::make_RCURLY_BRACKET(driver.loc_); }
YY_BREAK
case 209:
YY_RULE_SETUP
-#line 2248 "dhcp6_lexer.ll"
+#line 2254 "dhcp6_lexer.ll"
{ return isc::dhcp::Dhcp6Parser::make_COMMA(driver.loc_); }
YY_BREAK
case 210:
YY_RULE_SETUP
-#line 2249 "dhcp6_lexer.ll"
+#line 2255 "dhcp6_lexer.ll"
{ return isc::dhcp::Dhcp6Parser::make_COLON(driver.loc_); }
YY_BREAK
case 211:
YY_RULE_SETUP
-#line 2251 "dhcp6_lexer.ll"
+#line 2257 "dhcp6_lexer.ll"
{
/* An integer was found. */
std::string tmp(yytext);
@@ -5272,7 +5278,7 @@ YY_RULE_SETUP
YY_BREAK
case 212:
YY_RULE_SETUP
-#line 2269 "dhcp6_lexer.ll"
+#line 2275 "dhcp6_lexer.ll"
{
/* A floating point was found. */
std::string tmp(yytext);
@@ -5288,7 +5294,7 @@ YY_RULE_SETUP
YY_BREAK
case 213:
YY_RULE_SETUP
-#line 2282 "dhcp6_lexer.ll"
+#line 2288 "dhcp6_lexer.ll"
{
string tmp(yytext);
return isc::dhcp::Dhcp6Parser::make_BOOLEAN(tmp == "true", driver.loc_);
@@ -5296,33 +5302,33 @@ YY_RULE_SETUP
YY_BREAK
case 214:
YY_RULE_SETUP
-#line 2287 "dhcp6_lexer.ll"
+#line 2293 "dhcp6_lexer.ll"
{
return isc::dhcp::Dhcp6Parser::make_NULL_TYPE(driver.loc_);
}
YY_BREAK
case 215:
YY_RULE_SETUP
-#line 2291 "dhcp6_lexer.ll"
+#line 2297 "dhcp6_lexer.ll"
driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
YY_BREAK
case 216:
YY_RULE_SETUP
-#line 2293 "dhcp6_lexer.ll"
+#line 2299 "dhcp6_lexer.ll"
driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
YY_BREAK
case 217:
YY_RULE_SETUP
-#line 2295 "dhcp6_lexer.ll"
+#line 2301 "dhcp6_lexer.ll"
driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
YY_BREAK
case 218:
YY_RULE_SETUP
-#line 2297 "dhcp6_lexer.ll"
+#line 2303 "dhcp6_lexer.ll"
driver.error (driver.loc_, "Invalid character: " + std::string(yytext));
YY_BREAK
case YY_STATE_EOF(INITIAL):
-#line 2299 "dhcp6_lexer.ll"
+#line 2305 "dhcp6_lexer.ll"
{
if (driver.states_.empty()) {
return isc::dhcp::Dhcp6Parser::make_END(driver.loc_);
@@ -5348,10 +5354,10 @@ case YY_STATE_EOF(INITIAL):
YY_BREAK
case 219:
YY_RULE_SETUP
-#line 2322 "dhcp6_lexer.ll"
+#line 2328 "dhcp6_lexer.ll"
ECHO;
YY_BREAK
-#line 5354 "dhcp6_lexer.cc"
+#line 5361 "dhcp6_lexer.cc"
case YY_END_OF_BUFFER:
{
@@ -6456,7 +6462,7 @@ void yyfree (void * ptr )
/* %ok-for-header */
-#line 2322 "dhcp6_lexer.ll"
+#line 2328 "dhcp6_lexer.ll"
using namespace isc::dhcp;
diff --git a/src/bin/dhcp6/dhcp6_lexer.ll b/src/bin/dhcp6/dhcp6_lexer.ll
index a7f933d301..3e801b95ad 100644
--- a/src/bin/dhcp6/dhcp6_lexer.ll
+++ b/src/bin/dhcp6/dhcp6_lexer.ll
@@ -832,6 +832,7 @@ ControlCharacterFill [^"\\]|\\["\\/bfnrtu]
case isc::dhcp::Parser6Context::DHCP6:
case isc::dhcp::Parser6Context::SUBNET6:
case isc::dhcp::Parser6Context::SHARED_NETWORK:
+ case isc::dhcp::Parser6Context::CLIENT_CLASSES:
return isc::dhcp::Dhcp6Parser::make_PREFERRED_LIFETIME(driver.loc_);
default:
return isc::dhcp::Dhcp6Parser::make_STRING("preferred-lifetime", driver.loc_);
@@ -843,6 +844,7 @@ ControlCharacterFill [^"\\]|\\["\\/bfnrtu]
case isc::dhcp::Parser6Context::DHCP6:
case isc::dhcp::Parser6Context::SUBNET6:
case isc::dhcp::Parser6Context::SHARED_NETWORK:
+ case isc::dhcp::Parser6Context::CLIENT_CLASSES:
return isc::dhcp::Dhcp6Parser::make_MIN_PREFERRED_LIFETIME(driver.loc_);
default:
return isc::dhcp::Dhcp6Parser::make_STRING("min-preferred-lifetime", driver.loc_);
@@ -854,6 +856,7 @@ ControlCharacterFill [^"\\]|\\["\\/bfnrtu]
case isc::dhcp::Parser6Context::DHCP6:
case isc::dhcp::Parser6Context::SUBNET6:
case isc::dhcp::Parser6Context::SHARED_NETWORK:
+ case isc::dhcp::Parser6Context::CLIENT_CLASSES:
return isc::dhcp::Dhcp6Parser::make_MAX_PREFERRED_LIFETIME(driver.loc_);
default:
return isc::dhcp::Dhcp6Parser::make_STRING("max-preferred-lifetime", driver.loc_);
@@ -865,6 +868,7 @@ ControlCharacterFill [^"\\]|\\["\\/bfnrtu]
case isc::dhcp::Parser6Context::DHCP6:
case isc::dhcp::Parser6Context::SUBNET6:
case isc::dhcp::Parser6Context::SHARED_NETWORK:
+ case isc::dhcp::Parser6Context::CLIENT_CLASSES:
return isc::dhcp::Dhcp6Parser::make_VALID_LIFETIME(driver.loc_);
default:
return isc::dhcp::Dhcp6Parser::make_STRING("valid-lifetime", driver.loc_);
@@ -876,6 +880,7 @@ ControlCharacterFill [^"\\]|\\["\\/bfnrtu]
case isc::dhcp::Parser6Context::DHCP6:
case isc::dhcp::Parser6Context::SUBNET6:
case isc::dhcp::Parser6Context::SHARED_NETWORK:
+ case isc::dhcp::Parser6Context::CLIENT_CLASSES:
return isc::dhcp::Dhcp6Parser::make_MIN_VALID_LIFETIME(driver.loc_);
default:
return isc::dhcp::Dhcp6Parser::make_STRING("min-valid-lifetime", driver.loc_);
@@ -887,6 +892,7 @@ ControlCharacterFill [^"\\]|\\["\\/bfnrtu]
case isc::dhcp::Parser6Context::DHCP6:
case isc::dhcp::Parser6Context::SUBNET6:
case isc::dhcp::Parser6Context::SHARED_NETWORK:
+ case isc::dhcp::Parser6Context::CLIENT_CLASSES:
return isc::dhcp::Dhcp6Parser::make_MAX_VALID_LIFETIME(driver.loc_);
default:
return isc::dhcp::Dhcp6Parser::make_STRING("max-valid-lifetime", driver.loc_);
diff --git a/src/bin/dhcp6/dhcp6_parser.cc b/src/bin/dhcp6/dhcp6_parser.cc
index 192433f2e9..5b3b64e745 100644
--- a/src/bin/dhcp6/dhcp6_parser.cc
+++ b/src/bin/dhcp6/dhcp6_parser.cc
@@ -1,8 +1,8 @@
-// A Bison parser, made by GNU Bison 3.7.6.
+// A Bison parser, made by GNU Bison 3.7.2.
// Skeleton implementation for Bison LALR(1) parsers in C++
-// Copyright (C) 2002-2015, 2018-2021 Free Software Foundation, Inc.
+// Copyright (C) 2002-2015, 2018-2020 Free Software Foundation, Inc.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
@@ -15,7 +15,7 @@
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
-// along with this program. If not, see .
+// along with this program. If not, see .
// As a special exception, you may create a larger work that contains
// part or all of the Bison parser skeleton and distribute that work
@@ -125,7 +125,7 @@
#else // !PARSER6_DEBUG
# define YYCDEBUG if (false) std::cerr
-# define YY_SYMBOL_PRINT(Title, Symbol) YY_USE (Symbol)
+# define YY_SYMBOL_PRINT(Title, Symbol) YYUSE (Symbol)
# define YY_REDUCE_PRINT(Rule) static_cast (0)
# define YY_STACK_PRINT() static_cast (0)
@@ -386,7 +386,7 @@ namespace isc { namespace dhcp {
Dhcp6Parser::yy_print_ (std::ostream& yyo, const basic_symbol& yysym) const
{
std::ostream& yyoutput = yyo;
- YY_USE (yyoutput);
+ YYUSE (yyoutput);
if (yysym.empty ())
yyo << "empty symbol";
else
@@ -3504,8 +3504,8 @@ namespace isc { namespace dhcp {
#line 3505 "dhcp6_parser.cc"
break;
- case 645: // $@105: %empty
-#line 2279 "dhcp6_parser.yy"
+ case 651: // $@105: %empty
+#line 2285 "dhcp6_parser.yy"
{
ctx.unique("test", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
@@ -3513,8 +3513,8 @@ namespace isc { namespace dhcp {
#line 3514 "dhcp6_parser.cc"
break;
- case 646: // client_class_test: "test" $@105 ":" "constant string"
-#line 2282 "dhcp6_parser.yy"
+ case 652: // client_class_test: "test" $@105 ":" "constant string"
+#line 2288 "dhcp6_parser.yy"
{
ElementPtr test(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("test", test);
@@ -3523,8 +3523,8 @@ namespace isc { namespace dhcp {
#line 3524 "dhcp6_parser.cc"
break;
- case 647: // only_if_required: "only-if-required" ":" "boolean"
-#line 2288 "dhcp6_parser.yy"
+ case 653: // only_if_required: "only-if-required" ":" "boolean"
+#line 2294 "dhcp6_parser.yy"
{
ctx.unique("only-if-required", ctx.loc2pos(yystack_[2].location));
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -3533,8 +3533,8 @@ namespace isc { namespace dhcp {
#line 3534 "dhcp6_parser.cc"
break;
- case 648: // $@106: %empty
-#line 2297 "dhcp6_parser.yy"
+ case 654: // $@106: %empty
+#line 2303 "dhcp6_parser.yy"
{
ctx.unique("server-id", ctx.loc2pos(yystack_[0].location));
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -3545,8 +3545,8 @@ namespace isc { namespace dhcp {
#line 3546 "dhcp6_parser.cc"
break;
- case 649: // server_id: "server-id" $@106 ":" "{" server_id_params "}"
-#line 2303 "dhcp6_parser.yy"
+ case 655: // server_id: "server-id" $@106 ":" "{" server_id_params "}"
+#line 2309 "dhcp6_parser.yy"
{
// The type parameter is required.
ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
@@ -3556,8 +3556,8 @@ namespace isc { namespace dhcp {
#line 3557 "dhcp6_parser.cc"
break;
- case 661: // $@107: %empty
-#line 2325 "dhcp6_parser.yy"
+ case 667: // $@107: %empty
+#line 2331 "dhcp6_parser.yy"
{
ctx.unique("type", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.DUID_TYPE);
@@ -3565,8 +3565,8 @@ namespace isc { namespace dhcp {
#line 3566 "dhcp6_parser.cc"
break;
- case 662: // server_id_type: "type" $@107 ":" duid_type
-#line 2328 "dhcp6_parser.yy"
+ case 668: // server_id_type: "type" $@107 ":" duid_type
+#line 2334 "dhcp6_parser.yy"
{
ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
@@ -3574,26 +3574,26 @@ namespace isc { namespace dhcp {
#line 3575 "dhcp6_parser.cc"
break;
- case 663: // duid_type: "LLT"
-#line 2333 "dhcp6_parser.yy"
+ case 669: // duid_type: "LLT"
+#line 2339 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); }
#line 3581 "dhcp6_parser.cc"
break;
- case 664: // duid_type: "EN"
-#line 2334 "dhcp6_parser.yy"
+ case 670: // duid_type: "EN"
+#line 2340 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); }
#line 3587 "dhcp6_parser.cc"
break;
- case 665: // duid_type: "LL"
-#line 2335 "dhcp6_parser.yy"
+ case 671: // duid_type: "LL"
+#line 2341 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); }
#line 3593 "dhcp6_parser.cc"
break;
- case 666: // htype: "htype" ":" "integer"
-#line 2338 "dhcp6_parser.yy"
+ case 672: // htype: "htype" ":" "integer"
+#line 2344 "dhcp6_parser.yy"
{
ctx.unique("htype", ctx.loc2pos(yystack_[2].location));
ElementPtr htype(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -3602,8 +3602,8 @@ namespace isc { namespace dhcp {
#line 3603 "dhcp6_parser.cc"
break;
- case 667: // $@108: %empty
-#line 2344 "dhcp6_parser.yy"
+ case 673: // $@108: %empty
+#line 2350 "dhcp6_parser.yy"
{
ctx.unique("identifier", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
@@ -3611,8 +3611,8 @@ namespace isc { namespace dhcp {
#line 3612 "dhcp6_parser.cc"
break;
- case 668: // identifier: "identifier" $@108 ":" "constant string"
-#line 2347 "dhcp6_parser.yy"
+ case 674: // identifier: "identifier" $@108 ":" "constant string"
+#line 2353 "dhcp6_parser.yy"
{
ElementPtr id(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("identifier", id);
@@ -3621,8 +3621,8 @@ namespace isc { namespace dhcp {
#line 3622 "dhcp6_parser.cc"
break;
- case 669: // time: "time" ":" "integer"
-#line 2353 "dhcp6_parser.yy"
+ case 675: // time: "time" ":" "integer"
+#line 2359 "dhcp6_parser.yy"
{
ctx.unique("time", ctx.loc2pos(yystack_[2].location));
ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -3631,8 +3631,8 @@ namespace isc { namespace dhcp {
#line 3632 "dhcp6_parser.cc"
break;
- case 670: // enterprise_id: "enterprise-id" ":" "integer"
-#line 2359 "dhcp6_parser.yy"
+ case 676: // enterprise_id: "enterprise-id" ":" "integer"
+#line 2365 "dhcp6_parser.yy"
{
ctx.unique("enterprise-id", ctx.loc2pos(yystack_[2].location));
ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -3641,8 +3641,8 @@ namespace isc { namespace dhcp {
#line 3642 "dhcp6_parser.cc"
break;
- case 671: // dhcp4o6_port: "dhcp4o6-port" ":" "integer"
-#line 2367 "dhcp6_parser.yy"
+ case 677: // dhcp4o6_port: "dhcp4o6-port" ":" "integer"
+#line 2373 "dhcp6_parser.yy"
{
ctx.unique("dhcp4o6-port", ctx.loc2pos(yystack_[2].location));
ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -3651,8 +3651,8 @@ namespace isc { namespace dhcp {
#line 3652 "dhcp6_parser.cc"
break;
- case 672: // $@109: %empty
-#line 2375 "dhcp6_parser.yy"
+ case 678: // $@109: %empty
+#line 2381 "dhcp6_parser.yy"
{
ctx.unique("control-socket", ctx.loc2pos(yystack_[0].location));
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -3663,8 +3663,8 @@ namespace isc { namespace dhcp {
#line 3664 "dhcp6_parser.cc"
break;
- case 673: // control_socket: "control-socket" $@109 ":" "{" control_socket_params "}"
-#line 2381 "dhcp6_parser.yy"
+ case 679: // control_socket: "control-socket" $@109 ":" "{" control_socket_params "}"
+#line 2387 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
@@ -3672,8 +3672,8 @@ namespace isc { namespace dhcp {
#line 3673 "dhcp6_parser.cc"
break;
- case 681: // $@110: %empty
-#line 2397 "dhcp6_parser.yy"
+ case 687: // $@110: %empty
+#line 2403 "dhcp6_parser.yy"
{
ctx.unique("socket-type", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
@@ -3681,8 +3681,8 @@ namespace isc { namespace dhcp {
#line 3682 "dhcp6_parser.cc"
break;
- case 682: // socket_type: "socket-type" $@110 ":" "constant string"
-#line 2400 "dhcp6_parser.yy"
+ case 688: // socket_type: "socket-type" $@110 ":" "constant string"
+#line 2406 "dhcp6_parser.yy"
{
ElementPtr stype(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("socket-type", stype);
@@ -3691,8 +3691,8 @@ namespace isc { namespace dhcp {
#line 3692 "dhcp6_parser.cc"
break;
- case 683: // $@111: %empty
-#line 2406 "dhcp6_parser.yy"
+ case 689: // $@111: %empty
+#line 2412 "dhcp6_parser.yy"
{
ctx.unique("socket-name", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
@@ -3700,8 +3700,8 @@ namespace isc { namespace dhcp {
#line 3701 "dhcp6_parser.cc"
break;
- case 684: // socket_name: "socket-name" $@111 ":" "constant string"
-#line 2409 "dhcp6_parser.yy"
+ case 690: // socket_name: "socket-name" $@111 ":" "constant string"
+#line 2415 "dhcp6_parser.yy"
{
ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("socket-name", name);
@@ -3710,8 +3710,8 @@ namespace isc { namespace dhcp {
#line 3711 "dhcp6_parser.cc"
break;
- case 685: // $@112: %empty
-#line 2418 "dhcp6_parser.yy"
+ case 691: // $@112: %empty
+#line 2424 "dhcp6_parser.yy"
{
ctx.unique("dhcp-queue-control", ctx.loc2pos(yystack_[0].location));
ElementPtr qc(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -3722,8 +3722,8 @@ namespace isc { namespace dhcp {
#line 3723 "dhcp6_parser.cc"
break;
- case 686: // dhcp_queue_control: "dhcp-queue-control" $@112 ":" "{" queue_control_params "}"
-#line 2424 "dhcp6_parser.yy"
+ case 692: // dhcp_queue_control: "dhcp-queue-control" $@112 ":" "{" queue_control_params "}"
+#line 2430 "dhcp6_parser.yy"
{
// The enable queue parameter is required.
ctx.require("enable-queue", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
@@ -3733,8 +3733,8 @@ namespace isc { namespace dhcp {
#line 3734 "dhcp6_parser.cc"
break;
- case 695: // enable_queue: "enable-queue" ":" "boolean"
-#line 2443 "dhcp6_parser.yy"
+ case 701: // enable_queue: "enable-queue" ":" "boolean"
+#line 2449 "dhcp6_parser.yy"
{
ctx.unique("enable-queue", ctx.loc2pos(yystack_[2].location));
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -3743,8 +3743,8 @@ namespace isc { namespace dhcp {
#line 3744 "dhcp6_parser.cc"
break;
- case 696: // $@113: %empty
-#line 2449 "dhcp6_parser.yy"
+ case 702: // $@113: %empty
+#line 2455 "dhcp6_parser.yy"
{
ctx.unique("queue-type", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
@@ -3752,8 +3752,8 @@ namespace isc { namespace dhcp {
#line 3753 "dhcp6_parser.cc"
break;
- case 697: // queue_type: "queue-type" $@113 ":" "constant string"
-#line 2452 "dhcp6_parser.yy"
+ case 703: // queue_type: "queue-type" $@113 ":" "constant string"
+#line 2458 "dhcp6_parser.yy"
{
ElementPtr qt(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("queue-type", qt);
@@ -3762,8 +3762,8 @@ namespace isc { namespace dhcp {
#line 3763 "dhcp6_parser.cc"
break;
- case 698: // capacity: "capacity" ":" "integer"
-#line 2458 "dhcp6_parser.yy"
+ case 704: // capacity: "capacity" ":" "integer"
+#line 2464 "dhcp6_parser.yy"
{
ctx.unique("capacity", ctx.loc2pos(yystack_[2].location));
ElementPtr c(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -3772,8 +3772,8 @@ namespace isc { namespace dhcp {
#line 3773 "dhcp6_parser.cc"
break;
- case 699: // $@114: %empty
-#line 2464 "dhcp6_parser.yy"
+ case 705: // $@114: %empty
+#line 2470 "dhcp6_parser.yy"
{
ctx.unique(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
@@ -3781,8 +3781,8 @@ namespace isc { namespace dhcp {
#line 3782 "dhcp6_parser.cc"
break;
- case 700: // arbitrary_map_entry: "constant string" $@114 ":" value
-#line 2467 "dhcp6_parser.yy"
+ case 706: // arbitrary_map_entry: "constant string" $@114 ":" value
+#line 2473 "dhcp6_parser.yy"
{
ctx.stack_.back()->set(yystack_[3].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
ctx.leave();
@@ -3790,8 +3790,8 @@ namespace isc { namespace dhcp {
#line 3791 "dhcp6_parser.cc"
break;
- case 701: // $@115: %empty
-#line 2474 "dhcp6_parser.yy"
+ case 707: // $@115: %empty
+#line 2480 "dhcp6_parser.yy"
{
ctx.unique("dhcp-ddns", ctx.loc2pos(yystack_[0].location));
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -3802,8 +3802,8 @@ namespace isc { namespace dhcp {
#line 3803 "dhcp6_parser.cc"
break;
- case 702: // dhcp_ddns: "dhcp-ddns" $@115 ":" "{" dhcp_ddns_params "}"
-#line 2480 "dhcp6_parser.yy"
+ case 708: // dhcp_ddns: "dhcp-ddns" $@115 ":" "{" dhcp_ddns_params "}"
+#line 2486 "dhcp6_parser.yy"
{
// The enable updates DHCP DDNS parameter is required.
ctx.require("enable-updates", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
@@ -3813,8 +3813,8 @@ namespace isc { namespace dhcp {
#line 3814 "dhcp6_parser.cc"
break;
- case 703: // $@116: %empty
-#line 2487 "dhcp6_parser.yy"
+ case 709: // $@116: %empty
+#line 2493 "dhcp6_parser.yy"
{
// Parse the dhcp-ddns map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -3823,8 +3823,8 @@ namespace isc { namespace dhcp {
#line 3824 "dhcp6_parser.cc"
break;
- case 704: // sub_dhcp_ddns: "{" $@116 dhcp_ddns_params "}"
-#line 2491 "dhcp6_parser.yy"
+ case 710: // sub_dhcp_ddns: "{" $@116 dhcp_ddns_params "}"
+#line 2497 "dhcp6_parser.yy"
{
// The enable updates DHCP DDNS parameter is required.
ctx.require("enable-updates", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -3833,8 +3833,8 @@ namespace isc { namespace dhcp {
#line 3834 "dhcp6_parser.cc"
break;
- case 725: // enable_updates: "enable-updates" ":" "boolean"
-#line 2521 "dhcp6_parser.yy"
+ case 731: // enable_updates: "enable-updates" ":" "boolean"
+#line 2527 "dhcp6_parser.yy"
{
ctx.unique("enable-updates", ctx.loc2pos(yystack_[2].location));
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -3843,8 +3843,8 @@ namespace isc { namespace dhcp {
#line 3844 "dhcp6_parser.cc"
break;
- case 726: // $@117: %empty
-#line 2528 "dhcp6_parser.yy"
+ case 732: // $@117: %empty
+#line 2534 "dhcp6_parser.yy"
{
ctx.unique("qualifying-suffix", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
@@ -3852,8 +3852,8 @@ namespace isc { namespace dhcp {
#line 3853 "dhcp6_parser.cc"
break;
- case 727: // dep_qualifying_suffix: "qualifying-suffix" $@117 ":" "constant string"
-#line 2531 "dhcp6_parser.yy"
+ case 733: // dep_qualifying_suffix: "qualifying-suffix" $@117 ":" "constant string"
+#line 2537 "dhcp6_parser.yy"
{
ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("qualifying-suffix", s);
@@ -3862,8 +3862,8 @@ namespace isc { namespace dhcp {
#line 3863 "dhcp6_parser.cc"
break;
- case 728: // $@118: %empty
-#line 2537 "dhcp6_parser.yy"
+ case 734: // $@118: %empty
+#line 2543 "dhcp6_parser.yy"
{
ctx.unique("server-ip", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
@@ -3871,8 +3871,8 @@ namespace isc { namespace dhcp {
#line 3872 "dhcp6_parser.cc"
break;
- case 729: // server_ip: "server-ip" $@118 ":" "constant string"
-#line 2540 "dhcp6_parser.yy"
+ case 735: // server_ip: "server-ip" $@118 ":" "constant string"
+#line 2546 "dhcp6_parser.yy"
{
ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("server-ip", s);
@@ -3881,8 +3881,8 @@ namespace isc { namespace dhcp {
#line 3882 "dhcp6_parser.cc"
break;
- case 730: // server_port: "server-port" ":" "integer"
-#line 2546 "dhcp6_parser.yy"
+ case 736: // server_port: "server-port" ":" "integer"
+#line 2552 "dhcp6_parser.yy"
{
ctx.unique("server-port", ctx.loc2pos(yystack_[2].location));
ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -3891,8 +3891,8 @@ namespace isc { namespace dhcp {
#line 3892 "dhcp6_parser.cc"
break;
- case 731: // $@119: %empty
-#line 2552 "dhcp6_parser.yy"
+ case 737: // $@119: %empty
+#line 2558 "dhcp6_parser.yy"
{
ctx.unique("sender-ip", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
@@ -3900,8 +3900,8 @@ namespace isc { namespace dhcp {
#line 3901 "dhcp6_parser.cc"
break;
- case 732: // sender_ip: "sender-ip" $@119 ":" "constant string"
-#line 2555 "dhcp6_parser.yy"
+ case 738: // sender_ip: "sender-ip" $@119 ":" "constant string"
+#line 2561 "dhcp6_parser.yy"
{
ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("sender-ip", s);
@@ -3910,8 +3910,8 @@ namespace isc { namespace dhcp {
#line 3911 "dhcp6_parser.cc"
break;
- case 733: // sender_port: "sender-port" ":" "integer"
-#line 2561 "dhcp6_parser.yy"
+ case 739: // sender_port: "sender-port" ":" "integer"
+#line 2567 "dhcp6_parser.yy"
{
ctx.unique("sender-port", ctx.loc2pos(yystack_[2].location));
ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -3920,8 +3920,8 @@ namespace isc { namespace dhcp {
#line 3921 "dhcp6_parser.cc"
break;
- case 734: // max_queue_size: "max-queue-size" ":" "integer"
-#line 2567 "dhcp6_parser.yy"
+ case 740: // max_queue_size: "max-queue-size" ":" "integer"
+#line 2573 "dhcp6_parser.yy"
{
ctx.unique("max-queue-size", ctx.loc2pos(yystack_[2].location));
ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -3930,8 +3930,8 @@ namespace isc { namespace dhcp {
#line 3931 "dhcp6_parser.cc"
break;
- case 735: // $@120: %empty
-#line 2573 "dhcp6_parser.yy"
+ case 741: // $@120: %empty
+#line 2579 "dhcp6_parser.yy"
{
ctx.unique("ncr-protocol", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NCR_PROTOCOL);
@@ -3939,8 +3939,8 @@ namespace isc { namespace dhcp {
#line 3940 "dhcp6_parser.cc"
break;
- case 736: // ncr_protocol: "ncr-protocol" $@120 ":" ncr_protocol_value
-#line 2576 "dhcp6_parser.yy"
+ case 742: // ncr_protocol: "ncr-protocol" $@120 ":" ncr_protocol_value
+#line 2582 "dhcp6_parser.yy"
{
ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
@@ -3948,20 +3948,20 @@ namespace isc { namespace dhcp {
#line 3949 "dhcp6_parser.cc"
break;
- case 737: // ncr_protocol_value: "UDP"
-#line 2582 "dhcp6_parser.yy"
+ case 743: // ncr_protocol_value: "UDP"
+#line 2588 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
#line 3955 "dhcp6_parser.cc"
break;
- case 738: // ncr_protocol_value: "TCP"
-#line 2583 "dhcp6_parser.yy"
+ case 744: // ncr_protocol_value: "TCP"
+#line 2589 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
#line 3961 "dhcp6_parser.cc"
break;
- case 739: // $@121: %empty
-#line 2586 "dhcp6_parser.yy"
+ case 745: // $@121: %empty
+#line 2592 "dhcp6_parser.yy"
{
ctx.unique("ncr-format", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NCR_FORMAT);
@@ -3969,8 +3969,8 @@ namespace isc { namespace dhcp {
#line 3970 "dhcp6_parser.cc"
break;
- case 740: // ncr_format: "ncr-format" $@121 ":" "JSON"
-#line 2589 "dhcp6_parser.yy"
+ case 746: // ncr_format: "ncr-format" $@121 ":" "JSON"
+#line 2595 "dhcp6_parser.yy"
{
ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("ncr-format", json);
@@ -3979,8 +3979,8 @@ namespace isc { namespace dhcp {
#line 3980 "dhcp6_parser.cc"
break;
- case 741: // dep_override_no_update: "override-no-update" ":" "boolean"
-#line 2596 "dhcp6_parser.yy"
+ case 747: // dep_override_no_update: "override-no-update" ":" "boolean"
+#line 2602 "dhcp6_parser.yy"
{
ctx.unique("override-no-update", ctx.loc2pos(yystack_[2].location));
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -3989,8 +3989,8 @@ namespace isc { namespace dhcp {
#line 3990 "dhcp6_parser.cc"
break;
- case 742: // dep_override_client_update: "override-client-update" ":" "boolean"
-#line 2603 "dhcp6_parser.yy"
+ case 748: // dep_override_client_update: "override-client-update" ":" "boolean"
+#line 2609 "dhcp6_parser.yy"
{
ctx.unique("override-client-update", ctx.loc2pos(yystack_[2].location));
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -3999,8 +3999,8 @@ namespace isc { namespace dhcp {
#line 4000 "dhcp6_parser.cc"
break;
- case 743: // $@122: %empty
-#line 2610 "dhcp6_parser.yy"
+ case 749: // $@122: %empty
+#line 2616 "dhcp6_parser.yy"
{
ctx.unique("replace-client-name", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.REPLACE_CLIENT_NAME);
@@ -4008,8 +4008,8 @@ namespace isc { namespace dhcp {
#line 4009 "dhcp6_parser.cc"
break;
- case 744: // dep_replace_client_name: "replace-client-name" $@122 ":" ddns_replace_client_name_value
-#line 2613 "dhcp6_parser.yy"
+ case 750: // dep_replace_client_name: "replace-client-name" $@122 ":" ddns_replace_client_name_value
+#line 2619 "dhcp6_parser.yy"
{
ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
@@ -4017,8 +4017,8 @@ namespace isc { namespace dhcp {
#line 4018 "dhcp6_parser.cc"
break;
- case 745: // $@123: %empty
-#line 2619 "dhcp6_parser.yy"
+ case 751: // $@123: %empty
+#line 2625 "dhcp6_parser.yy"
{
ctx.unique("generated-prefix", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
@@ -4026,8 +4026,8 @@ namespace isc { namespace dhcp {
#line 4027 "dhcp6_parser.cc"
break;
- case 746: // dep_generated_prefix: "generated-prefix" $@123 ":" "constant string"
-#line 2622 "dhcp6_parser.yy"
+ case 752: // dep_generated_prefix: "generated-prefix" $@123 ":" "constant string"
+#line 2628 "dhcp6_parser.yy"
{
ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("generated-prefix", s);
@@ -4036,8 +4036,8 @@ namespace isc { namespace dhcp {
#line 4037 "dhcp6_parser.cc"
break;
- case 747: // $@124: %empty
-#line 2629 "dhcp6_parser.yy"
+ case 753: // $@124: %empty
+#line 2635 "dhcp6_parser.yy"
{
ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
@@ -4045,8 +4045,8 @@ namespace isc { namespace dhcp {
#line 4046 "dhcp6_parser.cc"
break;
- case 748: // dep_hostname_char_set: "hostname-char-set" $@124 ":" "constant string"
-#line 2632 "dhcp6_parser.yy"
+ case 754: // dep_hostname_char_set: "hostname-char-set" $@124 ":" "constant string"
+#line 2638 "dhcp6_parser.yy"
{
ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("hostname-char-set", s);
@@ -4055,8 +4055,8 @@ namespace isc { namespace dhcp {
#line 4056 "dhcp6_parser.cc"
break;
- case 749: // $@125: %empty
-#line 2639 "dhcp6_parser.yy"
+ case 755: // $@125: %empty
+#line 2645 "dhcp6_parser.yy"
{
ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
@@ -4064,8 +4064,8 @@ namespace isc { namespace dhcp {
#line 4065 "dhcp6_parser.cc"
break;
- case 750: // dep_hostname_char_replacement: "hostname-char-replacement" $@125 ":" "constant string"
-#line 2642 "dhcp6_parser.yy"
+ case 756: // dep_hostname_char_replacement: "hostname-char-replacement" $@125 ":" "constant string"
+#line 2648 "dhcp6_parser.yy"
{
ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("hostname-char-replacement", s);
@@ -4074,8 +4074,8 @@ namespace isc { namespace dhcp {
#line 4075 "dhcp6_parser.cc"
break;
- case 751: // $@126: %empty
-#line 2651 "dhcp6_parser.yy"
+ case 757: // $@126: %empty
+#line 2657 "dhcp6_parser.yy"
{
ctx.unique("config-control", ctx.loc2pos(yystack_[0].location));
ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4086,8 +4086,8 @@ namespace isc { namespace dhcp {
#line 4087 "dhcp6_parser.cc"
break;
- case 752: // config_control: "config-control" $@126 ":" "{" config_control_params "}"
-#line 2657 "dhcp6_parser.yy"
+ case 758: // config_control: "config-control" $@126 ":" "{" config_control_params "}"
+#line 2663 "dhcp6_parser.yy"
{
// No config control params are required
ctx.stack_.pop_back();
@@ -4096,8 +4096,8 @@ namespace isc { namespace dhcp {
#line 4097 "dhcp6_parser.cc"
break;
- case 753: // $@127: %empty
-#line 2663 "dhcp6_parser.yy"
+ case 759: // $@127: %empty
+#line 2669 "dhcp6_parser.yy"
{
// Parse the config-control map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4106,8 +4106,8 @@ namespace isc { namespace dhcp {
#line 4107 "dhcp6_parser.cc"
break;
- case 754: // sub_config_control: "{" $@127 config_control_params "}"
-#line 2667 "dhcp6_parser.yy"
+ case 760: // sub_config_control: "{" $@127 config_control_params "}"
+#line 2673 "dhcp6_parser.yy"
{
// No config_control params are required
// parsing completed
@@ -4115,8 +4115,8 @@ namespace isc { namespace dhcp {
#line 4116 "dhcp6_parser.cc"
break;
- case 759: // $@128: %empty
-#line 2682 "dhcp6_parser.yy"
+ case 765: // $@128: %empty
+#line 2688 "dhcp6_parser.yy"
{
ctx.unique("config-databases", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -4127,8 +4127,8 @@ namespace isc { namespace dhcp {
#line 4128 "dhcp6_parser.cc"
break;
- case 760: // config_databases: "config-databases" $@128 ":" "[" database_list "]"
-#line 2688 "dhcp6_parser.yy"
+ case 766: // config_databases: "config-databases" $@128 ":" "[" database_list "]"
+#line 2694 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
@@ -4136,8 +4136,8 @@ namespace isc { namespace dhcp {
#line 4137 "dhcp6_parser.cc"
break;
- case 761: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer"
-#line 2693 "dhcp6_parser.yy"
+ case 767: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer"
+#line 2699 "dhcp6_parser.yy"
{
ctx.unique("config-fetch-wait-time", ctx.loc2pos(yystack_[2].location));
ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -4146,8 +4146,8 @@ namespace isc { namespace dhcp {
#line 4147 "dhcp6_parser.cc"
break;
- case 762: // $@129: %empty
-#line 2701 "dhcp6_parser.yy"
+ case 768: // $@129: %empty
+#line 2707 "dhcp6_parser.yy"
{
ctx.unique("loggers", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -4158,8 +4158,8 @@ namespace isc { namespace dhcp {
#line 4159 "dhcp6_parser.cc"
break;
- case 763: // loggers: "loggers" $@129 ":" "[" loggers_entries "]"
-#line 2707 "dhcp6_parser.yy"
+ case 769: // loggers: "loggers" $@129 ":" "[" loggers_entries "]"
+#line 2713 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
@@ -4167,8 +4167,8 @@ namespace isc { namespace dhcp {
#line 4168 "dhcp6_parser.cc"
break;
- case 766: // $@130: %empty
-#line 2719 "dhcp6_parser.yy"
+ case 772: // $@130: %empty
+#line 2725 "dhcp6_parser.yy"
{
ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(l);
@@ -4177,16 +4177,16 @@ namespace isc { namespace dhcp {
#line 4178 "dhcp6_parser.cc"
break;
- case 767: // logger_entry: "{" $@130 logger_params "}"
-#line 2723 "dhcp6_parser.yy"
+ case 773: // logger_entry: "{" $@130 logger_params "}"
+#line 2729 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
}
#line 4186 "dhcp6_parser.cc"
break;
- case 777: // debuglevel: "debuglevel" ":" "integer"
-#line 2740 "dhcp6_parser.yy"
+ case 783: // debuglevel: "debuglevel" ":" "integer"
+#line 2746 "dhcp6_parser.yy"
{
ctx.unique("debuglevel", ctx.loc2pos(yystack_[2].location));
ElementPtr dl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -4195,8 +4195,8 @@ namespace isc { namespace dhcp {
#line 4196 "dhcp6_parser.cc"
break;
- case 778: // $@131: %empty
-#line 2746 "dhcp6_parser.yy"
+ case 784: // $@131: %empty
+#line 2752 "dhcp6_parser.yy"
{
ctx.unique("severity", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
@@ -4204,8 +4204,8 @@ namespace isc { namespace dhcp {
#line 4205 "dhcp6_parser.cc"
break;
- case 779: // severity: "severity" $@131 ":" "constant string"
-#line 2749 "dhcp6_parser.yy"
+ case 785: // severity: "severity" $@131 ":" "constant string"
+#line 2755 "dhcp6_parser.yy"
{
ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("severity", sev);
@@ -4214,8 +4214,8 @@ namespace isc { namespace dhcp {
#line 4215 "dhcp6_parser.cc"
break;
- case 780: // $@132: %empty
-#line 2755 "dhcp6_parser.yy"
+ case 786: // $@132: %empty
+#line 2761 "dhcp6_parser.yy"
{
ctx.unique("output_options", ctx.loc2pos(yystack_[0].location));
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -4226,8 +4226,8 @@ namespace isc { namespace dhcp {
#line 4227 "dhcp6_parser.cc"
break;
- case 781: // output_options_list: "output_options" $@132 ":" "[" output_options_list_content "]"
-#line 2761 "dhcp6_parser.yy"
+ case 787: // output_options_list: "output_options" $@132 ":" "[" output_options_list_content "]"
+#line 2767 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
@@ -4235,8 +4235,8 @@ namespace isc { namespace dhcp {
#line 4236 "dhcp6_parser.cc"
break;
- case 784: // $@133: %empty
-#line 2770 "dhcp6_parser.yy"
+ case 790: // $@133: %empty
+#line 2776 "dhcp6_parser.yy"
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
@@ -4245,16 +4245,16 @@ namespace isc { namespace dhcp {
#line 4246 "dhcp6_parser.cc"
break;
- case 785: // output_entry: "{" $@133 output_params_list "}"
-#line 2774 "dhcp6_parser.yy"
+ case 791: // output_entry: "{" $@133 output_params_list "}"
+#line 2780 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
}
#line 4254 "dhcp6_parser.cc"
break;
- case 793: // $@134: %empty
-#line 2789 "dhcp6_parser.yy"
+ case 799: // $@134: %empty
+#line 2795 "dhcp6_parser.yy"
{
ctx.unique("output", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
@@ -4262,8 +4262,8 @@ namespace isc { namespace dhcp {
#line 4263 "dhcp6_parser.cc"
break;
- case 794: // output: "output" $@134 ":" "constant string"
-#line 2792 "dhcp6_parser.yy"
+ case 800: // output: "output" $@134 ":" "constant string"
+#line 2798 "dhcp6_parser.yy"
{
ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("output", sev);
@@ -4272,8 +4272,8 @@ namespace isc { namespace dhcp {
#line 4273 "dhcp6_parser.cc"
break;
- case 795: // flush: "flush" ":" "boolean"
-#line 2798 "dhcp6_parser.yy"
+ case 801: // flush: "flush" ":" "boolean"
+#line 2804 "dhcp6_parser.yy"
{
ctx.unique("flush", ctx.loc2pos(yystack_[2].location));
ElementPtr flush(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -4282,8 +4282,8 @@ namespace isc { namespace dhcp {
#line 4283 "dhcp6_parser.cc"
break;
- case 796: // maxsize: "maxsize" ":" "integer"
-#line 2804 "dhcp6_parser.yy"
+ case 802: // maxsize: "maxsize" ":" "integer"
+#line 2810 "dhcp6_parser.yy"
{
ctx.unique("maxsize", ctx.loc2pos(yystack_[2].location));
ElementPtr maxsize(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -4292,8 +4292,8 @@ namespace isc { namespace dhcp {
#line 4293 "dhcp6_parser.cc"
break;
- case 797: // maxver: "maxver" ":" "integer"
-#line 2810 "dhcp6_parser.yy"
+ case 803: // maxver: "maxver" ":" "integer"
+#line 2816 "dhcp6_parser.yy"
{
ctx.unique("maxver", ctx.loc2pos(yystack_[2].location));
ElementPtr maxver(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -4302,8 +4302,8 @@ namespace isc { namespace dhcp {
#line 4303 "dhcp6_parser.cc"
break;
- case 798: // $@135: %empty
-#line 2816 "dhcp6_parser.yy"
+ case 804: // $@135: %empty
+#line 2822 "dhcp6_parser.yy"
{
ctx.unique("pattern", ctx.loc2pos(yystack_[0].location));
ctx.enter(ctx.NO_KEYWORD);
@@ -4311,8 +4311,8 @@ namespace isc { namespace dhcp {
#line 4312 "dhcp6_parser.cc"
break;
- case 799: // pattern: "pattern" $@135 ":" "constant string"
-#line 2819 "dhcp6_parser.yy"
+ case 805: // pattern: "pattern" $@135 ":" "constant string"
+#line 2825 "dhcp6_parser.yy"
{
ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("pattern", sev);
@@ -4321,8 +4321,8 @@ namespace isc { namespace dhcp {
#line 4322 "dhcp6_parser.cc"
break;
- case 800: // $@136: %empty
-#line 2825 "dhcp6_parser.yy"
+ case 806: // $@136: %empty
+#line 2831 "dhcp6_parser.yy"
{
ctx.unique("compatibility", ctx.loc2pos(yystack_[0].location));
ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4333,8 +4333,8 @@ namespace isc { namespace dhcp {
#line 4334 "dhcp6_parser.cc"
break;
- case 801: // compatibility: "compatibility" $@136 ":" "{" compatibility_params "}"
-#line 2831 "dhcp6_parser.yy"
+ case 807: // compatibility: "compatibility" $@136 ":" "{" compatibility_params "}"
+#line 2837 "dhcp6_parser.yy"
{
ctx.stack_.pop_back();
ctx.leave();
@@ -4342,8 +4342,8 @@ namespace isc { namespace dhcp {
#line 4343 "dhcp6_parser.cc"
break;
- case 806: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean"
-#line 2844 "dhcp6_parser.yy"
+ case 812: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean"
+#line 2850 "dhcp6_parser.yy"
{
ctx.unique("lenient-option-parsing", ctx.loc2pos(yystack_[2].location));
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -4702,144 +4702,145 @@ namespace isc { namespace dhcp {
}
- const short Dhcp6Parser::yypact_ninf_ = -977;
+ const short Dhcp6Parser::yypact_ninf_ = -979;
const signed char Dhcp6Parser::yytable_ninf_ = -1;
const short
Dhcp6Parser::yypact_[] =
{
- 407, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, 48, 30, 31, 83, 97,
- 101, 107, 115, 117, 125, 137, 149, 159, 175, 220,
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, -977, -977, 30, -149,
- 60, 140, 66, 641, 187, 284, 24, 162, 88, 286,
- -78, 419, 156, -977, 59, 251, 252, 256, 264, -977,
- 269, -977, -977, -977, -977, -977, -977, 274, 287, 297,
- 300, 310, 311, 320, 327, 342, 343, 357, 358, 369,
- 379, -977, 380, 386, 398, 400, 401, -977, -977, -977,
- 402, 413, 429, -977, -977, -977, -977, -977, -977, -977,
- 437, 438, 439, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, 443, -977, -977, -977, -977, -977, -977, 445,
- -977, -977, 447, -977, 91, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, -977, -977, 455, -977,
- 113, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, 457, 459, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, 173, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, 225, -977, -977, -977,
- -977, -977, 461, -977, 462, 463, -977, -977, -977, -977,
- -977, -977, 262, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- 282, 291, -977, -977, -977, -977, -977, -977, -977, -977,
- 305, -977, -977, 467, -977, -977, -977, 468, -977, -977,
- 408, 423, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, 469, 473, -977, -977, -977,
- -977, 428, 480, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, 263, -977, -977, -977, 483,
- -977, -977, 484, -977, 487, 493, -977, -977, 494, 495,
- -977, -977, -977, -977, -977, -977, -977, 265, -977, -977,
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, 496, 277, -977, -977, -977,
- -977, 30, 30, -977, 276, 498, -977, 500, 502, 503,
- 506, 507, 513, 313, 317, 321, 323, 324, 326, 331,
- 332, 307, 334, 336, 337, 341, 344, 516, 345, 347,
- 340, 351, 353, 527, 530, 532, 354, 355, 359, 548,
- 554, 564, 565, 568, 569, 570, 364, 365, 366, 588,
- 589, 590, 591, 592, 593, 594, 611, 612, 409, 613,
- 615, 616, 617, 618, 619, 414, 620, 624, -977, 140,
- -977, 626, 425, 66, -977, 627, 628, 629, 630, 631,
- 430, 426, 634, 636, 637, 641, -977, 638, 187, -977,
- 639, 435, 642, 440, 441, 284, -977, 643, 644, 647,
- 648, 649, 650, 651, -977, 24, -977, 652, 653, 449,
- 655, 656, 657, 454, -977, 88, 663, 458, 460, -977,
- 286, 664, 668, 23, -977, 464, 669, 670, 474, 672,
- 475, 476, 673, 683, 491, 492, 700, 701, 711, 712,
- 419, -977, 714, 510, 156, -977, -977, -977, 716, 719,
- 519, 722, 724, 725, 726, 729, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- 536, -977, -977, -977, -977, -977, -36, 537, 538, -977,
- -977, -977, 730, 742, 746, 747, 748, 545, 266, -977,
- -977, -977, 749, 751, 753, 752, 757, 758, 759, 760,
- 762, -977, 763, 764, 765, 766, 557, 558, -977, 769,
- 768, -977, 771, -977, -977, 772, 773, 571, 572, 573,
- -977, -977, 771, 574, 776, -977, 576, -977, 577, -977,
- 578, -977, -977, -977, 771, 771, 771, 595, 606, 609,
- 610, -977, 621, 622, -977, 623, 625, 635, -977, -977,
- 645, -977, -977, -977, 646, 748, -977, -977, 654, 659,
- -977, 660, -977, -977, 12, 661, -977, -977, -36, 662,
- 665, 666, -977, 795, -977, -977, 30, 140, -977, 156,
- 66, 308, 308, 794, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, 812, 813, 816, 817, -977, -977, -977,
- -977, -977, -977, -977, -977, -82, 30, 10, 688, 818,
- 819, 820, 87, 213, 68, -51, 231, 419, -977, -977,
- 821, -136, -977, -977, 825, 832, -977, -977, -977, -977,
- -977, -70, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, 794, -977, 278, 281, 290, -977, -977, -977, -977,
- 838, 840, 841, 846, 847, -977, 848, 852, -977, -977,
- -977, -977, 853, 855, 856, 857, -977, 294, -977, -977,
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- 302, -977, 858, 860, -977, -977, 859, 866, -977, -977,
- 865, 869, -977, -977, 870, 872, -977, -977, 871, 875,
- -977, -977, -977, 65, -977, -977, -977, 873, -977, -977,
- -977, 78, -977, -977, -977, -977, 309, -977, -977, -977,
- 85, -977, -977, 874, 878, -977, -977, 876, 880, -977,
- 881, 882, 883, 884, 885, 886, 322, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, 887, 888, 889, -977,
- -977, -977, -977, 325, -977, -977, -977, -977, -977, -977,
- 890, 891, 892, -977, 383, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, 389, -977, -977, -977,
- 893, -977, 894, -977, -977, -977, 390, -977, -977, -977,
- -977, -977, 391, -977, 95, -977, 895, -977, 393, -977,
- -977, 676, -977, 896, 897, -977, -977, 898, 900, -977,
- -977, -977, 899, -977, 902, -977, -977, -977, 901, 905,
- 906, 907, 692, 695, 703, 702, 705, 911, 707, 708,
- 914, 917, 918, 920, 718, 721, 717, 732, 308, -977,
- -977, 308, -977, 794, 641, -977, 812, 88, -977, 813,
- 286, -977, 816, 739, -977, 817, -82, -977, -977, 10,
- -977, 921, 688, -977, -21, 818, -977, 24, -977, 819,
- -78, -977, 820, 741, 744, 745, 770, 780, 784, 87,
- -977, 927, 929, 785, 792, 803, 213, -977, 723, 806,
- 808, 68, -977, 934, 952, -51, -977, 767, 1000, 811,
- 1026, 231, -977, -977, 223, 821, -977, 834, -136, -977,
- -977, 1054, 1059, 187, -977, 825, 284, -977, 832, 1060,
- -977, -977, 433, 861, 863, 864, -977, -977, -977, -977,
- -977, 867, -977, -977, 191, 868, 877, 879, -977, -977,
- -977, -977, -977, 405, -977, 411, -977, 1055, -977, 1065,
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, -977, 412, -977, -977,
- -977, -977, -977, -977, -977, -977, 903, -977, -977, 1064,
- -977, -977, -977, -977, -977, 1066, 1074, -977, -977, -977,
- -977, -977, 1070, -977, 420, -977, -977, -977, -977, -977,
- -977, -977, -977, 104, 904, -977, -977, -977, -977, -977,
- -977, -977, -977, 908, 909, -977, -977, 910, -977, 30,
- -977, -977, 1075, -977, -977, -977, -977, -977, 421, -977,
- -977, -977, -977, -977, -977, -977, -977, 912, 422, -977,
- 424, -977, 913, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, 739, -977, -977, 1076, 916, -977, -21,
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, 1077, 915, 1078, 223, -977, -977, -977, -977, -977,
- -977, 922, -977, -977, 1079, -977, 923, -977, -977, 1081,
- -977, -977, 109, -977, -11, 1081, -977, -977, 1082, 1085,
- 1086, -977, 432, -977, -977, -977, -977, -977, -977, -977,
- 1087, 924, 919, 925, 1088, -11, -977, 928, -977, -977,
- -977, 930, -977, -977, -977
+ 452, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, 91, 30, 101, 102, 108,
+ 111, 117, 119, 137, 139, 156, 166, 178, 210, 223,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, -979, 30, -68,
+ 176, 140, 24, 641, -44, 190, 251, 159, 17, 88,
+ -47, 431, 44, -979, 231, 228, 255, 254, 268, -979,
+ 266, -979, -979, -979, -979, -979, -979, 274, 287, 312,
+ 352, 353, 360, 366, 367, 380, 396, 397, 409, 412,
+ 413, -979, 416, 417, 425, 432, 437, -979, -979, -979,
+ 439, 443, 444, -979, -979, -979, -979, -979, -979, -979,
+ 445, 447, 448, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, 454, -979, -979, -979, -979, -979, -979, 457,
+ -979, -979, 459, -979, 68, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, -979, 461, -979,
+ 87, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, 462, 463, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, 130, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, 133, -979, -979, -979,
+ -979, -979, 464, -979, 467, 468, -979, -979, -979, -979,
+ -979, -979, 168, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ 282, 321, -979, -979, -979, -979, -979, -979, -979, -979,
+ 303, -979, -979, 478, -979, -979, -979, 479, -979, -979,
+ 427, 481, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, 482, 483, -979, -979, -979,
+ -979, 480, 489, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, 169, -979, -979, -979, 490,
+ -979, -979, 493, -979, 494, 495, -979, -979, 496, 497,
+ -979, -979, -979, -979, -979, -979, -979, 179, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, 498, 215, -979, -979, -979,
+ -979, 30, 30, -979, 296, 502, -979, 503, 504, 506,
+ 507, 510, 511, 311, 313, 324, 326, 327, 328, 331,
+ 332, 319, 334, 335, 337, 340, 341, 527, 342, 343,
+ 344, 345, 347, 528, 530, 549, 351, 354, 355, 559,
+ 564, 565, 566, 568, 569, 572, 368, 369, 371, 574,
+ 580, 581, 582, 583, 585, 600, 601, 602, 398, 604,
+ 605, 606, 609, 610, 611, 405, 613, 614, -979, 140,
+ -979, 615, 410, 24, -979, 616, 618, 619, 620, 621,
+ 418, 419, 624, 627, 628, 641, -979, 629, -44, -979,
+ 630, 426, 632, 428, 429, 190, -979, 636, 637, 638,
+ 639, 640, 656, 657, -979, 251, -979, 661, 663, 460,
+ 664, 667, 668, 465, -979, 17, 669, 466, 472, -979,
+ 88, 670, 671, -49, -979, 473, 681, 683, 509, 698,
+ 517, 518, 699, 700, 505, 508, 701, 711, 716, 725,
+ 431, -979, 727, 523, 44, -979, -979, -979, 730, 726,
+ 536, 728, 738, 739, 740, 746, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ 544, -979, -979, -979, -979, -979, 43, 545, 546, -979,
+ -979, -979, 750, 751, 753, 754, 755, 555, 320, -979,
+ -979, -979, 759, 760, 761, 762, 765, 766, 767, 768,
+ 769, -979, 783, 784, 785, 786, 596, 599, -979, 803,
+ 802, -979, 805, -979, -979, 806, 807, 607, 608, 612,
+ -979, -979, 805, 625, 810, -979, 626, -979, 631, -979,
+ 633, -979, -979, -979, 805, 805, 805, 634, 635, 642,
+ 643, -979, 644, 645, -979, 646, 647, 649, -979, -979,
+ 650, -979, -979, -979, 651, 755, -979, -979, 652, 653,
+ -979, 654, -979, -979, -75, 592, -979, -979, 43, 655,
+ 658, 659, -979, 808, -979, -979, 30, 140, -979, 44,
+ 24, 308, 308, 811, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, 812, 816, 819, 822, -979, -979, -979,
+ -979, -979, -979, -979, -979, -87, 30, 316, 660, 825,
+ 828, 833, 245, 35, -46, 21, 161, 431, -979, -979,
+ 837, -140, -979, -979, 839, 840, -979, -979, -979, -979,
+ -979, -73, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, 811, -979, 225, 265, 267, -979, -979, -979, -979,
+ 860, 861, 864, 865, 866, -979, 867, 868, -979, -979,
+ -979, -979, 869, 870, 871, 872, -979, 286, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ 290, -979, 873, 770, -979, -979, 874, 875, -979, -979,
+ 876, 878, -979, -979, 877, 881, -979, -979, 879, 883,
+ -979, -979, -979, 67, -979, -979, -979, 882, -979, -979,
+ -979, 131, -979, -979, -979, -979, 304, -979, -979, -979,
+ 150, -979, -979, 884, 886, -979, -979, 885, 889, -979,
+ 890, 891, 892, 893, 894, 895, 305, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, 896, 897, 898, -979,
+ -979, -979, -979, 307, -979, -979, -979, -979, -979, -979,
+ 899, 900, 901, -979, 322, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, 323, -979, -979, -979,
+ 902, -979, 903, -979, -979, -979, 325, -979, -979, -979,
+ -979, -979, 385, -979, 151, -979, 904, -979, 387, -979,
+ -979, 679, -979, 887, 908, -979, -979, 906, 910, -979,
+ -979, -979, 907, -979, 911, -979, -979, -979, 912, 914,
+ 915, 916, 705, 603, 712, 666, 713, 920, 718, 719,
+ 921, 926, 927, 934, 731, 732, 736, 741, 308, -979,
+ -979, 308, -979, 811, 641, -979, 812, 17, -979, 816,
+ 88, -979, 819, 729, -979, 822, -87, -979, -979, 316,
+ -979, 949, 660, -979, 310, 825, -979, 251, -979, 828,
+ -47, -979, 833, 745, 747, 748, 752, 775, 788, 245,
+ -979, 974, 975, 792, 794, 795, 35, -979, 782, 829,
+ 836, -46, -979, 990, 1008, 21, -979, 809, 1012, 852,
+ 1013, 161, -979, -979, 181, 837, -979, 814, -140, -979,
+ -979, 1062, 1068, -44, -979, 839, 190, -979, 840, 1070,
+ -979, -979, 408, 880, 888, 905, -979, -979, -979, -979,
+ -979, 909, -979, -979, 206, 913, 917, 918, -979, -979,
+ -979, -979, -979, 388, -979, 389, -979, 1069, -979, 1071,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, 391, -979, -979,
+ -979, -979, -979, -979, -979, -979, 919, -979, -979, 1076,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, 1073, 1079, -979, -979, -979, -979, -979, 1075, -979,
+ 399, -979, -979, -979, -979, -979, -979, -979, -979, 315,
+ 922, -979, -979, -979, -979, -979, -979, -979, -979, 923,
+ 924, -979, -979, 925, -979, 30, -979, -979, 1080, -979,
+ -979, -979, -979, -979, 400, -979, -979, -979, -979, -979,
+ -979, -979, -979, 929, 401, -979, 407, -979, 932, -979,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, 729,
+ -979, -979, 1081, 931, -979, 310, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, 1082, 935, 1083,
+ 181, -979, -979, -979, -979, -979, -979, 937, -979, -979,
+ 1084, -979, 938, -979, -979, 1085, -979, -979, 221, -979,
+ 112, 1085, -979, -979, 1086, 1087, 1089, -979, 411, -979,
+ -979, -979, -979, -979, -979, -979, 1090, 936, 939, 940,
+ 1091, 112, -979, 942, -979, -979, -979, 943, -979, -979,
+ -979
};
const short
@@ -4851,16 +4852,16 @@ namespace isc { namespace dhcp {
1, 45, 38, 34, 33, 30, 31, 32, 37, 3,
35, 36, 58, 5, 62, 7, 172, 9, 340, 11,
535, 13, 560, 15, 590, 17, 460, 19, 468, 21,
- 505, 23, 305, 25, 703, 27, 753, 29, 47, 41,
+ 505, 23, 305, 25, 709, 27, 759, 29, 47, 41,
0, 0, 0, 0, 0, 0, 592, 0, 470, 507,
0, 0, 0, 49, 0, 48, 0, 0, 42, 60,
- 0, 128, 751, 170, 184, 186, 188, 0, 0, 0,
+ 0, 128, 757, 170, 184, 186, 188, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 167, 0, 0, 0, 0, 0, 147, 154, 156,
0, 0, 0, 332, 458, 497, 408, 548, 550, 400,
0, 0, 0, 265, 282, 273, 258, 627, 582, 297,
- 316, 648, 0, 284, 672, 685, 701, 160, 162, 0,
- 762, 800, 0, 127, 0, 64, 66, 67, 68, 69,
+ 316, 654, 0, 284, 678, 691, 707, 160, 162, 0,
+ 768, 806, 0, 127, 0, 64, 66, 67, 68, 69,
70, 71, 72, 73, 74, 105, 106, 107, 108, 109,
75, 113, 114, 115, 116, 117, 118, 119, 120, 111,
112, 121, 122, 123, 100, 125, 78, 79, 80, 81,
@@ -4883,10 +4884,10 @@ namespace isc { namespace dhcp {
479, 480, 481, 482, 521, 0, 0, 519, 520, 523,
524, 0, 508, 509, 511, 512, 513, 514, 515, 516,
517, 518, 312, 314, 309, 0, 307, 310, 311, 0,
- 726, 728, 0, 731, 0, 0, 735, 739, 0, 0,
- 743, 745, 747, 749, 724, 722, 723, 0, 705, 707,
- 719, 708, 709, 710, 711, 712, 713, 714, 715, 716,
- 717, 718, 720, 721, 759, 0, 0, 755, 757, 758,
+ 732, 734, 0, 737, 0, 0, 741, 745, 0, 0,
+ 749, 751, 753, 755, 730, 728, 729, 0, 711, 713,
+ 725, 714, 715, 716, 717, 718, 719, 720, 721, 722,
+ 723, 724, 726, 727, 765, 0, 0, 761, 763, 764,
46, 0, 0, 39, 0, 0, 59, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -4901,20 +4902,20 @@ namespace isc { namespace dhcp {
0, 0, 0, 0, 469, 0, 0, 0, 0, 506,
0, 0, 0, 0, 306, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 704, 0, 0, 0, 754, 50, 43, 0, 0,
+ 0, 710, 0, 0, 0, 760, 50, 43, 0, 0,
0, 0, 0, 0, 0, 0, 130, 131, 132, 133,
134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
0, 165, 166, 144, 145, 146, 0, 0, 0, 158,
159, 164, 0, 0, 0, 0, 0, 0, 0, 397,
398, 399, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 671, 0, 0, 0, 0, 0, 0, 169, 0,
+ 0, 677, 0, 0, 0, 0, 0, 0, 169, 0,
0, 65, 0, 183, 175, 0, 0, 0, 0, 0,
406, 407, 0, 0, 0, 343, 0, 538, 0, 577,
0, 580, 581, 563, 0, 0, 0, 0, 0, 0,
0, 595, 0, 0, 485, 0, 0, 0, 496, 473,
- 0, 525, 526, 510, 0, 0, 308, 725, 0, 0,
- 730, 0, 733, 734, 0, 0, 741, 742, 0, 0,
- 0, 0, 706, 0, 761, 756, 0, 0, 129, 0,
+ 0, 525, 526, 510, 0, 0, 308, 731, 0, 0,
+ 736, 0, 739, 740, 0, 0, 747, 748, 0, 0,
+ 0, 0, 712, 0, 767, 762, 0, 0, 129, 0,
0, 0, 0, 190, 168, 149, 150, 151, 152, 153,
148, 155, 157, 334, 462, 499, 410, 40, 549, 551,
402, 403, 404, 405, 401, 0, 47, 0, 0, 0,
@@ -4922,8 +4923,8 @@ namespace isc { namespace dhcp {
0, 0, 51, 182, 529, 554, 388, 390, 392, 396,
394, 0, 547, 576, 579, 620, 608, 610, 612, 614,
616, 618, 488, 234, 492, 490, 495, 522, 313, 315,
- 727, 729, 732, 737, 738, 736, 740, 744, 746, 748,
- 750, 190, 44, 0, 0, 0, 220, 226, 228, 230,
+ 733, 735, 738, 743, 744, 742, 746, 750, 752, 754,
+ 756, 190, 44, 0, 0, 0, 220, 226, 228, 230,
0, 0, 0, 0, 0, 249, 0, 0, 240, 252,
254, 256, 0, 0, 0, 0, 219, 0, 196, 198,
199, 200, 201, 202, 203, 204, 205, 206, 207, 210,
@@ -4934,103 +4935,104 @@ namespace isc { namespace dhcp {
277, 0, 275, 278, 279, 263, 0, 260, 262, 631,
0, 629, 588, 0, 585, 586, 303, 0, 300, 301,
0, 0, 0, 0, 0, 0, 0, 318, 320, 321,
- 322, 323, 324, 325, 661, 667, 0, 0, 0, 660,
- 657, 658, 659, 0, 650, 652, 655, 653, 654, 656,
+ 322, 323, 324, 325, 667, 673, 0, 0, 0, 666,
+ 663, 664, 665, 0, 656, 658, 661, 659, 660, 662,
0, 0, 0, 293, 0, 286, 288, 289, 290, 291,
- 292, 681, 683, 680, 678, 679, 0, 674, 676, 677,
- 0, 696, 0, 699, 692, 693, 0, 687, 689, 690,
- 691, 694, 0, 766, 0, 764, 0, 805, 0, 802,
- 804, 53, 533, 0, 530, 531, 558, 0, 555, 556,
- 625, 624, 0, 623, 0, 61, 752, 171, 0, 0,
+ 292, 687, 689, 686, 684, 685, 0, 680, 682, 683,
+ 0, 702, 0, 705, 698, 699, 0, 693, 695, 696,
+ 697, 700, 0, 772, 0, 770, 0, 811, 0, 808,
+ 810, 53, 533, 0, 530, 531, 558, 0, 555, 556,
+ 625, 624, 0, 623, 0, 61, 758, 171, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 185,
187, 0, 189, 0, 0, 333, 0, 470, 459, 0,
507, 498, 0, 0, 409, 0, 0, 266, 283, 0,
274, 0, 0, 259, 633, 0, 628, 592, 583, 0,
0, 298, 0, 0, 0, 0, 0, 0, 0, 0,
- 317, 0, 0, 0, 0, 0, 0, 649, 0, 0,
- 0, 0, 285, 0, 0, 0, 673, 0, 0, 0,
- 0, 0, 686, 702, 0, 0, 763, 0, 0, 801,
+ 317, 0, 0, 0, 0, 0, 0, 655, 0, 0,
+ 0, 0, 285, 0, 0, 0, 679, 0, 0, 0,
+ 0, 0, 692, 708, 0, 0, 769, 0, 0, 807,
55, 0, 54, 0, 528, 0, 0, 553, 0, 0,
- 622, 760, 0, 0, 0, 0, 232, 235, 236, 237,
+ 622, 766, 0, 0, 0, 0, 232, 235, 236, 237,
238, 0, 251, 239, 0, 0, 0, 0, 246, 247,
248, 245, 197, 0, 193, 0, 337, 0, 465, 0,
502, 457, 432, 433, 434, 436, 437, 438, 422, 423,
441, 442, 443, 444, 445, 448, 449, 450, 451, 452,
453, 454, 455, 446, 447, 456, 418, 419, 420, 421,
430, 431, 427, 428, 429, 426, 435, 0, 416, 424,
- 439, 440, 425, 413, 268, 276, 0, 261, 645, 0,
- 643, 644, 640, 641, 642, 0, 634, 635, 637, 638,
- 639, 630, 0, 587, 0, 302, 326, 327, 328, 329,
- 330, 331, 319, 0, 0, 666, 669, 670, 651, 294,
- 295, 296, 287, 0, 0, 675, 695, 0, 698, 0,
- 688, 780, 0, 778, 776, 770, 774, 775, 0, 768,
- 772, 773, 771, 765, 806, 803, 52, 0, 0, 532,
- 0, 557, 0, 222, 223, 224, 225, 221, 227, 229,
- 231, 250, 242, 243, 244, 241, 253, 255, 257, 195,
- 339, 467, 504, 0, 415, 264, 0, 0, 632, 0,
- 589, 304, 663, 664, 665, 662, 668, 682, 684, 697,
- 700, 0, 0, 0, 0, 767, 56, 534, 559, 626,
- 417, 0, 647, 636, 0, 777, 0, 769, 646, 0,
- 779, 784, 0, 782, 0, 0, 781, 793, 0, 0,
- 0, 798, 0, 786, 788, 789, 790, 791, 792, 783,
- 0, 0, 0, 0, 0, 0, 785, 0, 795, 796,
- 797, 0, 787, 794, 799
+ 439, 440, 425, 413, 268, 276, 0, 261, 651, 0,
+ 649, 643, 644, 645, 646, 647, 648, 650, 640, 641,
+ 642, 0, 634, 635, 637, 638, 639, 630, 0, 587,
+ 0, 302, 326, 327, 328, 329, 330, 331, 319, 0,
+ 0, 672, 675, 676, 657, 294, 295, 296, 287, 0,
+ 0, 681, 701, 0, 704, 0, 694, 786, 0, 784,
+ 782, 776, 780, 781, 0, 774, 778, 779, 777, 771,
+ 812, 809, 52, 0, 0, 532, 0, 557, 0, 222,
+ 223, 224, 225, 221, 227, 229, 231, 250, 242, 243,
+ 244, 241, 253, 255, 257, 195, 339, 467, 504, 0,
+ 415, 264, 0, 0, 632, 0, 589, 304, 669, 670,
+ 671, 668, 674, 688, 690, 703, 706, 0, 0, 0,
+ 0, 773, 56, 534, 559, 626, 417, 0, 653, 636,
+ 0, 783, 0, 775, 652, 0, 785, 790, 0, 788,
+ 0, 0, 787, 799, 0, 0, 0, 804, 0, 792,
+ 794, 795, 796, 797, 798, 789, 0, 0, 0, 0,
+ 0, 0, 791, 0, 801, 802, 803, 0, 793, 800,
+ 805
};
const short
Dhcp6Parser::yypgoto_[] =
{
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, -10, -977, -557, -977,
- 418, -977, -977, -977, -977, 368, -977, -569, -977, -977,
- -977, -71, -977, -977, -977, -977, -977, -977, 399, 608,
- -977, -977, -59, -43, -37, -31, -30, -27, -26, -23,
- -19, 3, 16, 19, 20, -977, 22, 32, 33, 34,
- -977, 395, 37, -977, 38, -977, 40, 44, 50, -977,
- 52, -977, 54, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, 403, 602, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, 318, -977, 105, -977, -680, 112, -977,
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -45,
- -977, -720, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, 89, -977, -977, -977, -977,
- -977, 96, -702, -977, -977, -977, -977, 98, -977, -977,
- -977, -977, -977, -977, -977, 64, -977, -977, -977, -977,
- -977, -977, -977, 82, -977, -977, -977, 86, 566, -977,
- -977, -977, -977, -977, -977, -977, 79, -977, -977, -977,
- -977, -977, -977, -976, -977, -977, -977, 114, -977, -977,
- -977, 119, 614, -977, -977, -975, -977, -974, -977, -63,
- -977, 63, -977, 55, 56, 58, 62, -977, -977, -977,
- -972, -977, -977, -977, -977, 110, -977, -977, -119, 1045,
- -977, -977, -977, -977, -977, 124, -977, -977, -977, 128,
- -977, 597, -977, -64, -977, -977, -977, -977, -977, -39,
- -977, -977, -977, -977, -977, 4, -977, -977, -977, 131,
- -977, -977, -977, 139, -977, 600, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, -977, 72, -977, -977,
- -977, 80, 633, -977, -977, -55, -977, -12, -977, -977,
- -977, -977, -977, 74, -977, -977, -977, 81, 640, -977,
- -977, -977, -977, -977, -977, -977, -57, -977, -977, -977,
- 126, -977, -977, -977, 127, -977, 632, 397, -977, -977,
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, -971, -977, -977, -977, -977, -977, -977, -977, 134,
- -977, -977, -977, -93, -977, -977, -977, -977, -977, -977,
- -977, 116, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, 106, -977, -977, -977, -977, -977,
- -977, -977, 99, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, 416, 596, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, -977, -977, -977, -977,
- -977, -977, -977, -977, 465, 599, -977, -977, -977, -977,
- -977, -977, 103, -977, -977, -100, -977, -977, -977, -977,
- -977, -977, -116, -977, -977, -135, -977, -977, -977, -977,
- -977, -977, -977, -977, -977, -977, 108, -977
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, -10, -979, -552, -979,
+ 422, -979, -979, -979, -979, 372, -979, -568, -979, -979,
+ -979, -71, -979, -979, -979, -979, -979, -979, 402, 617,
+ -979, -979, -43, -14, 12, 16, 20, 33, -59, -31,
+ -30, -28, -27, -26, 19, -979, 34, 37, 38, 41,
+ -979, 414, 49, -979, 52, -979, 54, 55, 56, -979,
+ 59, -979, 62, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, 403, 622, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, 329, -979, 107, -979, -686, 113, -979,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -45,
+ -979, -722, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, 92, -979, -979, -979, -979,
+ -979, 99, -705, -979, -979, -979, -979, 98, -979, -979,
+ -979, -979, -979, -979, -979, 71, -979, -979, -979, -979,
+ -979, -979, -979, 86, -979, -979, -979, 89, 571, -979,
+ -979, -979, -979, -979, -979, -979, 82, -979, -979, -979,
+ -979, -979, -979, -978, -979, -979, -979, 120, -979, -979,
+ -979, 124, 623, -979, -979, -976, -979, -975, -979, 73,
+ -979, 75, -979, 66, 69, 70, 72, -979, -979, -979,
+ -974, -979, -979, -979, -979, 114, -979, -979, -119, 1045,
+ -979, -979, -979, -979, -979, 125, -979, -979, -979, 126,
+ -979, 594, -979, -67, -979, -979, -979, -979, -979, -64,
+ -979, -979, -979, -979, -979, 4, -979, -979, -979, 132,
+ -979, -979, -979, 135, -979, 648, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, 78, -979, -979,
+ -979, 90, 662, -979, -979, -55, -979, -12, -979, -979,
+ -979, -979, -979, 84, -979, -979, -979, 93, 672, -979,
+ -979, -979, -979, -979, -979, -979, -60, -979, -979, -979,
+ 136, -979, -979, -979, 141, -979, 673, 406, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, -972, -979, -979, -979, -979, -979, -979, -979, 145,
+ -979, -979, -979, -91, -979, -979, -979, -979, -979, -979,
+ -979, 127, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, 116, -979, -979, -979, -979, -979,
+ -979, -979, 105, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, 430, 674, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, -979, -979, -979, -979,
+ -979, -979, -979, -979, 470, 598, -979, -979, -979, -979,
+ -979, -979, 109, -979, -979, -95, -979, -979, -979, -979,
+ -979, -979, -115, -979, -979, -130, -979, -979, -979, -979,
+ -979, -979, -979, -979, -979, -979, 115, -979
};
const short
Dhcp6Parser::yydefgoto_[] =
{
- 0, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+ -1, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, 29, 83, 39, 40, 69,
718, 87, 88, 41, 68, 84, 85, 743, 951, 1061,
1062, 806, 43, 70, 90, 425, 45, 71, 154, 155,
@@ -5040,8 +5042,8 @@ namespace isc { namespace dhcp {
180, 484, 181, 182, 183, 184, 447, 185, 186, 429,
47, 72, 220, 221, 222, 491, 223, 187, 430, 188,
431, 189, 432, 832, 833, 834, 991, 807, 808, 809,
- 968, 1217, 810, 969, 811, 970, 812, 971, 813, 814,
- 528, 815, 816, 817, 818, 819, 820, 980, 1225, 821,
+ 968, 1223, 810, 969, 811, 970, 812, 971, 813, 814,
+ 528, 815, 816, 817, 818, 819, 820, 980, 1231, 821,
822, 823, 824, 825, 977, 826, 827, 981, 828, 982,
829, 983, 190, 472, 866, 867, 868, 1011, 191, 469,
853, 854, 855, 856, 192, 471, 861, 862, 863, 864,
@@ -5063,287 +5065,291 @@ namespace isc { namespace dhcp {
875, 1017, 55, 76, 320, 321, 322, 323, 518, 324,
519, 325, 520, 326, 521, 327, 522, 328, 523, 329,
517, 280, 504, 962, 963, 1069, 208, 473, 870, 871,
- 1014, 1155, 1156, 1157, 1158, 1159, 1236, 1160, 209, 477,
- 903, 904, 905, 1031, 1245, 906, 907, 1032, 908, 909,
+ 1014, 1161, 1162, 1163, 1164, 1165, 1242, 1166, 209, 477,
+ 903, 904, 905, 1031, 1251, 906, 907, 1032, 908, 909,
210, 211, 480, 926, 927, 928, 1043, 929, 1044, 212,
481, 936, 937, 938, 939, 1048, 940, 941, 1050, 213,
482, 65, 81, 397, 398, 399, 400, 546, 401, 547,
402, 403, 549, 404, 405, 406, 552, 775, 407, 553,
408, 409, 410, 556, 411, 557, 412, 558, 413, 559,
214, 428, 67, 82, 416, 417, 418, 562, 419, 215,
- 486, 944, 945, 1054, 1198, 1199, 1200, 1201, 1253, 1202,
- 1251, 1272, 1273, 1274, 1282, 1283, 1284, 1290, 1285, 1286,
- 1287, 1288, 1294, 216, 487, 948, 949, 950
+ 486, 944, 945, 1054, 1204, 1205, 1206, 1207, 1259, 1208,
+ 1257, 1278, 1279, 1280, 1288, 1289, 1290, 1296, 1291, 1292,
+ 1293, 1294, 1300, 216, 487, 948, 949, 950
};
const short
Dhcp6Parser::yytable_[] =
{
153, 219, 236, 282, 296, 316, 38, 338, 357, 374,
- 394, 283, 297, 900, 237, 359, 279, 224, 276, 289,
- 300, 318, 830, 352, 370, 860, 395, 1127, 1128, 1129,
- 238, 1136, 1142, 339, 358, 31, 239, 32, 42, 33,
- 360, 851, 240, 241, 127, 128, 242, 243, 30, 717,
- 244, 310, 372, 373, 245, 125, 332, 946, 960, 86,
- 225, 277, 290, 301, 319, 420, 353, 371, 1006, 396,
- 89, 1007, 152, 749, 127, 128, 246, 274, 285, 299,
- 317, 1009, 217, 218, 1010, 755, 756, 757, 1015, 247,
- 44, 1016, 248, 249, 489, 250, 1148, 1149, 1055, 490,
- 125, 1056, 921, 922, 46, 251, 252, 253, 48, 331,
- 254, 255, 1275, 256, 50, 1276, 493, 257, 717, 127,
- 128, 494, 52, 258, 54, 259, 852, 260, 268, 269,
- 152, 270, 56, 851, 858, 271, 859, 284, 298, 309,
- 705, 706, 707, 708, 58, 310, 311, 312, 313, 314,
- 315, 91, 92, 372, 373, 93, 60, 152, 94, 95,
- 96, 127, 128, 127, 128, 332, 62, 333, 334, 414,
- 415, 335, 336, 337, 1277, 709, 505, 1278, 1279, 1280,
- 1281, 506, 64, 127, 128, 773, 774, 152, 97, 98,
+ 394, 900, 359, 279, 243, 360, 830, 224, 276, 289,
+ 300, 318, 860, 352, 370, 1127, 395, 1128, 1129, 1136,
+ 237, 1142, 125, 339, 358, 31, 851, 32, 331, 33,
+ 217, 218, 244, 245, 281, 246, 247, 248, 310, 127,
+ 128, 127, 128, 946, 717, 960, 894, 414, 415, 238,
+ 225, 277, 290, 301, 319, 791, 353, 371, 152, 396,
+ 1006, 489, 233, 1007, 749, 234, 490, 274, 285, 299,
+ 317, 372, 373, 372, 373, 239, 755, 756, 757, 240,
+ 493, 30, 249, 241, 332, 494, 333, 334, 773, 774,
+ 335, 336, 337, 910, 911, 912, 242, 250, 42, 44,
+ 251, 252, 127, 128, 253, 46, 127, 128, 48, 127,
+ 128, 852, 254, 717, 50, 255, 52, 256, 257, 258,
+ 127, 128, 259, 505, 1009, 260, 508, 1010, 506, 268,
+ 86, 509, 269, 270, 54, 271, 56, 283, 297, 284,
+ 298, 91, 92, 1015, 1055, 93, 1016, 1056, 94, 95,
+ 96, 152, 152, 58, 152, 332, 354, 333, 334, 355,
+ 356, 515, 543, 60, 921, 922, 516, 544, 895, 896,
+ 897, 898, 560, 127, 128, 62, 89, 561, 97, 98,
99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
- 119, 120, 121, 122, 123, 124, 125, 910, 911, 912,
- 880, 881, 882, 883, 884, 885, 126, 66, 508, 1222,
- 1223, 1224, 152, 509, 894, 127, 128, 124, 34, 35,
- 36, 37, 129, 791, 1242, 1243, 1244, 130, 131, 132,
- 133, 134, 135, 136, 421, 137, 422, 1127, 1128, 1129,
- 138, 1136, 1142, 125, 423, 515, 543, 424, 560, 139,
- 516, 544, 140, 561, 152, 281, 152, 426, 433, 141,
- 564, 489, 127, 128, 564, 565, 965, 142, 143, 966,
- 524, 434, 144, 493, 525, 145, 152, 988, 967, 146,
- 332, 435, 989, 233, 436, 988, 234, 860, 127, 128,
- 990, 1093, 1012, 526, 437, 438, 900, 1013, 127, 128,
- 147, 148, 149, 150, 439, 1029, 127, 128, 1036, 786,
- 1030, 440, 151, 1037, 787, 788, 789, 790, 791, 792,
- 793, 794, 795, 796, 797, 798, 441, 442, 152, 799,
- 800, 801, 802, 803, 804, 805, 895, 896, 897, 898,
- 125, 443, 444, 332, 354, 333, 334, 355, 356, 720,
- 721, 722, 723, 445, 291, 292, 293, 294, 295, 127,
- 128, 127, 128, 446, 448, 332, 1041, 930, 931, 932,
- 449, 1042, 1045, 1051, 560, 152, 1058, 1046, 1052, 1053,
- 233, 1059, 450, 234, 451, 452, 456, 1191, 988, 1192,
- 1193, 566, 567, 1229, 505, 1233, 534, 457, 153, 1230,
- 1234, 152, 219, 543, 1254, 508, 535, 515, 1241, 1255,
- 1257, 152, 1258, 458, 236, 1295, 539, 282, 224, 933,
- 1296, 466, 467, 468, 296, 283, 237, 478, 279, 485,
- 276, 488, 297, 289, 316, 1213, 1214, 1215, 1216, 492,
- 300, 500, 238, 501, 338, 511, 513, 514, 239, 357,
- 318, 529, 533, 537, 240, 241, 359, 538, 242, 243,
- 352, 225, 244, 540, 568, 370, 245, 545, 548, 394,
- 339, 550, 152, 277, 152, 358, 290, 551, 554, 555,
- 563, 360, 569, 301, 570, 395, 571, 572, 246, 274,
- 573, 574, 285, 319, 127, 128, 152, 575, 584, 299,
- 590, 247, 576, 353, 248, 249, 577, 250, 371, 317,
- 578, 596, 579, 580, 597, 581, 598, 251, 252, 253,
- 582, 583, 254, 255, 585, 256, 586, 587, 396, 257,
- 588, 593, 602, 589, 591, 258, 592, 259, 603, 260,
- 268, 269, 594, 270, 595, 599, 600, 271, 604, 605,
- 601, 284, 606, 607, 608, 609, 610, 611, 298, 379,
- 380, 381, 382, 383, 384, 385, 386, 387, 388, 389,
- 390, 391, 612, 613, 614, 615, 616, 617, 618, 392,
- 393, 1, 2, 3, 4, 5, 6, 7, 8, 9,
- 10, 11, 12, 13, 14, 619, 620, 622, 621, 623,
- 624, 625, 626, 627, 629, 628, 153, 152, 630, 219,
- 632, 635, 636, 637, 638, 639, 633, 641, 642, 640,
- 643, 644, 646, 648, 649, 224, 650, 654, 655, 651,
- 652, 656, 657, 658, 659, 660, 662, 663, 664, 665,
- 666, 667, 899, 913, 923, 668, 394, 670, 674, 671,
- 947, 672, 675, 678, 679, 677, 681, 684, 901, 919,
- 924, 934, 395, 680, 682, 683, 782, 685, 225, 97,
+ 119, 120, 121, 122, 123, 124, 125, 64, 564, 705,
+ 706, 707, 708, 565, 1281, 152, 126, 1282, 489, 152,
+ 66, 421, 152, 965, 124, 127, 128, 420, 34, 35,
+ 36, 37, 129, 152, 1228, 1229, 1230, 130, 131, 132,
+ 133, 134, 135, 136, 709, 137, 127, 128, 332, 422,
+ 138, 1127, 423, 1128, 1129, 1136, 125, 1142, 564, 139,
+ 493, 424, 140, 966, 426, 967, 127, 128, 433, 141,
+ 291, 292, 293, 294, 295, 127, 128, 142, 143, 988,
+ 524, 434, 144, 988, 989, 145, 152, 1283, 990, 146,
+ 1284, 1285, 1286, 1287, 860, 1093, 233, 1012, 1029, 234,
+ 1036, 526, 1013, 1030, 900, 1037, 435, 930, 931, 932,
+ 147, 148, 149, 150, 525, 1041, 1045, 125, 1051, 786,
+ 1042, 1046, 151, 1052, 787, 788, 789, 790, 791, 792,
+ 793, 794, 795, 796, 797, 798, 127, 128, 152, 799,
+ 800, 801, 802, 803, 804, 805, 436, 437, 97, 98,
+ 99, 100, 101, 102, 438, 1197, 309, 1198, 1199, 933,
+ 439, 440, 310, 311, 312, 313, 314, 315, 880, 881,
+ 882, 883, 884, 885, 441, 332, 125, 332, 560, 152,
+ 1058, 988, 505, 1053, 1239, 1059, 1235, 1236, 152, 1240,
+ 442, 443, 543, 1260, 508, 127, 128, 1247, 1261, 1263,
+ 515, 566, 567, 444, 1301, 1264, 445, 446, 153, 1302,
+ 448, 449, 219, 720, 721, 722, 723, 1148, 1149, 450,
+ 1219, 1220, 1221, 1222, 236, 534, 451, 282, 224, 851,
+ 858, 452, 859, 456, 296, 279, 243, 457, 458, 466,
+ 276, 467, 468, 289, 316, 1248, 1249, 1250, 478, 152,
+ 300, 485, 237, 488, 338, 492, 500, 501, 511, 357,
+ 318, 513, 514, 359, 244, 245, 360, 246, 247, 248,
+ 352, 225, 529, 533, 535, 370, 537, 538, 539, 394,
+ 339, 238, 540, 277, 545, 358, 290, 548, 550, 551,
+ 554, 555, 563, 301, 568, 395, 569, 570, 571, 274,
+ 572, 573, 285, 319, 574, 575, 152, 239, 152, 299,
+ 576, 240, 577, 353, 249, 241, 127, 128, 371, 317,
+ 584, 590, 596, 578, 597, 579, 580, 581, 242, 250,
+ 582, 583, 251, 252, 585, 586, 253, 587, 396, 588,
+ 589, 591, 592, 598, 254, 593, 594, 255, 595, 256,
+ 257, 258, 599, 602, 259, 600, 601, 260, 603, 604,
+ 605, 268, 606, 607, 269, 270, 608, 271, 612, 609,
+ 610, 283, 611, 284, 613, 614, 615, 616, 297, 617,
+ 298, 379, 380, 381, 382, 383, 384, 385, 386, 387,
+ 388, 389, 390, 391, 618, 619, 620, 621, 622, 623,
+ 624, 392, 393, 625, 626, 627, 628, 629, 630, 632,
+ 635, 633, 636, 637, 638, 639, 153, 640, 642, 219,
+ 641, 643, 644, 646, 648, 649, 650, 651, 652, 152,
+ 654, 655, 656, 657, 658, 224, 1, 2, 3, 4,
+ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 659, 660, 899, 913, 923, 662, 394, 663, 665, 664,
+ 947, 666, 667, 670, 674, 675, 668, 671, 901, 919,
+ 924, 934, 395, 672, 677, 678, 782, 679, 225, 97,
98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
- 108, 109, 686, 687, 688, 689, 114, 115, 116, 117,
- 118, 119, 120, 121, 122, 690, 691, 125, 693, 694,
- 696, 902, 920, 925, 935, 396, 697, 698, 226, 699,
- 227, 700, 701, 702, 703, 713, 127, 128, 228, 229,
- 230, 231, 232, 129, 704, 711, 712, 714, 130, 131,
- 132, 715, 716, 719, 725, 32, 726, 233, 727, 728,
- 234, 138, 729, 730, 731, 738, 739, 732, 235, 733,
- 734, 735, 736, 737, 740, 741, 742, 744, 745, 746,
- 747, 748, 750, 751, 752, 753, 754, 97, 98, 99,
+ 108, 109, 681, 684, 685, 688, 114, 115, 116, 117,
+ 118, 119, 120, 121, 122, 689, 686, 125, 680, 687,
+ 690, 902, 920, 925, 935, 396, 682, 683, 226, 691,
+ 227, 693, 694, 697, 696, 699, 127, 128, 228, 229,
+ 230, 231, 232, 129, 698, 700, 701, 702, 130, 131,
+ 132, 703, 704, 711, 712, 713, 714, 233, 715, 716,
+ 234, 138, 32, 719, 725, 726, 727, 776, 235, 728,
+ 729, 730, 731, 993, 865, 732, 733, 97, 98, 99,
100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
- 781, 831, 865, 758, 114, 115, 116, 117, 118, 119,
- 120, 121, 122, 123, 759, 125, 332, 760, 761, 835,
- 839, 147, 148, 843, 847, 869, 872, 876, 943, 762,
- 763, 764, 952, 765, 127, 128, 776, 229, 230, 956,
- 232, 129, 972, 766, 973, 974, 130, 131, 132, 152,
- 975, 976, 978, 767, 768, 233, 979, 984, 234, 985,
- 986, 987, 770, 993, 992, 995, 235, 771, 772, 996,
- 778, 998, 999, 779, 780, 1002, 1001, 1004, 1005, 1008,
- 1018, 1019, 1021, 1022, 1060, 1023, 1024, 1025, 1026, 1027,
- 1028, 1033, 1034, 1035, 1038, 1039, 1040, 1047, 1049, 1057,
- 1065, 1076, 1064, 1068, 1067, 1072, 1077, 1070, 1071, 1073,
- 1074, 1075, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 147,
- 148, 1085, 1086, 236, 1087, 1146, 338, 1088, 1090, 357,
- 1089, 1173, 1101, 1174, 1179, 237, 359, 279, 1183, 276,
- 1130, 1091, 352, 1150, 1102, 370, 316, 152, 1140, 374,
- 1166, 238, 339, 1167, 1168, 358, 1184, 239, 1126, 1153,
- 1103, 360, 318, 240, 241, 899, 1104, 242, 243, 1151,
- 913, 244, 1105, 1106, 923, 245, 1107, 1108, 1186, 1169,
- 1109, 901, 277, 1194, 1110, 353, 919, 947, 371, 1170,
- 924, 1141, 282, 1171, 1175, 296, 934, 246, 274, 1196,
- 283, 1176, 1154, 297, 1187, 319, 1111, 1139, 289, 1195,
- 247, 300, 1177, 248, 249, 1180, 250, 1181, 1152, 1112,
- 1188, 317, 1113, 1114, 902, 1115, 251, 252, 253, 920,
- 1189, 254, 255, 925, 256, 1116, 1117, 1118, 257, 935,
- 1119, 1120, 1197, 1121, 258, 1204, 259, 1122, 260, 268,
- 269, 290, 270, 1123, 301, 1124, 271, 1125, 1132, 1133,
- 1206, 1134, 1207, 1231, 1212, 1135, 1131, 285, 1237, 1218,
- 299, 1219, 1220, 1232, 1238, 1221, 1226, 1239, 1240, 1252,
- 1261, 1264, 1266, 777, 1269, 1227, 1291, 1228, 1271, 1292,
- 1293, 1297, 1301, 769, 857, 634, 783, 631, 1094, 964,
- 1092, 1147, 1144, 785, 1165, 1182, 1164, 1145, 1172, 676,
- 1096, 1235, 1246, 1095, 1260, 1143, 1247, 1248, 1249, 645,
- 1256, 1259, 330, 1098, 1265, 1097, 284, 1262, 1299, 298,
- 1268, 1270, 669, 1100, 1300, 1298, 1303, 1209, 1304, 1099,
- 673, 647, 1211, 1208, 1162, 1163, 1263, 1210, 961, 1161,
- 1190, 1185, 1178, 942, 1267, 653, 692, 661, 1203, 1289,
- 1302, 0, 1101, 695, 784, 0, 1205, 0, 1150, 0,
- 1130, 0, 0, 0, 1102, 0, 0, 0, 1140, 1250,
- 0, 0, 0, 1194, 1153, 0, 0, 0, 1126, 0,
- 1103, 0, 0, 0, 1151, 0, 1104, 0, 0, 1196,
- 0, 0, 1105, 1106, 0, 0, 1107, 1108, 0, 1195,
- 1109, 0, 0, 0, 1110, 0, 0, 0, 0, 0,
- 0, 1141, 0, 0, 0, 0, 0, 1154, 0, 0,
- 0, 0, 0, 0, 0, 0, 1111, 1139, 0, 0,
- 0, 0, 1197, 1152, 0, 0, 0, 0, 0, 1112,
- 0, 0, 1113, 1114, 0, 1115, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1116, 1117, 1118, 0, 0,
- 1119, 1120, 0, 1121, 0, 0, 0, 1122, 0, 0,
- 0, 0, 0, 1123, 0, 1124, 0, 1125, 1132, 1133,
- 0, 1134, 0, 0, 0, 1135, 1131
+ 734, 735, 736, 737, 114, 115, 116, 117, 118, 119,
+ 120, 121, 122, 123, 738, 125, 332, 739, 740, 741,
+ 742, 744, 745, 781, 1077, 746, 747, 751, 831, 835,
+ 748, 147, 148, 839, 127, 128, 843, 229, 230, 847,
+ 232, 129, 869, 750, 752, 872, 130, 131, 132, 753,
+ 876, 754, 758, 759, 943, 233, 952, 956, 234, 152,
+ 760, 761, 762, 763, 764, 765, 235, 766, 767, 768,
+ 770, 771, 772, 778, 972, 973, 779, 780, 974, 975,
+ 976, 978, 979, 984, 985, 986, 987, 1079, 996, 992,
+ 995, 999, 998, 1001, 1002, 1004, 1005, 1060, 1008, 1019,
+ 1018, 1021, 1022, 1064, 1023, 1024, 1025, 1026, 1027, 1028,
+ 1033, 1034, 1035, 1038, 1039, 1040, 1047, 1049, 1057, 147,
+ 148, 1065, 1067, 1068, 1076, 1070, 1072, 1071, 1073, 1074,
+ 1075, 1078, 1080, 236, 1081, 1084, 338, 1082, 1083, 357,
+ 1085, 1086, 1101, 359, 279, 243, 360, 152, 1087, 276,
+ 1088, 1089, 352, 1150, 1108, 370, 316, 1090, 1140, 374,
+ 1091, 237, 339, 1146, 1172, 358, 1173, 1174, 1126, 1159,
+ 1102, 1175, 318, 244, 245, 899, 246, 247, 248, 1157,
+ 913, 1151, 1109, 1110, 923, 1111, 1112, 1113, 1179, 1180,
+ 238, 901, 277, 1200, 1176, 353, 919, 947, 371, 1103,
+ 924, 1141, 282, 1185, 1189, 296, 934, 1177, 274, 1202,
+ 1152, 1181, 1160, 1182, 1183, 319, 239, 1139, 289, 1201,
+ 240, 300, 1190, 249, 241, 1104, 1193, 1195, 1158, 1105,
+ 1192, 317, 1114, 1106, 902, 1210, 1153, 242, 250, 920,
+ 1154, 251, 252, 925, 1155, 253, 1107, 1115, 1186, 935,
+ 1116, 1117, 1203, 254, 1118, 1187, 255, 1156, 256, 257,
+ 258, 290, 1119, 259, 301, 1120, 260, 1121, 1122, 1123,
+ 268, 1194, 1124, 269, 270, 1125, 271, 285, 1212, 1132,
+ 299, 1213, 1133, 1134, 1218, 1135, 1130, 1237, 1131, 1238,
+ 1243, 1244, 1245, 1246, 1258, 1267, 1270, 1272, 1224, 1275,
+ 1297, 1298, 1277, 1299, 1303, 1307, 1225, 769, 857, 783,
+ 1094, 1092, 777, 785, 1147, 1144, 631, 1145, 1171, 1170,
+ 964, 1178, 1188, 1226, 676, 634, 1096, 1227, 1095, 1143,
+ 1266, 1232, 330, 1097, 1098, 1233, 1234, 1241, 645, 669,
+ 1252, 1253, 1254, 1255, 1100, 1099, 283, 1262, 284, 297,
+ 1265, 298, 1268, 1215, 1271, 1274, 1276, 1304, 1305, 1306,
+ 1309, 1310, 1217, 1214, 1269, 1169, 1196, 961, 1168, 1216,
+ 1167, 1191, 695, 1184, 1209, 1273, 1295, 942, 1101, 784,
+ 647, 1308, 0, 1211, 1150, 0, 0, 0, 0, 0,
+ 1108, 0, 0, 0, 1140, 1256, 0, 653, 673, 1200,
+ 1159, 0, 0, 0, 1126, 0, 1102, 0, 661, 0,
+ 1157, 0, 1151, 0, 0, 1202, 0, 0, 1109, 1110,
+ 0, 1111, 1112, 1113, 0, 1201, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1103, 0, 1141, 0, 0,
+ 0, 1152, 0, 1160, 692, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1139, 0, 0, 0, 0, 1203, 1158,
+ 0, 1104, 0, 0, 0, 1105, 0, 1153, 1114, 1106,
+ 0, 1154, 0, 0, 0, 1155, 0, 0, 0, 0,
+ 0, 0, 1107, 1115, 0, 0, 1116, 1117, 1156, 0,
+ 1118, 0, 0, 0, 0, 0, 0, 0, 1119, 0,
+ 0, 1120, 0, 1121, 1122, 1123, 0, 0, 1124, 0,
+ 0, 1125, 0, 0, 0, 1132, 0, 0, 1133, 1134,
+ 0, 1135, 1130, 0, 1131
};
const short
Dhcp6Parser::yycheck_[] =
{
71, 72, 73, 74, 75, 76, 16, 78, 79, 80,
- 81, 74, 75, 733, 73, 79, 73, 72, 73, 74,
- 75, 76, 702, 78, 79, 727, 81, 1003, 1003, 1003,
- 73, 1003, 1003, 78, 79, 5, 73, 7, 7, 9,
- 79, 123, 73, 73, 95, 96, 73, 73, 0, 606,
- 73, 121, 130, 131, 73, 76, 77, 193, 128, 208,
- 72, 73, 74, 75, 76, 6, 78, 79, 3, 81,
- 10, 6, 208, 642, 95, 96, 73, 73, 74, 75,
- 76, 3, 16, 17, 6, 654, 655, 656, 3, 73,
- 7, 6, 73, 73, 3, 73, 117, 118, 3, 8,
- 76, 6, 153, 154, 7, 73, 73, 73, 7, 21,
- 73, 73, 3, 73, 7, 6, 3, 73, 675, 95,
- 96, 8, 7, 73, 7, 73, 208, 73, 73, 73,
- 208, 73, 7, 123, 124, 73, 126, 74, 75, 115,
- 176, 177, 178, 179, 7, 121, 122, 123, 124, 125,
- 126, 11, 12, 130, 131, 15, 7, 208, 18, 19,
- 20, 95, 96, 95, 96, 77, 7, 79, 80, 13,
- 14, 83, 84, 85, 185, 211, 3, 188, 189, 190,
- 191, 8, 7, 95, 96, 173, 174, 208, 48, 49,
+ 81, 733, 79, 73, 73, 79, 702, 72, 73, 74,
+ 75, 76, 727, 78, 79, 1003, 81, 1003, 1003, 1003,
+ 73, 1003, 76, 78, 79, 5, 123, 7, 21, 9,
+ 16, 17, 73, 73, 88, 73, 73, 73, 121, 95,
+ 96, 95, 96, 193, 606, 128, 21, 13, 14, 73,
+ 72, 73, 74, 75, 76, 30, 78, 79, 208, 81,
+ 3, 3, 116, 6, 642, 119, 8, 73, 74, 75,
+ 76, 130, 131, 130, 131, 73, 654, 655, 656, 73,
+ 3, 0, 73, 73, 77, 8, 79, 80, 173, 174,
+ 83, 84, 85, 149, 150, 151, 73, 73, 7, 7,
+ 73, 73, 95, 96, 73, 7, 95, 96, 7, 95,
+ 96, 208, 73, 675, 7, 73, 7, 73, 73, 73,
+ 95, 96, 73, 3, 3, 73, 3, 6, 8, 73,
+ 208, 8, 73, 73, 7, 73, 7, 74, 75, 74,
+ 75, 11, 12, 3, 3, 15, 6, 6, 18, 19,
+ 20, 208, 208, 7, 208, 77, 78, 79, 80, 81,
+ 82, 3, 3, 7, 153, 154, 8, 8, 143, 144,
+ 145, 146, 3, 95, 96, 7, 10, 8, 48, 49,
50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
- 70, 71, 72, 73, 74, 75, 76, 149, 150, 151,
- 133, 134, 135, 136, 137, 138, 86, 7, 3, 38,
- 39, 40, 208, 8, 21, 95, 96, 75, 208, 209,
- 210, 211, 102, 30, 140, 141, 142, 107, 108, 109,
- 110, 111, 112, 113, 3, 115, 4, 1233, 1233, 1233,
- 120, 1233, 1233, 76, 8, 3, 3, 3, 3, 129,
- 8, 8, 132, 8, 208, 88, 208, 8, 4, 139,
- 3, 3, 95, 96, 3, 8, 8, 147, 148, 8,
- 8, 4, 152, 3, 3, 155, 208, 3, 8, 159,
- 77, 4, 8, 116, 4, 3, 119, 1009, 95, 96,
- 8, 991, 3, 8, 4, 4, 1036, 8, 95, 96,
- 180, 181, 182, 183, 4, 3, 95, 96, 3, 21,
- 8, 4, 192, 8, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 4, 4, 208, 41,
- 42, 43, 44, 45, 46, 47, 143, 144, 145, 146,
- 76, 4, 4, 77, 78, 79, 80, 81, 82, 103,
- 104, 105, 106, 4, 90, 91, 92, 93, 94, 95,
- 96, 95, 96, 4, 4, 77, 3, 156, 157, 158,
- 4, 8, 3, 3, 3, 208, 3, 8, 8, 8,
- 116, 8, 4, 119, 4, 4, 4, 184, 3, 186,
- 187, 421, 422, 8, 3, 3, 8, 4, 489, 8,
- 8, 208, 493, 3, 3, 3, 3, 3, 8, 8,
- 8, 208, 8, 4, 505, 3, 8, 508, 493, 208,
- 8, 4, 4, 4, 515, 508, 505, 4, 505, 4,
- 505, 4, 515, 508, 525, 22, 23, 24, 25, 4,
- 515, 4, 505, 4, 535, 4, 4, 4, 505, 540,
- 525, 4, 4, 4, 505, 505, 540, 4, 505, 505,
- 535, 493, 505, 3, 208, 540, 505, 4, 4, 560,
- 535, 4, 208, 505, 208, 540, 508, 4, 4, 4,
- 4, 540, 4, 515, 4, 560, 4, 4, 505, 505,
- 4, 4, 508, 525, 95, 96, 208, 4, 211, 515,
- 4, 505, 209, 535, 505, 505, 209, 505, 540, 525,
- 209, 4, 209, 209, 4, 209, 4, 505, 505, 505,
- 209, 209, 505, 505, 210, 505, 210, 210, 560, 505,
- 209, 211, 4, 209, 209, 505, 209, 505, 4, 505,
- 505, 505, 211, 505, 211, 211, 211, 505, 4, 4,
- 211, 508, 4, 4, 4, 211, 211, 211, 515, 160,
- 161, 162, 163, 164, 165, 166, 167, 168, 169, 170,
- 171, 172, 4, 4, 4, 4, 4, 4, 4, 180,
- 181, 194, 195, 196, 197, 198, 199, 200, 201, 202,
- 203, 204, 205, 206, 207, 4, 4, 4, 209, 4,
- 4, 4, 4, 4, 4, 211, 697, 208, 4, 700,
- 4, 4, 4, 4, 4, 4, 211, 211, 4, 209,
- 4, 4, 4, 4, 209, 700, 4, 4, 4, 209,
- 209, 4, 4, 4, 4, 4, 4, 4, 209, 4,
- 4, 4, 733, 734, 735, 211, 737, 4, 4, 211,
- 741, 211, 4, 4, 4, 211, 4, 4, 733, 734,
- 735, 736, 737, 209, 209, 209, 696, 4, 700, 48,
+ 70, 71, 72, 73, 74, 75, 76, 7, 3, 176,
+ 177, 178, 179, 8, 3, 208, 86, 6, 3, 208,
+ 7, 3, 208, 8, 75, 95, 96, 6, 208, 209,
+ 210, 211, 102, 208, 38, 39, 40, 107, 108, 109,
+ 110, 111, 112, 113, 211, 115, 95, 96, 77, 4,
+ 120, 1239, 8, 1239, 1239, 1239, 76, 1239, 3, 129,
+ 3, 3, 132, 8, 8, 8, 95, 96, 4, 139,
+ 90, 91, 92, 93, 94, 95, 96, 147, 148, 3,
+ 8, 4, 152, 3, 8, 155, 208, 185, 8, 159,
+ 188, 189, 190, 191, 1009, 991, 116, 3, 3, 119,
+ 3, 8, 8, 8, 1036, 8, 4, 156, 157, 158,
+ 180, 181, 182, 183, 3, 3, 3, 76, 3, 21,
+ 8, 8, 192, 8, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 95, 96, 208, 41,
+ 42, 43, 44, 45, 46, 47, 4, 4, 48, 49,
+ 50, 51, 52, 53, 4, 184, 115, 186, 187, 208,
+ 4, 4, 121, 122, 123, 124, 125, 126, 133, 134,
+ 135, 136, 137, 138, 4, 77, 76, 77, 3, 208,
+ 3, 3, 3, 8, 3, 8, 8, 8, 208, 8,
+ 4, 4, 3, 3, 3, 95, 96, 8, 8, 8,
+ 3, 421, 422, 4, 3, 8, 4, 4, 489, 8,
+ 4, 4, 493, 103, 104, 105, 106, 117, 118, 4,
+ 22, 23, 24, 25, 505, 8, 4, 508, 493, 123,
+ 124, 4, 126, 4, 515, 505, 505, 4, 4, 4,
+ 505, 4, 4, 508, 525, 140, 141, 142, 4, 208,
+ 515, 4, 505, 4, 535, 4, 4, 4, 4, 540,
+ 525, 4, 4, 540, 505, 505, 540, 505, 505, 505,
+ 535, 493, 4, 4, 3, 540, 4, 4, 8, 560,
+ 535, 505, 3, 505, 4, 540, 508, 4, 4, 4,
+ 4, 4, 4, 515, 208, 560, 4, 4, 4, 505,
+ 4, 4, 508, 525, 4, 4, 208, 505, 208, 515,
+ 209, 505, 209, 535, 505, 505, 95, 96, 540, 525,
+ 211, 4, 4, 209, 4, 209, 209, 209, 505, 505,
+ 209, 209, 505, 505, 210, 210, 505, 210, 560, 209,
+ 209, 209, 209, 4, 505, 211, 211, 505, 211, 505,
+ 505, 505, 211, 4, 505, 211, 211, 505, 4, 4,
+ 4, 505, 4, 4, 505, 505, 4, 505, 4, 211,
+ 211, 508, 211, 508, 4, 4, 4, 4, 515, 4,
+ 515, 160, 161, 162, 163, 164, 165, 166, 167, 168,
+ 169, 170, 171, 172, 4, 4, 4, 209, 4, 4,
+ 4, 180, 181, 4, 4, 4, 211, 4, 4, 4,
+ 4, 211, 4, 4, 4, 4, 697, 209, 4, 700,
+ 211, 4, 4, 4, 4, 209, 4, 209, 209, 208,
+ 4, 4, 4, 4, 4, 700, 194, 195, 196, 197,
+ 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
+ 4, 4, 733, 734, 735, 4, 737, 4, 4, 209,
+ 741, 4, 4, 4, 4, 4, 211, 211, 733, 734,
+ 735, 736, 737, 211, 211, 4, 696, 4, 700, 48,
49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
- 59, 60, 211, 211, 4, 4, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, 4, 4, 76, 4, 209,
- 4, 733, 734, 735, 736, 737, 7, 208, 87, 7,
- 89, 7, 7, 7, 5, 5, 95, 96, 97, 98,
- 99, 100, 101, 102, 208, 208, 208, 5, 107, 108,
- 109, 5, 5, 208, 5, 7, 5, 116, 5, 7,
- 119, 120, 5, 5, 5, 208, 208, 7, 127, 7,
- 7, 7, 7, 7, 5, 7, 5, 5, 5, 208,
- 208, 208, 208, 7, 208, 208, 208, 48, 49, 50,
+ 59, 60, 4, 4, 4, 4, 65, 66, 67, 68,
+ 69, 70, 71, 72, 73, 4, 211, 76, 209, 211,
+ 4, 733, 734, 735, 736, 737, 209, 209, 87, 4,
+ 89, 4, 209, 7, 4, 7, 95, 96, 97, 98,
+ 99, 100, 101, 102, 208, 7, 7, 7, 107, 108,
+ 109, 5, 208, 208, 208, 5, 5, 116, 5, 5,
+ 119, 120, 7, 208, 5, 5, 5, 175, 127, 7,
+ 5, 5, 5, 3, 114, 7, 7, 48, 49, 50,
51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
- 5, 7, 114, 208, 65, 66, 67, 68, 69, 70,
- 71, 72, 73, 74, 208, 76, 77, 208, 208, 7,
- 7, 180, 181, 7, 7, 7, 7, 7, 7, 208,
- 208, 208, 7, 208, 95, 96, 175, 98, 99, 7,
- 101, 102, 4, 208, 4, 4, 107, 108, 109, 208,
- 4, 4, 4, 208, 208, 116, 4, 4, 119, 4,
- 4, 4, 208, 3, 6, 6, 127, 208, 208, 3,
- 208, 6, 3, 208, 208, 3, 6, 6, 3, 6,
- 6, 3, 6, 3, 208, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 3, 209, 6, 3, 6, 4, 211, 8, 6, 4,
- 4, 4, 209, 211, 209, 4, 209, 209, 4, 180,
- 181, 4, 4, 994, 4, 4, 997, 209, 211, 1000,
- 209, 4, 1003, 4, 211, 994, 1000, 994, 4, 994,
- 1003, 209, 997, 1014, 1003, 1000, 1017, 208, 1003, 1020,
- 209, 994, 997, 209, 209, 1000, 4, 994, 1003, 1014,
- 1003, 1000, 1017, 994, 994, 1036, 1003, 994, 994, 1014,
- 1041, 994, 1003, 1003, 1045, 994, 1003, 1003, 211, 209,
- 1003, 1036, 994, 1054, 1003, 997, 1041, 1058, 1000, 209,
- 1045, 1003, 1063, 209, 209, 1066, 1051, 994, 994, 1054,
- 1063, 209, 1014, 1066, 4, 1017, 1003, 1003, 1063, 1054,
- 994, 1066, 209, 994, 994, 209, 994, 209, 1014, 1003,
- 209, 1017, 1003, 1003, 1036, 1003, 994, 994, 994, 1041,
- 4, 994, 994, 1045, 994, 1003, 1003, 1003, 994, 1051,
- 1003, 1003, 1054, 1003, 994, 211, 994, 1003, 994, 994,
- 994, 1063, 994, 1003, 1066, 1003, 994, 1003, 1003, 1003,
- 6, 1003, 3, 8, 4, 1003, 1003, 1063, 4, 208,
- 1066, 208, 208, 8, 8, 208, 208, 3, 8, 4,
- 4, 4, 4, 688, 5, 208, 4, 208, 7, 4,
- 4, 4, 4, 675, 726, 493, 697, 489, 993, 781,
- 988, 1012, 1006, 700, 1022, 1041, 1020, 1009, 1029, 543,
- 996, 208, 208, 994, 1233, 1005, 208, 208, 208, 505,
- 208, 208, 77, 999, 209, 997, 1063, 211, 209, 1066,
- 208, 208, 535, 1002, 209, 211, 208, 1065, 208, 1000,
- 540, 508, 1068, 1063, 1017, 1019, 1239, 1066, 751, 1015,
- 1051, 1045, 1036, 737, 1254, 515, 560, 525, 1055, 1275,
- 1295, -1, 1233, 564, 699, -1, 1058, -1, 1239, -1,
- 1233, -1, -1, -1, 1233, -1, -1, -1, 1233, 1189,
- -1, -1, -1, 1254, 1239, -1, -1, -1, 1233, -1,
- 1233, -1, -1, -1, 1239, -1, 1233, -1, -1, 1254,
- -1, -1, 1233, 1233, -1, -1, 1233, 1233, -1, 1254,
- 1233, -1, -1, -1, 1233, -1, -1, -1, -1, -1,
- -1, 1233, -1, -1, -1, -1, -1, 1239, -1, -1,
- -1, -1, -1, -1, -1, -1, 1233, 1233, -1, -1,
- -1, -1, 1254, 1239, -1, -1, -1, -1, -1, 1233,
- -1, -1, 1233, 1233, -1, 1233, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 1233, 1233, 1233, -1, -1,
- 1233, 1233, -1, 1233, -1, -1, -1, 1233, -1, -1,
- -1, -1, -1, 1233, -1, 1233, -1, 1233, 1233, 1233,
- -1, 1233, -1, -1, -1, 1233, 1233
+ 7, 7, 7, 7, 65, 66, 67, 68, 69, 70,
+ 71, 72, 73, 74, 208, 76, 77, 208, 5, 7,
+ 5, 5, 5, 5, 211, 208, 208, 7, 7, 7,
+ 208, 180, 181, 7, 95, 96, 7, 98, 99, 7,
+ 101, 102, 7, 208, 208, 7, 107, 108, 109, 208,
+ 7, 208, 208, 208, 7, 116, 7, 7, 119, 208,
+ 208, 208, 208, 208, 208, 208, 127, 208, 208, 208,
+ 208, 208, 208, 208, 4, 4, 208, 208, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 211, 3, 6,
+ 6, 3, 6, 6, 3, 6, 3, 208, 6, 3,
+ 6, 6, 3, 6, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 180,
+ 181, 3, 6, 3, 209, 8, 4, 6, 4, 4,
+ 4, 209, 209, 994, 4, 4, 997, 209, 209, 1000,
+ 4, 4, 1003, 1000, 994, 994, 1000, 208, 4, 994,
+ 209, 209, 997, 1014, 1003, 1000, 1017, 211, 1003, 1020,
+ 209, 994, 997, 4, 209, 1000, 209, 209, 1003, 1014,
+ 1003, 209, 1017, 994, 994, 1036, 994, 994, 994, 1014,
+ 1041, 1014, 1003, 1003, 1045, 1003, 1003, 1003, 4, 4,
+ 994, 1036, 994, 1054, 209, 997, 1041, 1058, 1000, 1003,
+ 1045, 1003, 1063, 211, 4, 1066, 1051, 209, 994, 1054,
+ 1014, 209, 1014, 209, 209, 1017, 994, 1003, 1063, 1054,
+ 994, 1066, 4, 994, 994, 1003, 4, 4, 1014, 1003,
+ 211, 1017, 1003, 1003, 1036, 211, 1014, 994, 994, 1041,
+ 1014, 994, 994, 1045, 1014, 994, 1003, 1003, 209, 1051,
+ 1003, 1003, 1054, 994, 1003, 209, 994, 1014, 994, 994,
+ 994, 1063, 1003, 994, 1066, 1003, 994, 1003, 1003, 1003,
+ 994, 209, 1003, 994, 994, 1003, 994, 1063, 6, 1003,
+ 1066, 3, 1003, 1003, 4, 1003, 1003, 8, 1003, 8,
+ 4, 8, 3, 8, 4, 4, 4, 4, 208, 5,
+ 4, 4, 7, 4, 4, 4, 208, 675, 726, 697,
+ 993, 988, 688, 700, 1012, 1006, 489, 1009, 1022, 1020,
+ 781, 1029, 1041, 208, 543, 493, 996, 208, 994, 1005,
+ 1239, 208, 77, 997, 999, 208, 208, 208, 505, 535,
+ 208, 208, 208, 208, 1002, 1000, 1063, 208, 1063, 1066,
+ 208, 1066, 211, 1065, 209, 208, 208, 211, 209, 209,
+ 208, 208, 1068, 1063, 1245, 1019, 1051, 751, 1017, 1066,
+ 1015, 1045, 564, 1036, 1055, 1260, 1281, 737, 1239, 699,
+ 508, 1301, -1, 1058, 1245, -1, -1, -1, -1, -1,
+ 1239, -1, -1, -1, 1239, 1195, -1, 515, 540, 1260,
+ 1245, -1, -1, -1, 1239, -1, 1239, -1, 525, -1,
+ 1245, -1, 1245, -1, -1, 1260, -1, -1, 1239, 1239,
+ -1, 1239, 1239, 1239, -1, 1260, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 1239, -1, 1239, -1, -1,
+ -1, 1245, -1, 1245, 560, -1, -1, -1, -1, -1,
+ -1, -1, -1, 1239, -1, -1, -1, -1, 1260, 1245,
+ -1, 1239, -1, -1, -1, 1239, -1, 1245, 1239, 1239,
+ -1, 1245, -1, -1, -1, 1245, -1, -1, -1, -1,
+ -1, -1, 1239, 1239, -1, -1, 1239, 1239, 1245, -1,
+ 1239, -1, -1, -1, -1, -1, -1, -1, 1239, -1,
+ -1, 1239, -1, 1239, 1239, 1239, -1, -1, 1239, -1,
+ -1, 1239, -1, -1, -1, 1239, -1, -1, 1239, 1239,
+ -1, 1239, 1239, -1, 1239
};
const short
@@ -5464,22 +5470,23 @@ namespace isc { namespace dhcp {
276, 278, 279, 280, 282, 284, 321, 395, 407, 409,
411, 413, 415, 416, 417, 418, 422, 429, 430, 457,
487, 489, 533, 427, 353, 359, 4, 347, 117, 118,
- 243, 321, 457, 487, 489, 543, 544, 545, 546, 547,
- 549, 541, 516, 512, 379, 375, 209, 209, 209, 209,
- 209, 209, 388, 4, 4, 209, 209, 209, 553, 211,
- 209, 209, 367, 4, 4, 566, 211, 4, 209, 4,
- 574, 184, 186, 187, 243, 321, 487, 489, 626, 627,
- 628, 629, 631, 624, 211, 648, 6, 3, 483, 479,
- 499, 495, 4, 22, 23, 24, 25, 313, 208, 208,
- 208, 208, 38, 39, 40, 330, 208, 208, 208, 8,
- 8, 8, 8, 3, 8, 208, 548, 4, 8, 3,
- 8, 8, 140, 141, 142, 556, 208, 208, 208, 208,
- 228, 632, 4, 630, 3, 8, 208, 8, 8, 208,
- 430, 4, 211, 545, 4, 209, 4, 627, 208, 5,
- 208, 7, 633, 634, 635, 3, 6, 185, 188, 189,
- 190, 191, 636, 637, 638, 640, 641, 642, 643, 634,
- 639, 4, 4, 4, 644, 3, 8, 4, 211, 209,
- 209, 4, 637, 208, 208
+ 243, 254, 255, 256, 257, 258, 259, 321, 457, 487,
+ 489, 543, 544, 545, 546, 547, 549, 541, 516, 512,
+ 379, 375, 209, 209, 209, 209, 209, 209, 388, 4,
+ 4, 209, 209, 209, 553, 211, 209, 209, 367, 4,
+ 4, 566, 211, 4, 209, 4, 574, 184, 186, 187,
+ 243, 321, 487, 489, 626, 627, 628, 629, 631, 624,
+ 211, 648, 6, 3, 483, 479, 499, 495, 4, 22,
+ 23, 24, 25, 313, 208, 208, 208, 208, 38, 39,
+ 40, 330, 208, 208, 208, 8, 8, 8, 8, 3,
+ 8, 208, 548, 4, 8, 3, 8, 8, 140, 141,
+ 142, 556, 208, 208, 208, 208, 228, 632, 4, 630,
+ 3, 8, 208, 8, 8, 208, 430, 4, 211, 545,
+ 4, 209, 4, 627, 208, 5, 208, 7, 633, 634,
+ 635, 3, 6, 185, 188, 189, 190, 191, 636, 637,
+ 638, 640, 641, 642, 643, 634, 639, 4, 4, 4,
+ 644, 3, 8, 4, 211, 209, 209, 4, 637, 208,
+ 208
};
const short
@@ -5549,23 +5556,24 @@ namespace isc { namespace dhcp {
521, 524, 523, 526, 525, 528, 527, 530, 529, 532,
531, 534, 533, 535, 535, 537, 536, 539, 538, 540,
540, 542, 541, 543, 543, 544, 544, 545, 545, 545,
- 545, 545, 545, 545, 546, 548, 547, 549, 551, 550,
- 552, 552, 553, 553, 553, 553, 553, 553, 553, 553,
- 553, 555, 554, 556, 556, 556, 557, 559, 558, 560,
- 561, 562, 564, 563, 565, 565, 566, 566, 566, 566,
- 566, 568, 567, 570, 569, 572, 571, 573, 573, 574,
- 574, 574, 574, 574, 574, 575, 577, 576, 578, 580,
- 579, 582, 581, 584, 583, 585, 585, 586, 586, 586,
+ 545, 545, 545, 545, 545, 545, 545, 545, 545, 545,
+ 546, 548, 547, 549, 551, 550, 552, 552, 553, 553,
+ 553, 553, 553, 553, 553, 553, 553, 555, 554, 556,
+ 556, 556, 557, 559, 558, 560, 561, 562, 564, 563,
+ 565, 565, 566, 566, 566, 566, 566, 568, 567, 570,
+ 569, 572, 571, 573, 573, 574, 574, 574, 574, 574,
+ 574, 575, 577, 576, 578, 580, 579, 582, 581, 584,
+ 583, 585, 585, 586, 586, 586, 586, 586, 586, 586,
586, 586, 586, 586, 586, 586, 586, 586, 586, 586,
- 586, 586, 586, 586, 586, 587, 589, 588, 591, 590,
- 592, 594, 593, 595, 596, 598, 597, 599, 599, 601,
- 600, 602, 603, 605, 604, 607, 606, 609, 608, 611,
- 610, 613, 612, 615, 614, 616, 616, 617, 617, 619,
- 618, 620, 622, 621, 623, 623, 625, 624, 626, 626,
- 627, 627, 627, 627, 627, 627, 627, 628, 630, 629,
- 632, 631, 633, 633, 635, 634, 636, 636, 637, 637,
- 637, 637, 637, 639, 638, 640, 641, 642, 644, 643,
- 646, 645, 647, 647, 648, 648, 649
+ 586, 587, 589, 588, 591, 590, 592, 594, 593, 595,
+ 596, 598, 597, 599, 599, 601, 600, 602, 603, 605,
+ 604, 607, 606, 609, 608, 611, 610, 613, 612, 615,
+ 614, 616, 616, 617, 617, 619, 618, 620, 622, 621,
+ 623, 623, 625, 624, 626, 626, 627, 627, 627, 627,
+ 627, 627, 627, 628, 630, 629, 632, 631, 633, 633,
+ 635, 634, 636, 636, 637, 637, 637, 637, 637, 639,
+ 638, 640, 641, 642, 644, 643, 646, 645, 647, 647,
+ 648, 648, 649
};
const signed char
@@ -5635,23 +5643,24 @@ namespace isc { namespace dhcp {
4, 0, 4, 0, 4, 0, 4, 0, 4, 0,
4, 0, 6, 1, 1, 0, 4, 0, 6, 1,
3, 0, 4, 0, 1, 1, 3, 1, 1, 1,
- 1, 1, 1, 1, 1, 0, 4, 3, 0, 6,
- 1, 3, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 0, 4, 1, 1, 1, 3, 0, 4, 3,
- 3, 3, 0, 6, 1, 3, 1, 1, 1, 1,
- 1, 0, 4, 0, 4, 0, 6, 1, 3, 1,
- 1, 1, 1, 1, 1, 3, 0, 4, 3, 0,
- 4, 0, 6, 0, 4, 1, 3, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 3, 0, 4, 0, 4,
- 3, 0, 4, 3, 3, 0, 4, 1, 1, 0,
- 4, 3, 3, 0, 4, 0, 4, 0, 4, 0,
- 4, 0, 6, 0, 4, 1, 3, 1, 1, 0,
- 6, 3, 0, 6, 1, 3, 0, 4, 1, 3,
- 1, 1, 1, 1, 1, 1, 1, 3, 0, 4,
- 0, 6, 1, 3, 0, 4, 1, 3, 1, 1,
- 1, 1, 1, 0, 4, 3, 3, 3, 0, 4,
- 0, 6, 1, 3, 1, 1, 3
+ 1, 0, 4, 3, 0, 6, 1, 3, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 4, 1,
+ 1, 1, 3, 0, 4, 3, 3, 3, 0, 6,
+ 1, 3, 1, 1, 1, 1, 1, 0, 4, 0,
+ 4, 0, 6, 1, 3, 1, 1, 1, 1, 1,
+ 1, 3, 0, 4, 3, 0, 4, 0, 6, 0,
+ 4, 1, 3, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 3, 0, 4, 0, 4, 3, 0, 4, 3,
+ 3, 0, 4, 1, 1, 0, 4, 3, 3, 0,
+ 4, 0, 4, 0, 4, 0, 4, 0, 6, 0,
+ 4, 1, 3, 1, 1, 0, 6, 3, 0, 6,
+ 1, 3, 0, 4, 1, 3, 1, 1, 1, 1,
+ 1, 1, 1, 3, 0, 4, 0, 6, 1, 3,
+ 0, 4, 1, 3, 1, 1, 1, 1, 1, 0,
+ 4, 3, 3, 3, 0, 4, 0, 6, 1, 3,
+ 1, 1, 3
};
@@ -5907,23 +5916,24 @@ namespace isc { namespace dhcp {
2147, 2158, 2158, 2167, 2167, 2176, 2176, 2185, 2185, 2194,
2194, 2208, 2208, 2219, 2220, 2223, 2223, 2235, 2235, 2246,
2247, 2250, 2250, 2260, 2261, 2264, 2265, 2268, 2269, 2270,
- 2271, 2272, 2273, 2274, 2277, 2279, 2279, 2288, 2297, 2297,
- 2310, 2311, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321,
- 2322, 2325, 2325, 2333, 2334, 2335, 2338, 2344, 2344, 2353,
- 2359, 2367, 2375, 2375, 2386, 2387, 2390, 2391, 2392, 2393,
- 2394, 2397, 2397, 2406, 2406, 2418, 2418, 2431, 2432, 2435,
- 2436, 2437, 2438, 2439, 2440, 2443, 2449, 2449, 2458, 2464,
- 2464, 2474, 2474, 2487, 2487, 2497, 2498, 2501, 2502, 2503,
- 2504, 2505, 2506, 2507, 2508, 2509, 2510, 2511, 2512, 2513,
- 2514, 2515, 2516, 2517, 2518, 2521, 2528, 2528, 2537, 2537,
- 2546, 2552, 2552, 2561, 2567, 2573, 2573, 2582, 2583, 2586,
- 2586, 2596, 2603, 2610, 2610, 2619, 2619, 2629, 2629, 2639,
- 2639, 2651, 2651, 2663, 2663, 2673, 2674, 2678, 2679, 2682,
- 2682, 2693, 2701, 2701, 2714, 2715, 2719, 2719, 2727, 2728,
- 2731, 2732, 2733, 2734, 2735, 2736, 2737, 2740, 2746, 2746,
- 2755, 2755, 2766, 2767, 2770, 2770, 2778, 2779, 2782, 2783,
- 2784, 2785, 2786, 2789, 2789, 2798, 2804, 2810, 2816, 2816,
- 2825, 2825, 2836, 2837, 2840, 2841, 2844
+ 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280,
+ 2283, 2285, 2285, 2294, 2303, 2303, 2316, 2317, 2320, 2321,
+ 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2331, 2331, 2339,
+ 2340, 2341, 2344, 2350, 2350, 2359, 2365, 2373, 2381, 2381,
+ 2392, 2393, 2396, 2397, 2398, 2399, 2400, 2403, 2403, 2412,
+ 2412, 2424, 2424, 2437, 2438, 2441, 2442, 2443, 2444, 2445,
+ 2446, 2449, 2455, 2455, 2464, 2470, 2470, 2480, 2480, 2493,
+ 2493, 2503, 2504, 2507, 2508, 2509, 2510, 2511, 2512, 2513,
+ 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 2523,
+ 2524, 2527, 2534, 2534, 2543, 2543, 2552, 2558, 2558, 2567,
+ 2573, 2579, 2579, 2588, 2589, 2592, 2592, 2602, 2609, 2616,
+ 2616, 2625, 2625, 2635, 2635, 2645, 2645, 2657, 2657, 2669,
+ 2669, 2679, 2680, 2684, 2685, 2688, 2688, 2699, 2707, 2707,
+ 2720, 2721, 2725, 2725, 2733, 2734, 2737, 2738, 2739, 2740,
+ 2741, 2742, 2743, 2746, 2752, 2752, 2761, 2761, 2772, 2773,
+ 2776, 2776, 2784, 2785, 2788, 2789, 2790, 2791, 2792, 2795,
+ 2795, 2804, 2810, 2816, 2822, 2822, 2831, 2831, 2842, 2843,
+ 2846, 2847, 2850
};
void
@@ -5956,9 +5966,9 @@ namespace isc { namespace dhcp {
#line 14 "dhcp6_parser.yy"
} } // isc::dhcp
-#line 5960 "dhcp6_parser.cc"
+#line 5970 "dhcp6_parser.cc"
-#line 2850 "dhcp6_parser.yy"
+#line 2856 "dhcp6_parser.yy"
void
diff --git a/src/bin/dhcp6/dhcp6_parser.h b/src/bin/dhcp6/dhcp6_parser.h
index 76e9ace47b..b486cccb56 100644
--- a/src/bin/dhcp6/dhcp6_parser.h
+++ b/src/bin/dhcp6/dhcp6_parser.h
@@ -1,8 +1,8 @@
-// A Bison parser, made by GNU Bison 3.7.6.
+// A Bison parser, made by GNU Bison 3.7.2.
// Skeleton interface for Bison LALR(1) parsers in C++
-// Copyright (C) 2002-2015, 2018-2021 Free Software Foundation, Inc.
+// Copyright (C) 2002-2015, 2018-2020 Free Software Foundation, Inc.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
@@ -15,7 +15,7 @@
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
-// along with this program. If not, see .
+// along with this program. If not, see .
// As a special exception, you may create a larger work that contains
// part or all of the Bison parser skeleton and distribute that work
@@ -104,9 +104,9 @@ using namespace std;
#endif
# include "location.hh"
#include
-#ifndef PARSER6__ASSERT
+#ifndef YY_ASSERT
# include
-# define PARSER6__ASSERT assert
+# define YY_ASSERT assert
#endif
@@ -128,9 +128,9 @@ using namespace std;
/* Suppress unused-variable warnings by "using" E. */
#if ! defined lint || defined __GNUC__
-# define YY_USE(E) ((void) (E))
+# define YYUSE(E) ((void) (E))
#else
-# define YY_USE(E) /* empty */
+# define YYUSE(E) /* empty */
#endif
#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
@@ -232,7 +232,7 @@ namespace isc { namespace dhcp {
semantic_type (YY_RVREF (T) t)
: yytypeid_ (&typeid (T))
{
- PARSER6__ASSERT (sizeof (T) <= size);
+ YY_ASSERT (sizeof (T) <= size);
new (yyas_ ()) T (YY_MOVE (t));
}
@@ -246,7 +246,7 @@ namespace isc { namespace dhcp {
/// Destruction, allowed only if empty.
~semantic_type () YY_NOEXCEPT
{
- PARSER6__ASSERT (!yytypeid_);
+ YY_ASSERT (!yytypeid_);
}
# if 201103L <= YY_CPLUSPLUS
@@ -255,8 +255,8 @@ namespace isc { namespace dhcp {
T&
emplace (U&&... u)
{
- PARSER6__ASSERT (!yytypeid_);
- PARSER6__ASSERT (sizeof (T) <= size);
+ YY_ASSERT (!yytypeid_);
+ YY_ASSERT (sizeof (T) <= size);
yytypeid_ = & typeid (T);
return *new (yyas_ ()) T (std::forward (u)...);
}
@@ -266,8 +266,8 @@ namespace isc { namespace dhcp {
T&
emplace ()
{
- PARSER6__ASSERT (!yytypeid_);
- PARSER6__ASSERT (sizeof (T) <= size);
+ YY_ASSERT (!yytypeid_);
+ YY_ASSERT (sizeof (T) <= size);
yytypeid_ = & typeid (T);
return *new (yyas_ ()) T ();
}
@@ -277,8 +277,8 @@ namespace isc { namespace dhcp {
T&
emplace (const T& t)
{
- PARSER6__ASSERT (!yytypeid_);
- PARSER6__ASSERT (sizeof (T) <= size);
+ YY_ASSERT (!yytypeid_);
+ YY_ASSERT (sizeof (T) <= size);
yytypeid_ = & typeid (T);
return *new (yyas_ ()) T (t);
}
@@ -307,9 +307,9 @@ namespace isc { namespace dhcp {
T&
as () YY_NOEXCEPT
{
- PARSER6__ASSERT (yytypeid_);
- PARSER6__ASSERT (*yytypeid_ == typeid (T));
- PARSER6__ASSERT (sizeof (T) <= size);
+ YY_ASSERT (yytypeid_);
+ YY_ASSERT (*yytypeid_ == typeid (T));
+ YY_ASSERT (sizeof (T) <= size);
return *yyas_ ();
}
@@ -318,9 +318,9 @@ namespace isc { namespace dhcp {
const T&
as () const YY_NOEXCEPT
{
- PARSER6__ASSERT (yytypeid_);
- PARSER6__ASSERT (*yytypeid_ == typeid (T));
- PARSER6__ASSERT (sizeof (T) <= size);
+ YY_ASSERT (yytypeid_);
+ YY_ASSERT (*yytypeid_ == typeid (T));
+ YY_ASSERT (sizeof (T) <= size);
return *yyas_ ();
}
@@ -336,8 +336,8 @@ namespace isc { namespace dhcp {
void
swap (self_type& that) YY_NOEXCEPT
{
- PARSER6__ASSERT (yytypeid_);
- PARSER6__ASSERT (*yytypeid_ == *that.yytypeid_);
+ YY_ASSERT (yytypeid_);
+ YY_ASSERT (*yytypeid_ == *that.yytypeid_);
std::swap (as (), that.as ());
}
@@ -1436,7 +1436,7 @@ namespace isc { namespace dhcp {
/// Copy constructor.
basic_symbol (const basic_symbol& that);
- /// Constructors for typed symbols.
+ /// Constructor for valueless symbols, and symbols from each type.
#if 201103L <= YY_CPLUSPLUS
basic_symbol (typename Base::kind_type t, location_type&& l)
: Base (t)
@@ -1448,7 +1448,6 @@ namespace isc { namespace dhcp {
, location (l)
{}
#endif
-
#if 201103L <= YY_CPLUSPLUS
basic_symbol (typename Base::kind_type t, ElementPtr&& v, location_type&& l)
: Base (t)
@@ -1462,7 +1461,6 @@ namespace isc { namespace dhcp {
, location (l)
{}
#endif
-
#if 201103L <= YY_CPLUSPLUS
basic_symbol (typename Base::kind_type t, bool&& v, location_type&& l)
: Base (t)
@@ -1476,7 +1474,6 @@ namespace isc { namespace dhcp {
, location (l)
{}
#endif
-
#if 201103L <= YY_CPLUSPLUS
basic_symbol (typename Base::kind_type t, double&& v, location_type&& l)
: Base (t)
@@ -1490,7 +1487,6 @@ namespace isc { namespace dhcp {
, location (l)
{}
#endif
-
#if 201103L <= YY_CPLUSPLUS
basic_symbol (typename Base::kind_type t, int64_t&& v, location_type&& l)
: Base (t)
@@ -1504,7 +1500,6 @@ namespace isc { namespace dhcp {
, location (l)
{}
#endif
-
#if 201103L <= YY_CPLUSPLUS
basic_symbol (typename Base::kind_type t, std::string&& v, location_type&& l)
: Base (t)
@@ -1526,7 +1521,7 @@ namespace isc { namespace dhcp {
}
/// Destroy contents, and record that is empty.
- void clear () YY_NOEXCEPT
+ void clear ()
{
// User destructor.
symbol_kind_type yykind = this->kind ();
@@ -1624,7 +1619,7 @@ switch (yykind)
by_kind (kind_type t);
/// Record that this symbol is empty.
- void clear () YY_NOEXCEPT;
+ void clear ();
/// Steal the symbol kind from \a that.
void move (by_kind& that);
@@ -1657,54 +1652,68 @@ switch (yykind)
#if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, location_type l)
: super_type(token_type (tok), std::move (l))
+ {
+ YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_PARSER6_error || tok == token::TOKEN_PARSER6_UNDEF || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DATA_DIRECTORY || tok == token::TOKEN_CONFIG_CONTROL || tok == token::TOKEN_CONFIG_DATABASES || tok == token::TOKEN_CONFIG_FETCH_WAIT_TIME || tok == token::TOKEN_INTERFACES_CONFIG || tok == token::TOKEN_INTERFACES || tok == token::TOKEN_RE_DETECT || tok == token::TOKEN_LEASE_DATABASE || tok == token::TOKEN_HOSTS_DATABASE || tok == token::TOKEN_HOSTS_DATABASES || tok == token::TOKEN_TYPE || tok == token::TOKEN_MEMFILE || tok == token::TOKEN_MYSQL || tok == token::TOKEN_POSTGRESQL || tok == token::TOKEN_CQL || tok == token::TOKEN_USER || tok == token::TOKEN_PASSWORD || tok == token::TOKEN_HOST || tok == token::TOKEN_PORT || tok == token::TOKEN_PERSIST || tok == token::TOKEN_LFC_INTERVAL || tok == token::TOKEN_READONLY || tok == token::TOKEN_CONNECT_TIMEOUT || tok == token::TOKEN_CONTACT_POINTS || tok == token::TOKEN_MAX_RECONNECT_TRIES || tok == token::TOKEN_RECONNECT_WAIT_TIME || tok == token::TOKEN_ON_FAIL || tok == token::TOKEN_STOP_RETRY_EXIT || tok == token::TOKEN_SERVE_RETRY_EXIT || tok == token::TOKEN_SERVE_RETRY_CONTINUE || tok == token::TOKEN_KEYSPACE || tok == token::TOKEN_CONSISTENCY || tok == token::TOKEN_SERIAL_CONSISTENCY || tok == token::TOKEN_REQUEST_TIMEOUT || tok == token::TOKEN_TCP_KEEPALIVE || tok == token::TOKEN_TCP_NODELAY || tok == token::TOKEN_MAX_ROW_ERRORS || tok == token::TOKEN_PREFERRED_LIFETIME || tok == token::TOKEN_MIN_PREFERRED_LIFETIME || tok == token::TOKEN_MAX_PREFERRED_LIFETIME || tok == token::TOKEN_VALID_LIFETIME || tok == token::TOKEN_MIN_VALID_LIFETIME || tok == token::TOKEN_MAX_VALID_LIFETIME || tok == token::TOKEN_RENEW_TIMER || tok == token::TOKEN_REBIND_TIMER || tok == token::TOKEN_CALCULATE_TEE_TIMES || tok == token::TOKEN_T1_PERCENT || tok == token::TOKEN_T2_PERCENT || tok == token::TOKEN_CACHE_THRESHOLD || tok == token::TOKEN_CACHE_MAX_AGE || tok == token::TOKEN_DECLINE_PROBATION_PERIOD || tok == token::TOKEN_SERVER_TAG || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE || tok == token::TOKEN_DDNS_SEND_UPDATES || tok == token::TOKEN_DDNS_OVERRIDE_NO_UPDATE || tok == token::TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_DDNS_REPLACE_CLIENT_NAME || tok == token::TOKEN_DDNS_GENERATED_PREFIX || tok == token::TOKEN_DDNS_QUALIFYING_SUFFIX || tok == token::TOKEN_DDNS_UPDATE_ON_RENEW || tok == token::TOKEN_DDNS_USE_CONFLICT_RESOLUTION || tok == token::TOKEN_STORE_EXTENDED_INFO || tok == token::TOKEN_SUBNET6 || tok == token::TOKEN_OPTION_DEF || tok == token::TOKEN_OPTION_DATA || tok == token::TOKEN_NAME || tok == token::TOKEN_DATA || tok == token::TOKEN_CODE || tok == token::TOKEN_SPACE || tok == token::TOKEN_CSV_FORMAT || tok == token::TOKEN_ALWAYS_SEND || tok == token::TOKEN_RECORD_TYPES || tok == token::TOKEN_ENCAPSULATE || tok == token::TOKEN_ARRAY || tok == token::TOKEN_SHARED_NETWORKS || tok == token::TOKEN_POOLS || tok == token::TOKEN_POOL || tok == token::TOKEN_PD_POOLS || tok == token::TOKEN_PREFIX || tok == token::TOKEN_PREFIX_LEN || tok == token::TOKEN_EXCLUDED_PREFIX || tok == token::TOKEN_EXCLUDED_PREFIX_LEN || tok == token::TOKEN_DELEGATED_LEN || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_SUBNET || tok == token::TOKEN_INTERFACE || tok == token::TOKEN_INTERFACE_ID || tok == token::TOKEN_ID || tok == token::TOKEN_RAPID_COMMIT || tok == token::TOKEN_RESERVATION_MODE || tok == token::TOKEN_DISABLED || tok == token::TOKEN_OUT_OF_POOL || tok == token::TOKEN_GLOBAL || tok == token::TOKEN_ALL || tok == token::TOKEN_RESERVATIONS_GLOBAL || tok == token::TOKEN_RESERVATIONS_IN_SUBNET || tok == token::TOKEN_RESERVATIONS_OUT_OF_POOL || tok == token::TOKEN_MAC_SOURCES || tok == token::TOKEN_RELAY_SUPPLIED_OPTIONS || tok == token::TOKEN_HOST_RESERVATION_IDENTIFIERS || tok == token::TOKEN_SANITY_CHECKS || tok == token::TOKEN_LEASE_CHECKS || tok == token::TOKEN_CLIENT_CLASSES || tok == token::TOKEN_REQUIRE_CLIENT_CLASSES || tok == token::TOKEN_TEST || tok == token::TOKEN_ONLY_IF_REQUIRED || tok == token::TOKEN_CLIENT_CLASS || tok == token::TOKEN_RESERVATIONS || tok == token::TOKEN_IP_ADDRESSES || tok == token::TOKEN_PREFIXES || tok == token::TOKEN_DUID || tok == token::TOKEN_HW_ADDRESS || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_FLEX_ID || tok == token::TOKEN_RELAY || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_EXPIRED_LEASES_PROCESSING || tok == token::TOKEN_RECLAIM_TIMER_WAIT_TIME || tok == token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME || tok == token::TOKEN_HOLD_RECLAIMED_TIME || tok == token::TOKEN_MAX_RECLAIM_LEASES || tok == token::TOKEN_MAX_RECLAIM_TIME || tok == token::TOKEN_UNWARNED_RECLAIM_CYCLES || tok == token::TOKEN_SERVER_ID || tok == token::TOKEN_LLT || tok == token::TOKEN_EN || tok == token::TOKEN_LL || tok == token::TOKEN_IDENTIFIER || tok == token::TOKEN_HTYPE || tok == token::TOKEN_TIME || tok == token::TOKEN_ENTERPRISE_ID || tok == token::TOKEN_DHCP4O6_PORT || tok == token::TOKEN_DHCP_MULTI_THREADING || tok == token::TOKEN_ENABLE_MULTI_THREADING || tok == token::TOKEN_THREAD_POOL_SIZE || tok == token::TOKEN_PACKET_QUEUE_SIZE || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_DHCP_QUEUE_CONTROL || tok == token::TOKEN_ENABLE_QUEUE || tok == token::TOKEN_QUEUE_TYPE || tok == token::TOKEN_CAPACITY || tok == token::TOKEN_DHCP_DDNS || tok == token::TOKEN_ENABLE_UPDATES || tok == token::TOKEN_QUALIFYING_SUFFIX || tok == token::TOKEN_SERVER_IP || tok == token::TOKEN_SERVER_PORT || tok == token::TOKEN_SENDER_IP || tok == token::TOKEN_SENDER_PORT || tok == token::TOKEN_MAX_QUEUE_SIZE || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_OVERRIDE_NO_UPDATE || tok == token::TOKEN_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_REPLACE_CLIENT_NAME || tok == token::TOKEN_GENERATED_PREFIX || tok == token::TOKEN_UDP || tok == token::TOKEN_TCP || tok == token::TOKEN_JSON || tok == token::TOKEN_WHEN_PRESENT || tok == token::TOKEN_NEVER || tok == token::TOKEN_ALWAYS || tok == token::TOKEN_WHEN_NOT_PRESENT || tok == token::TOKEN_HOSTNAME_CHAR_SET || tok == token::TOKEN_HOSTNAME_CHAR_REPLACEMENT || tok == token::TOKEN_IP_RESERVATIONS_UNIQUE || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_COMPATIBILITY || tok == token::TOKEN_LENIENT_OPTION_PARSING || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCP6 || tok == token::TOKEN_SUB_DHCP6 || tok == token::TOKEN_SUB_INTERFACES6 || tok == token::TOKEN_SUB_SUBNET6 || tok == token::TOKEN_SUB_POOL6 || tok == token::TOKEN_SUB_PD_POOL || tok == token::TOKEN_SUB_RESERVATION || tok == token::TOKEN_SUB_OPTION_DEFS || tok == token::TOKEN_SUB_OPTION_DEF || tok == token::TOKEN_SUB_OPTION_DATA || tok == token::TOKEN_SUB_HOOKS_LIBRARY || tok == token::TOKEN_SUB_DHCP_DDNS || tok == token::TOKEN_SUB_CONFIG_CONTROL);
+ }
#else
symbol_type (int tok, const location_type& l)
: super_type(token_type (tok), l)
-#endif
{
- PARSER6__ASSERT (tok == token::TOKEN_END
- || (token::TOKEN_PARSER6_error <= tok && tok <= token::TOKEN_SUB_CONFIG_CONTROL));
+ YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_PARSER6_error || tok == token::TOKEN_PARSER6_UNDEF || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DATA_DIRECTORY || tok == token::TOKEN_CONFIG_CONTROL || tok == token::TOKEN_CONFIG_DATABASES || tok == token::TOKEN_CONFIG_FETCH_WAIT_TIME || tok == token::TOKEN_INTERFACES_CONFIG || tok == token::TOKEN_INTERFACES || tok == token::TOKEN_RE_DETECT || tok == token::TOKEN_LEASE_DATABASE || tok == token::TOKEN_HOSTS_DATABASE || tok == token::TOKEN_HOSTS_DATABASES || tok == token::TOKEN_TYPE || tok == token::TOKEN_MEMFILE || tok == token::TOKEN_MYSQL || tok == token::TOKEN_POSTGRESQL || tok == token::TOKEN_CQL || tok == token::TOKEN_USER || tok == token::TOKEN_PASSWORD || tok == token::TOKEN_HOST || tok == token::TOKEN_PORT || tok == token::TOKEN_PERSIST || tok == token::TOKEN_LFC_INTERVAL || tok == token::TOKEN_READONLY || tok == token::TOKEN_CONNECT_TIMEOUT || tok == token::TOKEN_CONTACT_POINTS || tok == token::TOKEN_MAX_RECONNECT_TRIES || tok == token::TOKEN_RECONNECT_WAIT_TIME || tok == token::TOKEN_ON_FAIL || tok == token::TOKEN_STOP_RETRY_EXIT || tok == token::TOKEN_SERVE_RETRY_EXIT || tok == token::TOKEN_SERVE_RETRY_CONTINUE || tok == token::TOKEN_KEYSPACE || tok == token::TOKEN_CONSISTENCY || tok == token::TOKEN_SERIAL_CONSISTENCY || tok == token::TOKEN_REQUEST_TIMEOUT || tok == token::TOKEN_TCP_KEEPALIVE || tok == token::TOKEN_TCP_NODELAY || tok == token::TOKEN_MAX_ROW_ERRORS || tok == token::TOKEN_PREFERRED_LIFETIME || tok == token::TOKEN_MIN_PREFERRED_LIFETIME || tok == token::TOKEN_MAX_PREFERRED_LIFETIME || tok == token::TOKEN_VALID_LIFETIME || tok == token::TOKEN_MIN_VALID_LIFETIME || tok == token::TOKEN_MAX_VALID_LIFETIME || tok == token::TOKEN_RENEW_TIMER || tok == token::TOKEN_REBIND_TIMER || tok == token::TOKEN_CALCULATE_TEE_TIMES || tok == token::TOKEN_T1_PERCENT || tok == token::TOKEN_T2_PERCENT || tok == token::TOKEN_CACHE_THRESHOLD || tok == token::TOKEN_CACHE_MAX_AGE || tok == token::TOKEN_DECLINE_PROBATION_PERIOD || tok == token::TOKEN_SERVER_TAG || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE || tok == token::TOKEN_DDNS_SEND_UPDATES || tok == token::TOKEN_DDNS_OVERRIDE_NO_UPDATE || tok == token::TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_DDNS_REPLACE_CLIENT_NAME || tok == token::TOKEN_DDNS_GENERATED_PREFIX || tok == token::TOKEN_DDNS_QUALIFYING_SUFFIX || tok == token::TOKEN_DDNS_UPDATE_ON_RENEW || tok == token::TOKEN_DDNS_USE_CONFLICT_RESOLUTION || tok == token::TOKEN_STORE_EXTENDED_INFO || tok == token::TOKEN_SUBNET6 || tok == token::TOKEN_OPTION_DEF || tok == token::TOKEN_OPTION_DATA || tok == token::TOKEN_NAME || tok == token::TOKEN_DATA || tok == token::TOKEN_CODE || tok == token::TOKEN_SPACE || tok == token::TOKEN_CSV_FORMAT || tok == token::TOKEN_ALWAYS_SEND || tok == token::TOKEN_RECORD_TYPES || tok == token::TOKEN_ENCAPSULATE || tok == token::TOKEN_ARRAY || tok == token::TOKEN_SHARED_NETWORKS || tok == token::TOKEN_POOLS || tok == token::TOKEN_POOL || tok == token::TOKEN_PD_POOLS || tok == token::TOKEN_PREFIX || tok == token::TOKEN_PREFIX_LEN || tok == token::TOKEN_EXCLUDED_PREFIX || tok == token::TOKEN_EXCLUDED_PREFIX_LEN || tok == token::TOKEN_DELEGATED_LEN || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_SUBNET || tok == token::TOKEN_INTERFACE || tok == token::TOKEN_INTERFACE_ID || tok == token::TOKEN_ID || tok == token::TOKEN_RAPID_COMMIT || tok == token::TOKEN_RESERVATION_MODE || tok == token::TOKEN_DISABLED || tok == token::TOKEN_OUT_OF_POOL || tok == token::TOKEN_GLOBAL || tok == token::TOKEN_ALL || tok == token::TOKEN_RESERVATIONS_GLOBAL || tok == token::TOKEN_RESERVATIONS_IN_SUBNET || tok == token::TOKEN_RESERVATIONS_OUT_OF_POOL || tok == token::TOKEN_MAC_SOURCES || tok == token::TOKEN_RELAY_SUPPLIED_OPTIONS || tok == token::TOKEN_HOST_RESERVATION_IDENTIFIERS || tok == token::TOKEN_SANITY_CHECKS || tok == token::TOKEN_LEASE_CHECKS || tok == token::TOKEN_CLIENT_CLASSES || tok == token::TOKEN_REQUIRE_CLIENT_CLASSES || tok == token::TOKEN_TEST || tok == token::TOKEN_ONLY_IF_REQUIRED || tok == token::TOKEN_CLIENT_CLASS || tok == token::TOKEN_RESERVATIONS || tok == token::TOKEN_IP_ADDRESSES || tok == token::TOKEN_PREFIXES || tok == token::TOKEN_DUID || tok == token::TOKEN_HW_ADDRESS || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_FLEX_ID || tok == token::TOKEN_RELAY || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_EXPIRED_LEASES_PROCESSING || tok == token::TOKEN_RECLAIM_TIMER_WAIT_TIME || tok == token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME || tok == token::TOKEN_HOLD_RECLAIMED_TIME || tok == token::TOKEN_MAX_RECLAIM_LEASES || tok == token::TOKEN_MAX_RECLAIM_TIME || tok == token::TOKEN_UNWARNED_RECLAIM_CYCLES || tok == token::TOKEN_SERVER_ID || tok == token::TOKEN_LLT || tok == token::TOKEN_EN || tok == token::TOKEN_LL || tok == token::TOKEN_IDENTIFIER || tok == token::TOKEN_HTYPE || tok == token::TOKEN_TIME || tok == token::TOKEN_ENTERPRISE_ID || tok == token::TOKEN_DHCP4O6_PORT || tok == token::TOKEN_DHCP_MULTI_THREADING || tok == token::TOKEN_ENABLE_MULTI_THREADING || tok == token::TOKEN_THREAD_POOL_SIZE || tok == token::TOKEN_PACKET_QUEUE_SIZE || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_DHCP_QUEUE_CONTROL || tok == token::TOKEN_ENABLE_QUEUE || tok == token::TOKEN_QUEUE_TYPE || tok == token::TOKEN_CAPACITY || tok == token::TOKEN_DHCP_DDNS || tok == token::TOKEN_ENABLE_UPDATES || tok == token::TOKEN_QUALIFYING_SUFFIX || tok == token::TOKEN_SERVER_IP || tok == token::TOKEN_SERVER_PORT || tok == token::TOKEN_SENDER_IP || tok == token::TOKEN_SENDER_PORT || tok == token::TOKEN_MAX_QUEUE_SIZE || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_OVERRIDE_NO_UPDATE || tok == token::TOKEN_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_REPLACE_CLIENT_NAME || tok == token::TOKEN_GENERATED_PREFIX || tok == token::TOKEN_UDP || tok == token::TOKEN_TCP || tok == token::TOKEN_JSON || tok == token::TOKEN_WHEN_PRESENT || tok == token::TOKEN_NEVER || tok == token::TOKEN_ALWAYS || tok == token::TOKEN_WHEN_NOT_PRESENT || tok == token::TOKEN_HOSTNAME_CHAR_SET || tok == token::TOKEN_HOSTNAME_CHAR_REPLACEMENT || tok == token::TOKEN_IP_RESERVATIONS_UNIQUE || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_COMPATIBILITY || tok == token::TOKEN_LENIENT_OPTION_PARSING || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCP6 || tok == token::TOKEN_SUB_DHCP6 || tok == token::TOKEN_SUB_INTERFACES6 || tok == token::TOKEN_SUB_SUBNET6 || tok == token::TOKEN_SUB_POOL6 || tok == token::TOKEN_SUB_PD_POOL || tok == token::TOKEN_SUB_RESERVATION || tok == token::TOKEN_SUB_OPTION_DEFS || tok == token::TOKEN_SUB_OPTION_DEF || tok == token::TOKEN_SUB_OPTION_DATA || tok == token::TOKEN_SUB_HOOKS_LIBRARY || tok == token::TOKEN_SUB_DHCP_DDNS || tok == token::TOKEN_SUB_CONFIG_CONTROL);
}
+#endif
#if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, bool v, location_type l)
: super_type(token_type (tok), std::move (v), std::move (l))
+ {
+ YY_ASSERT (tok == token::TOKEN_BOOLEAN);
+ }
#else
symbol_type (int tok, const bool& v, const location_type& l)
: super_type(token_type (tok), v, l)
-#endif
{
- PARSER6__ASSERT (tok == token::TOKEN_BOOLEAN);
+ YY_ASSERT (tok == token::TOKEN_BOOLEAN);
}
+#endif
#if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, double v, location_type l)
: super_type(token_type (tok), std::move (v), std::move (l))
+ {
+ YY_ASSERT (tok == token::TOKEN_FLOAT);
+ }
#else
symbol_type (int tok, const double& v, const location_type& l)
: super_type(token_type (tok), v, l)
-#endif
{
- PARSER6__ASSERT (tok == token::TOKEN_FLOAT);
+ YY_ASSERT (tok == token::TOKEN_FLOAT);
}
+#endif
#if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, int64_t v, location_type l)
: super_type(token_type (tok), std::move (v), std::move (l))
+ {
+ YY_ASSERT (tok == token::TOKEN_INTEGER);
+ }
#else
symbol_type (int tok, const int64_t& v, const location_type& l)
: super_type(token_type (tok), v, l)
-#endif
{
- PARSER6__ASSERT (tok == token::TOKEN_INTEGER);
+ YY_ASSERT (tok == token::TOKEN_INTEGER);
}
+#endif
#if 201103L <= YY_CPLUSPLUS
symbol_type (int tok, std::string v, location_type l)
: super_type(token_type (tok), std::move (v), std::move (l))
+ {
+ YY_ASSERT (tok == token::TOKEN_STRING);
+ }
#else
symbol_type (int tok, const std::string& v, const location_type& l)
: super_type(token_type (tok), v, l)
-#endif
{
- PARSER6__ASSERT (tok == token::TOKEN_STRING);
+ YY_ASSERT (tok == token::TOKEN_STRING);
}
+#endif
};
/// Build a parser object.
@@ -4939,9 +4948,9 @@ switch (yykind)
{
public:
context (const Dhcp6Parser& yyparser, const symbol_type& yyla);
- const symbol_type& lookahead () const YY_NOEXCEPT { return yyla_; }
- symbol_kind_type token () const YY_NOEXCEPT { return yyla_.kind (); }
- const location_type& location () const YY_NOEXCEPT { return yyla_.location; }
+ const symbol_type& lookahead () const { return yyla_; }
+ symbol_kind_type token () const { return yyla_.kind (); }
+ const location_type& location () const { return yyla_.location; }
/// Put in YYARG at most YYARGN of the expected tokens, and return the
/// number of tokens stored in YYARG. If YYARG is null, return the
@@ -5263,7 +5272,7 @@ switch (yykind)
/// Constants.
enum
{
- yylast_ = 1296, ///< Last index in yytable_.
+ yylast_ = 1314, ///< Last index in yytable_.
yynnts_ = 438, ///< Number of nonterminal symbols.
yyfinal_ = 30 ///< Termination state number.
};
@@ -5469,7 +5478,7 @@ switch (yykind)
inline
void
- Dhcp6Parser::by_kind::clear () YY_NOEXCEPT
+ Dhcp6Parser::by_kind::clear ()
{
kind_ = symbol_kind::S_YYEMPTY;
}
@@ -5498,7 +5507,7 @@ switch (yykind)
#line 14 "dhcp6_parser.yy"
} } // isc::dhcp
-#line 5502 "dhcp6_parser.h"
+#line 5511 "dhcp6_parser.h"
diff --git a/src/bin/dhcp6/dhcp6_parser.yy b/src/bin/dhcp6/dhcp6_parser.yy
index 0002e1dce6..0c181b8a9f 100644
--- a/src/bin/dhcp6/dhcp6_parser.yy
+++ b/src/bin/dhcp6/dhcp6_parser.yy
@@ -2271,6 +2271,12 @@ client_class_param: client_class_name
| option_data_list
| user_context
| comment
+ | preferred_lifetime
+ | min_preferred_lifetime
+ | max_preferred_lifetime
+ | valid_lifetime
+ | min_valid_lifetime
+ | max_valid_lifetime
| unknown_map_entry
;
diff --git a/src/bin/dhcp6/location.hh b/src/bin/dhcp6/location.hh
index e8036de559..a8d79e7bb0 100644
--- a/src/bin/dhcp6/location.hh
+++ b/src/bin/dhcp6/location.hh
@@ -1,8 +1,8 @@
-// A Bison parser, made by GNU Bison 3.7.6.
+// A Bison parser, made by GNU Bison 3.7.2.
// Locations for Bison parsers in C++
-// Copyright (C) 2002-2015, 2018-2021 Free Software Foundation, Inc.
+// Copyright (C) 2002-2015, 2018-2020 Free Software Foundation, Inc.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
@@ -15,7 +15,7 @@
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
-// along with this program. If not, see .
+// along with this program. If not, see .
// As a special exception, you may create a larger work that contains
// part or all of the Bison parser skeleton and distribute that work
diff --git a/src/bin/dhcp6/tests/config_parser_unittest.cc b/src/bin/dhcp6/tests/config_parser_unittest.cc
index be3895ac0c..4cb876c55d 100644
--- a/src/bin/dhcp6/tests/config_parser_unittest.cc
+++ b/src/bin/dhcp6/tests/config_parser_unittest.cc
@@ -29,6 +29,7 @@
#include
#include
#include
+#include
#include
#include
@@ -8090,4 +8091,66 @@ TEST_F(Dhcp6ParserTest, multiThreadingSettings) {
<< " actual: " << *(cfg) << std::endl;
}
+// Verifies that client class definitions may specify
+// valid and preferred lifetime triplets.
+TEST_F(Dhcp6ParserTest, clientClassValidPreferredLifetime) {
+ string config = "{ " + genIfaceConfig() + "," +
+ "\"client-classes\" : [ \n"
+ " { \n"
+ " \"name\": \"one\", \n"
+ " \"min-valid-lifetime\": 1000, \n"
+ " \"valid-lifetime\": 2000, \n"
+ " \"max-valid-lifetime\": 3000, \n"
+ " \"min-preferred-lifetime\": 4000, \n"
+ " \"preferred-lifetime\": 5000, \n"
+ " \"max-preferred-lifetime\": 6000 \n"
+ " }, \n"
+ " { \n"
+ " \"name\": \"two\" \n"
+ " } \n"
+ "], \n"
+ "\"subnet6\": [ { \n"
+ " \"pools\": [ { \"pool\": \"2001:db8:1::1 - 2001:db8:1::ffff\" } ],"
+ " \"subnet\": \"2001:db8:1::/64\""
+ " } ] \n"
+ "} \n";
+
+ ConstElementPtr json;
+ ASSERT_NO_THROW_LOG(json = parseDHCP6(config));
+ extractConfig(config);
+
+ ConstElementPtr status;
+ ASSERT_NO_THROW_LOG(status = configureDhcp6Server(srv_, json));
+ ASSERT_TRUE(status);
+ checkResult(status, 0);
+
+ // We check staging config because CfgMgr::commit hasn't been executed.
+ ClientClassDictionaryPtr dictionary;
+ dictionary = CfgMgr::instance().getStagingCfg()->getClientClassDictionary();
+ ASSERT_TRUE(dictionary);
+ EXPECT_EQ(2, dictionary->getClasses()->size());
+
+ // Execute the commit
+ ASSERT_NO_THROW(CfgMgr::instance().commit());
+
+ // Verify that after commit, the current config has the correct dictionary
+ dictionary = CfgMgr::instance().getCurrentCfg()->getClientClassDictionary();
+ ASSERT_TRUE(dictionary);
+ EXPECT_EQ(2, dictionary->getClasses()->size());
+
+ ClientClassDefPtr class_def = dictionary->findClass("one");
+ ASSERT_TRUE(class_def);
+ EXPECT_EQ(class_def->getValid().getMin(), 1000);
+ EXPECT_EQ(class_def->getValid().get(), 2000);
+ EXPECT_EQ(class_def->getValid().getMax(), 3000);
+
+ EXPECT_EQ(class_def->getPreferred().getMin(), 4000);
+ EXPECT_EQ(class_def->getPreferred().get(), 5000);
+ EXPECT_EQ(class_def->getPreferred().getMax(), 6000);
+
+ class_def = dictionary->findClass("two");
+ ASSERT_TRUE(class_def);
+ EXPECT_TRUE(class_def->getValid().unspecified());
+}
+
} // namespace
diff --git a/src/bin/dhcp6/tests/parser_unittest.cc b/src/bin/dhcp6/tests/parser_unittest.cc
index b6a5bcfb24..b7f08f1b18 100644
--- a/src/bin/dhcp6/tests/parser_unittest.cc
+++ b/src/bin/dhcp6/tests/parser_unittest.cc
@@ -10,6 +10,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -245,7 +246,7 @@ void testFile(const std::string& fname) {
cout << "Parsing file " << fname << "(" << decommented << ")" << endl;
- EXPECT_NO_THROW(json = Element::fromJSONFile(decommented, true));
+ EXPECT_NO_THROW_LOG(json = Element::fromJSONFile(decommented, true));
reference_json = moveComments(json);
// remove the temporary file
diff --git a/src/lib/dhcpsrv/alloc_engine.cc b/src/lib/dhcpsrv/alloc_engine.cc
index da354d8833..be1cc40af3 100644
--- a/src/lib/dhcpsrv/alloc_engine.cc
+++ b/src/lib/dhcpsrv/alloc_engine.cc
@@ -1906,6 +1906,64 @@ AllocEngine::reuseExpiredLease(Lease6Ptr& expired, ClientContext6& ctx,
return (expired);
}
+void
+AllocEngine::getLifetimes6(ClientContext6& ctx, uint32_t& preferred, uint32_t& valid) {
+ // If the triplets are specified in one of our classes use it.
+ // We use the first one we find for each lifetime.
+ Triplet candidate_preferred;
+ Triplet candidate_valid;
+ const ClientClasses classes = ctx.query_->getClasses();
+ if (!classes.empty()) {
+ // Let's get class definitions
+ const ClientClassDictionaryPtr& dict =
+ CfgMgr::instance().getCurrentCfg()->getClientClassDictionary();
+
+ // Iterate over the assigned class defintions.
+ int cnt = 0;
+ for (ClientClasses::const_iterator name = classes.cbegin();
+ name != classes.cend() && cnt < 2; ++name) {
+ ClientClassDefPtr cl = dict->findClass(*name);
+ if (candidate_preferred.unspecified() &&
+ (cl && (!cl->getPreferred().unspecified()))) {
+ candidate_preferred = cl->getPreferred();
+ ++cnt;
+ }
+
+ if (candidate_valid.unspecified() &&
+ (cl && (!cl->getValid().unspecified()))) {
+ candidate_valid = cl->getValid();
+ ++cnt;
+ }
+ }
+ }
+
+ // If no classes specified preferred lifetime, get it from the subnet.
+ if (!candidate_preferred) {
+ candidate_preferred = ctx.subnet_->getPreferred();
+ }
+
+ // If no classes specified valid lifetime, get it from the subnet.
+ if (!candidate_valid) {
+ candidate_valid = ctx.subnet_->getValid();
+ }
+
+ // Set the outbound parameters to the values we have so far.
+ preferred = candidate_preferred;
+ valid = candidate_valid;
+
+ // If client requested either value, use the requested value(s) bounded by
+ // the candidate triplet(s).
+ if (!ctx.currentIA().hints_.empty()) {
+ if (ctx.currentIA().hints_[0].getPreferred()) {
+ preferred = candidate_preferred.get(ctx.currentIA().hints_[0].getPreferred());
+ }
+
+ if (ctx.currentIA().hints_[0].getValid()) {
+ valid = candidate_valid.get(ctx.currentIA().hints_[0].getValid());
+ }
+ }
+}
+
Lease6Ptr AllocEngine::createLease6(ClientContext6& ctx,
const IOAddress& addr,
uint8_t prefix_len,
@@ -1915,18 +1973,10 @@ Lease6Ptr AllocEngine::createLease6(ClientContext6& ctx,
prefix_len = 128; // non-PD lease types must be always /128
}
- uint32_t preferred = ctx.subnet_->getPreferred();
- if (!ctx.currentIA().hints_.empty() &&
- ctx.currentIA().hints_[0].getPreferred()) {
- preferred = ctx.currentIA().hints_[0].getPreferred();
- preferred = ctx.subnet_->getPreferred().get(preferred);
- }
- uint32_t valid = ctx.subnet_->getValid();
- if (!ctx.currentIA().hints_.empty() &&
- ctx.currentIA().hints_[0].getValid()) {
- valid = ctx.currentIA().hints_[0].getValid();
- valid = ctx.subnet_->getValid().get(valid);
- }
+ uint32_t preferred = 0;
+ uint32_t valid = 0;
+ getLifetimes6(ctx, preferred, valid);
+
Lease6Ptr lease(new Lease6(ctx.currentIA().type_, addr, ctx.duid_,
ctx.currentIA().iaid_, preferred,
valid, ctx.subnet_->getID(),
diff --git a/src/lib/dhcpsrv/alloc_engine.h b/src/lib/dhcpsrv/alloc_engine.h
index d0b7a06d93..7d3f90507a 100644
--- a/src/lib/dhcpsrv/alloc_engine.h
+++ b/src/lib/dhcpsrv/alloc_engine.h
@@ -996,6 +996,25 @@ public:
return (IPv6Resrv(IPv6Resrv::TYPE_PD, lease.addr_, lease.prefixlen_));
}
+public:
+ /// @brief Determines the preferred and valid v6 lease lifetimes.
+ ///
+ /// A candidate triplet for both preferred and valid lifetimes will be
+ /// selected from the first class matched to the query which defines the
+ /// value or from the subnet if none do. Classes are searched in the order
+ /// they are assigned to the query.
+ ///
+ /// If the client requested a lifetime IA hint, then the
+ /// lifetime values returned will be the requested values bounded by
+ /// the candidate triplets. If the client did not request a value, then
+ /// it simply returns the candidate triplet's default value.
+ ///
+ /// @param ctx client context that passes all necessary information. See
+ /// @ref ClientContext6 for details.
+ /// @param [out] preferred set to the preferred lifetime that should be used.
+ /// @param [out] valid set to the valid lifetime that should be used.
+ static void getLifetimes6(ClientContext6& ctx, uint32_t& preferred,
+ uint32_t& valid);
private:
/// @brief Creates a lease and inserts it in LeaseMgr if necessary
diff --git a/src/lib/dhcpsrv/client_class_def.cc b/src/lib/dhcpsrv/client_class_def.cc
index 839e0a6326..6a3b3c10cd 100644
--- a/src/lib/dhcpsrv/client_class_def.cc
+++ b/src/lib/dhcpsrv/client_class_def.cc
@@ -24,7 +24,7 @@ ClientClassDef::ClientClassDef(const std::string& name,
: UserContext(), CfgToElement(), StampedElement(), name_(name),
match_expr_(match_expr), required_(false), depend_on_known_(false),
cfg_option_(cfg_option), next_server_(asiolink::IOAddress::IPV4_ZERO_ADDRESS()),
- valid_() {
+ valid_(), preferred_() {
// Name can't be blank
if (name_.empty()) {
@@ -44,7 +44,7 @@ ClientClassDef::ClientClassDef(const ClientClassDef& rhs)
match_expr_(ExpressionPtr()), test_(rhs.test_), required_(rhs.required_),
depend_on_known_(rhs.depend_on_known_), cfg_option_(new CfgOption()),
next_server_(rhs.next_server_), sname_(rhs.sname_),
- filename_(rhs.filename_), valid_(rhs.valid_) {
+ filename_(rhs.filename_), valid_(rhs.valid_), preferred_(rhs.preferred_) {
if (rhs.match_expr_) {
match_expr_.reset(new Expression());
@@ -180,16 +180,33 @@ ClientClassDef:: toElement() const {
}
// Set option-data
result->set("option-data", cfg_option_->toElement());
- if (family != AF_INET) {
- // Other parameters are DHCPv4 specific
- return (result);
+
+ if (family == AF_INET) {
+ // V4 only
+ // Set next-server
+ result->set("next-server", Element::create(next_server_.toText()));
+ // Set server-hostname
+ result->set("server-hostname", Element::create(sname_));
+ // Set boot-file-name
+ result->set("boot-file-name", Element::create(filename_));
+ } else {
+ // V6 only
+ // Set preferred-lifetime
+ if (!preferred_.unspecified()) {
+ result->set("preferred-lifetime",
+ Element::create(static_cast(preferred_.get())));
+ }
+
+ if (preferred_.getMin() < preferred_.get()) {
+ result->set("min-preferred-lifetime",
+ Element::create(static_cast(preferred_.getMin())));
+ }
+
+ if (preferred_.getMax() > preferred_.get()) {
+ result->set("max-preferred-lifetime",
+ Element::create(static_cast(preferred_.getMax())));
+ }
}
- // Set next-server
- result->set("next-server", Element::create(next_server_.toText()));
- // Set server-hostname
- result->set("server-hostname", Element::create(sname_));
- // Set boot-file-name
- result->set("boot-file-name", Element::create(filename_));
// Set valid-lifetime
if (!valid_.unspecified()) {
@@ -244,7 +261,8 @@ ClientClassDictionary::addClass(const std::string& name,
asiolink::IOAddress next_server,
const std::string& sname,
const std::string& filename,
- const Triplet& valid) {
+ const Triplet& valid,
+ const Triplet& preferred) {
ClientClassDefPtr cclass(new ClientClassDef(name, match_expr, cfg_option));
cclass->setTest(test);
cclass->setRequired(required);
@@ -255,6 +273,7 @@ ClientClassDictionary::addClass(const std::string& name,
cclass->setSname(sname);
cclass->setFilename(filename);
cclass->setValid(valid);
+ cclass->setPreferred(preferred);
addClass(cclass);
}
diff --git a/src/lib/dhcpsrv/client_class_def.h b/src/lib/dhcpsrv/client_class_def.h
index 8cb87b0d9d..89542b0294 100644
--- a/src/lib/dhcpsrv/client_class_def.h
+++ b/src/lib/dhcpsrv/client_class_def.h
@@ -208,6 +208,20 @@ public:
valid_ = valid;
}
+ /// @brief Return preferred-lifetime value
+ ///
+ /// @return a triplet containing the preferred lifetime.
+ Triplet getPreferred() const {
+ return (preferred_);
+ }
+
+ /// @brief Sets new preferred lifetime
+ ///
+ /// @param preferred New valid lifetime in seconds.
+ void setPreferred(const Triplet& preferred) {
+ preferred_ = preferred;
+ }
+
/// @brief Unparse a configuration object
///
/// @return a pointer to unparsed configuration
@@ -266,6 +280,9 @@ private:
/// @brief a Triplet (min/default/max) holding allowed valid lifetime values
Triplet valid_;
+
+ /// @brief a Triplet (min/default/max) holding allowed preferred lifetime values
+ Triplet preferred_;
};
/// @brief a pointer to an ClientClassDef
@@ -309,6 +326,7 @@ public:
/// @param sname server-name value for this class (optional)
/// @param filename boot-file-name value for this class (optional)
/// @param valid valid-lifetime triplet (optional)
+ /// @param preferred preferred-lifetime triplet (optional)
///
/// @throw DuplicateClientClassDef if class already exists within the
/// dictionary. See @ref dhcp::ClientClassDef::ClientClassDef() for
@@ -321,7 +339,8 @@ public:
asiolink::IOAddress next_server = asiolink::IOAddress("0.0.0.0"),
const std::string& sname = std::string(),
const std::string& filename = std::string(),
- const Triplet&valid = Triplet());
+ const Triplet&valid = Triplet(),
+ const Triplet&preferred = Triplet());
/// @brief Adds a new class to the list
///
diff --git a/src/lib/dhcpsrv/parsers/client_class_def_parser.cc b/src/lib/dhcpsrv/parsers/client_class_def_parser.cc
index 75a71ca1b7..348694195a 100644
--- a/src/lib/dhcpsrv/parsers/client_class_def_parser.cc
+++ b/src/lib/dhcpsrv/parsers/client_class_def_parser.cc
@@ -205,6 +205,12 @@ ClientClassDefParser::parse(ClientClassDictionaryPtr& class_dictionary,
// Parse valid lifetime triplet.
Triplet valid_lft = parseIntTriplet(class_def_cfg, "valid-lifetime");
+ Triplet preferred_lft;
+ if (family != AF_INET) {
+ // Parse preferred lifetime triplet.
+ preferred_lft = parseIntTriplet(class_def_cfg, "preferred-lifetime");
+ }
+
// Sanity checks on built-in classes
for (auto bn : builtinNames) {
if (name == bn) {
@@ -232,7 +238,8 @@ ClientClassDefParser::parse(ClientClassDictionaryPtr& class_dictionary,
try {
class_dictionary->addClass(name, match_expr, test, required,
depend_on_known, options, defs,
- user_context, next_server, sname, filename, valid_lft);
+ user_context, next_server, sname, filename,
+ valid_lft, preferred_lft);
} catch (const std::exception& ex) {
std::ostringstream s;
s << "Can't add class: " << ex.what();
@@ -257,7 +264,11 @@ ClientClassDefParser::checkParametersSupported(const ConstElementPtr& class_def_
"test",
"option-data",
"user-context",
- "only-if-required" };
+ "only-if-required",
+ "valid-lifetime",
+ "min-valid-lifetime",
+ "max-valid-lifetime" };
+
// The v4 client class supports additional parameters.
static std::set supported_params_v4 = { "option-def",
@@ -265,12 +276,17 @@ ClientClassDefParser::checkParametersSupported(const ConstElementPtr& class_def_
"server-hostname",
"boot-file-name" };
+ // The v6 client class supports additional parameters.
+ static std::set supported_params_v6 = { "preferred-lifetime",
+ "min-preferred-lifetime",
+ "max-preferred-lifetime" };
+
// Iterate over the specified parameters and check if they are all supported.
for (auto name_value_pair : class_def_cfg->mapValue()) {
if ((supported_params.count(name_value_pair.first) > 0) ||
- ((family == AF_INET) && (supported_params_v4.count(name_value_pair.first) > 0))) {
+ ((family == AF_INET) && (supported_params_v4.count(name_value_pair.first) > 0)) ||
+ ((family != AF_INET) && (supported_params_v6.count(name_value_pair.first) > 0))) {
continue;
-
} else {
isc_throw(DhcpConfigError, "unsupported client class parameter '"
<< name_value_pair.first << "'");
diff --git a/src/lib/dhcpsrv/tests/alloc_engine6_unittest.cc b/src/lib/dhcpsrv/tests/alloc_engine6_unittest.cc
index 4582df84c0..825b74386b 100644
--- a/src/lib/dhcpsrv/tests/alloc_engine6_unittest.cc
+++ b/src/lib/dhcpsrv/tests/alloc_engine6_unittest.cc
@@ -5238,6 +5238,262 @@ TEST_F(AllocEngine6Test, renewCacheHostname6) {
detailCompareLease(lease, from_mgr);
}
+// Verifies that AllocEngine::getLifetimes6() returns the appropriate
+// valid lifetime value based on the context content.
+TEST_F(AllocEngine6Test, getValidLifetime) {
+ boost::scoped_ptr engine;
+ ASSERT_NO_THROW(engine.reset(new AllocEngine(AllocEngine::ALLOC_ITERATIVE, 100)));
+ ASSERT_TRUE(engine);
+
+ // Let's make three classes, two with valid-lifetime and one without,
+ // and add them to the dictionary.
+ ClientClassDictionaryPtr dictionary =
+ CfgMgr::instance().getStagingCfg()->getClientClassDictionary();
+
+ ClientClassDefPtr class_def(new ClientClassDef("valid_one", ExpressionPtr()));
+ Triplet valid_one(50, 100, 150);
+ class_def->setValid(valid_one);
+ dictionary->addClass(class_def);
+
+ class_def.reset(new ClientClassDef("valid_two", ExpressionPtr()));
+ Tripletvalid_two(200, 250, 300);
+ class_def->setValid(valid_two);
+ dictionary->addClass(class_def);
+
+ class_def.reset(new ClientClassDef("valid_unspec", ExpressionPtr()));
+ dictionary->addClass(class_def);
+
+ // Commit our class changes.
+ CfgMgr::instance().commit();
+
+ // Update the subnet's triplet to something more useful.
+ subnet_->setValid(Triplet(500, 1000, 1500));
+
+ // Describes a test scenario.
+ struct Scenario {
+ std::string desc_; // descriptive text for logging
+ std::vector classes_; // class list of assigned classes
+ uint32_t requested_lft_; // use as option 51 is > 0
+ uint32_t exp_valid_; // expected lifetime
+ };
+
+ // Scenarios to test.
+ std::vector scenarios = {
+ {
+ "no classes, no hint",
+ {},
+ 0,
+ subnet_->getValid()
+ },
+ {
+ "no classes, hint",
+ {},
+ subnet_->getValid().getMin() + 50,
+ subnet_->getValid().getMin() + 50
+ },
+ {
+ "no classes, hint too small",
+ {},
+ subnet_->getValid().getMin() - 50,
+ subnet_->getValid().getMin()
+ },
+ {
+ "no classes, hint too big",
+ {},
+ subnet_->getValid().getMax() + 50,
+ subnet_->getValid().getMax()
+ },
+ {
+ "class unspecified, no hint",
+ { "valid_unspec" },
+ 0,
+ subnet_->getValid()
+ },
+ {
+ "from last class, no hint",
+ { "valid_unspec", "valid_one" },
+ 0,
+ valid_one.get()
+ },
+ {
+ "from first class, no hint",
+ { "valid_two", "valid_one" },
+ 0,
+ valid_two.get()
+ },
+ {
+ "class plus hint",
+ { "valid_one" },
+ valid_one.getMin() + 25,
+ valid_one.getMin() + 25
+ },
+ {
+ "class plus hint too small",
+ { "valid_one" },
+ valid_one.getMin() - 25,
+ valid_one.getMin()
+ },
+ {
+ "class plus hint too big",
+ { "valid_one" },
+ valid_one.getMax() + 25,
+ valid_one.getMax()
+ }
+ };
+
+ // Iterate over the scenarios and verify the correct outcome.
+ for (auto scenario : scenarios) {
+ SCOPED_TRACE(scenario.desc_); {
+ // Create a context;
+ AllocEngine::ClientContext6 ctx(subnet_, duid_, false, false, "", true,
+ Pkt6Ptr(new Pkt6(DHCPV6_SOLICIT, 1234)));
+ // Add client classes (if any)
+ for (auto class_name : scenario.classes_) {
+ ctx.query_->addClass(class_name);
+ }
+
+ // Add hint
+ ctx.currentIA().iaid_ = iaid_;
+
+ // prefix,prefixlen, preferred, valid
+ ctx.currentIA().addHint(IOAddress("::"), 128, 0, scenario.requested_lft_);
+
+ Lease6Ptr lease;
+ ASSERT_NO_THROW(lease = expectOneLease(engine->allocateLeases6(ctx)));
+ ASSERT_TRUE(lease);
+ EXPECT_EQ(lease->valid_lft_, scenario.exp_valid_);
+ }
+ }
+}
+
+// Verifies that AllocEngine::getLifetimes6() returns the appropriate
+// preferred lifetime value based on the context content.
+TEST_F(AllocEngine6Test, getPreferredLifetime) {
+ boost::scoped_ptr engine;
+ ASSERT_NO_THROW(engine.reset(new AllocEngine(AllocEngine::ALLOC_ITERATIVE, 100)));
+ ASSERT_TRUE(engine);
+
+ // Let's make three classes, two with preferred-lifetime and one without,
+ // and add them to the dictionary.
+ ClientClassDictionaryPtr dictionary =
+ CfgMgr::instance().getStagingCfg()->getClientClassDictionary();
+
+ ClientClassDefPtr class_def(new ClientClassDef("preferred_one", ExpressionPtr()));
+ Triplet preferred_one(50, 100, 150);
+ class_def->setPreferred(preferred_one);
+ dictionary->addClass(class_def);
+
+ class_def.reset(new ClientClassDef("preferred_two", ExpressionPtr()));
+ Tripletpreferred_two(200, 250, 300);
+ class_def->setPreferred(preferred_two);
+ dictionary->addClass(class_def);
+
+ class_def.reset(new ClientClassDef("preferred_unspec", ExpressionPtr()));
+ dictionary->addClass(class_def);
+
+ // Commit our class changes.
+ CfgMgr::instance().commit();
+
+ // Update the subnet's triplet to something more useful.
+ subnet_->setPreferred(Triplet(500, 1000, 1500));
+
+ // Describes a test scenario.
+ struct Scenario {
+ std::string desc_; // descriptive text for logging
+ std::vector classes_; // class list of assigned classes
+ uint32_t requested_lft_; // use as option 51 is > 0
+ uint32_t exp_preferred_; // expected lifetime
+ };
+
+ // Scenarios to test.
+ std::vector scenarios = {
+ {
+ "no classes, no hint",
+ {},
+ 0,
+ subnet_->getPreferred()
+ },
+ {
+ "no classes, hint",
+ {},
+ subnet_->getPreferred().getMin() + 50,
+ subnet_->getPreferred().getMin() + 50
+ },
+ {
+ "no classes, hint too small",
+ {},
+ subnet_->getPreferred().getMin() - 50,
+ subnet_->getPreferred().getMin()
+ },
+ {
+ "no classes, hint too big",
+ {},
+ subnet_->getPreferred().getMax() + 50,
+ subnet_->getPreferred().getMax()
+ },
+ {
+ "class unspecified, no hint",
+ { "preferred_unspec" },
+ 0,
+ subnet_->getPreferred()
+ },
+ {
+ "from last class, no hint",
+ { "preferred_unspec", "preferred_one" },
+ 0,
+ preferred_one.get()
+ },
+ {
+ "from first class, no hint",
+ { "preferred_two", "preferred_one" },
+ 0,
+ preferred_two.get()
+ },
+ {
+ "class plus hint",
+ { "preferred_one" },
+ preferred_one.getMin() + 25,
+ preferred_one.getMin() + 25
+ },
+ {
+ "class plus hint too small",
+ { "preferred_one" },
+ preferred_one.getMin() - 25,
+ preferred_one.getMin()
+ },
+ {
+ "class plus hint too big",
+ { "preferred_one" },
+ preferred_one.getMax() + 25,
+ preferred_one.getMax()
+ }
+ };
+
+ // Iterate over the scenarios and verify the correct outcome.
+ for (auto scenario : scenarios) {
+ SCOPED_TRACE(scenario.desc_); {
+ // Create a context;
+ AllocEngine::ClientContext6 ctx(subnet_, duid_, false, false, "", true,
+ Pkt6Ptr(new Pkt6(DHCPV6_SOLICIT, 1234)));
+ // Add client classes (if any)
+ for (auto class_name : scenario.classes_) {
+ ctx.query_->addClass(class_name);
+ }
+
+ // Add hint
+ ctx.currentIA().iaid_ = iaid_;
+
+ // prefix,prefixlen, preferred, preferred
+ ctx.currentIA().addHint(IOAddress("::"), 128, scenario.requested_lft_, 0);
+
+ Lease6Ptr lease;
+ ASSERT_NO_THROW(lease = expectOneLease(engine->allocateLeases6(ctx)));
+ ASSERT_TRUE(lease);
+ EXPECT_EQ(lease->preferred_lft_, scenario.exp_preferred_);
+ }
+ }
+}
+
} // namespace test
} // namespace dhcp
} // namespace isc
diff --git a/src/lib/dhcpsrv/tests/client_class_def_parser_unittest.cc b/src/lib/dhcpsrv/tests/client_class_def_parser_unittest.cc
index 2c6f901059..11601a8240 100644
--- a/src/lib/dhcpsrv/tests/client_class_def_parser_unittest.cc
+++ b/src/lib/dhcpsrv/tests/client_class_def_parser_unittest.cc
@@ -1313,7 +1313,7 @@ TEST_F(ClientClassDefListParserTest, dropCheckError) {
EXPECT_NO_THROW(parseClientClassDefList(cfg_text, AF_INET6));
}
-// Verify the ability to configure lease lifetime triplet.
+// Verify the ability to configure valid lifetime triplet.
TEST_F(ClientClassDefParserTest, validLifetimeTests) {
struct Scenario {
@@ -1374,4 +1374,68 @@ TEST_F(ClientClassDefParserTest, validLifetimeTests) {
}
}
+// Verify the ability to configure lease preferred lifetime triplet.
+TEST_F(ClientClassDefParserTest, preferredLifetimeTests) {
+
+ struct Scenario {
+ std::string desc_;
+ std::string cfg_txt_;
+ Triplet exp_triplet_;
+ };
+
+ std::vector scenarios = {
+ {
+ "unspecified",
+ "",
+ Triplet()
+ },
+ {
+ "preferred only",
+ "\"preferred-lifetime\": 100",
+ Triplet(100)
+ },
+ {
+ "min only",
+ "\"min-preferred-lifetime\": 50",
+ Triplet(50, 50, 50)
+ },
+ {
+ "max only",
+ "\"max-preferred-lifetime\": 75",
+ Triplet(75, 75, 75)
+ },
+ {
+ "all three",
+ "\"min-preferred-lifetime\": 25,"
+ "\"preferred-lifetime\": 50,"
+ "\"max-preferred-lifetime\": 75",
+ Triplet(25, 50, 75)
+ }
+ };
+
+ for (auto scenario : scenarios) {
+ SCOPED_TRACE(scenario.desc_); {
+ std::stringstream oss;
+ oss << "{ \"name\": \"foo\"";
+ if (!scenario.cfg_txt_.empty()) {
+ oss << ",\n" << scenario.cfg_txt_;
+ }
+ oss << "\n}\n";
+
+ ClientClassDefPtr class_def;
+ ASSERT_NO_THROW_LOG(class_def = parseClientClassDef(oss.str(), AF_INET6));
+ ASSERT_TRUE(class_def);
+ if (scenario.exp_triplet_.unspecified()) {
+ EXPECT_TRUE(class_def->getPreferred().unspecified());
+ } else {
+ EXPECT_EQ(class_def->getPreferred(), scenario.exp_triplet_);
+ EXPECT_EQ(class_def->getPreferred().getMin(), scenario.exp_triplet_.getMin());
+ EXPECT_EQ(class_def->getPreferred().get(), scenario.exp_triplet_.get());
+ EXPECT_EQ(class_def->getPreferred().getMax(), scenario.exp_triplet_.getMax());
+ }
+ }
+ }
+}
+
+
} // end of anonymous namespace
diff --git a/src/lib/dhcpsrv/tests/client_class_def_unittest.cc b/src/lib/dhcpsrv/tests/client_class_def_unittest.cc
index 8bd6be722c..5532dd9050 100644
--- a/src/lib/dhcpsrv/tests/client_class_def_unittest.cc
+++ b/src/lib/dhcpsrv/tests/client_class_def_unittest.cc
@@ -83,6 +83,7 @@ TEST(ClientClassDef, copyConstruction) {
cclass->setSname("ufo");
cclass->setFilename("ufo.efi");
cclass->setValid(Triplet(10, 20, 30));
+ cclass->setPreferred(Triplet(11, 21, 31));
// Copy the client class.
boost::scoped_ptr cclass_copy;
@@ -105,6 +106,9 @@ TEST(ClientClassDef, copyConstruction) {
EXPECT_EQ(cclass->getValid().get(), cclass_copy->getValid().get());
EXPECT_EQ(cclass->getValid().getMin(), cclass_copy->getValid().getMin());
EXPECT_EQ(cclass->getValid().getMax(), cclass_copy->getValid().getMax());
+ EXPECT_EQ(cclass->getPreferred().get(), cclass_copy->getPreferred().get());
+ EXPECT_EQ(cclass->getPreferred().getMin(), cclass_copy->getPreferred().getMin());
+ EXPECT_EQ(cclass->getPreferred().getMax(), cclass_copy->getPreferred().getMax());
// Ensure that the option was copied into a new structure.
ASSERT_TRUE(cclass_copy->getCfgOption());