{
switch (that.type_get ())
{
- case 62: // option_repr_type
+ case 63: // option_repr_type
value.YY_MOVE_OR_COPY< TokenOption::RepresentationType > (YY_MOVE (that.value));
break;
- case 66: // pkt4_field
+ case 67: // pkt4_field
value.YY_MOVE_OR_COPY< TokenPkt4::FieldType > (YY_MOVE (that.value));
break;
- case 67: // pkt6_field
+ case 68: // pkt6_field
value.YY_MOVE_OR_COPY< TokenPkt6::FieldType > (YY_MOVE (that.value));
break;
- case 64: // pkt_metadata
+ case 65: // pkt_metadata
value.YY_MOVE_OR_COPY< TokenPkt::MetadataType > (YY_MOVE (that.value));
break;
- case 68: // relay6_field
+ case 69: // relay6_field
value.YY_MOVE_OR_COPY< TokenRelay6Field::FieldType > (YY_MOVE (that.value));
break;
- case 63: // nest_level
+ case 64: // nest_level
value.YY_MOVE_OR_COPY< int8_t > (YY_MOVE (that.value));
break;
break;
case 61: // option_code
+ case 62: // sub_option_code
value.YY_MOVE_OR_COPY< uint16_t > (YY_MOVE (that.value));
break;
case 60: // integer_expr
- case 65: // enterprise_id
+ case 66: // enterprise_id
value.YY_MOVE_OR_COPY< uint32_t > (YY_MOVE (that.value));
break;
{
switch (that.type_get ())
{
- case 62: // option_repr_type
+ case 63: // option_repr_type
value.move< TokenOption::RepresentationType > (YY_MOVE (that.value));
break;
- case 66: // pkt4_field
+ case 67: // pkt4_field
value.move< TokenPkt4::FieldType > (YY_MOVE (that.value));
break;
- case 67: // pkt6_field
+ case 68: // pkt6_field
value.move< TokenPkt6::FieldType > (YY_MOVE (that.value));
break;
- case 64: // pkt_metadata
+ case 65: // pkt_metadata
value.move< TokenPkt::MetadataType > (YY_MOVE (that.value));
break;
- case 68: // relay6_field
+ case 69: // relay6_field
value.move< TokenRelay6Field::FieldType > (YY_MOVE (that.value));
break;
- case 63: // nest_level
+ case 64: // nest_level
value.move< int8_t > (YY_MOVE (that.value));
break;
break;
case 61: // option_code
+ case 62: // sub_option_code
value.move< uint16_t > (YY_MOVE (that.value));
break;
case 60: // integer_expr
- case 65: // enterprise_id
+ case 66: // enterprise_id
value.move< uint32_t > (YY_MOVE (that.value));
break;
state = that.state;
switch (that.type_get ())
{
- case 62: // option_repr_type
+ case 63: // option_repr_type
value.move< TokenOption::RepresentationType > (that.value);
break;
- case 66: // pkt4_field
+ case 67: // pkt4_field
value.move< TokenPkt4::FieldType > (that.value);
break;
- case 67: // pkt6_field
+ case 68: // pkt6_field
value.move< TokenPkt6::FieldType > (that.value);
break;
- case 64: // pkt_metadata
+ case 65: // pkt_metadata
value.move< TokenPkt::MetadataType > (that.value);
break;
- case 68: // relay6_field
+ case 69: // relay6_field
value.move< TokenRelay6Field::FieldType > (that.value);
break;
- case 63: // nest_level
+ case 64: // nest_level
value.move< int8_t > (that.value);
break;
break;
case 61: // option_code
+ case 62: // sub_option_code
value.move< uint16_t > (that.value);
break;
case 60: // integer_expr
- case 65: // enterprise_id
+ case 66: // enterprise_id
value.move< uint32_t > (that.value);
break;
switch (yytype)
{
case 50: // "constant string"
-#line 111 "parser.yy"
+#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < std::string > (); }
-#line 450 "parser.cc"
+#line 453 "parser.cc"
break;
case 51: // "integer"
-#line 111 "parser.yy"
+#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < std::string > (); }
-#line 456 "parser.cc"
+#line 459 "parser.cc"
break;
case 52: // "constant hexstring"
-#line 111 "parser.yy"
+#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < std::string > (); }
-#line 462 "parser.cc"
+#line 465 "parser.cc"
break;
case 53: // "option name"
-#line 111 "parser.yy"
+#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < std::string > (); }
-#line 468 "parser.cc"
+#line 471 "parser.cc"
break;
case 54: // "ip address"
-#line 111 "parser.yy"
+#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < std::string > (); }
-#line 474 "parser.cc"
+#line 477 "parser.cc"
break;
case 60: // integer_expr
-#line 111 "parser.yy"
+#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < uint32_t > (); }
-#line 480 "parser.cc"
+#line 483 "parser.cc"
break;
case 61: // option_code
-#line 111 "parser.yy"
+#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < uint16_t > (); }
-#line 486 "parser.cc"
+#line 489 "parser.cc"
break;
- case 62: // option_repr_type
-#line 111 "parser.yy"
+ case 62: // sub_option_code
+#line 112 "parser.yy"
+ { yyoutput << yysym.value.template as < uint16_t > (); }
+#line 495 "parser.cc"
+ break;
+
+ case 63: // option_repr_type
+#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < TokenOption::RepresentationType > (); }
-#line 492 "parser.cc"
+#line 501 "parser.cc"
break;
- case 63: // nest_level
-#line 111 "parser.yy"
+ case 64: // nest_level
+#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < int8_t > (); }
-#line 498 "parser.cc"
+#line 507 "parser.cc"
break;
- case 64: // pkt_metadata
-#line 111 "parser.yy"
+ case 65: // pkt_metadata
+#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < TokenPkt::MetadataType > (); }
-#line 504 "parser.cc"
+#line 513 "parser.cc"
break;
- case 65: // enterprise_id
-#line 111 "parser.yy"
+ case 66: // enterprise_id
+#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < uint32_t > (); }
-#line 510 "parser.cc"
+#line 519 "parser.cc"
break;
- case 66: // pkt4_field
-#line 111 "parser.yy"
+ case 67: // pkt4_field
+#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < TokenPkt4::FieldType > (); }
-#line 516 "parser.cc"
+#line 525 "parser.cc"
break;
- case 67: // pkt6_field
-#line 111 "parser.yy"
+ case 68: // pkt6_field
+#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < TokenPkt6::FieldType > (); }
-#line 522 "parser.cc"
+#line 531 "parser.cc"
break;
- case 68: // relay6_field
-#line 111 "parser.yy"
+ case 69: // relay6_field
+#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < TokenRelay6Field::FieldType > (); }
-#line 528 "parser.cc"
+#line 537 "parser.cc"
break;
default:
when using variants. */
switch (yyr1_[yyn])
{
- case 62: // option_repr_type
+ case 63: // option_repr_type
yylhs.value.emplace< TokenOption::RepresentationType > ();
break;
- case 66: // pkt4_field
+ case 67: // pkt4_field
yylhs.value.emplace< TokenPkt4::FieldType > ();
break;
- case 67: // pkt6_field
+ case 68: // pkt6_field
yylhs.value.emplace< TokenPkt6::FieldType > ();
break;
- case 64: // pkt_metadata
+ case 65: // pkt_metadata
yylhs.value.emplace< TokenPkt::MetadataType > ();
break;
- case 68: // relay6_field
+ case 69: // relay6_field
yylhs.value.emplace< TokenRelay6Field::FieldType > ();
break;
- case 63: // nest_level
+ case 64: // nest_level
yylhs.value.emplace< int8_t > ();
break;
break;
case 61: // option_code
+ case 62: // sub_option_code
yylhs.value.emplace< uint16_t > ();
break;
case 60: // integer_expr
- case 65: // enterprise_id
+ case 66: // enterprise_id
yylhs.value.emplace< uint32_t > ();
break;
switch (yyn)
{
case 6:
-#line 131 "parser.yy"
+#line 132 "parser.yy"
{
TokenPtr neg(new TokenNot());
ctx.expression.push_back(neg);
}
-#line 812 "parser.cc"
+#line 822 "parser.cc"
break;
case 7:
-#line 136 "parser.yy"
+#line 137 "parser.yy"
{
TokenPtr neg(new TokenAnd());
ctx.expression.push_back(neg);
}
-#line 821 "parser.cc"
+#line 831 "parser.cc"
break;
case 8:
-#line 141 "parser.yy"
+#line 142 "parser.yy"
{
TokenPtr neg(new TokenOr());
ctx.expression.push_back(neg);
}
-#line 830 "parser.cc"
+#line 840 "parser.cc"
break;
case 9:
-#line 146 "parser.yy"
+#line 147 "parser.yy"
{
TokenPtr eq(new TokenEqual());
ctx.expression.push_back(eq);
}
-#line 839 "parser.cc"
+#line 849 "parser.cc"
break;
case 10:
-#line 151 "parser.yy"
+#line 152 "parser.yy"
{
TokenPtr opt(new TokenOption(yystack_[3].value.as < uint16_t > (), TokenOption::EXISTS));
ctx.expression.push_back(opt);
}
-#line 848 "parser.cc"
+#line 858 "parser.cc"
break;
case 11:
-#line 156 "parser.yy"
+#line 157 "parser.yy"
{
TokenPtr opt(new TokenSubOption(yystack_[8].value.as < uint16_t > (), yystack_[3].value.as < uint16_t > (), TokenOption::EXISTS));
ctx.expression.push_back(opt);
}
-#line 857 "parser.cc"
+#line 867 "parser.cc"
break;
case 12:
-#line 161 "parser.yy"
+#line 162 "parser.yy"
{
switch (ctx.getUniverse()) {
case Option::V4:
error(yystack_[5].location, "relay4 can only be used in DHCPv4.");
}
}
-#line 881 "parser.cc"
+#line 891 "parser.cc"
break;
case 13:
-#line 181 "parser.yy"
+#line 182 "parser.yy"
{
switch (ctx.getUniverse()) {
case Option::V6:
error(yystack_[10].location, "relay6 can only be used in DHCPv6.");
}
}
-#line 899 "parser.cc"
+#line 909 "parser.cc"
break;
case 14:
-#line 195 "parser.yy"
+#line 196 "parser.yy"
{
// Expression: vendor-class[1234].exists
//
TokenPtr exist(new TokenVendorClass(ctx.getUniverse(), yystack_[3].value.as < uint32_t > (), TokenOption::EXISTS));
ctx.expression.push_back(exist);
}
-#line 912 "parser.cc"
+#line 922 "parser.cc"
break;
case 15:
-#line 204 "parser.yy"
+#line 205 "parser.yy"
{
// Expression: vendor[1234].exists
//
TokenPtr exist(new TokenVendor(ctx.getUniverse(), yystack_[3].value.as < uint32_t > (), TokenOption::EXISTS));
ctx.expression.push_back(exist);
}
-#line 925 "parser.cc"
+#line 935 "parser.cc"
break;
case 16:
-#line 213 "parser.yy"
+#line 214 "parser.yy"
{
// Expression vendor[1234].option[123].exists
//
TokenPtr exist(new TokenVendor(ctx.getUniverse(), yystack_[8].value.as < uint32_t > (), TokenOption::EXISTS, yystack_[3].value.as < uint16_t > ()));
ctx.expression.push_back(exist);
}
-#line 939 "parser.cc"
+#line 949 "parser.cc"
break;
case 17:
-#line 223 "parser.yy"
+#line 224 "parser.yy"
{
// Expression member('foo')
//
TokenPtr member(new TokenMember(cc));
ctx.expression.push_back(member);
}
-#line 958 "parser.cc"
+#line 968 "parser.cc"
break;
case 18:
-#line 240 "parser.yy"
+#line 241 "parser.yy"
{
TokenPtr str(new TokenString(yystack_[0].value.as < std::string > ()));
ctx.expression.push_back(str);
}
-#line 967 "parser.cc"
+#line 977 "parser.cc"
break;
case 19:
-#line 245 "parser.yy"
+#line 246 "parser.yy"
{
TokenPtr hex(new TokenHexString(yystack_[0].value.as < std::string > ()));
ctx.expression.push_back(hex);
}
-#line 976 "parser.cc"
+#line 986 "parser.cc"
break;
case 20:
-#line 250 "parser.yy"
+#line 251 "parser.yy"
{
TokenPtr ip(new TokenIpAddress(yystack_[0].value.as < std::string > ()));
ctx.expression.push_back(ip);
}
-#line 985 "parser.cc"
+#line 995 "parser.cc"
break;
case 21:
-#line 255 "parser.yy"
+#line 256 "parser.yy"
{
TokenPtr opt(new TokenOption(yystack_[3].value.as < uint16_t > (), yystack_[0].value.as < TokenOption::RepresentationType > ()));
ctx.expression.push_back(opt);
}
-#line 994 "parser.cc"
+#line 1004 "parser.cc"
break;
case 22:
-#line 260 "parser.yy"
+#line 261 "parser.yy"
{
TokenPtr opt(new TokenSubOption(yystack_[8].value.as < uint16_t > (), yystack_[3].value.as < uint16_t > (), yystack_[0].value.as < TokenOption::RepresentationType > ()));
ctx.expression.push_back(opt);
}
-#line 1003 "parser.cc"
+#line 1013 "parser.cc"
break;
case 23:
-#line 265 "parser.yy"
+#line 266 "parser.yy"
{
switch (ctx.getUniverse()) {
case Option::V4:
error(yystack_[5].location, "relay4 can only be used in DHCPv4.");
}
}
-#line 1027 "parser.cc"
+#line 1037 "parser.cc"
break;
case 24:
-#line 286 "parser.yy"
+#line 287 "parser.yy"
{
switch (ctx.getUniverse()) {
case Option::V6:
error(yystack_[10].location, "relay6 can only be used in DHCPv6.");
}
}
-#line 1045 "parser.cc"
+#line 1055 "parser.cc"
break;
case 25:
-#line 301 "parser.yy"
+#line 302 "parser.yy"
{
TokenPtr pkt_metadata(new TokenPkt(yystack_[0].value.as < TokenPkt::MetadataType > ()));
ctx.expression.push_back(pkt_metadata);
}
-#line 1054 "parser.cc"
+#line 1064 "parser.cc"
break;
case 26:
-#line 306 "parser.yy"
+#line 307 "parser.yy"
{
switch (ctx.getUniverse()) {
case Option::V4:
error(yystack_[2].location, "pkt4 can only be used in DHCPv4.");
}
}
-#line 1072 "parser.cc"
+#line 1082 "parser.cc"
break;
case 27:
-#line 320 "parser.yy"
+#line 321 "parser.yy"
{
switch (ctx.getUniverse()) {
case Option::V6:
error(yystack_[2].location, "pkt6 can only be used in DHCPv6.");
}
}
-#line 1090 "parser.cc"
+#line 1100 "parser.cc"
break;
case 28:
-#line 334 "parser.yy"
+#line 335 "parser.yy"
{
switch (ctx.getUniverse()) {
case Option::V6:
error(yystack_[5].location, "relay6 can only be used in DHCPv6.");
}
}
-#line 1108 "parser.cc"
+#line 1118 "parser.cc"
break;
case 29:
-#line 349 "parser.yy"
+#line 350 "parser.yy"
{
TokenPtr sub(new TokenSubstring());
ctx.expression.push_back(sub);
}
-#line 1117 "parser.cc"
+#line 1127 "parser.cc"
break;
case 30:
-#line 354 "parser.yy"
+#line 355 "parser.yy"
{
TokenPtr conc(new TokenConcat());
ctx.expression.push_back(conc);
}
-#line 1126 "parser.cc"
+#line 1136 "parser.cc"
break;
case 31:
-#line 359 "parser.yy"
+#line 360 "parser.yy"
{
TokenPtr cond(new TokenIfElse());
ctx.expression.push_back(cond);
}
-#line 1135 "parser.cc"
+#line 1145 "parser.cc"
break;
case 32:
-#line 364 "parser.yy"
+#line 365 "parser.yy"
{
TokenPtr tohex(new TokenToHexString());
ctx.expression.push_back(tohex);
}
-#line 1144 "parser.cc"
+#line 1154 "parser.cc"
break;
case 33:
-#line 369 "parser.yy"
+#line 370 "parser.yy"
{
// expression: vendor.enterprise
//
TokenPtr vendor(new TokenVendor(ctx.getUniverse(), 0, TokenVendor::ENTERPRISE_ID));
ctx.expression.push_back(vendor);
}
-#line 1157 "parser.cc"
+#line 1167 "parser.cc"
break;
case 34:
-#line 378 "parser.yy"
+#line 379 "parser.yy"
{
// expression: vendor-class.enterprise
//
TokenVendor::ENTERPRISE_ID));
ctx.expression.push_back(vendor);
}
-#line 1171 "parser.cc"
+#line 1181 "parser.cc"
break;
case 35:
-#line 388 "parser.yy"
+#line 389 "parser.yy"
{
// This token will search for vendor option with
// specified enterprise-id. If found, will search
TokenPtr opt(new TokenVendor(ctx.getUniverse(), yystack_[8].value.as < uint32_t > (), yystack_[0].value.as < TokenOption::RepresentationType > (), yystack_[3].value.as < uint16_t > ()));
ctx.expression.push_back(opt);
}
-#line 1184 "parser.cc"
+#line 1194 "parser.cc"
break;
case 36:
-#line 397 "parser.yy"
+#line 398 "parser.yy"
{
// expression: vendor-class[1234].data
//
TokenVendor::DATA, 0));
ctx.expression.push_back(vendor_class);
}
-#line 1201 "parser.cc"
+#line 1211 "parser.cc"
break;
case 37:
-#line 410 "parser.yy"
+#line 411 "parser.yy"
{
// expression: vendor-class[1234].data[5]
//
TokenVendor::DATA, index));
ctx.expression.push_back(vendor_class);
}
-#line 1218 "parser.cc"
+#line 1228 "parser.cc"
break;
case 38:
-#line 423 "parser.yy"
+#line 424 "parser.yy"
{
TokenPtr integer(new TokenInteger(yystack_[0].value.as < uint32_t > ()));
ctx.expression.push_back(integer);
}
-#line 1227 "parser.cc"
+#line 1237 "parser.cc"
break;
case 39:
-#line 430 "parser.yy"
+#line 431 "parser.yy"
{
yylhs.value.as < uint32_t > () = ctx.convertUint32(yystack_[0].value.as < std::string > (), yystack_[0].location);
}
-#line 1235 "parser.cc"
+#line 1245 "parser.cc"
break;
case 40:
-#line 436 "parser.yy"
+#line 437 "parser.yy"
{
yylhs.value.as < uint16_t > () = ctx.convertOptionCode(yystack_[0].value.as < std::string > (), yystack_[0].location);
}
-#line 1243 "parser.cc"
+#line 1253 "parser.cc"
break;
case 41:
-#line 440 "parser.yy"
+#line 441 "parser.yy"
{
yylhs.value.as < uint16_t > () = ctx.convertOptionName(yystack_[0].value.as < std::string > (), yystack_[0].location);
}
-#line 1251 "parser.cc"
+#line 1261 "parser.cc"
break;
case 42:
-#line 446 "parser.yy"
+#line 447 "parser.yy"
+ {
+ yylhs.value.as < uint16_t > () = ctx.convertOptionCode(yystack_[0].value.as < std::string > (), yystack_[0].location);
+ }
+#line 1269 "parser.cc"
+ break;
+
+ case 43:
+#line 453 "parser.yy"
{
yylhs.value.as < TokenOption::RepresentationType > () = TokenOption::TEXTUAL;
}
-#line 1259 "parser.cc"
+#line 1277 "parser.cc"
break;
- case 43:
-#line 450 "parser.yy"
+ case 44:
+#line 457 "parser.yy"
{
yylhs.value.as < TokenOption::RepresentationType > () = TokenOption::HEXADECIMAL;
}
-#line 1267 "parser.cc"
+#line 1285 "parser.cc"
break;
- case 44:
-#line 456 "parser.yy"
+ case 45:
+#line 463 "parser.yy"
{
yylhs.value.as < int8_t > () = ctx.convertNestLevelNumber(yystack_[0].value.as < std::string > (), yystack_[0].location);
}
-#line 1275 "parser.cc"
+#line 1293 "parser.cc"
break;
- case 45:
-#line 465 "parser.yy"
+ case 46:
+#line 472 "parser.yy"
{
yylhs.value.as < TokenPkt::MetadataType > () = TokenPkt::IFACE;
}
-#line 1283 "parser.cc"
+#line 1301 "parser.cc"
break;
- case 46:
-#line 469 "parser.yy"
+ case 47:
+#line 476 "parser.yy"
{
yylhs.value.as < TokenPkt::MetadataType > () = TokenPkt::SRC;
}
-#line 1291 "parser.cc"
+#line 1309 "parser.cc"
break;
- case 47:
-#line 473 "parser.yy"
+ case 48:
+#line 480 "parser.yy"
{
yylhs.value.as < TokenPkt::MetadataType > () = TokenPkt::DST;
}
-#line 1299 "parser.cc"
+#line 1317 "parser.cc"
break;
- case 48:
-#line 477 "parser.yy"
+ case 49:
+#line 484 "parser.yy"
{
yylhs.value.as < TokenPkt::MetadataType > () = TokenPkt::LEN;
}
-#line 1307 "parser.cc"
+#line 1325 "parser.cc"
break;
- case 49:
-#line 483 "parser.yy"
+ case 50:
+#line 490 "parser.yy"
{
yylhs.value.as < uint32_t > () = ctx.convertUint32(yystack_[0].value.as < std::string > (), yystack_[0].location);
}
-#line 1315 "parser.cc"
+#line 1333 "parser.cc"
break;
- case 50:
-#line 487 "parser.yy"
+ case 51:
+#line 494 "parser.yy"
{
yylhs.value.as < uint32_t > () = 0;
}
-#line 1323 "parser.cc"
+#line 1341 "parser.cc"
break;
- case 51:
-#line 493 "parser.yy"
+ case 52:
+#line 500 "parser.yy"
{
yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::CHADDR;
}
-#line 1331 "parser.cc"
+#line 1349 "parser.cc"
break;
- case 52:
-#line 497 "parser.yy"
+ case 53:
+#line 504 "parser.yy"
{
yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::HLEN;
}
-#line 1339 "parser.cc"
+#line 1357 "parser.cc"
break;
- case 53:
-#line 501 "parser.yy"
+ case 54:
+#line 508 "parser.yy"
{
yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::HTYPE;
}
-#line 1347 "parser.cc"
+#line 1365 "parser.cc"
break;
- case 54:
-#line 505 "parser.yy"
+ case 55:
+#line 512 "parser.yy"
{
yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::CIADDR;
}
-#line 1355 "parser.cc"
+#line 1373 "parser.cc"
break;
- case 55:
-#line 509 "parser.yy"
+ case 56:
+#line 516 "parser.yy"
{
yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::GIADDR;
}
-#line 1363 "parser.cc"
+#line 1381 "parser.cc"
break;
- case 56:
-#line 513 "parser.yy"
+ case 57:
+#line 520 "parser.yy"
{
yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::YIADDR;
}
-#line 1371 "parser.cc"
+#line 1389 "parser.cc"
break;
- case 57:
-#line 517 "parser.yy"
+ case 58:
+#line 524 "parser.yy"
{
yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::SIADDR;
}
-#line 1379 "parser.cc"
+#line 1397 "parser.cc"
break;
- case 58:
-#line 521 "parser.yy"
+ case 59:
+#line 528 "parser.yy"
{
yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::MSGTYPE;
}
-#line 1387 "parser.cc"
+#line 1405 "parser.cc"
break;
- case 59:
-#line 525 "parser.yy"
+ case 60:
+#line 532 "parser.yy"
{
yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::TRANSID;
}
-#line 1395 "parser.cc"
+#line 1413 "parser.cc"
break;
- case 60:
-#line 531 "parser.yy"
+ case 61:
+#line 538 "parser.yy"
{
yylhs.value.as < TokenPkt6::FieldType > () = TokenPkt6::MSGTYPE;
}
-#line 1403 "parser.cc"
+#line 1421 "parser.cc"
break;
- case 61:
-#line 535 "parser.yy"
+ case 62:
+#line 542 "parser.yy"
{
yylhs.value.as < TokenPkt6::FieldType > () = TokenPkt6::TRANSID;
}
-#line 1411 "parser.cc"
+#line 1429 "parser.cc"
break;
- case 62:
-#line 541 "parser.yy"
+ case 63:
+#line 548 "parser.yy"
{
yylhs.value.as < TokenRelay6Field::FieldType > () = TokenRelay6Field::PEERADDR;
}
-#line 1419 "parser.cc"
+#line 1437 "parser.cc"
break;
- case 63:
-#line 545 "parser.yy"
+ case 64:
+#line 552 "parser.yy"
{
yylhs.value.as < TokenRelay6Field::FieldType > () = TokenRelay6Field::LINKADDR;
}
-#line 1427 "parser.cc"
+#line 1445 "parser.cc"
break;
- case 64:
-#line 551 "parser.yy"
+ case 65:
+#line 558 "parser.yy"
{
TokenPtr str(new TokenString(yystack_[0].value.as < std::string > ()));
ctx.expression.push_back(str);
}
-#line 1436 "parser.cc"
+#line 1454 "parser.cc"
break;
- case 65:
-#line 558 "parser.yy"
+ case 66:
+#line 565 "parser.yy"
{
TokenPtr str(new TokenString(yystack_[0].value.as < std::string > ()));
ctx.expression.push_back(str);
}
-#line 1445 "parser.cc"
+#line 1463 "parser.cc"
break;
- case 66:
-#line 563 "parser.yy"
+ case 67:
+#line 570 "parser.yy"
{
TokenPtr str(new TokenString("all"));
ctx.expression.push_back(str);
}
-#line 1454 "parser.cc"
+#line 1472 "parser.cc"
break;
-#line 1458 "parser.cc"
+#line 1476 "parser.cc"
default:
break;
}
- const signed char EvalParser::yypact_ninf_ = -118;
+ const signed char EvalParser::yypact_ninf_ = -120;
const signed char EvalParser::yytable_ninf_ = -1;
const short
EvalParser::yypact_[] =
{
- 25, 50, -6, 14, 50, 50, 8, 20, 32, 39,
- 41, 108, 96, 145, 146, 147, 134, 35, 88, -118,
- -118, -118, -118, -118, 85, 9, -118, 137, 138, 139,
- 124, 125, -118, -118, 79, -118, 92, 92, 104, 106,
- 73, 82, -6, -6, 50, -6, 80, 27, 110, 27,
- 111, 50, 50, -6, 92, 92, 104, 27, 27, -118,
- -118, -118, 143, 144, -118, 148, 157, -118, -118, -118,
- -118, -118, -118, -118, -118, -118, -118, -118, -118, -118,
- -118, -118, 126, 127, 0, 129, -118, -118, -118, -118,
- -118, 150, -118, 151, -118, -118, 162, -118, 153, 154,
- 155, 156, 158, 159, 160, 161, -118, 122, -6, -6,
- -6, 163, 164, 165, 166, 167, 168, 169, 7, 98,
- 66, -118, 152, 171, 170, 175, -7, 2, 45, 128,
- 68, 141, 180, 176, -118, -118, -118, -118, -118, -118,
- 177, -118, -118, -118, -27, -118, -6, -118, -118, 178,
- 179, -118, 181, 182, 183, 92, 92, -118, -118, 186,
- 191, 149, 92, 92, 92, 92, 185, 187, -118, -118,
- 188, 189, 192, 193, 194, 190, 195, -118, 196, 197,
- 198, 199, 112, 115, 118, 128, 128, 128, -118, -118,
- -118, -118, -118, -118
+ -24, 80, 116, 21, 80, 80, -5, 24, 46, 84,
+ 85, 88, 118, 119, 125, 126, 121, 20, 67, -120,
+ -120, -120, -120, -120, 91, 127, -120, 124, 128, 129,
+ 71, 78, -120, -120, 56, -120, 43, 82, 89, 86,
+ 34, -15, 116, 116, 80, 116, 74, -9, 94, -9,
+ 99, 80, 80, 116, 43, 82, 89, -9, -9, -120,
+ -120, -120, 131, -120, 132, -120, 133, 147, -120, -120,
+ -120, -120, -120, -120, -120, -120, -120, -120, -120, -120,
+ -120, -120, -120, 122, 135, -3, 136, -120, -120, -120,
+ -120, -120, 141, -120, 145, -120, -120, 146, -120, 148,
+ 149, 153, 157, 158, 159, 160, 161, -120, 111, 116,
+ 116, 116, 162, 163, 164, 165, 166, 167, 168, 10,
+ 52, 35, -120, 139, 182, 151, 184, -12, 0, 13,
+ 81, 41, 117, 180, 175, -120, -120, -120, -120, -120,
+ -120, 176, -120, -120, -120, -28, -120, 116, -120, -120,
+ 177, 178, -120, 179, 181, 183, 82, 82, -120, -120,
+ 191, 193, 150, 82, 82, 82, 82, 186, 187, -120,
+ -120, 188, 189, 190, 192, 194, 195, 196, -120, 197,
+ 198, 199, 200, 55, 58, 61, 81, 81, 81, -120,
+ -120, -120, -120, -120, -120
};
const unsigned char
0, 0, 3, 1, 0, 6, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
- 40, 41, 0, 0, 44, 0, 0, 45, 46, 47,
- 48, 25, 51, 52, 53, 54, 55, 56, 57, 58,
- 59, 26, 0, 0, 0, 0, 60, 61, 27, 50,
- 49, 0, 34, 0, 33, 7, 8, 9, 0, 0,
- 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
+ 40, 41, 0, 42, 0, 45, 0, 0, 46, 47,
+ 48, 49, 25, 52, 53, 54, 55, 56, 57, 58,
+ 59, 60, 26, 0, 0, 0, 0, 61, 62, 27,
+ 51, 50, 0, 34, 0, 33, 7, 8, 9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 17, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 64, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 42, 43, 10, 21, 12, 23,
- 0, 62, 63, 28, 0, 30, 0, 32, 14, 36,
- 0, 15, 0, 0, 0, 0, 0, 66, 65, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 29, 31,
- 0, 0, 0, 0, 0, 0, 0, 37, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 11, 22,
- 13, 24, 16, 35
+ 0, 0, 65, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 43, 44, 10, 21, 12,
+ 23, 0, 63, 64, 28, 0, 30, 0, 32, 14,
+ 36, 0, 15, 0, 0, 0, 0, 0, 67, 66,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 29,
+ 31, 0, 0, 0, 0, 0, 0, 0, 37, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 11,
+ 22, 13, 24, 16, 35
};
const short
EvalParser::yypgoto_[] =
{
- -118, -118, -118, 5, -2, -118, -36, -117, 172, -118,
- -28, -118, -118, -118, -118, -118
+ -120, -120, -120, 1, -2, -120, 155, -53, -119, 143,
+ -120, -11, -120, -120, -120, -120, -120
};
const short
EvalParser::yydefgoto_[] =
{
- -1, 3, 23, 24, 25, 26, 62, 137, 65, 71,
- 91, 81, 88, 143, 122, 159
+ -1, 3, 23, 24, 25, 26, 62, 64, 138, 66,
+ 72, 92, 82, 89, 144, 123, 160
};
const unsigned char
EvalParser::yytable_[] =
{
- 32, 63, 139, 27, 28, 29, 51, 52, 157, 34,
- 35, 150, 139, 148, 33, 10, 133, 53, 98, 99,
- 11, 93, 151, 36, 158, 134, 135, 136, 12, 101,
- 102, 13, 14, 15, 16, 37, 109, 30, 31, 149,
- 82, 83, 39, 85, 19, 20, 21, 38, 22, 84,
- 47, 97, 48, 4, 152, 5, 95, 96, 40, 6,
- 7, 8, 9, 134, 135, 189, 191, 193, 189, 191,
- 193, 10, 89, 1, 2, 140, 11, 153, 90, 141,
- 142, 141, 142, 59, 12, 51, 52, 13, 14, 15,
- 16, 51, 52, 17, 18, 67, 68, 69, 70, 42,
- 19, 20, 21, 49, 22, 50, 123, 124, 125, 72,
- 73, 74, 75, 76, 77, 78, 134, 135, 138, 166,
- 167, 86, 87, 79, 80, 41, 171, 172, 173, 174,
- 134, 135, 188, 134, 135, 190, 134, 135, 192, 57,
- 58, 48, 50, 60, 160, 61, 134, 135, 43, 44,
- 45, 46, 54, 55, 56, 64, 66, 92, 94, 103,
- 104, 106, 107, 108, 105, 110, 111, 112, 51, 113,
- 114, 115, 116, 121, 117, 145, 118, 119, 120, 147,
- 126, 127, 128, 129, 130, 131, 132, 149, 144, 154,
- 168, 155, 156, 161, 162, 169, 163, 164, 165, 0,
- 170, 175, 0, 176, 177, 178, 146, 182, 179, 180,
- 181, 0, 183, 184, 185, 186, 187, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 100
+ 32, 140, 100, 51, 52, 34, 35, 158, 149, 151,
+ 36, 140, 73, 74, 75, 76, 77, 78, 79, 134,
+ 152, 33, 153, 159, 1, 2, 80, 81, 135, 136,
+ 137, 135, 136, 110, 150, 47, 90, 48, 94, 37,
+ 83, 84, 91, 86, 141, 85, 102, 103, 142, 143,
+ 154, 98, 96, 97, 142, 143, 68, 69, 70, 71,
+ 59, 38, 51, 52, 190, 192, 194, 190, 192, 194,
+ 135, 136, 139, 135, 136, 189, 135, 136, 191, 135,
+ 136, 193, 49, 4, 50, 5, 57, 39, 48, 6,
+ 7, 8, 9, 58, 60, 50, 61, 51, 52, 135,
+ 136, 10, 40, 167, 168, 41, 11, 124, 125, 126,
+ 172, 173, 174, 175, 12, 87, 88, 13, 14, 15,
+ 16, 42, 43, 17, 18, 27, 28, 29, 44, 45,
+ 19, 20, 21, 63, 22, 53, 67, 10, 46, 54,
+ 65, 93, 11, 55, 56, 161, 95, 104, 105, 106,
+ 12, 107, 51, 13, 14, 15, 16, 112, 108, 30,
+ 31, 113, 122, 150, 114, 115, 19, 20, 21, 116,
+ 22, 109, 111, 117, 118, 145, 119, 120, 121, 127,
+ 128, 129, 130, 131, 132, 133, 146, 147, 148, 155,
+ 156, 157, 162, 163, 164, 169, 165, 170, 166, 101,
+ 0, 171, 176, 177, 178, 179, 180, 0, 181, 99,
+ 182, 0, 183, 184, 185, 186, 187, 188
};
const short
EvalParser::yycheck_[] =
{
- 2, 37, 119, 9, 10, 11, 6, 7, 35, 4,
- 5, 9, 129, 20, 0, 21, 9, 8, 54, 55,
- 26, 49, 20, 15, 51, 18, 19, 20, 34, 57,
- 58, 37, 38, 39, 40, 15, 36, 43, 44, 46,
- 42, 43, 3, 45, 50, 51, 52, 15, 54, 44,
- 15, 53, 17, 3, 9, 5, 51, 52, 17, 9,
- 10, 11, 12, 18, 19, 182, 183, 184, 185, 186,
- 187, 21, 45, 48, 49, 9, 26, 9, 51, 13,
- 14, 13, 14, 4, 34, 6, 7, 37, 38, 39,
- 40, 6, 7, 43, 44, 22, 23, 24, 25, 3,
- 50, 51, 52, 15, 54, 17, 108, 109, 110, 27,
- 28, 29, 30, 31, 32, 33, 18, 19, 20, 155,
- 156, 41, 42, 41, 42, 17, 162, 163, 164, 165,
- 18, 19, 20, 18, 19, 20, 18, 19, 20, 15,
- 15, 17, 17, 51, 146, 53, 18, 19, 3, 3,
- 3, 17, 15, 15, 15, 51, 50, 47, 47, 16,
- 16, 4, 36, 36, 16, 36, 16, 16, 6, 16,
- 16, 16, 16, 51, 16, 4, 17, 17, 17, 4,
- 17, 17, 17, 17, 17, 17, 17, 46, 36, 9,
- 4, 15, 15, 15, 15, 4, 15, 15, 15, -1,
- 51, 16, -1, 16, 16, 16, 36, 17, 16, 16,
- 16, -1, 17, 17, 17, 17, 17, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 56
+ 2, 120, 55, 6, 7, 4, 5, 35, 20, 9,
+ 15, 130, 27, 28, 29, 30, 31, 32, 33, 9,
+ 20, 0, 9, 51, 48, 49, 41, 42, 18, 19,
+ 20, 18, 19, 36, 46, 15, 45, 17, 49, 15,
+ 42, 43, 51, 45, 9, 44, 57, 58, 13, 14,
+ 9, 53, 51, 52, 13, 14, 22, 23, 24, 25,
+ 4, 15, 6, 7, 183, 184, 185, 186, 187, 188,
+ 18, 19, 20, 18, 19, 20, 18, 19, 20, 18,
+ 19, 20, 15, 3, 17, 5, 15, 3, 17, 9,
+ 10, 11, 12, 15, 51, 17, 53, 6, 7, 18,
+ 19, 21, 17, 156, 157, 17, 26, 109, 110, 111,
+ 163, 164, 165, 166, 34, 41, 42, 37, 38, 39,
+ 40, 3, 3, 43, 44, 9, 10, 11, 3, 3,
+ 50, 51, 52, 51, 54, 8, 50, 21, 17, 15,
+ 51, 47, 26, 15, 15, 147, 47, 16, 16, 16,
+ 34, 4, 6, 37, 38, 39, 40, 16, 36, 43,
+ 44, 16, 51, 46, 16, 16, 50, 51, 52, 16,
+ 54, 36, 36, 16, 16, 36, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 4, 36, 4, 9,
+ 15, 15, 15, 15, 15, 4, 15, 4, 15, 56,
+ -1, 51, 16, 16, 16, 16, 16, -1, 16, 54,
+ 16, -1, 17, 17, 17, 17, 17, 17
};
const unsigned char
43, 44, 59, 0, 58, 58, 15, 15, 15, 3,
17, 17, 3, 3, 3, 3, 17, 15, 17, 15,
17, 6, 7, 8, 15, 15, 15, 15, 15, 4,
- 51, 53, 61, 61, 51, 63, 50, 22, 23, 24,
- 25, 64, 27, 28, 29, 30, 31, 32, 33, 41,
- 42, 66, 59, 59, 58, 59, 41, 42, 67, 45,
- 51, 65, 47, 65, 47, 58, 58, 59, 61, 61,
- 63, 65, 65, 16, 16, 16, 4, 36, 36, 36,
- 36, 16, 16, 16, 16, 16, 16, 16, 17, 17,
- 17, 51, 69, 59, 59, 59, 17, 17, 17, 17,
- 17, 17, 17, 9, 18, 19, 20, 62, 20, 62,
- 9, 13, 14, 68, 36, 4, 36, 4, 20, 46,
- 9, 20, 9, 9, 9, 15, 15, 35, 51, 70,
- 59, 15, 15, 15, 15, 15, 61, 61, 4, 4,
- 51, 61, 61, 61, 61, 16, 16, 16, 16, 16,
- 16, 16, 17, 17, 17, 17, 17, 17, 20, 62,
- 20, 62, 20, 62
+ 51, 53, 61, 51, 62, 51, 64, 50, 22, 23,
+ 24, 25, 65, 27, 28, 29, 30, 31, 32, 33,
+ 41, 42, 67, 59, 59, 58, 59, 41, 42, 68,
+ 45, 51, 66, 47, 66, 47, 58, 58, 59, 61,
+ 62, 64, 66, 66, 16, 16, 16, 4, 36, 36,
+ 36, 36, 16, 16, 16, 16, 16, 16, 16, 17,
+ 17, 17, 51, 70, 59, 59, 59, 17, 17, 17,
+ 17, 17, 17, 17, 9, 18, 19, 20, 63, 20,
+ 63, 9, 13, 14, 69, 36, 4, 36, 4, 20,
+ 46, 9, 20, 9, 9, 9, 15, 15, 35, 51,
+ 71, 59, 15, 15, 15, 15, 15, 62, 62, 4,
+ 4, 51, 62, 62, 62, 62, 16, 16, 16, 16,
+ 16, 16, 16, 17, 17, 17, 17, 17, 17, 20,
+ 63, 20, 63, 20, 63
};
const unsigned char
58, 58, 58, 58, 58, 58, 58, 58, 59, 59,
59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
59, 59, 59, 59, 59, 59, 59, 59, 59, 60,
- 61, 61, 62, 62, 63, 64, 64, 64, 64, 65,
- 65, 66, 66, 66, 66, 66, 66, 66, 66, 66,
- 67, 67, 68, 68, 69, 70, 70
+ 61, 61, 62, 63, 63, 64, 65, 65, 65, 65,
+ 66, 66, 67, 67, 67, 67, 67, 67, 67, 67,
+ 67, 68, 68, 69, 69, 70, 71, 71
};
const unsigned char
6, 8, 6, 3, 3, 11, 6, 9, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1
+ 1, 1, 1, 1, 1, 1, 1, 1
};
"\"top-level bool\"", "\"top-level string\"", "\"constant string\"",
"\"integer\"", "\"constant hexstring\"", "\"option name\"",
"\"ip address\"", "$accept", "start", "expression", "bool_expr",
- "string_expr", "integer_expr", "option_code", "option_repr_type",
- "nest_level", "pkt_metadata", "enterprise_id", "pkt4_field",
- "pkt6_field", "relay6_field", "start_expr", "length_expr", YY_NULLPTR
+ "string_expr", "integer_expr", "option_code", "sub_option_code",
+ "option_repr_type", "nest_level", "pkt_metadata", "enterprise_id",
+ "pkt4_field", "pkt6_field", "relay6_field", "start_expr", "length_expr", YY_NULLPTR
};
#if EVALDEBUG
const unsigned short
EvalParser::yyrline_[] =
{
- 0, 120, 120, 121, 126, 129, 130, 135, 140, 145,
- 150, 155, 160, 180, 194, 203, 212, 222, 239, 244,
- 249, 254, 259, 264, 285, 300, 305, 319, 333, 348,
- 353, 358, 363, 368, 377, 387, 396, 409, 422, 429,
- 435, 439, 445, 449, 455, 464, 468, 472, 476, 482,
- 486, 492, 496, 500, 504, 508, 512, 516, 520, 524,
- 530, 534, 540, 544, 550, 557, 562
+ 0, 121, 121, 122, 127, 130, 131, 136, 141, 146,
+ 151, 156, 161, 181, 195, 204, 213, 223, 240, 245,
+ 250, 255, 260, 265, 286, 301, 306, 320, 334, 349,
+ 354, 359, 364, 369, 378, 388, 397, 410, 423, 430,
+ 436, 440, 446, 452, 456, 462, 471, 475, 479, 483,
+ 489, 493, 499, 503, 507, 511, 515, 519, 523, 527,
+ 531, 537, 541, 547, 551, 557, 564, 569
};
// Print the state stack on the debug stream.
#line 14 "parser.yy"
} } // isc::eval
-#line 1971 "parser.cc"
+#line 1987 "parser.cc"
-#line 569 "parser.yy"
+#line 576 "parser.yy"
void
isc::eval::EvalParser::error(const location_type& loc,