From: Tomek Mrugalski Date: Tue, 5 Sep 2017 10:55:56 +0000 (+0200) Subject: [master] Merge branch 'trac5350' X-Git-Tag: trac5073a_base~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=828ecb6dbdaaedd97d2af79dfa9b7f4845d3a049;p=thirdparty%2Fkea.git [master] Merge branch 'trac5350' --- 828ecb6dbdaaedd97d2af79dfa9b7f4845d3a049 diff --cc src/bin/dhcp4/dhcp4_lexer.cc index 020b7b833b,9bb3d658a8..7851598f9d --- a/src/bin/dhcp4/dhcp4_lexer.cc +++ b/src/bin/dhcp4/dhcp4_lexer.cc @@@ -3774,27 -3550,27 +3554,27 @@@ YY_RULE_SETU case 137: /* rule 137 can match eol */ YY_RULE_SETUP -#line 1449 "dhcp4_lexer.ll" +#line 1453 "dhcp4_lexer.ll" { /* Bad string with a forbidden control character inside */ - driver.error(driver.loc_, "Invalid control in " + std::string(yytext)); + driver.error(driver.loc_, "Invalid control in " + std::string(parser4_text)); } YY_BREAK case 138: /* rule 138 can match eol */ YY_RULE_SETUP -#line 1454 "dhcp4_lexer.ll" +#line 1458 "dhcp4_lexer.ll" { /* Bad string with a bad escape inside */ - driver.error(driver.loc_, "Bad escape in " + std::string(yytext)); + driver.error(driver.loc_, "Bad escape in " + std::string(parser4_text)); } YY_BREAK case 139: YY_RULE_SETUP -#line 1459 "dhcp4_lexer.ll" +#line 1463 "dhcp4_lexer.ll" { /* Bad string with an open escape at the end */ - driver.error(driver.loc_, "Overflow escape in " + std::string(yytext)); + driver.error(driver.loc_, "Overflow escape in " + std::string(parser4_text)); } YY_BREAK case 140: @@@ -3829,10 -3605,10 +3609,10 @@@ YY_RULE_SETU YY_BREAK case 146: YY_RULE_SETUP -#line 1471 "dhcp4_lexer.ll" +#line 1475 "dhcp4_lexer.ll" { /* An integer was found. */ - std::string tmp(yytext); + std::string tmp(parser4_text); int64_t integer = 0; try { /* In substring we want to use negative values (e.g. -1). @@@ -3850,10 -3626,10 +3630,10 @@@ YY_BREAK case 147: YY_RULE_SETUP -#line 1489 "dhcp4_lexer.ll" +#line 1493 "dhcp4_lexer.ll" { /* A floating point was found. */ - std::string tmp(yytext); + std::string tmp(parser4_text); double fp = 0.0; try { fp = boost::lexical_cast(tmp); @@@ -3866,9 -3642,9 +3646,9 @@@ YY_BREAK case 148: YY_RULE_SETUP -#line 1502 "dhcp4_lexer.ll" +#line 1506 "dhcp4_lexer.ll" { - string tmp(yytext); + string tmp(parser4_text); return isc::dhcp::Dhcp4Parser::make_BOOLEAN(tmp == "true", driver.loc_); } YY_BREAK @@@ -3896,11 -3672,11 +3676,11 @@@ driver.error (driver.loc_, "JSON null r YY_BREAK case 153: YY_RULE_SETUP - #line 1521 "dhcp4_lexer.ll" - driver.error (driver.loc_, "Invalid character: " + std::string(yytext)); + #line 1517 "dhcp4_lexer.ll" + driver.error (driver.loc_, "Invalid character: " + std::string(parser4_text)); YY_BREAK case YY_STATE_EOF(INITIAL): -#line 1519 "dhcp4_lexer.ll" +#line 1523 "dhcp4_lexer.ll" { if (driver.states_.empty()) { return isc::dhcp::Dhcp4Parser::make_END(driver.loc_); @@@ -3926,10 -3702,10 +3706,10 @@@ YY_BREAK case 154: YY_RULE_SETUP -#line 1542 "dhcp4_lexer.ll" +#line 1546 "dhcp4_lexer.ll" ECHO; YY_BREAK - #line 3932 "dhcp4_lexer.cc" + #line 3709 "dhcp4_lexer.cc" case YY_END_OF_BUFFER: { @@@ -5034,9 -4808,10 +4812,10 @@@ void parser4_free (void * ptr /* %ok-for-header */ -#line 1542 "dhcp4_lexer.ll" +#line 1546 "dhcp4_lexer.ll" + using namespace isc::dhcp; void diff --cc src/bin/dhcp4/dhcp4_parser.cc index d67db29f85,341bb64c74..198f76dd49 --- a/src/bin/dhcp4/dhcp4_parser.cc +++ b/src/bin/dhcp4/dhcp4_parser.cc @@@ -1677,1471 -1655,1430 +1677,1463 @@@ namespace isc { namespace dhcp ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 1659 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1681 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 211: -#line 848 "dhcp4_parser.yy" // lalr1.cc:859 + case 213: +#line 866 "dhcp4_parser.yy" // lalr1.cc:859 { + // The subnet subnet4 parameter is required + ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 1667 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1691 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 236: - #line 900 "dhcp4_parser.yy" // lalr1.cc:859 + case 235: + #line 881 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 1675 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1699 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 237: - #line 902 "dhcp4_parser.yy" // lalr1.cc:859 + case 236: + #line 883 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr subnet(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("subnet", subnet); ctx.leave(); } -#line 1685 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1709 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 238: - #line 908 "dhcp4_parser.yy" // lalr1.cc:859 + case 237: + #line 889 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 1693 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1717 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 239: - #line 910 "dhcp4_parser.yy" // lalr1.cc:859 + case 238: + #line 891 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("4o6-interface", iface); ctx.leave(); } -#line 1703 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1727 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 240: - #line 916 "dhcp4_parser.yy" // lalr1.cc:859 + case 239: + #line 897 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 1711 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1735 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 241: - #line 918 "dhcp4_parser.yy" // lalr1.cc:859 + case 240: + #line 899 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("4o6-interface-id", iface); ctx.leave(); } -#line 1721 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1745 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 242: - #line 924 "dhcp4_parser.yy" // lalr1.cc:859 + case 241: + #line 905 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 1729 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1753 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 243: - #line 926 "dhcp4_parser.yy" // lalr1.cc:859 + case 242: + #line 907 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("4o6-subnet", iface); ctx.leave(); } -#line 1739 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1763 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 244: - #line 932 "dhcp4_parser.yy" // lalr1.cc:859 + case 243: + #line 913 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 1747 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1771 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 245: - #line 934 "dhcp4_parser.yy" // lalr1.cc:859 + case 244: + #line 915 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("interface", iface); ctx.leave(); } -#line 1757 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1781 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 246: - #line 940 "dhcp4_parser.yy" // lalr1.cc:859 + case 245: + #line 921 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 1765 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1789 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 247: - #line 942 "dhcp4_parser.yy" // lalr1.cc:859 + case 246: + #line 923 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("interface-id", iface); ctx.leave(); } -#line 1775 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1799 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 248: - #line 948 "dhcp4_parser.yy" // lalr1.cc:859 + case 247: + #line 929 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.CLIENT_CLASS); } -#line 1783 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1807 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 249: - #line 950 "dhcp4_parser.yy" // lalr1.cc:859 + case 248: + #line 931 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr cls(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("client-class", cls); ctx.leave(); } -#line 1793 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1817 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 250: - #line 956 "dhcp4_parser.yy" // lalr1.cc:859 + case 249: + #line 937 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.RESERVATION_MODE); } -#line 1801 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1825 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 251: - #line 958 "dhcp4_parser.yy" // lalr1.cc:859 + case 250: + #line 939 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 1810 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1834 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 252: - #line 963 "dhcp4_parser.yy" // lalr1.cc:859 + case 251: + #line 944 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); } -#line 1816 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1840 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 253: - #line 964 "dhcp4_parser.yy" // lalr1.cc:859 + case 252: + #line 945 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); } -#line 1822 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1846 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 254: - #line 965 "dhcp4_parser.yy" // lalr1.cc:859 + case 253: + #line 946 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); } -#line 1828 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1852 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 255: - #line 968 "dhcp4_parser.yy" // lalr1.cc:859 + case 254: + #line 949 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr id(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("id", id); } -#line 1837 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1861 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 256: - #line 973 "dhcp4_parser.yy" // lalr1.cc:859 + case 255: + #line 954 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr rc(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("rapid-commit", rc); } -#line 1846 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1870 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 257: - #line 982 "dhcp4_parser.yy" // lalr1.cc:859 + case 256: + #line 963 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("option-def", l); ctx.stack_.push_back(l); ctx.enter(ctx.OPTION_DEF); } -#line 1857 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1881 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 258: - #line 987 "dhcp4_parser.yy" // lalr1.cc:859 + case 257: + #line 968 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1866 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1890 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 259: +#line 995 "dhcp4_parser.yy" // lalr1.cc:859 + { + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.push_back(m); +} +#line 1899 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 260: - #line 998 "dhcp4_parser.yy" // lalr1.cc:859 - { - // parsing completed - } - #line 1907 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 265: - #line 1014 "dhcp4_parser.yy" // lalr1.cc:859 + case 262: + #line 985 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 1876 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1917 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 266: - #line 1018 "dhcp4_parser.yy" // lalr1.cc:859 + case 263: + #line 989 "dhcp4_parser.yy" // lalr1.cc:859 { + // The name, code and type option def parameters are required. + ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); + ctx.require("code", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); + ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 1884 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1929 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 267: - #line 1029 "dhcp4_parser.yy" // lalr1.cc:859 + case 264: + #line 996 "dhcp4_parser.yy" // lalr1.cc:859 { // Parse the option-def list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 1894 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1939 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 268: - #line 1033 "dhcp4_parser.yy" // lalr1.cc:859 + case 265: + #line 1000 "dhcp4_parser.yy" // lalr1.cc:859 { + // The name, code and type option def parameters are required. + ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); + ctx.require("code", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); + ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 1902 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1951 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 282: - #line 1063 "dhcp4_parser.yy" // lalr1.cc:859 + case 279: + #line 1026 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr code(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("code", code); } -#line 1911 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1960 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 284: - #line 1070 "dhcp4_parser.yy" // lalr1.cc:859 + case 281: + #line 1033 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 1919 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1968 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 285: - #line 1072 "dhcp4_parser.yy" // lalr1.cc:859 + case 282: + #line 1035 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("type", prf); ctx.leave(); } -#line 1929 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1978 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 286: - #line 1078 "dhcp4_parser.yy" // lalr1.cc:859 + case 283: + #line 1041 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 1937 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1986 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 287: - #line 1080 "dhcp4_parser.yy" // lalr1.cc:859 + case 284: + #line 1043 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr rtypes(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("record-types", rtypes); ctx.leave(); } -#line 1947 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1996 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 288: - #line 1086 "dhcp4_parser.yy" // lalr1.cc:859 + case 285: + #line 1049 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 1955 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2004 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 289: - #line 1088 "dhcp4_parser.yy" // lalr1.cc:859 + case 286: + #line 1051 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr space(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("space", space); ctx.leave(); } -#line 1965 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2014 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 291: - #line 1096 "dhcp4_parser.yy" // lalr1.cc:859 + case 288: + #line 1059 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 1973 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2022 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 292: - #line 1098 "dhcp4_parser.yy" // lalr1.cc:859 + case 289: + #line 1061 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr encap(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("encapsulate", encap); ctx.leave(); } -#line 1983 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2032 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 293: - #line 1104 "dhcp4_parser.yy" // lalr1.cc:859 + case 290: + #line 1067 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr array(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("array", array); } -#line 1992 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2041 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 294: - #line 1113 "dhcp4_parser.yy" // lalr1.cc:859 + case 291: + #line 1076 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("option-data", l); ctx.stack_.push_back(l); ctx.enter(ctx.OPTION_DATA); } -#line 2003 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2052 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 295: - #line 1118 "dhcp4_parser.yy" // lalr1.cc:859 + case 292: + #line 1081 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2012 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2061 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 300: - #line 1137 "dhcp4_parser.yy" // lalr1.cc:859 + case 297: + #line 1100 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2022 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2071 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 301: - #line 1141 "dhcp4_parser.yy" // lalr1.cc:859 + case 298: + #line 1104 "dhcp4_parser.yy" // lalr1.cc:859 { + /// @todo: the code or name parameters are required. ctx.stack_.pop_back(); } -#line 2030 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2080 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 302: - #line 1149 "dhcp4_parser.yy" // lalr1.cc:859 + case 299: + #line 1111 "dhcp4_parser.yy" // lalr1.cc:859 { // Parse the option-data list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2040 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2090 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 303: - #line 1153 "dhcp4_parser.yy" // lalr1.cc:859 + case 300: + #line 1115 "dhcp4_parser.yy" // lalr1.cc:859 { + /// @todo: the code or name parameters are required. // parsing completed } -#line 2048 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2099 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 316: - #line 1184 "dhcp4_parser.yy" // lalr1.cc:859 + case 313: + #line 1145 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2056 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2107 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 317: - #line 1186 "dhcp4_parser.yy" // lalr1.cc:859 + case 314: + #line 1147 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr data(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("data", data); ctx.leave(); } -#line 2066 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2117 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 320: - #line 1196 "dhcp4_parser.yy" // lalr1.cc:859 + case 317: + #line 1157 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr space(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("csv-format", space); } -#line 2075 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2126 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 321: - #line 1201 "dhcp4_parser.yy" // lalr1.cc:859 + case 318: + #line 1162 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr persist(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("always-send", persist); } -#line 2084 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2135 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 322: - #line 1209 "dhcp4_parser.yy" // lalr1.cc:859 + case 319: + #line 1170 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pools", l); ctx.stack_.push_back(l); ctx.enter(ctx.POOLS); } -#line 2095 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2146 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 323: - #line 1214 "dhcp4_parser.yy" // lalr1.cc:859 + case 320: + #line 1175 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2104 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2155 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 328: - #line 1229 "dhcp4_parser.yy" // lalr1.cc:859 + case 325: + #line 1190 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2114 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2165 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 329: - #line 1233 "dhcp4_parser.yy" // lalr1.cc:859 + case 326: + #line 1194 "dhcp4_parser.yy" // lalr1.cc:859 { + // The pool parameter is required. + ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 2122 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2175 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 330: - #line 1239 "dhcp4_parser.yy" // lalr1.cc:859 + case 327: + #line 1198 "dhcp4_parser.yy" // lalr1.cc:859 { // Parse the pool list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2132 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2185 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 331: - #line 1243 "dhcp4_parser.yy" // lalr1.cc:859 + case 328: + #line 1202 "dhcp4_parser.yy" // lalr1.cc:859 { + // The pool parameter is required. + ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 2140 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2195 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 338: - #line 1259 "dhcp4_parser.yy" // lalr1.cc:859 + case 335: + #line 1216 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2148 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2203 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 339: - #line 1261 "dhcp4_parser.yy" // lalr1.cc:859 + case 336: + #line 1218 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr pool(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pool", pool); ctx.leave(); } -#line 2158 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2213 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 340: - #line 1267 "dhcp4_parser.yy" // lalr1.cc:859 + case 337: + #line 1224 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2166 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2221 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 341: - #line 1269 "dhcp4_parser.yy" // lalr1.cc:859 + case 338: + #line 1226 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("user-context", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 2175 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2230 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 342: - #line 1277 "dhcp4_parser.yy" // lalr1.cc:859 + case 339: + #line 1234 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reservations", l); ctx.stack_.push_back(l); ctx.enter(ctx.RESERVATIONS); } -#line 2186 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2241 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 343: - #line 1282 "dhcp4_parser.yy" // lalr1.cc:859 + case 340: + #line 1239 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2195 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2250 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 348: - #line 1295 "dhcp4_parser.yy" // lalr1.cc:859 + case 345: + #line 1252 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2205 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2260 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 349: - #line 1299 "dhcp4_parser.yy" // lalr1.cc:859 + case 346: + #line 1256 "dhcp4_parser.yy" // lalr1.cc:859 { + /// @todo: an identifier parameter is required. ctx.stack_.pop_back(); } -#line 2213 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2269 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 350: - #line 1304 "dhcp4_parser.yy" // lalr1.cc:859 + case 347: + #line 1260 "dhcp4_parser.yy" // lalr1.cc:859 { // Parse the reservations list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2223 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2279 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 351: - #line 1308 "dhcp4_parser.yy" // lalr1.cc:859 + case 348: + #line 1264 "dhcp4_parser.yy" // lalr1.cc:859 { + /// @todo: an identifier parameter is required. // parsing completed } -#line 2231 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2288 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 369: - #line 1337 "dhcp4_parser.yy" // lalr1.cc:859 + case 366: + #line 1292 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2239 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2296 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 370: - #line 1339 "dhcp4_parser.yy" // lalr1.cc:859 + case 367: + #line 1294 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr next_server(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("next-server", next_server); ctx.leave(); } -#line 2249 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2306 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 371: - #line 1345 "dhcp4_parser.yy" // lalr1.cc:859 + case 368: + #line 1300 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2257 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2314 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 372: - #line 1347 "dhcp4_parser.yy" // lalr1.cc:859 + case 369: + #line 1302 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr srv(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-hostname", srv); ctx.leave(); } -#line 2267 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2324 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 373: - #line 1353 "dhcp4_parser.yy" // lalr1.cc:859 + case 370: + #line 1308 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2275 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2332 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 374: - #line 1355 "dhcp4_parser.yy" // lalr1.cc:859 + case 371: + #line 1310 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr bootfile(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("boot-file-name", bootfile); ctx.leave(); } -#line 2285 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2342 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 375: - #line 1361 "dhcp4_parser.yy" // lalr1.cc:859 + case 372: + #line 1316 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2293 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2350 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 376: - #line 1363 "dhcp4_parser.yy" // lalr1.cc:859 + case 373: + #line 1318 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr addr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ip-address", addr); ctx.leave(); } -#line 2303 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2360 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 377: - #line 1369 "dhcp4_parser.yy" // lalr1.cc:859 + case 374: + #line 1324 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2311 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2368 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 378: - #line 1371 "dhcp4_parser.yy" // lalr1.cc:859 + case 375: + #line 1326 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("duid", d); ctx.leave(); } -#line 2321 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2378 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 379: - #line 1377 "dhcp4_parser.yy" // lalr1.cc:859 + case 376: + #line 1332 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2329 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2386 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 380: - #line 1379 "dhcp4_parser.yy" // lalr1.cc:859 + case 377: + #line 1334 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hw-address", hw); ctx.leave(); } -#line 2339 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2396 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 381: - #line 1385 "dhcp4_parser.yy" // lalr1.cc:859 + case 378: + #line 1340 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2347 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2404 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 382: - #line 1387 "dhcp4_parser.yy" // lalr1.cc:859 + case 379: + #line 1342 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("client-id", hw); ctx.leave(); } -#line 2357 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2414 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 383: - #line 1393 "dhcp4_parser.yy" // lalr1.cc:859 + case 380: + #line 1348 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2365 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2422 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 384: - #line 1395 "dhcp4_parser.yy" // lalr1.cc:859 + case 381: + #line 1350 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("circuit-id", hw); ctx.leave(); } -#line 2375 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2432 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 385: - #line 1401 "dhcp4_parser.yy" // lalr1.cc:859 + case 382: + #line 1356 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2383 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2440 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 386: - #line 1403 "dhcp4_parser.yy" // lalr1.cc:859 + case 383: + #line 1358 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("flex-id", hw); ctx.leave(); } -#line 2393 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2450 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 387: - #line 1409 "dhcp4_parser.yy" // lalr1.cc:859 + case 384: + #line 1364 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2401 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2458 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 388: - #line 1411 "dhcp4_parser.yy" // lalr1.cc:859 + case 385: + #line 1366 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname", host); ctx.leave(); } -#line 2411 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2468 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 389: - #line 1417 "dhcp4_parser.yy" // lalr1.cc:859 + case 386: + #line 1372 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("client-classes", c); ctx.stack_.push_back(c); ctx.enter(ctx.NO_KEYWORD); } -#line 2422 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2479 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 390: - #line 1422 "dhcp4_parser.yy" // lalr1.cc:859 + case 387: + #line 1377 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2431 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2488 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 391: - #line 1430 "dhcp4_parser.yy" // lalr1.cc:859 + case 388: + #line 1385 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("relay", m); ctx.stack_.push_back(m); ctx.enter(ctx.RELAY); } -#line 2442 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2499 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 392: - #line 1435 "dhcp4_parser.yy" // lalr1.cc:859 + case 389: + #line 1390 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2451 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2508 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 393: - #line 1440 "dhcp4_parser.yy" // lalr1.cc:859 + case 390: + #line 1395 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2459 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2516 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 394: - #line 1442 "dhcp4_parser.yy" // lalr1.cc:859 + case 391: + #line 1397 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr ip(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ip-address", ip); ctx.leave(); } -#line 2469 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2526 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 395: - #line 1451 "dhcp4_parser.yy" // lalr1.cc:859 + case 392: + #line 1406 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("client-classes", l); ctx.stack_.push_back(l); ctx.enter(ctx.CLIENT_CLASSES); } -#line 2480 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2537 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 396: - #line 1456 "dhcp4_parser.yy" // lalr1.cc:859 + case 393: + #line 1411 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2489 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2546 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 399: - #line 1465 "dhcp4_parser.yy" // lalr1.cc:859 + case 396: + #line 1420 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2499 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2556 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 400: - #line 1469 "dhcp4_parser.yy" // lalr1.cc:859 + case 397: + #line 1424 "dhcp4_parser.yy" // lalr1.cc:859 { + // The name client class parameter is required. + ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 2507 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2566 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 413: - #line 1494 "dhcp4_parser.yy" // lalr1.cc:859 + case 410: + #line 1447 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2515 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2574 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 414: - #line 1496 "dhcp4_parser.yy" // lalr1.cc:859 + case 411: + #line 1449 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr test(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("test", test); ctx.leave(); } -#line 2525 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2584 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 415: - #line 1506 "dhcp4_parser.yy" // lalr1.cc:859 + case 412: + #line 1459 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("dhcp4o6-port", time); } -#line 2534 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2593 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 416: - #line 1513 "dhcp4_parser.yy" // lalr1.cc:859 + case 413: + #line 1466 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("control-socket", m); ctx.stack_.push_back(m); ctx.enter(ctx.CONTROL_SOCKET); } -#line 2545 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2604 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 417: - #line 1518 "dhcp4_parser.yy" // lalr1.cc:859 + case 414: + #line 1471 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2554 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2613 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 422: - #line 1531 "dhcp4_parser.yy" // lalr1.cc:859 + case 419: + #line 1484 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2562 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2621 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 423: - #line 1533 "dhcp4_parser.yy" // lalr1.cc:859 + case 420: + #line 1486 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr stype(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("socket-type", stype); ctx.leave(); } -#line 2572 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2631 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 424: - #line 1539 "dhcp4_parser.yy" // lalr1.cc:859 + case 421: + #line 1492 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2580 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2639 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 425: - #line 1541 "dhcp4_parser.yy" // lalr1.cc:859 + case 422: + #line 1494 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("socket-name", name); ctx.leave(); } -#line 2590 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2649 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 426: - #line 1549 "dhcp4_parser.yy" // lalr1.cc:859 + case 423: + #line 1502 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("dhcp-ddns", m); ctx.stack_.push_back(m); ctx.enter(ctx.DHCP_DDNS); } -#line 2601 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2660 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 427: - #line 1554 "dhcp4_parser.yy" // lalr1.cc:859 + case 424: + #line 1507 "dhcp4_parser.yy" // lalr1.cc:859 { + // The enable updates DHCP DDNS parameter is required. + ctx.require("enable-updates", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } -#line 2610 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2671 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 428: - #line 1561 "dhcp4_parser.yy" // lalr1.cc:859 + case 425: + #line 1512 "dhcp4_parser.yy" // lalr1.cc:859 { // Parse the dhcp-ddns map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2620 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2681 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 429: - #line 1565 "dhcp4_parser.yy" // lalr1.cc:859 + case 426: + #line 1516 "dhcp4_parser.yy" // lalr1.cc:859 { + // The enable updates DHCP DDNS parameter is required. + ctx.require("enable-updates", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 2628 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2691 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 447: - #line 1592 "dhcp4_parser.yy" // lalr1.cc:859 + case 444: + #line 1541 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enable-updates", b); } -#line 2637 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2700 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 448: - #line 1597 "dhcp4_parser.yy" // lalr1.cc:859 + case 445: + #line 1546 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2645 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2708 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 449: - #line 1599 "dhcp4_parser.yy" // lalr1.cc:859 + case 446: + #line 1548 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("qualifying-suffix", s); ctx.leave(); } -#line 2655 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2718 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 450: - #line 1605 "dhcp4_parser.yy" // lalr1.cc:859 + case 447: + #line 1554 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2663 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2726 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 451: - #line 1607 "dhcp4_parser.yy" // lalr1.cc:859 + case 448: + #line 1556 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-ip", s); ctx.leave(); } -#line 2673 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2736 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 452: - #line 1613 "dhcp4_parser.yy" // lalr1.cc:859 + case 449: + #line 1562 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-port", i); } -#line 2682 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2745 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 453: - #line 1618 "dhcp4_parser.yy" // lalr1.cc:859 + case 450: + #line 1567 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2690 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2753 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 454: - #line 1620 "dhcp4_parser.yy" // lalr1.cc:859 + case 451: + #line 1569 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("sender-ip", s); ctx.leave(); } -#line 2700 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2763 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 455: - #line 1626 "dhcp4_parser.yy" // lalr1.cc:859 + case 452: + #line 1575 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("sender-port", i); } -#line 2709 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2772 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 456: - #line 1631 "dhcp4_parser.yy" // lalr1.cc:859 + case 453: + #line 1580 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-queue-size", i); } -#line 2718 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2781 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 457: - #line 1636 "dhcp4_parser.yy" // lalr1.cc:859 + case 454: + #line 1585 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NCR_PROTOCOL); } -#line 2726 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2789 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 458: - #line 1638 "dhcp4_parser.yy" // lalr1.cc:859 + case 455: + #line 1587 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 2735 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2798 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 459: - #line 1644 "dhcp4_parser.yy" // lalr1.cc:859 + case 456: + #line 1593 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); } -#line 2741 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2804 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 460: - #line 1645 "dhcp4_parser.yy" // lalr1.cc:859 + case 457: + #line 1594 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); } -#line 2747 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2810 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 461: - #line 1648 "dhcp4_parser.yy" // lalr1.cc:859 + case 458: + #line 1597 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NCR_FORMAT); } -#line 2755 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2818 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 462: - #line 1650 "dhcp4_parser.yy" // lalr1.cc:859 + case 459: + #line 1599 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ncr-format", json); ctx.leave(); } -#line 2765 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2828 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 463: - #line 1656 "dhcp4_parser.yy" // lalr1.cc:859 + case 460: + #line 1605 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("always-include-fqdn", b); } -#line 2774 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2837 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 464: - #line 1661 "dhcp4_parser.yy" // lalr1.cc:859 + case 461: + #line 1610 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("override-no-update", b); } -#line 2783 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2846 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 465: - #line 1666 "dhcp4_parser.yy" // lalr1.cc:859 + case 462: + #line 1615 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("override-client-update", b); } -#line 2792 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2855 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 466: - #line 1671 "dhcp4_parser.yy" // lalr1.cc:859 + case 463: + #line 1620 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.REPLACE_CLIENT_NAME); } -#line 2800 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2863 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 467: - #line 1673 "dhcp4_parser.yy" // lalr1.cc:859 + case 464: + #line 1622 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 2809 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2872 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 468: - #line 1679 "dhcp4_parser.yy" // lalr1.cc:859 + case 465: + #line 1628 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location))); } -#line 2817 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2880 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 469: - #line 1682 "dhcp4_parser.yy" // lalr1.cc:859 + case 466: + #line 1631 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location))); } -#line 2825 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2888 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 470: - #line 1685 "dhcp4_parser.yy" // lalr1.cc:859 + case 467: + #line 1634 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location))); } -#line 2833 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2896 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 471: - #line 1688 "dhcp4_parser.yy" // lalr1.cc:859 + case 468: + #line 1637 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location))); } -#line 2841 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2904 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 472: - #line 1691 "dhcp4_parser.yy" // lalr1.cc:859 + case 469: + #line 1640 "dhcp4_parser.yy" // lalr1.cc:859 { error(yystack_[0].location, "boolean values for the replace-client-name are " "no longer supported"); } -#line 2850 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2913 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 473: - #line 1697 "dhcp4_parser.yy" // lalr1.cc:859 + case 470: + #line 1646 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2858 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2921 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 474: - #line 1699 "dhcp4_parser.yy" // lalr1.cc:859 + case 471: + #line 1648 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("generated-prefix", s); ctx.leave(); } -#line 2868 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2931 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 475: - #line 1707 "dhcp4_parser.yy" // lalr1.cc:859 + case 472: + #line 1656 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2876 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2939 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 476: - #line 1709 "dhcp4_parser.yy" // lalr1.cc:859 + case 473: + #line 1658 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("Dhcp6", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 2885 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2948 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 477: - #line 1714 "dhcp4_parser.yy" // lalr1.cc:859 + case 474: + #line 1663 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2893 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2956 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 478: - #line 1716 "dhcp4_parser.yy" // lalr1.cc:859 + case 475: + #line 1665 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 2902 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2965 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 479: - #line 1721 "dhcp4_parser.yy" // lalr1.cc:859 + case 476: + #line 1670 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2910 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2973 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 480: - #line 1723 "dhcp4_parser.yy" // lalr1.cc:859 + case 477: + #line 1672 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("Control-agent", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 2919 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2982 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 481: - #line 1733 "dhcp4_parser.yy" // lalr1.cc:859 + case 478: + #line 1682 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("Logging", m); ctx.stack_.push_back(m); ctx.enter(ctx.LOGGING); } -#line 2930 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2993 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 482: - #line 1738 "dhcp4_parser.yy" // lalr1.cc:859 + case 479: + #line 1687 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2939 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3002 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 486: - #line 1755 "dhcp4_parser.yy" // lalr1.cc:859 + case 483: + #line 1704 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("loggers", l); ctx.stack_.push_back(l); ctx.enter(ctx.LOGGERS); } -#line 2950 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3013 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 487: - #line 1760 "dhcp4_parser.yy" // lalr1.cc:859 + case 484: + #line 1709 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2959 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3022 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 490: - #line 1772 "dhcp4_parser.yy" // lalr1.cc:859 + case 487: + #line 1721 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(l); ctx.stack_.push_back(l); } -#line 2969 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3032 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 491: - #line 1776 "dhcp4_parser.yy" // lalr1.cc:859 + case 488: + #line 1725 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); } -#line 2977 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3040 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 499: - #line 1791 "dhcp4_parser.yy" // lalr1.cc:859 + case 496: + #line 1740 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("debuglevel", dl); } -#line 2986 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3049 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 500: - #line 1796 "dhcp4_parser.yy" // lalr1.cc:859 + case 497: + #line 1745 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2994 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3057 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 501: - #line 1798 "dhcp4_parser.yy" // lalr1.cc:859 + case 498: + #line 1747 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("severity", sev); ctx.leave(); } -#line 3004 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3067 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 502: - #line 1804 "dhcp4_parser.yy" // lalr1.cc:859 + case 499: + #line 1753 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("output_options", l); ctx.stack_.push_back(l); ctx.enter(ctx.OUTPUT_OPTIONS); } -#line 3015 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3078 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 503: - #line 1809 "dhcp4_parser.yy" // lalr1.cc:859 + case 500: + #line 1758 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 3024 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3087 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 506: - #line 1818 "dhcp4_parser.yy" // lalr1.cc:859 + case 503: + #line 1767 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3034 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3097 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 507: - #line 1822 "dhcp4_parser.yy" // lalr1.cc:859 + case 504: + #line 1771 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); } -#line 3042 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3105 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 514: - #line 1836 "dhcp4_parser.yy" // lalr1.cc:859 + case 511: + #line 1785 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 3050 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3113 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 515: - #line 1838 "dhcp4_parser.yy" // lalr1.cc:859 + case 512: + #line 1787 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("output", sev); ctx.leave(); } -#line 3060 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3123 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 516: - #line 1844 "dhcp4_parser.yy" // lalr1.cc:859 + case 513: + #line 1793 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr flush(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("flush", flush); } -#line 3069 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3132 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 517: - #line 1849 "dhcp4_parser.yy" // lalr1.cc:859 + case 514: + #line 1798 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr maxsize(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("maxsize", maxsize); } -#line 3078 "dhcp4_parser.cc" // lalr1.cc:859 +#line 3141 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 518: - #line 1854 "dhcp4_parser.yy" // lalr1.cc:859 + case 515: + #line 1803 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr maxver(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("maxver", maxver); @@@ -3982,56 -3914,56 +3969,46 @@@ { 0, 2, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, - 0, 3, 0, 3, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 4, 1, 0, 1, 3, 5, 0, - 4, 0, 1, 1, 3, 0, 4, 0, 1, 1, - 3, 2, 0, 4, 1, 3, 1, 1, 1, 1, - 1, 1, 0, 6, 0, 4, 1, 3, 1, 1, + 0, 3, 0, 3, 0, 3, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 4, 1, 0, 1, 3, + 5, 0, 4, 0, 1, 1, 3, 0, 4, 0, + 1, 1, 3, 2, 0, 4, 1, 3, 1, 1, + 1, 1, 1, 1, 0, 6, 0, 4, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, - 3, 3, 3, 3, 3, 0, 6, 1, 3, 1, - 1, 1, 0, 4, 0, 4, 0, 4, 1, 1, - 3, 0, 6, 0, 6, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 4, 1, 1, 1, 1, 0, 4, 0, 4, - 0, 4, 3, 0, 4, 3, 3, 3, 3, 0, - 4, 0, 4, 0, 6, 1, 3, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 0, 6, 0, - 1, 1, 3, 0, 4, 0, 4, 1, 3, 1, - 1, 1, 0, 4, 0, 4, 0, 6, 1, 3, - 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, - 3, 3, 0, 6, 0, 1, 1, 3, 0, 4, - 0, 4, 1, 3, 1, 1, 1, 1, 1, 1, + 1, 3, 3, 3, 3, 3, 3, 0, 6, 1, + 3, 1, 1, 1, 0, 4, 0, 4, 0, 4, + 1, 1, 3, 0, 6, 0, 6, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 4, 1, 1, 1, 1, 0, 4, - 0, 4, 0, 4, 3, 0, 4, 3, 3, 3, - 3, 0, 4, 0, 4, 0, 6, 1, 3, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 1, 1, 1, 1, 1, 0, 4, 0, 4, 0, + 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, + 4, 1, 1, 1, 3, 3, 0, 6, 0, 1, + 1, 3, 0, 4, 0, 4, 0, 1, 1, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, + 1, 0, 4, 0, 4, 0, 4, 1, 0, 4, + 3, 0, 6, 0, 1, 1, 3, 0, 4, 0, + 4, 0, 1, 1, 3, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 4, 1, 1, 3, 3, 0, 6, 0, 1, 1, 3, 0, 4, 0, 4, 1, - 3, 1, 1, 1, 0, 4, 0, 4, 0, 6, - 1, 3, 1, 1, 1, 1, 1, 1, 3, 3, - 3, 3, 3, 3, 0, 6, 0, 1, 1, 3, - 0, 4, 0, 4, 1, 3, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 3, 1, 1, 1, 1, 0, 4, 0, 4, 0, + 6, 0, 1, 1, 3, 0, 4, 0, 4, 0, + 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, - 0, 4, 1, 1, 1, 3, 3, 0, 6, 0, - 4, 0, 1, 1, 3, 0, 4, 0, 4, 0, - 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 3, 1, 0, 4, 0, 4, 0, 4, - 1, 0, 4, 3, 0, 6, 0, 1, 1, 3, - 0, 4, 0, 4, 0, 1, 1, 3, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 4, 1, 1, - 3, 3, 0, 6, 0, 1, 1, 3, 0, 4, - 0, 4, 1, 3, 1, 1, 1, 1, 0, 4, - 0, 4, 0, 6, 0, 1, 1, 3, 0, 4, - 0, 4, 0, 1, 1, 3, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, - 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, - 4, 0, 6, 0, 4, 0, 6, 1, 3, 0, - 4, 0, 1, 1, 3, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 4, 3, 0, 6, 1, 3, - 1, 1, 0, 4, 0, 4, 0, 6, 0, 4, + 0, 4, 0, 4, 0, 4, 0, 4, 0, 6, + 0, 4, 0, 6, 1, 3, 0, 4, 0, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, - 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, 3, 0, 4, 1, 1, - 1, 1, 1, 0, 4, 0, 4, 0, 4, 0, - 4, 0, 6, 1, 3, 1, 0, 6, 1, 3, - 0, 4, 1, 3, 1, 1, 1, 1, 1, 3, - 0, 4, 0, 6, 1, 3, 0, 4, 1, 3, - 1, 1, 1, 1, 0, 4, 3, 3, 3 + 0, 4, 3, 0, 6, 1, 3, 1, 1, 0, + 4, 0, 4, 0, 6, 0, 4, 1, 3, 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, 3, 0, 4, 1, 1, 1, 1, 1, + 0, 4, 0, 4, 0, 4, 0, 4, 0, 6, + 1, 3, 1, 0, 6, 1, 3, 0, 4, 1, + 3, 1, 1, 1, 1, 1, 3, 0, 4, 0, + 6, 1, 3, 0, 4, 1, 3, 1, 1, 1, + 1, 0, 4, 3, 3, 3 }; diff --cc src/bin/dhcp4/dhcp4_parser.h index c0fa4e5059,c473544f56..ff2d5cb7a3 --- a/src/bin/dhcp4/dhcp4_parser.h +++ b/src/bin/dhcp4/dhcp4_parser.h @@@ -1385,12 -1380,12 +1385,12 @@@ namespace isc { namespace dhcp enum { yyeof_ = 0, - yylast_ = 755, ///< Last index in yytable_. - yynnts_ = 321, ///< Number of nonterminal symbols. - yyfinal_ = 26, ///< Termination state number. + yylast_ = 757, ///< Last index in yytable_. + yynnts_ = 318, ///< Number of nonterminal symbols. + yyfinal_ = 24, ///< Termination state number. yyterror_ = 1, yyerrcode_ = 256, - yyntokens_ = 145 ///< Number of tokens. + yyntokens_ = 146 ///< Number of tokens. }; diff --cc src/bin/dhcp6/dhcp6_lexer.cc index ac0c8430a0,a835343260..83be290e0a --- a/src/bin/dhcp6/dhcp6_lexer.cc +++ b/src/bin/dhcp6/dhcp6_lexer.cc @@@ -3851,27 -3627,27 +3631,27 @@@ YY_RULE_SETU case 143: /* rule 143 can match eol */ YY_RULE_SETUP -#line 1498 "dhcp6_lexer.ll" +#line 1502 "dhcp6_lexer.ll" { /* Bad string with a forbidden control character inside */ - driver.error(driver.loc_, "Invalid control in " + std::string(yytext)); + driver.error(driver.loc_, "Invalid control in " + std::string(parser6_text)); } YY_BREAK case 144: /* rule 144 can match eol */ YY_RULE_SETUP -#line 1503 "dhcp6_lexer.ll" +#line 1507 "dhcp6_lexer.ll" { /* Bad string with a bad escape inside */ - driver.error(driver.loc_, "Bad escape in " + std::string(yytext)); + driver.error(driver.loc_, "Bad escape in " + std::string(parser6_text)); } YY_BREAK case 145: YY_RULE_SETUP -#line 1508 "dhcp6_lexer.ll" +#line 1512 "dhcp6_lexer.ll" { /* Bad string with an open escape at the end */ - driver.error(driver.loc_, "Overflow escape in " + std::string(yytext)); + driver.error(driver.loc_, "Overflow escape in " + std::string(parser6_text)); } YY_BREAK case 146: @@@ -3906,10 -3682,10 +3686,10 @@@ YY_RULE_SETU YY_BREAK case 152: YY_RULE_SETUP -#line 1520 "dhcp6_lexer.ll" +#line 1524 "dhcp6_lexer.ll" { /* An integer was found. */ - std::string tmp(yytext); + std::string tmp(parser6_text); int64_t integer = 0; try { /* In substring we want to use negative values (e.g. -1). @@@ -3927,10 -3703,10 +3707,10 @@@ YY_BREAK case 153: YY_RULE_SETUP -#line 1538 "dhcp6_lexer.ll" +#line 1542 "dhcp6_lexer.ll" { /* A floating point was found. */ - std::string tmp(yytext); + std::string tmp(parser6_text); double fp = 0.0; try { fp = boost::lexical_cast(tmp); @@@ -3943,9 -3719,9 +3723,9 @@@ YY_BREAK case 154: YY_RULE_SETUP -#line 1551 "dhcp6_lexer.ll" +#line 1555 "dhcp6_lexer.ll" { - string tmp(yytext); + string tmp(parser6_text); return isc::dhcp::Dhcp6Parser::make_BOOLEAN(tmp == "true", driver.loc_); } YY_BREAK @@@ -3973,11 -3749,11 +3753,11 @@@ driver.error (driver.loc_, "JSON null r YY_BREAK case 159: YY_RULE_SETUP - #line 1570 "dhcp6_lexer.ll" - driver.error (driver.loc_, "Invalid character: " + std::string(yytext)); + #line 1566 "dhcp6_lexer.ll" + driver.error (driver.loc_, "Invalid character: " + std::string(parser6_text)); YY_BREAK case YY_STATE_EOF(INITIAL): -#line 1568 "dhcp6_lexer.ll" +#line 1572 "dhcp6_lexer.ll" { if (driver.states_.empty()) { return isc::dhcp::Dhcp6Parser::make_END(driver.loc_); @@@ -4003,10 -3779,10 +3783,10 @@@ YY_BREAK case 160: YY_RULE_SETUP -#line 1591 "dhcp6_lexer.ll" +#line 1595 "dhcp6_lexer.ll" ECHO; YY_BREAK - #line 4009 "dhcp6_lexer.cc" + #line 3786 "dhcp6_lexer.cc" case YY_END_OF_BUFFER: { @@@ -5111,9 -4885,10 +4889,10 @@@ void parser6_free (void * ptr /* %ok-for-header */ -#line 1591 "dhcp6_lexer.ll" +#line 1595 "dhcp6_lexer.ll" + using namespace isc::dhcp; void diff --cc src/bin/dhcp6/dhcp6_parser.cc index dba8d9f6c4,c4071f49d0..ec11fcb15b --- a/src/bin/dhcp6/dhcp6_parser.cc +++ b/src/bin/dhcp6/dhcp6_parser.cc @@@ -1676,1577 -1654,1527 +1676,1569 @@@ namespace isc { namespace dhcp ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 1658 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1680 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 213: -#line 862 "dhcp6_parser.yy" // lalr1.cc:859 + case 215: +#line 880 "dhcp6_parser.yy" // lalr1.cc:859 { + // The subnet subnet6 parameter is required + ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 1666 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1690 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 235: - #line 911 "dhcp6_parser.yy" // lalr1.cc:859 + case 234: + #line 892 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 1674 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1698 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 236: - #line 913 "dhcp6_parser.yy" // lalr1.cc:859 + case 235: + #line 894 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr subnet(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("subnet", subnet); ctx.leave(); } -#line 1684 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1708 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 237: - #line 919 "dhcp6_parser.yy" // lalr1.cc:859 + case 236: + #line 900 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 1692 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1716 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 238: - #line 921 "dhcp6_parser.yy" // lalr1.cc:859 + case 237: + #line 902 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("interface", iface); ctx.leave(); } -#line 1702 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1726 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 239: - #line 927 "dhcp6_parser.yy" // lalr1.cc:859 + case 238: + #line 908 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 1710 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1734 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 240: - #line 929 "dhcp6_parser.yy" // lalr1.cc:859 + case 239: + #line 910 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("interface-id", iface); ctx.leave(); } -#line 1720 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1744 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 241: - #line 935 "dhcp6_parser.yy" // lalr1.cc:859 + case 240: + #line 916 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.CLIENT_CLASS); } -#line 1728 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1752 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 242: - #line 937 "dhcp6_parser.yy" // lalr1.cc:859 + case 241: + #line 918 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr cls(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("client-class", cls); ctx.leave(); } -#line 1738 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1762 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 243: - #line 943 "dhcp6_parser.yy" // lalr1.cc:859 + case 242: + #line 924 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.RESERVATION_MODE); } -#line 1746 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1770 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 244: - #line 945 "dhcp6_parser.yy" // lalr1.cc:859 + case 243: + #line 926 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 1755 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1779 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 245: - #line 950 "dhcp6_parser.yy" // lalr1.cc:859 + case 244: + #line 931 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); } -#line 1761 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1785 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 246: - #line 951 "dhcp6_parser.yy" // lalr1.cc:859 + case 245: + #line 932 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); } -#line 1767 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1791 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 247: - #line 952 "dhcp6_parser.yy" // lalr1.cc:859 + case 246: + #line 933 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); } -#line 1773 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1797 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 248: - #line 955 "dhcp6_parser.yy" // lalr1.cc:859 + case 247: + #line 936 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr id(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("id", id); } -#line 1782 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1806 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 249: - #line 960 "dhcp6_parser.yy" // lalr1.cc:859 + case 248: + #line 941 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr rc(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("rapid-commit", rc); } -#line 1791 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1815 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 250: - #line 969 "dhcp6_parser.yy" // lalr1.cc:859 + case 249: + #line 950 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("option-def", l); ctx.stack_.push_back(l); ctx.enter(ctx.OPTION_DEF); } -#line 1802 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1826 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 251: - #line 974 "dhcp6_parser.yy" // lalr1.cc:859 + case 250: + #line 955 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1811 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1835 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 252: +#line 982 "dhcp6_parser.yy" // lalr1.cc:859 + { + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.push_back(m); +} +#line 1844 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 253: - #line 985 "dhcp6_parser.yy" // lalr1.cc:859 - { - // parsing completed - } - #line 1852 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 258: - #line 1001 "dhcp6_parser.yy" // lalr1.cc:859 + case 255: + #line 972 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 1821 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1862 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 259: - #line 1005 "dhcp6_parser.yy" // lalr1.cc:859 + case 256: + #line 976 "dhcp6_parser.yy" // lalr1.cc:859 { + // The name, code and type option def parameters are required. + ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); + ctx.require("code", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); + ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 1829 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1874 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 260: - #line 1016 "dhcp6_parser.yy" // lalr1.cc:859 + case 257: + #line 983 "dhcp6_parser.yy" // lalr1.cc:859 { // Parse the option-def list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 1839 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1884 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 261: - #line 1020 "dhcp6_parser.yy" // lalr1.cc:859 + case 258: + #line 987 "dhcp6_parser.yy" // lalr1.cc:859 { + // The name, code and type option def parameters are required. + ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); + ctx.require("code", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); + ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 1847 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1896 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 275: - #line 1050 "dhcp6_parser.yy" // lalr1.cc:859 + case 272: + #line 1013 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr code(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("code", code); } -#line 1856 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1905 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 277: - #line 1057 "dhcp6_parser.yy" // lalr1.cc:859 + case 274: + #line 1020 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 1864 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1913 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 278: - #line 1059 "dhcp6_parser.yy" // lalr1.cc:859 + case 275: + #line 1022 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("type", prf); ctx.leave(); } -#line 1874 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1923 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 279: - #line 1065 "dhcp6_parser.yy" // lalr1.cc:859 + case 276: + #line 1028 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 1882 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1931 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 280: - #line 1067 "dhcp6_parser.yy" // lalr1.cc:859 + case 277: + #line 1030 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr rtypes(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("record-types", rtypes); ctx.leave(); } -#line 1892 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1941 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 281: - #line 1073 "dhcp6_parser.yy" // lalr1.cc:859 + case 278: + #line 1036 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 1900 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1949 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 282: - #line 1075 "dhcp6_parser.yy" // lalr1.cc:859 + case 279: + #line 1038 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr space(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("space", space); ctx.leave(); } -#line 1910 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1959 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 284: - #line 1083 "dhcp6_parser.yy" // lalr1.cc:859 + case 281: + #line 1046 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 1918 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1967 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 285: - #line 1085 "dhcp6_parser.yy" // lalr1.cc:859 + case 282: + #line 1048 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr encap(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("encapsulate", encap); ctx.leave(); } -#line 1928 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1977 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 286: - #line 1091 "dhcp6_parser.yy" // lalr1.cc:859 + case 283: + #line 1054 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr array(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("array", array); } -#line 1937 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1986 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 287: - #line 1100 "dhcp6_parser.yy" // lalr1.cc:859 + case 284: + #line 1063 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("option-data", l); ctx.stack_.push_back(l); ctx.enter(ctx.OPTION_DATA); } -#line 1948 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1997 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 288: - #line 1105 "dhcp6_parser.yy" // lalr1.cc:859 + case 285: + #line 1068 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1957 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2006 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 293: - #line 1124 "dhcp6_parser.yy" // lalr1.cc:859 + case 290: + #line 1087 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 1967 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2016 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 294: - #line 1128 "dhcp6_parser.yy" // lalr1.cc:859 + case 291: + #line 1091 "dhcp6_parser.yy" // lalr1.cc:859 { + /// @todo: the code or name parameters are required. ctx.stack_.pop_back(); } -#line 1975 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2025 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 295: - #line 1136 "dhcp6_parser.yy" // lalr1.cc:859 + case 292: + #line 1098 "dhcp6_parser.yy" // lalr1.cc:859 { // Parse the option-data list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 1985 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2035 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 296: - #line 1140 "dhcp6_parser.yy" // lalr1.cc:859 + case 293: + #line 1102 "dhcp6_parser.yy" // lalr1.cc:859 { + /// @todo: the code or name parameters are required. // parsing completed } -#line 1993 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2044 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 309: - #line 1171 "dhcp6_parser.yy" // lalr1.cc:859 + case 306: + #line 1132 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2001 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2052 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 310: - #line 1173 "dhcp6_parser.yy" // lalr1.cc:859 + case 307: + #line 1134 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr data(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("data", data); ctx.leave(); } -#line 2011 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2062 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 313: - #line 1183 "dhcp6_parser.yy" // lalr1.cc:859 + case 310: + #line 1144 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr space(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("csv-format", space); } -#line 2020 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2071 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 314: - #line 1188 "dhcp6_parser.yy" // lalr1.cc:859 + case 311: + #line 1149 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr persist(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("always-send", persist); } -#line 2029 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2080 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 315: - #line 1196 "dhcp6_parser.yy" // lalr1.cc:859 + case 312: + #line 1157 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pools", l); ctx.stack_.push_back(l); ctx.enter(ctx.POOLS); } -#line 2040 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2091 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 316: - #line 1201 "dhcp6_parser.yy" // lalr1.cc:859 + case 313: + #line 1162 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2049 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2100 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 321: - #line 1216 "dhcp6_parser.yy" // lalr1.cc:859 + case 318: + #line 1177 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2059 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2110 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 322: - #line 1220 "dhcp6_parser.yy" // lalr1.cc:859 + case 319: + #line 1181 "dhcp6_parser.yy" // lalr1.cc:859 { + // The pool parameter is required. + ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 2067 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2120 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 323: - #line 1226 "dhcp6_parser.yy" // lalr1.cc:859 + case 320: + #line 1185 "dhcp6_parser.yy" // lalr1.cc:859 { // Parse the pool list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2077 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2130 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 324: - #line 1230 "dhcp6_parser.yy" // lalr1.cc:859 + case 321: + #line 1189 "dhcp6_parser.yy" // lalr1.cc:859 { - // parsing completed + // The pool parameter is required. + ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); } -#line 2085 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2139 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 331: - #line 1245 "dhcp6_parser.yy" // lalr1.cc:859 + case 328: + #line 1203 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2093 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2147 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 332: - #line 1247 "dhcp6_parser.yy" // lalr1.cc:859 + case 329: + #line 1205 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr pool(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pool", pool); ctx.leave(); } -#line 2103 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2157 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 333: - #line 1253 "dhcp6_parser.yy" // lalr1.cc:859 + case 330: + #line 1211 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2111 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2165 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 334: - #line 1255 "dhcp6_parser.yy" // lalr1.cc:859 + case 331: + #line 1213 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("user-context", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 2120 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2174 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 335: - #line 1263 "dhcp6_parser.yy" // lalr1.cc:859 + case 332: + #line 1221 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pd-pools", l); ctx.stack_.push_back(l); ctx.enter(ctx.PD_POOLS); } -#line 2131 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2185 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 336: - #line 1268 "dhcp6_parser.yy" // lalr1.cc:859 + case 333: + #line 1226 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2140 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2194 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 341: - #line 1283 "dhcp6_parser.yy" // lalr1.cc:859 + case 338: + #line 1241 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2150 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2204 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 342: - #line 1287 "dhcp6_parser.yy" // lalr1.cc:859 + case 339: + #line 1245 "dhcp6_parser.yy" // lalr1.cc:859 { + // The prefix, prefix len and delegated len parameters are required. + ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); + ctx.require("prefix-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); + ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 2158 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2216 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 343: - #line 1295 "dhcp6_parser.yy" // lalr1.cc:859 + case 340: + #line 1249 "dhcp6_parser.yy" // lalr1.cc:859 { // Parse the pd-pool list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2168 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2226 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 344: - #line 1299 "dhcp6_parser.yy" // lalr1.cc:859 + case 341: + #line 1253 "dhcp6_parser.yy" // lalr1.cc:859 { + // The prefix, prefix len and delegated len parameters are required. + ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); + ctx.require("prefix-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); + ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 2176 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2238 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 355: - #line 1321 "dhcp6_parser.yy" // lalr1.cc:859 + case 352: + #line 1271 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2184 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2246 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 356: - #line 1323 "dhcp6_parser.yy" // lalr1.cc:859 + case 353: + #line 1273 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("prefix", prf); ctx.leave(); } -#line 2194 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2256 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 357: - #line 1329 "dhcp6_parser.yy" // lalr1.cc:859 + case 354: + #line 1279 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("prefix-len", prf); } -#line 2203 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2265 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 358: - #line 1334 "dhcp6_parser.yy" // lalr1.cc:859 + case 355: + #line 1284 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2211 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2273 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 359: - #line 1336 "dhcp6_parser.yy" // lalr1.cc:859 + case 356: + #line 1286 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("excluded-prefix", prf); ctx.leave(); } -#line 2221 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2283 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 360: - #line 1342 "dhcp6_parser.yy" // lalr1.cc:859 + case 357: + #line 1292 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("excluded-prefix-len", prf); } -#line 2230 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2292 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 361: - #line 1347 "dhcp6_parser.yy" // lalr1.cc:859 + case 358: + #line 1297 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr deleg(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("delegated-len", deleg); } -#line 2239 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2301 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 362: - #line 1355 "dhcp6_parser.yy" // lalr1.cc:859 + case 359: + #line 1305 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reservations", l); ctx.stack_.push_back(l); ctx.enter(ctx.RESERVATIONS); } -#line 2250 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2312 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 363: - #line 1360 "dhcp6_parser.yy" // lalr1.cc:859 + case 360: + #line 1310 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2259 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2321 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 368: - #line 1373 "dhcp6_parser.yy" // lalr1.cc:859 + case 365: + #line 1323 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2269 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2331 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 369: - #line 1377 "dhcp6_parser.yy" // lalr1.cc:859 + case 366: + #line 1327 "dhcp6_parser.yy" // lalr1.cc:859 { + /// @todo: an identifier parameter is required. ctx.stack_.pop_back(); } -#line 2277 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2340 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 370: - #line 1382 "dhcp6_parser.yy" // lalr1.cc:859 + case 367: + #line 1331 "dhcp6_parser.yy" // lalr1.cc:859 { // Parse the reservations list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2287 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2350 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 371: - #line 1386 "dhcp6_parser.yy" // lalr1.cc:859 + case 368: + #line 1335 "dhcp6_parser.yy" // lalr1.cc:859 { + /// @todo: an identifier parameter is required. // parsing completed } -#line 2295 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2359 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 385: - #line 1411 "dhcp6_parser.yy" // lalr1.cc:859 + case 382: + #line 1359 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ip-addresses", l); ctx.stack_.push_back(l); ctx.enter(ctx.NO_KEYWORD); } -#line 2306 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2370 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 386: - #line 1416 "dhcp6_parser.yy" // lalr1.cc:859 + case 383: + #line 1364 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2315 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2379 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 387: - #line 1421 "dhcp6_parser.yy" // lalr1.cc:859 + case 384: + #line 1369 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("prefixes", l); ctx.stack_.push_back(l); ctx.enter(ctx.NO_KEYWORD); } -#line 2326 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2390 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 388: - #line 1426 "dhcp6_parser.yy" // lalr1.cc:859 + case 385: + #line 1374 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2335 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2399 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 389: - #line 1431 "dhcp6_parser.yy" // lalr1.cc:859 + case 386: + #line 1379 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2343 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2407 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 390: - #line 1433 "dhcp6_parser.yy" // lalr1.cc:859 + case 387: + #line 1381 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("duid", d); ctx.leave(); } -#line 2353 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2417 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 391: - #line 1439 "dhcp6_parser.yy" // lalr1.cc:859 + case 388: + #line 1387 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2361 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2425 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 392: - #line 1441 "dhcp6_parser.yy" // lalr1.cc:859 + case 389: + #line 1389 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hw-address", hw); ctx.leave(); } -#line 2371 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2435 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 393: - #line 1447 "dhcp6_parser.yy" // lalr1.cc:859 + case 390: + #line 1395 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2379 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2443 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 394: - #line 1449 "dhcp6_parser.yy" // lalr1.cc:859 + case 391: + #line 1397 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname", host); ctx.leave(); } -#line 2389 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2453 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 395: - #line 1455 "dhcp6_parser.yy" // lalr1.cc:859 + case 392: + #line 1403 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2397 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2461 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 396: - #line 1457 "dhcp6_parser.yy" // lalr1.cc:859 + case 393: + #line 1405 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("flex-id", hw); ctx.leave(); } -#line 2407 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2471 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 397: - #line 1463 "dhcp6_parser.yy" // lalr1.cc:859 + case 394: + #line 1411 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("client-classes", c); ctx.stack_.push_back(c); ctx.enter(ctx.NO_KEYWORD); } -#line 2418 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2482 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 398: - #line 1468 "dhcp6_parser.yy" // lalr1.cc:859 + case 395: + #line 1416 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2427 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2491 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 399: - #line 1476 "dhcp6_parser.yy" // lalr1.cc:859 + case 396: + #line 1424 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("relay", m); ctx.stack_.push_back(m); ctx.enter(ctx.RELAY); } -#line 2438 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2502 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 400: - #line 1481 "dhcp6_parser.yy" // lalr1.cc:859 + case 397: + #line 1429 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2447 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2511 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 401: - #line 1486 "dhcp6_parser.yy" // lalr1.cc:859 + case 398: + #line 1434 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2455 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2519 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 402: - #line 1488 "dhcp6_parser.yy" // lalr1.cc:859 + case 399: + #line 1436 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr ip(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ip-address", ip); ctx.leave(); } -#line 2465 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2529 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 403: - #line 1497 "dhcp6_parser.yy" // lalr1.cc:859 + case 400: + #line 1445 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("client-classes", l); ctx.stack_.push_back(l); ctx.enter(ctx.CLIENT_CLASSES); } -#line 2476 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2540 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 404: - #line 1502 "dhcp6_parser.yy" // lalr1.cc:859 + case 401: + #line 1450 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2485 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2549 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 407: - #line 1511 "dhcp6_parser.yy" // lalr1.cc:859 + case 404: + #line 1459 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2495 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2559 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 408: - #line 1515 "dhcp6_parser.yy" // lalr1.cc:859 + case 405: + #line 1463 "dhcp6_parser.yy" // lalr1.cc:859 { + // The name client class parameter is required. + ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 2503 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2569 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 418: - #line 1537 "dhcp6_parser.yy" // lalr1.cc:859 + case 415: + #line 1483 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2511 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2577 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 419: - #line 1539 "dhcp6_parser.yy" // lalr1.cc:859 + case 416: + #line 1485 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr test(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("test", test); ctx.leave(); } -#line 2521 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2587 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 420: - #line 1548 "dhcp6_parser.yy" // lalr1.cc:859 + case 417: + #line 1494 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-id", m); ctx.stack_.push_back(m); ctx.enter(ctx.SERVER_ID); } -#line 2532 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2598 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 421: - #line 1553 "dhcp6_parser.yy" // lalr1.cc:859 + case 418: + #line 1499 "dhcp6_parser.yy" // lalr1.cc:859 { + // The type parameter is required. + ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } -#line 2541 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2609 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 431: - #line 1573 "dhcp6_parser.yy" // lalr1.cc:859 + case 428: + #line 1517 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.DUID_TYPE); } -#line 2549 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2617 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 432: - #line 1575 "dhcp6_parser.yy" // lalr1.cc:859 + case 429: + #line 1519 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 2558 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2626 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 433: - #line 1580 "dhcp6_parser.yy" // lalr1.cc:859 + case 430: + #line 1524 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); } -#line 2564 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2632 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 434: - #line 1581 "dhcp6_parser.yy" // lalr1.cc:859 + case 431: + #line 1525 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); } -#line 2570 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2638 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 435: - #line 1582 "dhcp6_parser.yy" // lalr1.cc:859 + case 432: + #line 1526 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); } -#line 2576 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2644 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 436: - #line 1585 "dhcp6_parser.yy" // lalr1.cc:859 + case 433: + #line 1529 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr htype(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("htype", htype); } -#line 2585 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2653 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 437: - #line 1590 "dhcp6_parser.yy" // lalr1.cc:859 + case 434: + #line 1534 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2593 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2661 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 438: - #line 1592 "dhcp6_parser.yy" // lalr1.cc:859 + case 435: + #line 1536 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr id(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("identifier", id); ctx.leave(); } -#line 2603 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2671 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 439: - #line 1598 "dhcp6_parser.yy" // lalr1.cc:859 + case 436: + #line 1542 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("time", time); } -#line 2612 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2680 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 440: - #line 1603 "dhcp6_parser.yy" // lalr1.cc:859 + case 437: + #line 1547 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enterprise-id", time); } -#line 2621 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2689 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 441: - #line 1610 "dhcp6_parser.yy" // lalr1.cc:859 + case 438: + #line 1554 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("dhcp4o6-port", time); } -#line 2630 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2698 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 442: - #line 1617 "dhcp6_parser.yy" // lalr1.cc:859 + case 439: + #line 1561 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("control-socket", m); ctx.stack_.push_back(m); ctx.enter(ctx.CONTROL_SOCKET); } -#line 2641 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2709 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 443: - #line 1622 "dhcp6_parser.yy" // lalr1.cc:859 + case 440: + #line 1566 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2650 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2718 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 448: - #line 1635 "dhcp6_parser.yy" // lalr1.cc:859 + case 445: + #line 1579 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2658 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2726 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 449: - #line 1637 "dhcp6_parser.yy" // lalr1.cc:859 + case 446: + #line 1581 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr stype(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("socket-type", stype); ctx.leave(); } -#line 2668 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2736 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 450: - #line 1643 "dhcp6_parser.yy" // lalr1.cc:859 + case 447: + #line 1587 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2676 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2744 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 451: - #line 1645 "dhcp6_parser.yy" // lalr1.cc:859 + case 448: + #line 1589 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("socket-name", name); ctx.leave(); } -#line 2686 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2754 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 452: - #line 1653 "dhcp6_parser.yy" // lalr1.cc:859 + case 449: + #line 1597 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("dhcp-ddns", m); ctx.stack_.push_back(m); ctx.enter(ctx.DHCP_DDNS); } -#line 2697 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2765 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 453: - #line 1658 "dhcp6_parser.yy" // lalr1.cc:859 + case 450: + #line 1602 "dhcp6_parser.yy" // lalr1.cc:859 { + // The enable updates DHCP DDNS parameter is required. + ctx.require("enable-updates", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } -#line 2706 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2776 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 454: - #line 1665 "dhcp6_parser.yy" // lalr1.cc:859 + case 451: + #line 1607 "dhcp6_parser.yy" // lalr1.cc:859 { // Parse the dhcp-ddns map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2716 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2786 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 455: - #line 1669 "dhcp6_parser.yy" // lalr1.cc:859 + case 452: + #line 1611 "dhcp6_parser.yy" // lalr1.cc:859 { + // The enable updates DHCP DDNS parameter is required. + ctx.require("enable-updates", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 2724 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2796 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 473: - #line 1696 "dhcp6_parser.yy" // lalr1.cc:859 + case 470: + #line 1636 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enable-updates", b); } -#line 2733 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2805 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 474: - #line 1701 "dhcp6_parser.yy" // lalr1.cc:859 + case 471: + #line 1641 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2741 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2813 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 475: - #line 1703 "dhcp6_parser.yy" // lalr1.cc:859 + case 472: + #line 1643 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("qualifying-suffix", s); ctx.leave(); } -#line 2751 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2823 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 476: - #line 1709 "dhcp6_parser.yy" // lalr1.cc:859 + case 473: + #line 1649 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2759 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2831 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 477: - #line 1711 "dhcp6_parser.yy" // lalr1.cc:859 + case 474: + #line 1651 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-ip", s); ctx.leave(); } -#line 2769 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2841 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 478: - #line 1717 "dhcp6_parser.yy" // lalr1.cc:859 + case 475: + #line 1657 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-port", i); } -#line 2778 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2850 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 479: - #line 1722 "dhcp6_parser.yy" // lalr1.cc:859 + case 476: + #line 1662 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2786 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2858 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 480: - #line 1724 "dhcp6_parser.yy" // lalr1.cc:859 + case 477: + #line 1664 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("sender-ip", s); ctx.leave(); } -#line 2796 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2868 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 481: - #line 1730 "dhcp6_parser.yy" // lalr1.cc:859 + case 478: + #line 1670 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("sender-port", i); } -#line 2805 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2877 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 482: - #line 1735 "dhcp6_parser.yy" // lalr1.cc:859 + case 479: + #line 1675 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-queue-size", i); } -#line 2814 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2886 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 483: - #line 1740 "dhcp6_parser.yy" // lalr1.cc:859 + case 480: + #line 1680 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NCR_PROTOCOL); } -#line 2822 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2894 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 484: - #line 1742 "dhcp6_parser.yy" // lalr1.cc:859 + case 481: + #line 1682 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 2831 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2903 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 485: - #line 1748 "dhcp6_parser.yy" // lalr1.cc:859 + case 482: + #line 1688 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); } -#line 2837 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2909 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 486: - #line 1749 "dhcp6_parser.yy" // lalr1.cc:859 + case 483: + #line 1689 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); } -#line 2843 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2915 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 487: - #line 1752 "dhcp6_parser.yy" // lalr1.cc:859 + case 484: + #line 1692 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NCR_FORMAT); } -#line 2851 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2923 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 488: - #line 1754 "dhcp6_parser.yy" // lalr1.cc:859 + case 485: + #line 1694 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ncr-format", json); ctx.leave(); } -#line 2861 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2933 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 489: - #line 1760 "dhcp6_parser.yy" // lalr1.cc:859 + case 486: + #line 1700 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("always-include-fqdn", b); } -#line 2870 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2942 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 490: - #line 1765 "dhcp6_parser.yy" // lalr1.cc:859 + case 487: + #line 1705 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("override-no-update", b); } -#line 2879 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2951 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 491: - #line 1770 "dhcp6_parser.yy" // lalr1.cc:859 + case 488: + #line 1710 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("override-client-update", b); } -#line 2888 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2960 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 492: - #line 1775 "dhcp6_parser.yy" // lalr1.cc:859 + case 489: + #line 1715 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.REPLACE_CLIENT_NAME); } -#line 2896 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2968 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 493: - #line 1777 "dhcp6_parser.yy" // lalr1.cc:859 + case 490: + #line 1717 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 2905 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2977 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 494: - #line 1783 "dhcp6_parser.yy" // lalr1.cc:859 + case 491: + #line 1723 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location))); } -#line 2913 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2985 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 495: - #line 1786 "dhcp6_parser.yy" // lalr1.cc:859 + case 492: + #line 1726 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location))); } -#line 2921 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2993 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 496: - #line 1789 "dhcp6_parser.yy" // lalr1.cc:859 + case 493: + #line 1729 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location))); } -#line 2929 "dhcp6_parser.cc" // lalr1.cc:859 +#line 3001 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 497: - #line 1792 "dhcp6_parser.yy" // lalr1.cc:859 + case 494: + #line 1732 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location))); } -#line 2937 "dhcp6_parser.cc" // lalr1.cc:859 +#line 3009 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 498: - #line 1795 "dhcp6_parser.yy" // lalr1.cc:859 + case 495: + #line 1735 "dhcp6_parser.yy" // lalr1.cc:859 { error(yystack_[0].location, "boolean values for the replace-client-name are " "no longer supported"); } -#line 2946 "dhcp6_parser.cc" // lalr1.cc:859 +#line 3018 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 499: - #line 1801 "dhcp6_parser.yy" // lalr1.cc:859 + case 496: + #line 1741 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2954 "dhcp6_parser.cc" // lalr1.cc:859 +#line 3026 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 500: - #line 1803 "dhcp6_parser.yy" // lalr1.cc:859 + case 497: + #line 1743 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("generated-prefix", s); ctx.leave(); } -#line 2964 "dhcp6_parser.cc" // lalr1.cc:859 +#line 3036 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 501: - #line 1811 "dhcp6_parser.yy" // lalr1.cc:859 + case 498: + #line 1751 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2972 "dhcp6_parser.cc" // lalr1.cc:859 +#line 3044 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 502: - #line 1813 "dhcp6_parser.yy" // lalr1.cc:859 + case 499: + #line 1753 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("Dhcp4", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 2981 "dhcp6_parser.cc" // lalr1.cc:859 +#line 3053 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 503: - #line 1818 "dhcp6_parser.yy" // lalr1.cc:859 + case 500: + #line 1758 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2989 "dhcp6_parser.cc" // lalr1.cc:859 +#line 3061 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 504: - #line 1820 "dhcp6_parser.yy" // lalr1.cc:859 + case 501: + #line 1760 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 2998 "dhcp6_parser.cc" // lalr1.cc:859 +#line 3070 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 505: - #line 1825 "dhcp6_parser.yy" // lalr1.cc:859 + case 502: + #line 1765 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 3006 "dhcp6_parser.cc" // lalr1.cc:859 +#line 3078 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 506: - #line 1827 "dhcp6_parser.yy" // lalr1.cc:859 + case 503: + #line 1767 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("Control-agent", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 3015 "dhcp6_parser.cc" // lalr1.cc:859 +#line 3087 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 507: - #line 1838 "dhcp6_parser.yy" // lalr1.cc:859 + case 504: + #line 1778 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("Logging", m); ctx.stack_.push_back(m); ctx.enter(ctx.LOGGING); } -#line 3026 "dhcp6_parser.cc" // lalr1.cc:859 +#line 3098 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 508: - #line 1843 "dhcp6_parser.yy" // lalr1.cc:859 + case 505: + #line 1783 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 3035 "dhcp6_parser.cc" // lalr1.cc:859 +#line 3107 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 512: - #line 1860 "dhcp6_parser.yy" // lalr1.cc:859 + case 509: + #line 1800 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("loggers", l); ctx.stack_.push_back(l); ctx.enter(ctx.LOGGERS); } -#line 3046 "dhcp6_parser.cc" // lalr1.cc:859 +#line 3118 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 513: - #line 1865 "dhcp6_parser.yy" // lalr1.cc:859 + case 510: + #line 1805 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 3055 "dhcp6_parser.cc" // lalr1.cc:859 +#line 3127 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 516: - #line 1877 "dhcp6_parser.yy" // lalr1.cc:859 + case 513: + #line 1817 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(l); ctx.stack_.push_back(l); } -#line 3065 "dhcp6_parser.cc" // lalr1.cc:859 +#line 3137 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 517: - #line 1881 "dhcp6_parser.yy" // lalr1.cc:859 + case 514: + #line 1821 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); } -#line 3073 "dhcp6_parser.cc" // lalr1.cc:859 +#line 3145 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 525: - #line 1896 "dhcp6_parser.yy" // lalr1.cc:859 + case 522: + #line 1836 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("debuglevel", dl); } -#line 3082 "dhcp6_parser.cc" // lalr1.cc:859 +#line 3154 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 526: - #line 1901 "dhcp6_parser.yy" // lalr1.cc:859 + case 523: + #line 1841 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 3090 "dhcp6_parser.cc" // lalr1.cc:859 +#line 3162 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 527: - #line 1903 "dhcp6_parser.yy" // lalr1.cc:859 + case 524: + #line 1843 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("severity", sev); ctx.leave(); } -#line 3100 "dhcp6_parser.cc" // lalr1.cc:859 +#line 3172 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 528: - #line 1909 "dhcp6_parser.yy" // lalr1.cc:859 + case 525: + #line 1849 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("output_options", l); ctx.stack_.push_back(l); ctx.enter(ctx.OUTPUT_OPTIONS); } -#line 3111 "dhcp6_parser.cc" // lalr1.cc:859 +#line 3183 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 529: - #line 1914 "dhcp6_parser.yy" // lalr1.cc:859 + case 526: + #line 1854 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 3120 "dhcp6_parser.cc" // lalr1.cc:859 +#line 3192 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 532: - #line 1923 "dhcp6_parser.yy" // lalr1.cc:859 + case 529: + #line 1863 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3130 "dhcp6_parser.cc" // lalr1.cc:859 +#line 3202 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 533: - #line 1927 "dhcp6_parser.yy" // lalr1.cc:859 + case 530: + #line 1867 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); } -#line 3138 "dhcp6_parser.cc" // lalr1.cc:859 +#line 3210 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 540: - #line 1941 "dhcp6_parser.yy" // lalr1.cc:859 + case 537: + #line 1881 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 3146 "dhcp6_parser.cc" // lalr1.cc:859 +#line 3218 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 541: - #line 1943 "dhcp6_parser.yy" // lalr1.cc:859 + case 538: + #line 1883 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("output", sev); ctx.leave(); } -#line 3156 "dhcp6_parser.cc" // lalr1.cc:859 +#line 3228 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 542: - #line 1949 "dhcp6_parser.yy" // lalr1.cc:859 + case 539: + #line 1889 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr flush(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("flush", flush); } -#line 3165 "dhcp6_parser.cc" // lalr1.cc:859 +#line 3237 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 543: - #line 1954 "dhcp6_parser.yy" // lalr1.cc:859 + case 540: + #line 1894 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr maxsize(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("maxsize", maxsize); } -#line 3174 "dhcp6_parser.cc" // lalr1.cc:859 +#line 3246 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 544: - #line 1959 "dhcp6_parser.yy" // lalr1.cc:859 + case 541: + #line 1899 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr maxver(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("maxver", maxver); @@@ -4117,59 -4042,59 +4106,59 @@@ { 0, 2, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, - 0, 3, 0, 3, 0, 3, 1, 1, 1, 1, - 1, 1, 1, 1, 0, 4, 1, 0, 1, 3, - 5, 0, 4, 0, 1, 1, 3, 0, 4, 0, - 1, 1, 3, 2, 0, 4, 1, 3, 1, 1, - 1, 1, 1, 1, 0, 6, 0, 4, 1, 3, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 3, 0, 3, 0, 3, 0, 3, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 4, 1, 0, + 1, 3, 5, 0, 4, 0, 1, 1, 3, 0, + 4, 0, 1, 1, 3, 2, 0, 4, 1, 3, + 1, 1, 1, 1, 1, 1, 0, 6, 0, 4, + 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 3, 3, 3, 3, 3, 0, 6, 0, - 4, 1, 3, 1, 1, 0, 4, 3, 0, 6, + 1, 1, 1, 1, 3, 3, 3, 3, 3, 0, + 6, 0, 4, 1, 3, 1, 1, 0, 4, 3, + 0, 6, 0, 6, 1, 3, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 4, 1, 1, 1, 1, 0, 4, 0, 4, 0, + 4, 3, 0, 4, 3, 3, 3, 3, 0, 4, + 0, 4, 0, 6, 1, 3, 1, 1, 1, 1, + 0, 6, 1, 3, 1, 1, 1, 1, 1, 0, + 6, 0, 6, 0, 1, 1, 3, 0, 4, 0, + 4, 1, 3, 1, 1, 1, 0, 4, 0, 4, 0, 6, 1, 3, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 0, 4, 1, - 1, 1, 1, 0, 4, 0, 4, 0, 4, 3, - 0, 4, 3, 3, 3, 3, 0, 4, 0, 4, - 0, 6, 1, 3, 1, 1, 1, 1, 0, 6, - 1, 3, 1, 1, 1, 1, 1, 0, 6, 0, - 6, 0, 1, 1, 3, 0, 4, 0, 4, 1, - 3, 1, 1, 1, 0, 4, 0, 4, 0, 6, - 1, 3, 1, 1, 1, 1, 1, 1, 3, 3, - 3, 3, 3, 3, 0, 6, 0, 1, 1, 3, - 0, 4, 0, 4, 1, 3, 1, 1, 1, 1, + 3, 3, 3, 3, 3, 3, 0, 6, 0, 1, + 1, 3, 0, 4, 0, 4, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 4, 0, 4, 0, - 4, 0, 4, 0, 4, 1, 1, 1, 3, 3, - 0, 6, 0, 4, 0, 1, 1, 3, 0, 4, - 0, 4, 0, 1, 1, 3, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 3, 1, 0, 4, 0, - 4, 0, 4, 1, 0, 4, 3, 0, 6, 0, - 1, 1, 3, 0, 4, 0, 4, 0, 1, 1, - 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 4, 1, 1, 3, 3, 0, 6, 0, 1, 1, - 3, 0, 4, 0, 4, 1, 3, 1, 1, 1, - 1, 0, 4, 0, 4, 0, 6, 0, 1, 1, - 3, 0, 4, 0, 4, 1, 3, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 4, 3, 0, 4, + 1, 1, 1, 1, 0, 4, 0, 4, 0, 4, + 0, 4, 0, 4, 1, 1, 1, 3, 3, 0, + 6, 0, 1, 1, 3, 0, 4, 0, 4, 0, + 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 3, 1, 0, 4, 0, 4, 0, 4, + 1, 0, 4, 3, 0, 6, 0, 1, 1, 3, + 0, 4, 0, 4, 0, 1, 1, 3, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 4, 1, 1, 3, 3, 0, 6, 0, 1, 1, 3, 0, 4, - 0, 4, 0, 1, 1, 3, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 4, 0, 4, 0, - 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, - 6, 0, 4, 0, 6, 1, 3, 0, 4, 0, - 1, 1, 3, 1, 1, 1, 1, 1, 0, 4, - 0, 6, 1, 3, 1, 1, 1, 1, 1, 1, - 1, 0, 4, 1, 1, 1, 3, 0, 4, 3, - 3, 3, 0, 6, 1, 3, 1, 1, 0, 4, - 0, 4, 0, 6, 0, 4, 1, 3, 1, 1, + 0, 4, 1, 3, 1, 1, 1, 1, 0, 4, + 0, 4, 0, 6, 0, 1, 1, 3, 0, 4, + 0, 4, 1, 3, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 4, 3, 0, 4, 3, 3, 0, + 6, 0, 1, 1, 3, 0, 4, 0, 4, 0, + 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 4, 0, 4, 0, 4, 0, 4, + 0, 4, 0, 4, 0, 4, 0, 6, 0, 4, + 0, 6, 1, 3, 0, 4, 0, 1, 1, 3, + 1, 1, 1, 1, 1, 0, 4, 0, 6, 1, + 3, 1, 1, 1, 1, 1, 1, 1, 0, 4, + 1, 1, 1, 3, 0, 4, 3, 3, 3, 0, + 6, 1, 3, 1, 1, 0, 4, 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, 3, 0, 4, 1, 1, 1, 1, 1, 0, - 4, 0, 4, 0, 4, 0, 4, 0, 6, 1, - 3, 1, 0, 6, 1, 3, 0, 4, 1, 3, - 1, 1, 1, 1, 1, 3, 0, 4, 0, 6, - 1, 3, 0, 4, 1, 3, 1, 1, 1, 1, - 0, 4, 3, 3, 3 + 3, 0, 4, 0, 4, 3, 0, 4, 3, 3, + 0, 4, 1, 1, 0, 4, 3, 3, 3, 0, + 4, 1, 1, 1, 1, 1, 0, 4, 0, 4, + 0, 4, 0, 4, 0, 6, 1, 3, 1, 0, + 6, 1, 3, 0, 4, 1, 3, 1, 1, 1, + 1, 1, 3, 0, 4, 0, 6, 1, 3, 0, + 4, 1, 3, 1, 1, 1, 1, 0, 4, 3, + 3, 3 }; diff --cc src/bin/dhcp6/dhcp6_parser.h index 0484482f99,af0fc18596..c601b009aa --- a/src/bin/dhcp6/dhcp6_parser.h +++ b/src/bin/dhcp6/dhcp6_parser.h @@@ -1425,12 -1420,12 +1425,12 @@@ namespace isc { namespace dhcp enum { yyeof_ = 0, - yylast_ = 803, ///< Last index in yytable_. - yynnts_ = 338, ///< Number of nonterminal symbols. - yyfinal_ = 28, ///< Termination state number. + yylast_ = 805, ///< Last index in yytable_. + yynnts_ = 335, ///< Number of nonterminal symbols. + yyfinal_ = 26, ///< Termination state number. yyterror_ = 1, yyerrcode_ = 256, - yyntokens_ = 153 ///< Number of tokens. + yyntokens_ = 154 ///< Number of tokens. };