return (isc::config::createAnswer(1, err.str()));
}
+ // Configure packet queue
try {
- // @todo Consider making this a function and consider whether
- // it should check for old gc != null and new gc null before
- // calling setPacketQueueControl(). Or if we should even
- // call it when it's null?
- // Still grappling with what to if there is a custom queue
- // loaded. Could have a flag in the control that means
- // using custom impl, in which case we don't make the call
- // at all. ... I dunno
ConstQueueControlPtr qc;
qc = CfgMgr::instance().getStagingCfg()->getQueueControlInfo();
- IfaceMgr::instance().setPacketQueueControl4(qc);
- qc = IfaceMgr::instance().getPacketQueueControl4();
- std::cout << "TKM using capacity: " << qc->getCapacity() << std::endl;
+ if (!qc) {
+ // For right now, we are maually constructing the default
+ // This probably needs to be built into the PQM?
+ QueueControl default_qc;
+ default_qc.setQueueType("kea-ring4");
+ default_qc.setCapacity(500);
+ PacketQueueMgr4::instance().createPacketQueue(default_qc);
+ } else {
+ PacketQueueMgr4::instance().createPacketQueue(*qc);
+ }
+
+ LOG_DEBUG(dhcp4_logger, DBG_DHCP4_BASIC, DHCP4_CONFIG_PACKET_QUEUE)
+ .arg(PacketQueueMgr4::instance().getPacketQueue()->getInfoStr());
+
} catch (const std::exception& ex) {
err << "Error setting packet queue controls after server reconfiguration: "
<< ex.what();
/* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\
(yy_c_buf_p) = yy_cp;
/* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
-#define YY_NUM_RULES 176
-#define YY_END_OF_BUFFER 177
+#define YY_NUM_RULES 177
+#define YY_END_OF_BUFFER 178
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static const flex_int16_t yy_accept[1474] =
+static const flex_int16_t yy_accept[1479] =
{ 0,
- 169, 169, 0, 0, 0, 0, 0, 0, 0, 0,
- 177, 175, 10, 11, 175, 1, 169, 166, 169, 169,
- 175, 168, 167, 175, 175, 175, 175, 175, 162, 163,
- 175, 175, 175, 164, 165, 5, 5, 5, 175, 175,
- 175, 10, 11, 0, 0, 158, 0, 0, 0, 0,
+ 170, 170, 0, 0, 0, 0, 0, 0, 0, 0,
+ 178, 176, 10, 11, 176, 1, 170, 167, 170, 170,
+ 176, 169, 168, 176, 176, 176, 176, 176, 163, 164,
+ 176, 176, 176, 165, 166, 5, 5, 5, 176, 176,
+ 176, 10, 11, 0, 0, 159, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 169, 169, 0, 168, 169, 3, 2, 6, 0, 169,
+ 170, 170, 0, 169, 170, 3, 2, 6, 0, 170,
0, 0, 0, 0, 0, 0, 4, 0, 0, 9,
- 0, 159, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 161, 0, 0, 0,
+ 0, 160, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 162, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 8, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 160, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 161, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 67, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 174, 172,
- 0, 171, 170, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 175, 173,
+ 0, 172, 171, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 139, 0, 138, 0, 0, 73, 0,
+ 0, 0, 0, 140, 0, 139, 0, 0, 73, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
34, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 17, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 18, 0, 0, 0, 0, 173,
+ 0, 0, 0, 0, 18, 0, 0, 0, 0, 174,
- 170, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 140, 0, 0, 142, 0, 0, 0, 0, 0,
+ 171, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 141, 0, 0, 143, 0, 0, 0, 0, 0,
0, 0, 0, 74, 0, 0, 0, 0, 0, 0,
59, 0, 0, 0, 0, 0, 91, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 37, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 88, 30,
0, 0, 35, 0, 0, 0, 0, 0, 0, 0,
- 0, 12, 147, 0, 144, 0, 143, 0, 0, 0,
+ 0, 12, 148, 0, 145, 0, 144, 0, 0, 0,
101, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 81, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 97, 0, 0, 0, 0, 0, 0, 0, 7,
- 0, 0, 145, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 146, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 72, 0, 0, 0, 0, 0, 0, 0,
79, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 65, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 76,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,
+ 0, 0, 0, 0, 0, 0, 0, 0, 65, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 95, 0, 0, 0,
+ 76, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 64, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 95, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 107, 77, 0, 0, 0, 0, 82, 31, 0,
+ 0, 0, 107, 77, 0, 0, 0, 0, 82, 31,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 39, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 39, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 54, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 148, 0, 0,
- 0, 0, 0, 120, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 69, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 96, 0,
- 0, 0, 0, 0, 42, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 54,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 149,
+ 0, 0, 0, 0, 0, 121, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 36, 0, 0, 0, 0, 29, 0,
+ 69, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 96, 0, 0, 0, 0, 0, 42, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 84, 0, 0, 0,
+ 0, 0, 0, 0, 0, 36, 0, 0, 0, 0,
+ 0, 29, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 93, 0, 0, 0,
- 0, 0, 0, 0, 0, 121, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 66, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 93,
+ 0, 0, 0, 0, 0, 0, 0, 0, 122, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 23, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 126, 0, 0,
- 124, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 152, 0, 0, 0, 0, 0, 0,
-
- 94, 0, 0, 0, 0, 0, 0, 98, 80, 0,
+ 0, 0, 0, 66, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 92, 22, 0, 103, 0, 0, 0,
- 0, 0, 0, 0, 0, 130, 0, 0, 0, 0,
- 56, 0, 0, 0, 0, 0, 106, 33, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 23,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 53, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,
+ 0, 127, 0, 0, 125, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 153, 0, 0,
+
+ 0, 0, 0, 0, 94, 0, 0, 0, 0, 0,
+ 0, 98, 80, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 92, 22, 0,
+ 103, 0, 0, 0, 0, 0, 0, 0, 0, 131,
+ 0, 0, 0, 0, 56, 0, 0, 0, 0, 0,
+ 106, 33, 0, 0, 120, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 53,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 100, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 60, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 100, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 155, 0, 57, 71, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 50, 0, 0, 0, 0,
- 0, 0, 0, 127, 0, 125, 0, 118, 117, 0,
- 46, 0, 21, 0, 0, 0, 0, 0, 141, 0,
- 0, 87, 0, 0, 0, 0, 0, 0, 0, 0,
- 115, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 104, 15, 0, 40, 0, 0, 0, 0,
- 0, 129, 0, 0, 0, 0, 0, 0, 0, 51,
- 0, 0, 99, 0, 0, 0, 0, 90, 0, 0,
-
- 0, 0, 0, 0, 63, 0, 150, 0, 149, 0,
+ 0, 0, 0, 0, 0, 0, 156, 0, 57, 71,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 50, 0, 0, 0, 0, 0, 0, 0, 128, 0,
+ 126, 0, 118, 117, 0, 46, 0, 21, 0, 0,
+ 0, 0, 0, 142, 0, 0, 87, 0, 0, 0,
+ 0, 0, 0, 0, 0, 115, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 104, 15, 0,
+ 40, 0, 0, 0, 0, 0, 130, 0, 0, 0,
+ 0, 0, 0, 0, 51, 0, 0, 99, 0, 0,
+
+ 0, 0, 90, 0, 0, 0, 0, 0, 0, 63,
+ 0, 151, 0, 150, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 119, 0, 0, 0, 0, 0, 0,
- 0, 14, 0, 0, 45, 0, 0, 0, 0, 0,
- 157, 85, 27, 0, 0, 47, 116, 0, 0, 153,
- 122, 0, 0, 0, 0, 0, 0, 0, 0, 25,
- 0, 0, 24, 0, 128, 0, 0, 0, 0, 0,
- 78, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- 0, 0, 0, 0, 49, 0, 0, 0, 0, 41,
- 0, 0, 0, 0, 0, 0, 105, 0, 0, 0,
- 26, 0, 154, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 44, 0, 0, 20, 156, 55,
- 0, 151, 146, 0, 28, 0, 16, 0, 0, 135,
- 0, 0, 0, 0, 0, 0, 113, 0, 89, 0,
- 0, 0, 0, 0, 0, 0, 0, 68, 0, 0,
- 0, 0, 0, 0, 0, 0, 136, 13, 0, 0,
- 0, 0, 0, 123, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 112, 0, 19, 0,
-
- 132, 0, 0, 0, 0, 0, 131, 0, 0, 0,
- 111, 0, 0, 48, 0, 0, 43, 134, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 119, 0,
+ 0, 0, 0, 0, 0, 0, 14, 0, 0, 45,
+ 0, 0, 0, 0, 0, 158, 85, 27, 0, 0,
+ 47, 116, 0, 0, 154, 123, 0, 0, 0, 0,
+ 0, 0, 0, 0, 25, 0, 0, 24, 0, 129,
+ 0, 0, 0, 0, 0, 78, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 49,
+ 0, 0, 0, 0, 41, 0, 0, 0, 0, 0,
+ 0, 105, 0, 0, 0, 26, 0, 155, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 44,
+ 0, 0, 20, 157, 55, 0, 152, 147, 0, 28,
+ 0, 16, 0, 0, 136, 0, 0, 0, 0, 0,
+ 0, 113, 0, 89, 0, 0, 0, 0, 0, 0,
+ 0, 0, 68, 0, 0, 0, 0, 0, 0, 0,
+ 0, 137, 13, 0, 0, 0, 0, 0, 124, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 112, 0, 19, 0, 133, 0, 0, 0, 0,
+ 0, 132, 0, 0, 0, 111, 0, 0, 48, 0,
+ 0, 43, 135, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 133, 0, 86, 0, 0, 0, 0,
- 0, 0, 109, 114, 52, 0, 0, 0, 0, 108,
- 0, 0, 137, 0, 0, 0, 0, 0, 75, 0,
- 0, 110, 0
+ 0, 0, 0, 0, 0, 0, 0, 0, 134, 0,
+ 86, 0, 0, 0, 0, 0, 0, 109, 114, 52,
+ 0, 0, 0, 0, 108, 0, 0, 138, 0, 0,
+ 0, 0, 0, 75, 0, 0, 110, 0
} ;
static const YY_CHAR yy_ec[256] =
3
} ;
-static const flex_int16_t yy_base[1486] =
+static const flex_int16_t yy_base[1491] =
{ 0,
0, 70, 19, 29, 41, 49, 52, 58, 87, 95,
- 1836, 1837, 32, 1832, 141, 0, 201, 1837, 206, 88,
- 11, 213, 1837, 1814, 114, 25, 2, 6, 1837, 1837,
- 73, 11, 17, 1837, 1837, 1837, 104, 1820, 1775, 0,
- 1812, 107, 1827, 217, 247, 1837, 1771, 185, 1770, 1776,
- 93, 58, 1768, 91, 211, 195, 14, 273, 195, 1767,
- 193, 195, 217, 294, 76, 68, 231, 1776, 268, 221,
- 296, 282, 275, 1759, 188, 304, 312, 304, 1778, 0,
- 356, 362, 374, 380, 383, 1837, 0, 1837, 386, 397,
- 212, 295, 216, 298, 314, 293, 1837, 1775, 1814, 1837,
-
- 326, 1837, 373, 1803, 316, 1761, 1771, 336, 202, 1766,
- 319, 361, 339, 374, 239, 1809, 0, 424, 369, 1753,
- 1755, 1753, 1750, 1758, 369, 1754, 1743, 1744, 76, 1760,
- 1743, 1752, 1752, 371, 1743, 379, 1744, 1742, 396, 1788,
- 1792, 1734, 1785, 1727, 1750, 1747, 1747, 1741, 356, 1734,
- 1727, 1732, 1726, 392, 1737, 1730, 1721, 1720, 1734, 380,
- 1720, 394, 416, 1714, 421, 405, 425, 1735, 1732, 1733,
- 1731, 442, 1713, 1715, 443, 1707, 1724, 1716, 0, 429,
- 424, 396, 443, 455, 460, 1715, 1837, 0, 1758, 467,
- 1705, 1708, 453, 459, 1716, 469, 1759, 470, 1758, 462,
-
- 1757, 1837, 506, 1756, 479, 1717, 1697, 1715, 1712, 1709,
- 1708, 1699, 449, 1748, 1742, 1708, 1687, 1695, 1690, 1704,
- 1700, 1688, 1700, 1700, 1691, 1675, 1679, 1692, 1694, 1691,
- 1683, 1673, 1691, 1837, 1686, 1689, 1670, 1669, 1719, 1668,
- 1678, 1681, 482, 1677, 1665, 1676, 1712, 1659, 1715, 1652,
- 1667, 498, 1657, 1673, 1654, 1653, 1659, 1650, 1649, 1656,
- 1646, 1703, 1661, 1660, 1654, 77, 1661, 1656, 1648, 1638,
- 1653, 1652, 1647, 1651, 1632, 1648, 1634, 1640, 1647, 1635,
- 224, 1628, 1642, 1683, 1644, 348, 1635, 478, 1837, 1837,
- 488, 1837, 1837, 1622, 0, 445, 457, 1624, 518, 489,
-
- 1678, 1631, 502, 1837, 1676, 1837, 1670, 550, 1837, 499,
- 1612, 1668, 1632, 1613, 1619, 1669, 1626, 1621, 1624, 480,
- 1837, 1622, 1664, 1619, 1616, 534, 1622, 1660, 1654, 1609,
- 1604, 1601, 1650, 1609, 1598, 1614, 1646, 1594, 550, 1608,
- 1593, 1606, 1593, 1603, 1598, 1605, 1600, 1596, 479, 1594,
- 1597, 1592, 1588, 1636, 499, 1630, 1837, 1629, 1581, 1580,
- 1579, 1572, 1574, 1578, 1567, 1580, 498, 1625, 1580, 1577,
- 1580, 1837, 1579, 1568, 1568, 1580, 520, 1555, 1556, 1577,
- 530, 1559, 1608, 1555, 1569, 1568, 1554, 1566, 1565, 1564,
- 1563, 505, 1604, 1603, 1837, 1547, 1546, 573, 1559, 1837,
-
- 1837, 1558, 0, 1547, 1539, 546, 1544, 1595, 1594, 1552,
- 1592, 1837, 1540, 1590, 1837, 556, 602, 549, 1589, 1545,
- 1541, 1540, 1528, 1837, 1533, 1539, 1542, 1541, 1528, 1527,
- 1837, 1529, 1526, 219, 1524, 1526, 1837, 1534, 1531, 1516,
- 1529, 1524, 579, 1531, 1519, 1512, 1561, 1837, 1510, 1526,
- 1558, 1521, 1518, 1519, 1521, 1553, 1506, 1501, 1500, 1549,
- 1495, 1510, 1488, 1495, 1500, 1548, 1837, 1495, 1491, 1489,
- 1498, 1492, 1499, 1483, 1483, 1493, 1496, 1485, 1480, 1837,
- 1535, 1837, 1479, 1490, 1527, 1474, 1479, 1488, 1482, 1476,
- 1485, 1525, 1519, 1483, 1466, 1466, 1461, 1481, 1456, 1462,
-
- 1461, 1469, 1473, 1456, 1512, 1454, 1468, 1457, 1837, 1837,
- 1457, 1455, 1837, 1466, 1500, 1462, 0, 1446, 1463, 1501,
- 1451, 1837, 1837, 1448, 1837, 1454, 1837, 556, 558, 594,
- 1837, 1451, 1439, 1438, 1489, 1436, 1487, 1434, 1433, 1440,
- 1433, 1445, 1444, 1444, 1432, 1473, 1440, 1432, 1475, 1421,
- 1437, 1436, 1837, 1421, 1418, 1474, 1431, 1423, 1429, 1420,
- 1428, 1413, 1429, 1411, 1425, 522, 1407, 1401, 1406, 1421,
- 1418, 1419, 1416, 1457, 1414, 1837, 1400, 1402, 1411, 1409,
- 1446, 1445, 1398, 586, 1407, 1390, 1391, 1388, 1837, 1402,
- 1381, 1402, 1399, 1391, 1434, 1388, 1395, 1431, 1837, 1378,
-
- 1392, 1376, 1390, 1393, 1374, 1424, 1423, 1422, 1369, 1420,
- 1419, 1837, 14, 1381, 1381, 1379, 1362, 1367, 1369, 1837,
- 1375, 1365, 1837, 1410, 1358, 1413, 558, 584, 558, 1363,
- 1349, 1405, 584, 1409, 555, 1403, 1402, 1401, 1355, 1345,
- 1398, 1351, 1361, 1395, 1358, 1352, 1339, 1347, 1390, 1394,
- 1351, 1350, 1837, 1351, 1344, 1333, 1346, 1349, 1344, 1345,
- 1342, 1341, 1337, 1343, 1338, 1379, 1378, 1328, 1318, 548,
- 1375, 1837, 1374, 1323, 1315, 1316, 1365, 1328, 1315, 1326,
- 1837, 1314, 1323, 1322, 1322, 1362, 1305, 1314, 1307, 1318,
- 1295, 1299, 1350, 1314, 1296, 1306, 1346, 1345, 1344, 1291,
-
- 1342, 1306, 579, 582, 1283, 1293, 580, 1837, 1343, 1289,
- 1299, 1299, 1282, 1287, 1291, 1281, 1293, 1296, 1333, 1837,
- 1327, 601, 2, 20, 90, 319, 312, 444, 499, 1837,
- 512, 545, 541, 563, 577, 596, 594, 585, 590, 599,
- 595, 649, 608, 598, 614, 604, 1837, 614, 614, 607,
- 619, 617, 660, 604, 606, 621, 608, 666, 625, 611,
- 614, 1837, 1837, 624, 629, 634, 622, 1837, 1837, 636,
- 623, 617, 622, 640, 627, 675, 628, 678, 629, 685,
- 1837, 632, 636, 637, 632, 690, 645, 635, 636, 632,
- 645, 656, 640, 658, 653, 654, 656, 649, 651, 652,
-
- 652, 654, 669, 708, 667, 672, 649, 1837, 674, 664,
- 709, 669, 659, 674, 675, 662, 676, 1837, 695, 703,
- 683, 673, 720, 1837, 685, 689, 728, 678, 673, 685,
- 680, 681, 677, 686, 681, 737, 696, 687, 1837, 689,
- 700, 685, 701, 695, 741, 709, 694, 695, 1837, 711,
- 714, 697, 754, 699, 1837, 716, 719, 699, 717, 755,
- 715, 711, 706, 724, 723, 724, 710, 725, 717, 724,
- 714, 732, 717, 1837, 725, 731, 719, 777, 1837, 728,
- 733, 775, 728, 740, 735, 739, 737, 735, 737, 747,
- 790, 736, 736, 793, 739, 751, 1837, 739, 747, 745,
-
- 750, 762, 746, 751, 761, 762, 767, 806, 765, 781,
- 787, 760, 771, 762, 814, 759, 1837, 759, 779, 768,
- 773, 780, 821, 822, 771, 1837, 767, 770, 769, 789,
- 786, 791, 792, 778, 786, 795, 775, 790, 798, 839,
- 1837, 840, 841, 794, 804, 806, 795, 791, 798, 807,
- 850, 799, 797, 799, 816, 855, 807, 806, 812, 810,
- 808, 861, 862, 858, 809, 1837, 823, 816, 807, 826,
- 814, 824, 821, 826, 822, 835, 835, 1837, 819, 820,
- 1837, 821, 879, 820, 839, 840, 838, 823, 844, 843,
- 827, 832, 850, 1837, 840, 873, 864, 836, 895, 858,
-
- 1837, 841, 843, 860, 858, 850, 854, 1837, 1837, 864,
- 899, 848, 901, 850, 908, 853, 864, 856, 862, 858,
- 876, 878, 879, 1837, 1837, 878, 1837, 863, 864, 884,
- 874, 867, 879, 921, 887, 1837, 879, 929, 872, 931,
- 1837, 932, 876, 882, 889, 931, 1837, 1837, 881, 886,
- 884, 898, 903, 886, 943, 902, 903, 904, 942, 896,
- 901, 950, 900, 952, 1837, 901, 954, 955, 897, 957,
- 918, 959, 903, 915, 920, 906, 936, 965, 925, 1837,
- 917, 968, 917, 932, 919, 915, 931, 936, 918, 976,
- 931, 936, 1837, 937, 930, 939, 940, 937, 927, 930,
-
- 930, 935, 988, 989, 934, 991, 988, 931, 946, 939,
- 997, 1837, 953, 1837, 1837, 958, 950, 960, 946, 947,
- 957, 1007, 953, 963, 1011, 1837, 961, 961, 963, 965,
- 1016, 959, 962, 1837, 981, 1837, 965, 1837, 1837, 979,
- 1837, 973, 1837, 1023, 974, 1025, 1026, 1008, 1837, 986,
- 987, 1837, 975, 983, 977, 976, 979, 979, 980, 976,
- 1837, 998, 984, 985, 1000, 1000, 1003, 1003, 1000, 1042,
- 1006, 998, 1837, 1837, 1009, 1837, 1006, 1011, 1012, 1009,
- 1051, 1837, 1002, 1003, 1003, 1009, 1008, 1019, 1063, 1837,
- 1059, 1008, 1837, 1009, 1009, 1011, 1017, 1837, 1019, 1071,
-
- 1022, 1025, 1074, 1037, 1837, 1034, 1837, 1031, 1837, 1054,
- 1074, 1080, 1081, 1082, 1041, 1027, 1085, 1086, 1041, 1035,
- 1089, 1090, 1086, 1051, 1047, 1089, 1039, 1044, 1042, 1099,
- 1057, 1101, 1061, 1103, 1066, 1056, 1050, 1066, 1066, 1110,
- 1054, 1071, 1070, 1837, 1054, 1110, 1111, 1060, 1113, 1078,
- 1079, 1837, 1079, 1066, 1837, 1077, 1124, 1084, 1097, 1084,
- 1837, 1837, 1837, 1072, 1129, 1837, 1837, 1078, 1089, 1837,
- 1837, 1079, 1128, 1073, 1078, 1136, 1086, 1096, 1097, 1837,
- 1140, 1095, 1837, 1142, 1837, 1087, 1102, 1090, 1105, 1109,
- 1837, 1143, 1111, 1104, 1113, 1095, 1102, 1156, 1117, 1116,
-
- 1159, 1160, 1161, 1112, 1837, 1163, 1164, 1111, 1166, 1837,
- 1116, 1168, 1114, 1113, 1171, 1126, 1837, 1168, 1121, 1118,
- 1837, 1132, 1837, 1135, 1178, 1133, 1180, 1141, 1124, 1126,
- 1123, 1139, 1140, 1149, 1837, 1139, 1189, 1837, 1837, 1837,
- 1185, 1837, 1837, 1150, 1837, 1187, 1837, 1141, 1148, 1837,
- 1145, 1150, 1148, 1198, 1199, 1144, 1837, 1159, 1837, 1160,
- 1150, 1162, 1205, 1149, 1157, 1158, 1171, 1837, 1170, 1160,
- 1159, 1173, 1164, 1173, 1175, 1179, 1837, 1837, 1218, 1163,
- 1220, 1180, 1222, 1837, 1218, 1182, 1183, 1170, 1165, 1228,
- 1187, 1188, 1189, 1232, 1191, 1194, 1837, 1235, 1837, 1198,
-
- 1837, 1180, 1238, 1239, 1184, 1201, 1837, 1187, 1187, 1189,
- 1837, 1194, 1204, 1837, 1190, 1202, 1837, 1837, 1207, 1201,
- 1205, 1196, 1248, 1197, 1205, 1214, 1207, 1202, 1217, 1208,
- 1215, 1202, 1217, 1222, 1265, 1224, 1267, 1212, 1228, 1219,
- 1233, 1229, 1222, 1837, 1274, 1837, 1275, 1276, 1233, 1232,
- 1233, 1223, 1837, 1837, 1837, 1281, 1225, 1241, 1284, 1837,
- 1280, 1231, 1837, 1230, 1232, 1243, 1290, 1241, 1837, 1250,
- 1293, 1837, 1837, 1299, 1304, 1309, 1314, 1319, 1324, 1329,
- 1332, 1306, 1311, 1313, 1326
+ 1841, 1842, 32, 1837, 141, 0, 201, 1842, 206, 88,
+ 11, 213, 1842, 1819, 114, 25, 2, 6, 1842, 1842,
+ 73, 11, 17, 1842, 1842, 1842, 104, 1825, 1780, 0,
+ 1817, 107, 1832, 217, 247, 1842, 1776, 185, 1775, 1781,
+ 93, 58, 1773, 91, 211, 195, 14, 273, 195, 1772,
+ 193, 195, 217, 294, 76, 68, 231, 1781, 268, 221,
+ 296, 282, 275, 1764, 188, 304, 312, 304, 1783, 0,
+ 356, 362, 374, 380, 383, 1842, 0, 1842, 386, 397,
+ 212, 295, 216, 298, 314, 293, 1842, 1780, 1819, 1842,
+
+ 326, 1842, 373, 1808, 316, 1766, 1776, 336, 202, 1771,
+ 319, 361, 339, 374, 239, 1814, 0, 424, 369, 1758,
+ 1760, 1758, 1755, 1763, 369, 1759, 1748, 1749, 76, 1765,
+ 1748, 1757, 1757, 371, 1748, 379, 1749, 1747, 396, 1793,
+ 1797, 1739, 1790, 1732, 1755, 1752, 1752, 1746, 356, 1739,
+ 1732, 1737, 1731, 392, 1742, 1735, 1726, 1725, 1739, 380,
+ 1725, 394, 416, 1719, 421, 405, 425, 1740, 1737, 1738,
+ 1736, 442, 1718, 1720, 443, 1712, 1729, 1721, 0, 429,
+ 424, 396, 443, 455, 460, 1720, 1842, 0, 1763, 467,
+ 1710, 1713, 453, 459, 1721, 469, 1764, 470, 1763, 462,
+
+ 1762, 1842, 506, 1761, 479, 1722, 1702, 1720, 1717, 1714,
+ 1713, 1704, 449, 1753, 1747, 1713, 1692, 1700, 1695, 1709,
+ 1705, 1693, 1705, 1705, 1696, 1680, 1684, 1697, 1699, 1696,
+ 1688, 1678, 1696, 1842, 1691, 1694, 1675, 1674, 1724, 1673,
+ 1683, 1686, 482, 1682, 1670, 1681, 1717, 1664, 1720, 1657,
+ 1672, 498, 1662, 1678, 1659, 1658, 1664, 1655, 1654, 1661,
+ 1651, 1708, 1666, 1665, 1659, 77, 1666, 1661, 1653, 1643,
+ 1658, 1657, 1652, 1656, 1637, 1653, 1639, 1645, 1652, 1640,
+ 224, 1633, 1647, 1688, 1649, 348, 1640, 478, 1842, 1842,
+ 488, 1842, 1842, 1627, 0, 445, 457, 1629, 518, 489,
+
+ 1683, 1636, 502, 1842, 1681, 1842, 1675, 550, 1842, 499,
+ 1617, 1673, 1637, 1618, 1624, 1674, 1631, 1626, 1629, 480,
+ 1842, 1627, 1669, 1624, 1621, 534, 1627, 1665, 1659, 1614,
+ 1609, 1606, 1655, 1614, 1603, 1619, 1651, 1599, 550, 1613,
+ 1598, 1611, 1598, 1608, 1603, 1610, 1605, 1601, 479, 1599,
+ 1602, 1597, 1593, 1641, 499, 1635, 1842, 1634, 1586, 1585,
+ 1584, 1577, 1579, 1583, 1572, 1585, 498, 1630, 1585, 1582,
+ 1585, 1842, 1584, 1573, 1573, 1585, 520, 1560, 1561, 1582,
+ 530, 1564, 1613, 1560, 1574, 1573, 1559, 1571, 1570, 1569,
+ 1568, 505, 1609, 1608, 1842, 1552, 1551, 573, 1564, 1842,
+
+ 1842, 1563, 0, 1552, 1544, 546, 1549, 1600, 1599, 1557,
+ 1597, 1842, 1545, 1595, 1842, 556, 602, 549, 1594, 1550,
+ 1546, 1545, 1533, 1842, 1538, 1544, 1547, 1546, 1533, 1532,
+ 1842, 1534, 1531, 219, 1529, 1531, 1842, 1539, 1536, 1521,
+ 1534, 1529, 579, 1536, 1524, 1517, 1566, 1842, 1515, 1531,
+ 1563, 1526, 1523, 1524, 1526, 1558, 1511, 1506, 1505, 1554,
+ 1500, 1515, 1493, 1500, 1505, 1553, 1842, 1500, 1496, 1494,
+ 1503, 1497, 1504, 1488, 1488, 1498, 1501, 1490, 1485, 1842,
+ 1540, 1842, 1484, 1495, 1532, 1479, 1484, 1493, 1487, 1481,
+ 1490, 1530, 1524, 1488, 1471, 1471, 1466, 1486, 1461, 1467,
+
+ 1466, 1474, 1478, 1461, 1517, 1459, 1473, 1462, 1842, 1842,
+ 1462, 1460, 1842, 1471, 1505, 1467, 0, 1451, 1468, 1506,
+ 1456, 1842, 1842, 1453, 1842, 1459, 1842, 556, 558, 594,
+ 1842, 1456, 1444, 1443, 1494, 1441, 1492, 1439, 1438, 1445,
+ 1438, 1450, 1449, 1449, 1437, 1478, 1445, 1437, 1480, 1426,
+ 1442, 1441, 1842, 1426, 1423, 1479, 1436, 1428, 1434, 1425,
+ 1433, 1418, 1434, 1416, 1430, 522, 1412, 1406, 1411, 1426,
+ 1423, 1424, 1421, 1462, 1419, 1842, 1405, 1407, 1416, 1414,
+ 1451, 1450, 1403, 586, 1412, 1395, 1396, 1393, 1842, 1407,
+ 1386, 543, 1405, 1397, 1440, 1394, 1401, 1437, 1842, 1384,
+
+ 1398, 1382, 1396, 1399, 1380, 1430, 1429, 1428, 1375, 1426,
+ 1425, 1842, 14, 1387, 1387, 1385, 1368, 1373, 1375, 1842,
+ 1381, 1371, 1842, 1416, 1364, 1419, 558, 584, 558, 1369,
+ 1355, 1411, 584, 1415, 555, 1409, 1408, 1407, 1361, 1351,
+ 1404, 1357, 1367, 1401, 1364, 1358, 1345, 1353, 1396, 1400,
+ 1357, 1356, 1842, 1357, 1350, 1339, 1352, 1355, 1350, 1351,
+ 1348, 1347, 1343, 1349, 1344, 1385, 1384, 1334, 1324, 576,
+ 1381, 1842, 1380, 1329, 1321, 1322, 1371, 1334, 1321, 1332,
+ 1842, 1320, 1329, 1328, 1328, 1368, 1311, 1320, 1313, 1302,
+ 1323, 1300, 1304, 1355, 1319, 1301, 1311, 1351, 1350, 1349,
+
+ 1296, 1347, 1311, 581, 593, 1288, 1298, 578, 1842, 1348,
+ 1294, 1304, 1304, 1287, 1292, 1296, 1286, 1298, 1301, 1338,
+ 1842, 1332, 603, 2, 20, 90, 319, 312, 444, 499,
+ 1842, 512, 559, 541, 563, 576, 595, 594, 584, 591,
+ 600, 596, 651, 610, 600, 616, 606, 1842, 616, 616,
+ 609, 621, 619, 662, 606, 608, 623, 610, 668, 627,
+ 613, 616, 1842, 1842, 626, 631, 636, 624, 1842, 1842,
+ 638, 625, 619, 624, 642, 629, 677, 630, 680, 631,
+ 687, 1842, 634, 638, 639, 638, 635, 693, 648, 638,
+ 639, 635, 648, 659, 643, 661, 656, 657, 659, 652,
+
+ 654, 655, 655, 657, 672, 711, 670, 675, 652, 1842,
+ 677, 667, 712, 672, 662, 677, 678, 665, 679, 1842,
+ 698, 706, 686, 676, 723, 1842, 688, 692, 731, 681,
+ 676, 688, 683, 684, 680, 689, 684, 740, 699, 690,
+ 1842, 692, 703, 688, 704, 698, 744, 712, 697, 698,
+ 1842, 714, 717, 700, 757, 702, 1842, 719, 722, 702,
+ 720, 758, 718, 714, 709, 727, 726, 727, 713, 728,
+ 720, 727, 717, 735, 720, 1842, 728, 734, 722, 738,
+ 781, 1842, 732, 737, 779, 732, 745, 739, 743, 741,
+ 739, 741, 751, 794, 740, 740, 797, 743, 755, 1842,
+
+ 743, 751, 749, 754, 766, 750, 755, 765, 766, 771,
+ 810, 769, 785, 790, 766, 775, 766, 818, 763, 1842,
+ 763, 783, 772, 777, 784, 825, 826, 775, 1842, 771,
+ 774, 773, 793, 790, 795, 796, 782, 790, 799, 779,
+ 794, 803, 843, 1842, 844, 845, 798, 808, 810, 799,
+ 795, 802, 811, 854, 803, 801, 803, 820, 859, 811,
+ 810, 816, 814, 812, 865, 866, 862, 813, 869, 1842,
+ 828, 821, 812, 831, 819, 829, 826, 831, 827, 840,
+ 840, 1842, 824, 825, 1842, 826, 884, 825, 844, 846,
+ 843, 828, 849, 848, 832, 837, 855, 1842, 845, 878,
+
+ 869, 841, 900, 863, 1842, 846, 848, 865, 863, 855,
+ 859, 1842, 1842, 869, 904, 853, 906, 855, 913, 858,
+ 869, 861, 867, 863, 881, 883, 884, 1842, 1842, 883,
+ 1842, 868, 869, 889, 879, 872, 884, 926, 892, 1842,
+ 884, 934, 877, 936, 1842, 937, 881, 887, 894, 936,
+ 1842, 1842, 886, 891, 1842, 889, 903, 908, 891, 948,
+ 907, 908, 909, 947, 901, 906, 955, 905, 957, 1842,
+ 906, 959, 960, 902, 962, 923, 964, 908, 920, 925,
+ 911, 941, 970, 930, 1842, 922, 973, 922, 937, 924,
+ 920, 936, 941, 923, 981, 936, 941, 1842, 942, 935,
+
+ 944, 945, 942, 932, 935, 935, 940, 993, 994, 939,
+ 996, 993, 936, 951, 944, 1002, 1842, 958, 1842, 1842,
+ 963, 955, 965, 951, 952, 962, 1012, 958, 968, 1016,
+ 1842, 966, 966, 968, 970, 1021, 964, 967, 1842, 986,
+ 1842, 970, 1842, 1842, 984, 1842, 978, 1842, 1028, 979,
+ 1030, 1031, 1013, 1842, 991, 992, 1842, 980, 988, 982,
+ 981, 984, 984, 985, 981, 1842, 1003, 989, 990, 1005,
+ 1005, 1008, 1008, 1005, 1047, 1011, 1003, 1842, 1842, 1014,
+ 1842, 1011, 1016, 1017, 1014, 1056, 1842, 1007, 1008, 1008,
+ 1014, 1013, 1024, 1068, 1842, 1064, 1013, 1842, 1014, 1014,
+
+ 1016, 1022, 1842, 1024, 1076, 1027, 1030, 1079, 1042, 1842,
+ 1039, 1842, 1036, 1842, 1059, 1079, 1085, 1086, 1087, 1046,
+ 1032, 1090, 1091, 1046, 1040, 1094, 1095, 1091, 1056, 1052,
+ 1094, 1044, 1049, 1047, 1104, 1062, 1106, 1066, 1108, 1071,
+ 1061, 1055, 1071, 1071, 1115, 1059, 1076, 1075, 1842, 1059,
+ 1115, 1116, 1065, 1118, 1083, 1084, 1842, 1084, 1071, 1842,
+ 1082, 1129, 1089, 1102, 1089, 1842, 1842, 1842, 1077, 1134,
+ 1842, 1842, 1083, 1094, 1842, 1842, 1084, 1133, 1078, 1083,
+ 1141, 1091, 1101, 1102, 1842, 1145, 1100, 1842, 1147, 1842,
+ 1092, 1107, 1095, 1110, 1114, 1842, 1148, 1116, 1109, 1118,
+
+ 1100, 1107, 1161, 1122, 1121, 1164, 1165, 1166, 1117, 1842,
+ 1168, 1169, 1116, 1171, 1842, 1121, 1173, 1119, 1118, 1176,
+ 1131, 1842, 1173, 1126, 1123, 1842, 1137, 1842, 1140, 1183,
+ 1138, 1185, 1146, 1129, 1131, 1128, 1144, 1145, 1154, 1842,
+ 1144, 1194, 1842, 1842, 1842, 1190, 1842, 1842, 1155, 1842,
+ 1192, 1842, 1146, 1153, 1842, 1150, 1155, 1153, 1203, 1204,
+ 1149, 1842, 1164, 1842, 1165, 1155, 1167, 1210, 1154, 1162,
+ 1163, 1176, 1842, 1175, 1165, 1164, 1178, 1169, 1178, 1180,
+ 1184, 1842, 1842, 1223, 1168, 1225, 1185, 1227, 1842, 1223,
+ 1187, 1188, 1175, 1170, 1233, 1192, 1193, 1194, 1237, 1196,
+
+ 1199, 1842, 1240, 1842, 1203, 1842, 1185, 1243, 1244, 1189,
+ 1206, 1842, 1192, 1192, 1194, 1842, 1199, 1209, 1842, 1195,
+ 1207, 1842, 1842, 1212, 1206, 1210, 1201, 1253, 1202, 1210,
+ 1219, 1212, 1207, 1222, 1213, 1220, 1207, 1222, 1227, 1270,
+ 1229, 1272, 1217, 1233, 1224, 1238, 1234, 1227, 1842, 1279,
+ 1842, 1280, 1281, 1238, 1237, 1238, 1228, 1842, 1842, 1842,
+ 1286, 1230, 1246, 1289, 1842, 1285, 1236, 1842, 1235, 1237,
+ 1248, 1295, 1246, 1842, 1255, 1298, 1842, 1842, 1304, 1309,
+ 1314, 1319, 1324, 1329, 1334, 1337, 1311, 1316, 1318, 1331
} ;
-static const flex_int16_t yy_def[1486] =
+static const flex_int16_t yy_def[1491] =
{ 0,
- 1474, 1474, 1475, 1475, 1474, 1474, 1474, 1474, 1474, 1474,
- 1473, 1473, 1473, 1473, 1473, 1476, 1473, 1473, 1473, 1473,
- 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473,
- 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1477,
- 1473, 1473, 1473, 1478, 15, 1473, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 1479, 45, 45,
+ 1479, 1479, 1480, 1480, 1479, 1479, 1479, 1479, 1479, 1479,
+ 1478, 1478, 1478, 1478, 1478, 1481, 1478, 1478, 1478, 1478,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1482,
+ 1478, 1478, 1478, 1483, 15, 1478, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 1484, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 1476,
- 1473, 1473, 1473, 1473, 1473, 1473, 1480, 1473, 1473, 1473,
- 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1477, 1473,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 1481,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1485, 1478, 1478, 1478,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1482, 1478,
- 1478, 1473, 1473, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 1481, 45, 1479, 45, 45,
+ 1483, 1478, 1478, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 1486, 45, 1484, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 1480, 1473,
- 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1482, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 1485, 1478,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1487, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 1481, 1473, 1479, 45, 45, 45, 45, 45, 45, 45,
+ 1486, 1478, 1484, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 1473, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 1478, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 1473, 1473, 1473,
- 1473, 1473, 1473, 1473, 1483, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 1478, 1478, 1478,
+ 1478, 1478, 1478, 1478, 1488, 45, 45, 45, 45, 45,
- 45, 45, 45, 1473, 45, 1473, 45, 1479, 1473, 45,
+ 45, 45, 45, 1478, 45, 1478, 45, 1484, 1478, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 1473, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 1478, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 1473, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 1478, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 1473, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 1478, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 1473, 45, 45, 45, 45, 1473,
+ 45, 45, 45, 45, 1478, 45, 45, 45, 45, 1478,
- 1473, 1473, 1484, 45, 45, 45, 45, 45, 45, 45,
- 45, 1473, 45, 45, 1473, 45, 1479, 45, 45, 45,
- 45, 45, 45, 1473, 45, 45, 45, 45, 45, 45,
- 1473, 45, 45, 45, 45, 45, 1473, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 1473, 45, 45,
+ 1478, 1478, 1489, 45, 45, 45, 45, 45, 45, 45,
+ 45, 1478, 45, 45, 1478, 45, 1484, 45, 45, 45,
+ 45, 45, 45, 1478, 45, 45, 45, 45, 45, 45,
+ 1478, 45, 45, 45, 45, 45, 1478, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 1478, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 1473, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 1473,
- 45, 1473, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 1478, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 1478,
+ 45, 1478, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 1473, 1473,
- 45, 45, 1473, 45, 45, 1473, 1485, 45, 45, 45,
- 45, 1473, 1473, 45, 1473, 45, 1473, 45, 45, 45,
- 1473, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 1478, 1478,
+ 45, 45, 1478, 45, 45, 1478, 1490, 45, 45, 45,
+ 45, 1478, 1478, 45, 1478, 45, 1478, 45, 45, 45,
+ 1478, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 1473, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 1478, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 1473, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 1473, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 1473, 45,
+ 45, 45, 45, 45, 45, 1478, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 1478, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 1478, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 1473, 45, 45, 45, 45, 45, 45, 45, 1473,
- 45, 45, 1473, 45, 45, 45, 45, 45, 45, 45,
+ 45, 1478, 45, 45, 45, 45, 45, 45, 45, 1478,
+ 45, 45, 1478, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 1473, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 1478, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 1473, 45, 45, 45, 45, 45, 45, 45, 45,
- 1473, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 1478, 45, 45, 45, 45, 45, 45, 45, 45,
+ 1478, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 1473, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 1473,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 1473,
+ 45, 45, 45, 45, 45, 45, 45, 45, 1478, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 1473, 45, 45, 45,
+ 1478, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 1478, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 1478, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 1473, 1473, 45, 45, 45, 45, 1473, 1473, 45,
+ 45, 45, 1478, 1478, 45, 45, 45, 45, 1478, 1478,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 1473, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 1478, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 1473, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 1473, 45, 45,
- 45, 45, 45, 1473, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 1473, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 1473, 45,
- 45, 45, 45, 45, 1473, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 1478,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 1478,
+ 45, 45, 45, 45, 45, 1478, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 1473, 45, 45, 45, 45, 1473, 45,
+ 1478, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 1478, 45, 45, 45, 45, 45, 1478, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 1473, 45, 45, 45,
+ 45, 45, 45, 45, 45, 1478, 45, 45, 45, 45,
+ 45, 1478, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 1478,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 1473, 45, 45, 45,
- 45, 45, 45, 45, 45, 1473, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 1473, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 1478,
+ 45, 45, 45, 45, 45, 45, 45, 45, 1478, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 1473, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 1473, 45, 45,
- 1473, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 1473, 45, 45, 45, 45, 45, 45,
-
- 1473, 45, 45, 45, 45, 45, 45, 1473, 1473, 45,
+ 45, 45, 45, 1478, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 1473, 1473, 45, 1473, 45, 45, 45,
- 45, 45, 45, 45, 45, 1473, 45, 45, 45, 45,
- 1473, 45, 45, 45, 45, 45, 1473, 1473, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 1478,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 1473, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 1473,
+ 45, 1478, 45, 45, 1478, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 1478, 45, 45,
+
+ 45, 45, 45, 45, 1478, 45, 45, 45, 45, 45,
+ 45, 1478, 1478, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 1478, 1478, 45,
+ 1478, 45, 45, 45, 45, 45, 45, 45, 45, 1478,
+ 45, 45, 45, 45, 1478, 45, 45, 45, 45, 45,
+ 1478, 1478, 45, 45, 1478, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 1478,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 1473, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 1478, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 1478, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 1473, 45, 1473, 1473, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 1473, 45, 45, 45, 45,
- 45, 45, 45, 1473, 45, 1473, 45, 1473, 1473, 45,
- 1473, 45, 1473, 45, 45, 45, 45, 45, 1473, 45,
- 45, 1473, 45, 45, 45, 45, 45, 45, 45, 45,
- 1473, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 1473, 1473, 45, 1473, 45, 45, 45, 45,
- 45, 1473, 45, 45, 45, 45, 45, 45, 45, 1473,
- 45, 45, 1473, 45, 45, 45, 45, 1473, 45, 45,
-
- 45, 45, 45, 45, 1473, 45, 1473, 45, 1473, 45,
+ 45, 45, 45, 45, 45, 45, 1478, 45, 1478, 1478,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 1478, 45, 45, 45, 45, 45, 45, 45, 1478, 45,
+ 1478, 45, 1478, 1478, 45, 1478, 45, 1478, 45, 45,
+ 45, 45, 45, 1478, 45, 45, 1478, 45, 45, 45,
+ 45, 45, 45, 45, 45, 1478, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 1478, 1478, 45,
+ 1478, 45, 45, 45, 45, 45, 1478, 45, 45, 45,
+ 45, 45, 45, 45, 1478, 45, 45, 1478, 45, 45,
+
+ 45, 45, 1478, 45, 45, 45, 45, 45, 45, 1478,
+ 45, 1478, 45, 1478, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 1473, 45, 45, 45, 45, 45, 45,
- 45, 1473, 45, 45, 1473, 45, 45, 45, 45, 45,
- 1473, 1473, 1473, 45, 45, 1473, 1473, 45, 45, 1473,
- 1473, 45, 45, 45, 45, 45, 45, 45, 45, 1473,
- 45, 45, 1473, 45, 1473, 45, 45, 45, 45, 45,
- 1473, 45, 45, 45, 45, 45, 45, 45, 45, 45,
-
- 45, 45, 45, 45, 1473, 45, 45, 45, 45, 1473,
- 45, 45, 45, 45, 45, 45, 1473, 45, 45, 45,
- 1473, 45, 1473, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 1473, 45, 45, 1473, 1473, 1473,
- 45, 1473, 1473, 45, 1473, 45, 1473, 45, 45, 1473,
- 45, 45, 45, 45, 45, 45, 1473, 45, 1473, 45,
- 45, 45, 45, 45, 45, 45, 45, 1473, 45, 45,
- 45, 45, 45, 45, 45, 45, 1473, 1473, 45, 45,
- 45, 45, 45, 1473, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 1473, 45, 1473, 45,
-
- 1473, 45, 45, 45, 45, 45, 1473, 45, 45, 45,
- 1473, 45, 45, 1473, 45, 45, 1473, 1473, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 1478, 45,
+ 45, 45, 45, 45, 45, 45, 1478, 45, 45, 1478,
+ 45, 45, 45, 45, 45, 1478, 1478, 1478, 45, 45,
+ 1478, 1478, 45, 45, 1478, 1478, 45, 45, 45, 45,
+ 45, 45, 45, 45, 1478, 45, 45, 1478, 45, 1478,
+ 45, 45, 45, 45, 45, 1478, 45, 45, 45, 45,
+
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 1478,
+ 45, 45, 45, 45, 1478, 45, 45, 45, 45, 45,
+ 45, 1478, 45, 45, 45, 1478, 45, 1478, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 1478,
+ 45, 45, 1478, 1478, 1478, 45, 1478, 1478, 45, 1478,
+ 45, 1478, 45, 45, 1478, 45, 45, 45, 45, 45,
+ 45, 1478, 45, 1478, 45, 45, 45, 45, 45, 45,
+ 45, 45, 1478, 45, 45, 45, 45, 45, 45, 45,
+ 45, 1478, 1478, 45, 45, 45, 45, 45, 1478, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+
+ 45, 1478, 45, 1478, 45, 1478, 45, 45, 45, 45,
+ 45, 1478, 45, 45, 45, 1478, 45, 45, 1478, 45,
+ 45, 1478, 1478, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 1473, 45, 1473, 45, 45, 45, 45,
- 45, 45, 1473, 1473, 1473, 45, 45, 45, 45, 1473,
- 45, 45, 1473, 45, 45, 45, 45, 45, 1473, 45,
- 45, 1473, 0, 1473, 1473, 1473, 1473, 1473, 1473, 1473,
- 1473, 1473, 1473, 1473, 1473
+ 45, 45, 45, 45, 45, 45, 45, 45, 1478, 45,
+ 1478, 45, 45, 45, 45, 45, 45, 1478, 1478, 1478,
+ 45, 45, 45, 45, 1478, 45, 45, 1478, 45, 45,
+ 45, 45, 45, 1478, 45, 45, 1478, 0, 1478, 1478,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478
} ;
-static const flex_int16_t yy_nxt[1909] =
+static const flex_int16_t yy_nxt[1914] =
{ 0,
- 1473, 13, 14, 13, 1473, 15, 16, 1473, 17, 18,
- 19, 20, 21, 22, 22, 22, 23, 24, 86, 708,
- 37, 14, 37, 87, 25, 26, 38, 1473, 709, 27,
+ 1478, 13, 14, 13, 1478, 15, 16, 1478, 17, 18,
+ 19, 20, 21, 22, 22, 22, 23, 24, 86, 709,
+ 37, 14, 37, 87, 25, 26, 38, 1478, 710, 27,
37, 14, 37, 42, 28, 42, 38, 92, 93, 29,
115, 30, 13, 14, 13, 91, 92, 25, 31, 93,
- 13, 14, 13, 13, 14, 13, 32, 40, 821, 13,
- 14, 13, 33, 40, 115, 92, 93, 822, 91, 34,
+ 13, 14, 13, 13, 14, 13, 32, 40, 823, 13,
+ 14, 13, 33, 40, 115, 92, 93, 824, 91, 34,
35, 13, 14, 13, 95, 15, 16, 96, 17, 18,
19, 20, 21, 22, 22, 22, 23, 24, 13, 14,
13, 109, 39, 91, 25, 26, 13, 14, 13, 27,
39, 85, 85, 85, 28, 42, 41, 42, 42, 29,
42, 30, 83, 108, 41, 111, 94, 25, 31, 109,
217, 218, 89, 137, 89, 139, 32, 90, 90, 90,
- 138, 376, 33, 140, 377, 83, 108, 823, 111, 34,
+ 138, 376, 33, 140, 377, 83, 108, 825, 111, 34,
35, 44, 44, 44, 45, 45, 46, 45, 45, 45,
45, 45, 45, 45, 45, 47, 45, 45, 45, 45,
45, 48, 45, 49, 50, 45, 51, 45, 52, 53,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 45, 108, 145, 146, 45, 160, 147,
- 111, 45, 161, 181, 824, 148, 180, 114, 182, 45,
+ 111, 45, 161, 181, 826, 148, 180, 114, 182, 45,
155, 102, 162, 45, 112, 45, 118, 108, 156, 152,
157, 153, 181, 154, 113, 158, 159, 166, 136, 181,
175, 167, 183, 190, 168, 196, 185, 172, 397, 173,
- 176, 169, 170, 825, 193, 177, 103, 171, 184, 85,
+ 176, 169, 170, 827, 193, 177, 103, 171, 184, 85,
85, 85, 113, 81, 198, 82, 82, 82, 101, 174,
83, 190, 89, 196, 89, 101, 83, 90, 90, 90,
193, 81, 197, 84, 84, 84, 85, 85, 85, 90,
272, 273, 288, 261, 264, 265, 266, 203, 203, 203,
203, 203, 203, 197, 199, 267, 288, 268, 289, 269,
270, 274, 271, 289, 290, 275, 300, 297, 301, 276,
- 288, 307, 349, 303, 305, 406, 404, 318, 826, 297,
+ 288, 307, 349, 303, 305, 406, 404, 318, 828, 297,
281, 284, 400, 480, 291, 319, 405, 293, 360, 292,
297, 320, 400, 411, 300, 301, 303, 305, 307, 308,
308, 308, 310, 428, 406, 400, 308, 308, 308, 308,
308, 308, 408, 409, 414, 401, 411, 406, 461, 462,
- 429, 410, 361, 350, 434, 827, 351, 468, 435, 308,
+ 429, 410, 361, 350, 434, 829, 351, 468, 435, 308,
308, 308, 308, 308, 308, 448, 362, 469, 507, 481,
- 449, 508, 414, 417, 417, 417, 418, 663, 664, 828,
+ 449, 508, 414, 417, 417, 417, 418, 663, 664, 830,
417, 417, 417, 417, 417, 417, 490, 495, 513, 520,
- 491, 496, 520, 514, 553, 528, 627, 529, 829, 554,
- 628, 681, 721, 417, 417, 417, 417, 417, 417, 623,
-
- 731, 732, 766, 830, 629, 767, 450, 520, 722, 723,
- 530, 451, 528, 627, 529, 45, 45, 45, 628, 724,
- 721, 831, 45, 45, 45, 45, 45, 45, 682, 728,
- 798, 722, 800, 801, 820, 729, 806, 799, 832, 833,
- 802, 834, 807, 835, 803, 45, 45, 45, 45, 45,
- 45, 836, 837, 838, 839, 840, 841, 842, 843, 844,
- 845, 846, 820, 847, 848, 849, 851, 852, 853, 854,
- 850, 855, 856, 857, 858, 859, 860, 861, 862, 863,
- 864, 865, 866, 867, 869, 870, 871, 868, 872, 873,
+ 491, 496, 520, 514, 553, 528, 627, 529, 689, 554,
+ 628, 681, 722, 417, 417, 417, 417, 417, 417, 623,
+
+ 732, 733, 831, 832, 629, 690, 450, 520, 723, 724,
+ 530, 451, 528, 627, 529, 45, 45, 45, 628, 725,
+ 722, 833, 45, 45, 45, 45, 45, 45, 682, 729,
+ 767, 723, 800, 768, 808, 730, 822, 834, 835, 801,
+ 809, 836, 837, 802, 803, 45, 45, 45, 45, 45,
+ 45, 804, 838, 839, 840, 805, 841, 842, 843, 844,
+ 845, 846, 847, 848, 822, 849, 850, 851, 853, 854,
+ 855, 856, 852, 857, 858, 859, 860, 861, 862, 863,
+ 864, 865, 866, 867, 868, 869, 871, 872, 873, 870,
874, 875, 876, 877, 878, 879, 880, 881, 882, 883,
884, 885, 886, 887, 888, 889, 890, 891, 892, 893,
904, 905, 906, 907, 908, 909, 910, 911, 912, 913,
914, 915, 916, 917, 918, 919, 920, 921, 922, 923,
924, 925, 926, 927, 928, 929, 930, 931, 932, 933,
- 911, 934, 935, 910, 936, 937, 938, 939, 940, 941,
- 943, 944, 945, 946, 947, 948, 949, 950, 951, 952,
- 953, 954, 955, 956, 957, 958, 959, 960, 962, 963,
- 964, 965, 966, 967, 968, 969, 970, 971, 961, 972,
- 973, 974, 975, 976, 977, 978, 979, 980, 981, 982,
+ 934, 935, 936, 914, 937, 938, 913, 939, 940, 941,
+ 942, 943, 944, 946, 947, 948, 949, 950, 951, 952,
+ 953, 954, 955, 956, 957, 958, 959, 960, 961, 962,
+ 963, 965, 966, 967, 968, 969, 970, 971, 972, 973,
+ 974, 964, 975, 976, 977, 978, 979, 980, 981, 982,
983, 984, 985, 986, 987, 988, 989, 990, 991, 992,
- 993, 994, 995, 996, 998, 942, 997, 999, 1000, 1001,
+ 993, 994, 995, 996, 997, 998, 999, 1000, 945, 1001,
1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011,
1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021,
- 1022, 996, 1023, 997, 1024, 1025, 1027, 1029, 1030, 1031,
- 1026, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040,
+ 1022, 1023, 1024, 1025, 1026, 1000, 1001, 1027, 1028, 1029,
+ 1031, 1033, 1034, 1035, 1030, 1036, 1037, 1038, 1039, 1040,
1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050,
1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060,
- 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1028, 1069,
- 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079,
+ 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070,
+ 1071, 1072, 1032, 1073, 1074, 1075, 1076, 1077, 1078, 1079,
1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089,
1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099,
- 1077, 1100, 1101, 1102, 1103, 1104, 1078, 1105, 1106, 1107,
- 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117,
+ 1100, 1101, 1102, 1103, 1104, 1082, 1105, 1106, 1107, 1108,
+ 1109, 1083, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117,
1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127,
- 1128, 1129, 1130, 1132, 1133, 1134, 1135, 1136, 1137, 1138,
+ 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1137, 1138,
1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148,
- 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159,
+ 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1159,
1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169,
- 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1148, 1177, 1178,
-
- 1179, 1181, 1182, 1131, 1183, 1184, 1185, 1186, 1180, 1187,
- 1188, 1189, 1190, 1191, 1192, 1153, 1193, 1194, 1195, 1196,
- 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206,
- 1207, 1209, 1210, 1211, 1212, 1208, 1213, 1214, 1215, 1216,
- 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226,
- 1227, 1228, 1229, 1230, 1231, 1210, 1232, 1233, 1234, 1235,
- 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245,
+ 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179,
+
+ 1180, 1181, 1153, 1182, 1183, 1184, 1186, 1187, 1136, 1188,
+ 1189, 1190, 1191, 1185, 1192, 1193, 1194, 1195, 1196, 1197,
+ 1158, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206,
+ 1207, 1208, 1209, 1210, 1211, 1212, 1214, 1215, 1216, 1217,
+ 1213, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226,
+ 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236,
+ 1215, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245,
1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255,
1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265,
1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275,
- 1276, 1277, 1278, 1279, 1280, 1282, 1283, 1284, 1285, 1286,
- 1259, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295,
+ 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285,
+ 1287, 1288, 1289, 1290, 1291, 1264, 1292, 1293, 1294, 1295,
1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305,
1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315,
1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325,
- 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1307,
- 1281, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343,
+ 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335,
+ 1336, 1337, 1338, 1339, 1312, 1286, 1340, 1341, 1342, 1343,
1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353,
1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363,
1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373,
1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443,
1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453,
1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463,
- 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 12,
-
- 12, 12, 12, 12, 36, 36, 36, 36, 36, 80,
- 295, 80, 80, 80, 99, 403, 99, 517, 99, 101,
- 101, 101, 101, 101, 116, 116, 116, 116, 116, 179,
- 101, 179, 179, 179, 201, 201, 201, 819, 818, 817,
- 816, 815, 814, 813, 812, 811, 810, 809, 808, 805,
- 804, 797, 796, 795, 794, 793, 792, 791, 790, 789,
- 788, 787, 786, 785, 784, 783, 782, 781, 780, 779,
- 778, 777, 776, 775, 774, 773, 772, 771, 770, 769,
- 768, 765, 764, 763, 762, 761, 760, 759, 758, 757,
- 756, 755, 754, 753, 752, 751, 750, 749, 748, 747,
-
- 746, 745, 744, 743, 742, 741, 740, 739, 738, 737,
- 736, 735, 734, 733, 730, 727, 726, 725, 720, 719,
- 718, 717, 716, 715, 714, 713, 712, 711, 710, 707,
- 706, 705, 704, 703, 702, 701, 700, 699, 698, 697,
- 696, 695, 694, 693, 692, 691, 690, 689, 688, 687,
- 686, 685, 684, 683, 680, 679, 678, 677, 676, 675,
- 674, 673, 672, 671, 670, 669, 668, 667, 666, 665,
- 662, 661, 660, 659, 658, 657, 656, 655, 654, 653,
- 652, 651, 650, 649, 648, 647, 646, 645, 644, 643,
- 642, 641, 640, 639, 638, 637, 636, 635, 634, 633,
-
- 632, 631, 630, 626, 625, 624, 623, 622, 621, 620,
- 619, 618, 617, 616, 615, 614, 613, 612, 611, 610,
- 609, 608, 607, 606, 605, 604, 603, 602, 601, 600,
- 599, 598, 597, 596, 595, 594, 593, 592, 591, 590,
- 589, 588, 587, 586, 585, 584, 583, 582, 581, 580,
- 579, 578, 577, 576, 575, 574, 573, 572, 571, 570,
- 569, 568, 567, 566, 565, 564, 563, 562, 561, 560,
- 559, 558, 557, 556, 555, 552, 551, 550, 549, 548,
- 547, 546, 543, 542, 541, 540, 539, 538, 537, 536,
- 535, 534, 533, 532, 531, 527, 526, 525, 524, 523,
-
- 522, 521, 519, 518, 516, 515, 512, 511, 510, 509,
- 506, 505, 504, 503, 502, 501, 500, 499, 498, 497,
- 494, 493, 492, 489, 488, 487, 486, 485, 484, 483,
- 482, 479, 478, 477, 476, 475, 474, 473, 472, 471,
- 470, 467, 466, 465, 464, 463, 460, 459, 458, 457,
- 456, 455, 454, 453, 452, 447, 446, 445, 444, 443,
- 442, 441, 440, 439, 438, 437, 436, 433, 432, 431,
- 430, 427, 426, 425, 424, 423, 422, 421, 420, 419,
- 416, 415, 413, 412, 407, 402, 399, 396, 395, 394,
- 393, 391, 390, 389, 388, 387, 386, 385, 384, 383,
-
- 382, 381, 380, 379, 378, 375, 374, 373, 372, 371,
- 370, 369, 368, 367, 366, 365, 364, 363, 359, 358,
- 357, 356, 355, 354, 353, 352, 348, 347, 346, 345,
- 344, 343, 342, 341, 340, 339, 338, 337, 336, 335,
- 334, 333, 332, 331, 330, 329, 328, 327, 326, 325,
- 324, 323, 322, 321, 317, 316, 315, 314, 313, 312,
- 311, 309, 202, 306, 304, 302, 299, 298, 296, 294,
- 287, 286, 285, 283, 282, 280, 279, 278, 277, 262,
- 256, 253, 252, 251, 250, 249, 247, 246, 245, 244,
- 241, 240, 239, 238, 237, 236, 235, 234, 233, 229,
-
- 228, 225, 222, 221, 220, 219, 216, 215, 214, 210,
- 209, 208, 207, 206, 202, 195, 192, 191, 189, 187,
- 186, 178, 163, 144, 121, 110, 107, 106, 104, 43,
- 100, 98, 97, 88, 43, 1473, 11, 1473, 1473, 1473,
- 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473,
- 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473,
- 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473,
- 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473,
- 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473,
- 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473,
-
- 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473
+ 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473,
+
+ 1474, 1475, 1476, 1477, 12, 12, 12, 12, 12, 36,
+ 36, 36, 36, 36, 80, 295, 80, 80, 80, 99,
+ 403, 99, 517, 99, 101, 101, 101, 101, 101, 116,
+ 116, 116, 116, 116, 179, 101, 179, 179, 179, 201,
+ 201, 201, 821, 820, 819, 818, 817, 816, 815, 814,
+ 813, 812, 811, 810, 807, 806, 799, 798, 797, 796,
+ 795, 794, 793, 792, 791, 790, 789, 788, 787, 786,
+ 785, 784, 783, 782, 781, 780, 779, 778, 777, 776,
+ 775, 774, 773, 772, 771, 770, 769, 766, 765, 764,
+ 763, 762, 761, 760, 759, 758, 757, 756, 755, 754,
+
+ 753, 752, 751, 750, 749, 748, 747, 746, 745, 744,
+ 743, 742, 741, 740, 739, 738, 737, 736, 735, 734,
+ 731, 728, 727, 726, 721, 720, 719, 718, 717, 716,
+ 715, 714, 713, 712, 711, 708, 707, 706, 705, 704,
+ 703, 702, 701, 700, 699, 698, 697, 696, 695, 694,
+ 693, 692, 691, 688, 687, 686, 685, 684, 683, 680,
+ 679, 678, 677, 676, 675, 674, 673, 672, 671, 670,
+ 669, 668, 667, 666, 665, 662, 661, 660, 659, 658,
+ 657, 656, 655, 654, 653, 652, 651, 650, 649, 648,
+ 647, 646, 645, 644, 643, 642, 641, 640, 639, 638,
+
+ 637, 636, 635, 634, 633, 632, 631, 630, 626, 625,
+ 624, 623, 622, 621, 620, 619, 618, 617, 616, 615,
+ 614, 613, 612, 611, 610, 609, 608, 607, 606, 605,
+ 604, 603, 602, 601, 600, 599, 598, 597, 596, 595,
+ 594, 593, 592, 591, 590, 589, 588, 587, 586, 585,
+ 584, 583, 582, 581, 580, 579, 578, 577, 576, 575,
+ 574, 573, 572, 571, 570, 569, 568, 567, 566, 565,
+ 564, 563, 562, 561, 560, 559, 558, 557, 556, 555,
+ 552, 551, 550, 549, 548, 547, 546, 543, 542, 541,
+ 540, 539, 538, 537, 536, 535, 534, 533, 532, 531,
+
+ 527, 526, 525, 524, 523, 522, 521, 519, 518, 516,
+ 515, 512, 511, 510, 509, 506, 505, 504, 503, 502,
+ 501, 500, 499, 498, 497, 494, 493, 492, 489, 488,
+ 487, 486, 485, 484, 483, 482, 479, 478, 477, 476,
+ 475, 474, 473, 472, 471, 470, 467, 466, 465, 464,
+ 463, 460, 459, 458, 457, 456, 455, 454, 453, 452,
+ 447, 446, 445, 444, 443, 442, 441, 440, 439, 438,
+ 437, 436, 433, 432, 431, 430, 427, 426, 425, 424,
+ 423, 422, 421, 420, 419, 416, 415, 413, 412, 407,
+ 402, 399, 396, 395, 394, 393, 391, 390, 389, 388,
+
+ 387, 386, 385, 384, 383, 382, 381, 380, 379, 378,
+ 375, 374, 373, 372, 371, 370, 369, 368, 367, 366,
+ 365, 364, 363, 359, 358, 357, 356, 355, 354, 353,
+ 352, 348, 347, 346, 345, 344, 343, 342, 341, 340,
+ 339, 338, 337, 336, 335, 334, 333, 332, 331, 330,
+ 329, 328, 327, 326, 325, 324, 323, 322, 321, 317,
+ 316, 315, 314, 313, 312, 311, 309, 202, 306, 304,
+ 302, 299, 298, 296, 294, 287, 286, 285, 283, 282,
+ 280, 279, 278, 277, 262, 256, 253, 252, 251, 250,
+ 249, 247, 246, 245, 244, 241, 240, 239, 238, 237,
+
+ 236, 235, 234, 233, 229, 228, 225, 222, 221, 220,
+ 219, 216, 215, 214, 210, 209, 208, 207, 206, 202,
+ 195, 192, 191, 189, 187, 186, 178, 163, 144, 121,
+ 110, 107, 106, 104, 43, 100, 98, 97, 88, 43,
+ 1478, 11, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+ 1478, 1478, 1478
} ;
-static const flex_int16_t yy_chk[1909] =
+static const flex_int16_t yy_chk[1914] =
{ 0,
0, 1, 1, 1, 0, 1, 1, 0, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 21, 613,
3, 3, 3, 21, 1, 1, 3, 0, 613, 1,
4, 4, 4, 13, 1, 13, 4, 27, 28, 1,
57, 1, 5, 5, 5, 26, 32, 1, 1, 33,
- 6, 6, 6, 7, 7, 7, 1, 7, 723, 8,
- 8, 8, 1, 8, 57, 27, 28, 724, 26, 1,
+ 6, 6, 6, 7, 7, 7, 1, 7, 724, 8,
+ 8, 8, 1, 8, 57, 27, 28, 725, 26, 1,
1, 2, 2, 2, 32, 2, 2, 33, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 9, 9,
9, 52, 5, 31, 2, 2, 10, 10, 10, 2,
6, 20, 20, 20, 2, 37, 9, 37, 42, 2,
42, 2, 20, 51, 10, 54, 31, 2, 2, 52,
129, 129, 25, 65, 25, 66, 2, 25, 25, 25,
- 65, 266, 2, 66, 266, 20, 51, 725, 54, 2,
+ 65, 266, 2, 66, 266, 20, 51, 726, 54, 2,
2, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 45, 58, 64, 69, 69, 58, 73, 69,
- 71, 58, 73, 92, 726, 69, 94, 78, 96, 58,
+ 71, 58, 73, 92, 727, 69, 94, 78, 96, 58,
72, 101, 73, 58, 77, 58, 58, 64, 72, 71,
72, 71, 95, 71, 77, 72, 72, 76, 64, 92,
78, 76, 94, 105, 76, 111, 96, 77, 286, 77,
- 78, 76, 76, 727, 108, 78, 101, 76, 95, 81,
+ 78, 76, 76, 728, 108, 78, 101, 76, 95, 81,
81, 81, 77, 82, 113, 82, 82, 82, 103, 77,
81, 105, 83, 111, 83, 103, 82, 83, 83, 83,
108, 84, 112, 84, 84, 84, 85, 85, 85, 89,
166, 166, 180, 163, 165, 165, 165, 118, 118, 118,
118, 118, 118, 172, 175, 165, 183, 165, 181, 165,
165, 167, 165, 184, 185, 167, 193, 190, 194, 167,
- 180, 200, 243, 196, 198, 297, 296, 213, 728, 205,
+ 180, 200, 243, 196, 198, 297, 296, 213, 729, 205,
172, 175, 288, 367, 183, 213, 296, 185, 252, 184,
190, 213, 291, 300, 193, 194, 196, 198, 200, 203,
203, 203, 205, 320, 297, 288, 203, 203, 203, 203,
203, 203, 299, 299, 303, 291, 300, 310, 349, 349,
- 320, 299, 252, 243, 326, 729, 243, 355, 326, 203,
+ 320, 299, 252, 243, 326, 730, 243, 355, 326, 203,
203, 203, 203, 203, 203, 339, 252, 355, 392, 367,
- 339, 392, 303, 308, 308, 308, 310, 566, 566, 731,
+ 339, 392, 303, 308, 308, 308, 310, 566, 566, 732,
308, 308, 308, 308, 308, 308, 377, 381, 398, 406,
- 377, 381, 418, 398, 443, 416, 528, 416, 732, 443,
+ 377, 381, 418, 398, 443, 416, 528, 416, 592, 443,
529, 584, 627, 308, 308, 308, 308, 308, 308, 530,
- 635, 635, 670, 733, 530, 670, 339, 406, 628, 629,
+ 635, 635, 733, 734, 530, 592, 339, 406, 628, 629,
418, 339, 416, 528, 416, 417, 417, 417, 529, 629,
- 627, 734, 417, 417, 417, 417, 417, 417, 584, 633,
- 703, 628, 704, 704, 722, 633, 707, 703, 735, 736,
- 704, 737, 707, 738, 704, 417, 417, 417, 417, 417,
- 417, 739, 740, 741, 742, 743, 744, 745, 746, 748,
- 749, 750, 722, 751, 752, 753, 754, 755, 756, 757,
- 753, 758, 759, 760, 761, 764, 765, 766, 767, 770,
- 771, 772, 773, 774, 775, 776, 777, 774, 778, 779,
- 780, 782, 783, 784, 785, 786, 787, 788, 789, 790,
-
- 791, 792, 793, 794, 795, 796, 797, 798, 799, 800,
- 801, 802, 803, 804, 805, 806, 807, 809, 810, 811,
- 812, 813, 814, 815, 816, 817, 819, 820, 821, 822,
- 823, 825, 826, 827, 828, 829, 830, 831, 832, 833,
- 834, 835, 836, 837, 838, 840, 841, 842, 843, 844,
- 820, 845, 846, 819, 847, 848, 850, 851, 852, 853,
- 854, 856, 857, 858, 859, 860, 861, 862, 863, 864,
- 865, 866, 867, 868, 869, 870, 871, 872, 873, 875,
- 876, 877, 878, 880, 881, 882, 883, 884, 872, 885,
- 886, 887, 888, 889, 890, 891, 892, 893, 894, 895,
-
- 896, 898, 899, 900, 901, 902, 903, 904, 905, 906,
- 907, 908, 909, 910, 912, 853, 911, 913, 914, 915,
- 916, 918, 919, 920, 921, 922, 923, 924, 925, 927,
- 928, 929, 930, 931, 932, 933, 934, 935, 936, 937,
- 938, 910, 939, 911, 940, 942, 943, 944, 945, 946,
- 942, 947, 948, 949, 950, 951, 952, 953, 954, 955,
- 956, 957, 958, 959, 960, 961, 962, 963, 964, 965,
- 967, 968, 969, 970, 971, 972, 973, 974, 975, 976,
- 977, 979, 980, 982, 983, 984, 985, 986, 943, 987,
- 988, 989, 990, 991, 992, 993, 995, 996, 997, 998,
-
- 999, 1000, 1002, 1003, 1004, 1005, 1006, 1007, 1010, 1011,
- 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021,
- 996, 1022, 1023, 1026, 1028, 1029, 997, 1030, 1031, 1032,
- 1033, 1034, 1035, 1037, 1038, 1039, 1040, 1042, 1043, 1044,
- 1045, 1046, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056,
- 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1066, 1067,
- 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077,
- 1078, 1079, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088,
- 1089, 1090, 1091, 1092, 1094, 1095, 1096, 1097, 1098, 1099,
- 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1077, 1107, 1108,
-
- 1109, 1110, 1111, 1059, 1113, 1116, 1117, 1118, 1109, 1119,
- 1120, 1121, 1122, 1123, 1124, 1082, 1125, 1127, 1128, 1129,
- 1130, 1131, 1132, 1133, 1135, 1137, 1140, 1142, 1144, 1145,
- 1146, 1147, 1148, 1150, 1151, 1146, 1153, 1154, 1155, 1156,
- 1157, 1158, 1159, 1160, 1162, 1163, 1164, 1165, 1166, 1167,
- 1168, 1169, 1170, 1171, 1172, 1148, 1175, 1177, 1178, 1179,
- 1180, 1181, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1191,
- 1192, 1194, 1195, 1196, 1197, 1199, 1200, 1201, 1202, 1203,
- 1204, 1206, 1208, 1210, 1211, 1212, 1213, 1214, 1215, 1216,
+ 627, 735, 417, 417, 417, 417, 417, 417, 584, 633,
+ 670, 628, 704, 670, 708, 633, 723, 736, 737, 704,
+ 708, 738, 739, 705, 705, 417, 417, 417, 417, 417,
+ 417, 705, 740, 741, 742, 705, 743, 744, 745, 746,
+ 747, 749, 750, 751, 723, 752, 753, 754, 755, 756,
+ 757, 758, 754, 759, 760, 761, 762, 765, 766, 767,
+ 768, 771, 772, 773, 774, 775, 776, 777, 778, 775,
+ 779, 780, 781, 783, 784, 785, 786, 787, 788, 789,
+
+ 790, 791, 792, 793, 794, 795, 796, 797, 798, 799,
+ 800, 801, 802, 803, 804, 805, 806, 807, 808, 809,
+ 811, 812, 813, 814, 815, 816, 817, 818, 819, 821,
+ 822, 823, 824, 825, 827, 828, 829, 830, 831, 832,
+ 833, 834, 835, 836, 837, 838, 839, 840, 842, 843,
+ 844, 845, 846, 822, 847, 848, 821, 849, 850, 852,
+ 853, 854, 855, 856, 858, 859, 860, 861, 862, 863,
+ 864, 865, 866, 867, 868, 869, 870, 871, 872, 873,
+ 874, 875, 877, 878, 879, 880, 881, 883, 884, 885,
+ 886, 874, 887, 888, 889, 890, 891, 892, 893, 894,
+
+ 895, 896, 897, 898, 899, 901, 902, 903, 904, 905,
+ 906, 907, 908, 909, 910, 911, 912, 913, 855, 914,
+ 915, 916, 917, 918, 919, 921, 922, 923, 924, 925,
+ 926, 927, 928, 930, 931, 932, 933, 934, 935, 936,
+ 937, 938, 939, 940, 941, 913, 914, 942, 943, 945,
+ 946, 947, 948, 949, 945, 950, 951, 952, 953, 954,
+ 955, 956, 957, 958, 959, 960, 961, 962, 963, 964,
+ 965, 966, 967, 968, 969, 971, 972, 973, 974, 975,
+ 976, 977, 978, 979, 980, 981, 983, 984, 986, 987,
+ 988, 989, 946, 990, 991, 992, 993, 994, 995, 996,
+
+ 997, 999, 1000, 1001, 1002, 1003, 1004, 1006, 1007, 1008,
+ 1009, 1010, 1011, 1014, 1015, 1016, 1017, 1018, 1019, 1020,
+ 1021, 1022, 1023, 1024, 1025, 1000, 1026, 1027, 1030, 1032,
+ 1033, 1001, 1034, 1035, 1036, 1037, 1038, 1039, 1041, 1042,
+ 1043, 1044, 1046, 1047, 1048, 1049, 1050, 1053, 1054, 1056,
+ 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066,
+ 1067, 1068, 1069, 1071, 1072, 1073, 1074, 1075, 1076, 1077,
+ 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1086, 1087, 1088,
+ 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1099,
+ 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109,
+
+ 1110, 1111, 1082, 1112, 1113, 1114, 1115, 1116, 1064, 1118,
+ 1121, 1122, 1123, 1114, 1124, 1125, 1126, 1127, 1128, 1129,
+ 1087, 1130, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1140,
+ 1142, 1145, 1147, 1149, 1150, 1151, 1152, 1153, 1155, 1156,
+ 1151, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1167,
+ 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177,
+ 1153, 1180, 1182, 1183, 1184, 1185, 1186, 1188, 1189, 1190,
+ 1191, 1192, 1193, 1194, 1196, 1197, 1199, 1200, 1201, 1202,
+ 1204, 1205, 1206, 1207, 1208, 1209, 1211, 1213, 1215, 1216,
1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226,
- 1227, 1228, 1229, 1229, 1230, 1231, 1232, 1233, 1234, 1235,
- 1210, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1245,
- 1246, 1247, 1248, 1249, 1250, 1251, 1253, 1254, 1256, 1257,
- 1258, 1259, 1260, 1264, 1265, 1268, 1269, 1272, 1273, 1274,
- 1275, 1276, 1277, 1278, 1279, 1281, 1282, 1284, 1286, 1287,
- 1288, 1289, 1290, 1292, 1293, 1294, 1295, 1296, 1297, 1259,
- 1230, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1306, 1307,
- 1308, 1309, 1311, 1312, 1313, 1314, 1315, 1316, 1318, 1319,
- 1320, 1322, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331,
- 1332, 1333, 1334, 1336, 1337, 1341, 1344, 1346, 1348, 1349,
-
- 1351, 1352, 1353, 1354, 1355, 1356, 1358, 1360, 1361, 1362,
- 1363, 1364, 1365, 1366, 1367, 1369, 1370, 1371, 1372, 1373,
- 1374, 1375, 1376, 1379, 1380, 1381, 1382, 1383, 1385, 1386,
- 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396,
- 1398, 1400, 1402, 1403, 1404, 1405, 1406, 1408, 1409, 1410,
- 1412, 1413, 1415, 1416, 1419, 1420, 1421, 1422, 1423, 1424,
+ 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1234, 1235,
+ 1236, 1237, 1238, 1239, 1240, 1215, 1241, 1242, 1243, 1244,
+ 1245, 1246, 1247, 1248, 1250, 1251, 1252, 1253, 1254, 1255,
+ 1256, 1258, 1259, 1261, 1262, 1263, 1264, 1265, 1269, 1270,
+ 1273, 1274, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284,
+ 1286, 1287, 1289, 1291, 1292, 1293, 1294, 1295, 1297, 1298,
+ 1299, 1300, 1301, 1302, 1264, 1235, 1303, 1304, 1305, 1306,
+ 1307, 1308, 1309, 1311, 1312, 1313, 1314, 1316, 1317, 1318,
+ 1319, 1320, 1321, 1323, 1324, 1325, 1327, 1329, 1330, 1331,
+ 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1341, 1342,
+
+ 1346, 1349, 1351, 1353, 1354, 1356, 1357, 1358, 1359, 1360,
+ 1361, 1363, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372,
+ 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1384, 1385,
+ 1386, 1387, 1388, 1390, 1391, 1392, 1393, 1394, 1395, 1396,
+ 1397, 1398, 1399, 1400, 1401, 1403, 1405, 1407, 1408, 1409,
+ 1410, 1411, 1413, 1414, 1415, 1417, 1418, 1420, 1421, 1424,
1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434,
- 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1445,
- 1447, 1448, 1449, 1450, 1451, 1452, 1456, 1457, 1458, 1459,
- 1461, 1462, 1464, 1465, 1466, 1467, 1468, 1470, 1471, 1474,
-
- 1474, 1474, 1474, 1474, 1475, 1475, 1475, 1475, 1475, 1476,
- 1482, 1476, 1476, 1476, 1477, 1483, 1477, 1484, 1477, 1478,
- 1478, 1478, 1478, 1478, 1479, 1479, 1479, 1479, 1479, 1480,
- 1485, 1480, 1480, 1480, 1481, 1481, 1481, 721, 719, 718,
- 717, 716, 715, 714, 713, 712, 711, 710, 709, 706,
- 705, 702, 701, 700, 699, 698, 697, 696, 695, 694,
- 693, 692, 691, 690, 689, 688, 687, 686, 685, 684,
- 683, 682, 680, 679, 678, 677, 676, 675, 674, 673,
- 671, 669, 668, 667, 666, 665, 664, 663, 662, 661,
- 660, 659, 658, 657, 656, 655, 654, 652, 651, 650,
-
- 649, 648, 647, 646, 645, 644, 643, 642, 641, 640,
- 639, 638, 637, 636, 634, 632, 631, 630, 626, 625,
- 624, 622, 621, 619, 618, 617, 616, 615, 614, 611,
- 610, 609, 608, 607, 606, 605, 604, 603, 602, 601,
- 600, 598, 597, 596, 595, 594, 593, 592, 591, 590,
- 588, 587, 586, 585, 583, 582, 581, 580, 579, 578,
- 577, 575, 574, 573, 572, 571, 570, 569, 568, 567,
- 565, 564, 563, 562, 561, 560, 559, 558, 557, 556,
- 555, 554, 552, 551, 550, 549, 548, 547, 546, 545,
- 544, 543, 542, 541, 540, 539, 538, 537, 536, 535,
-
- 534, 533, 532, 526, 524, 521, 520, 519, 518, 516,
- 515, 514, 512, 511, 508, 507, 506, 505, 504, 503,
- 502, 501, 500, 499, 498, 497, 496, 495, 494, 493,
- 492, 491, 490, 489, 488, 487, 486, 485, 484, 483,
- 481, 479, 478, 477, 476, 475, 474, 473, 472, 471,
- 470, 469, 468, 466, 465, 464, 463, 462, 461, 460,
- 459, 458, 457, 456, 455, 454, 453, 452, 451, 450,
- 449, 447, 446, 445, 444, 442, 441, 440, 439, 438,
- 436, 435, 433, 432, 430, 429, 428, 427, 426, 425,
- 423, 422, 421, 420, 419, 414, 413, 411, 410, 409,
-
- 408, 407, 405, 404, 402, 399, 397, 396, 394, 393,
- 391, 390, 389, 388, 387, 386, 385, 384, 383, 382,
- 380, 379, 378, 376, 375, 374, 373, 371, 370, 369,
- 368, 366, 365, 364, 363, 362, 361, 360, 359, 358,
- 356, 354, 353, 352, 351, 350, 348, 347, 346, 345,
- 344, 343, 342, 341, 340, 338, 337, 336, 335, 334,
- 333, 332, 331, 330, 329, 328, 327, 325, 324, 323,
- 322, 319, 318, 317, 316, 315, 314, 313, 312, 311,
- 307, 305, 302, 301, 298, 294, 287, 285, 284, 283,
- 282, 280, 279, 278, 277, 276, 275, 274, 273, 272,
-
- 271, 270, 269, 268, 267, 265, 264, 263, 262, 261,
- 260, 259, 258, 257, 256, 255, 254, 253, 251, 250,
- 249, 248, 247, 246, 245, 244, 242, 241, 240, 239,
- 238, 237, 236, 235, 233, 232, 231, 230, 229, 228,
- 227, 226, 225, 224, 223, 222, 221, 220, 219, 218,
- 217, 216, 215, 214, 212, 211, 210, 209, 208, 207,
- 206, 204, 201, 199, 197, 195, 192, 191, 189, 186,
- 178, 177, 176, 174, 173, 171, 170, 169, 168, 164,
- 161, 159, 158, 157, 156, 155, 153, 152, 151, 150,
- 148, 147, 146, 145, 144, 143, 142, 141, 140, 138,
-
- 137, 135, 133, 132, 131, 130, 128, 127, 126, 124,
- 123, 122, 121, 120, 116, 110, 107, 106, 104, 99,
- 98, 79, 74, 68, 60, 53, 50, 49, 47, 43,
- 41, 39, 38, 24, 14, 11, 1473, 1473, 1473, 1473,
- 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473,
- 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473,
- 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473,
- 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473,
- 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473,
- 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473,
-
- 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473
+ 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444,
+ 1445, 1446, 1447, 1448, 1450, 1452, 1453, 1454, 1455, 1456,
+ 1457, 1461, 1462, 1463, 1464, 1466, 1467, 1469, 1470, 1471,
+
+ 1472, 1473, 1475, 1476, 1479, 1479, 1479, 1479, 1479, 1480,
+ 1480, 1480, 1480, 1480, 1481, 1487, 1481, 1481, 1481, 1482,
+ 1488, 1482, 1489, 1482, 1483, 1483, 1483, 1483, 1483, 1484,
+ 1484, 1484, 1484, 1484, 1485, 1490, 1485, 1485, 1485, 1486,
+ 1486, 1486, 722, 720, 719, 718, 717, 716, 715, 714,
+ 713, 712, 711, 710, 707, 706, 703, 702, 701, 700,
+ 699, 698, 697, 696, 695, 694, 693, 692, 691, 690,
+ 689, 688, 687, 686, 685, 684, 683, 682, 680, 679,
+ 678, 677, 676, 675, 674, 673, 671, 669, 668, 667,
+ 666, 665, 664, 663, 662, 661, 660, 659, 658, 657,
+
+ 656, 655, 654, 652, 651, 650, 649, 648, 647, 646,
+ 645, 644, 643, 642, 641, 640, 639, 638, 637, 636,
+ 634, 632, 631, 630, 626, 625, 624, 622, 621, 619,
+ 618, 617, 616, 615, 614, 611, 610, 609, 608, 607,
+ 606, 605, 604, 603, 602, 601, 600, 598, 597, 596,
+ 595, 594, 593, 591, 590, 588, 587, 586, 585, 583,
+ 582, 581, 580, 579, 578, 577, 575, 574, 573, 572,
+ 571, 570, 569, 568, 567, 565, 564, 563, 562, 561,
+ 560, 559, 558, 557, 556, 555, 554, 552, 551, 550,
+ 549, 548, 547, 546, 545, 544, 543, 542, 541, 540,
+
+ 539, 538, 537, 536, 535, 534, 533, 532, 526, 524,
+ 521, 520, 519, 518, 516, 515, 514, 512, 511, 508,
+ 507, 506, 505, 504, 503, 502, 501, 500, 499, 498,
+ 497, 496, 495, 494, 493, 492, 491, 490, 489, 488,
+ 487, 486, 485, 484, 483, 481, 479, 478, 477, 476,
+ 475, 474, 473, 472, 471, 470, 469, 468, 466, 465,
+ 464, 463, 462, 461, 460, 459, 458, 457, 456, 455,
+ 454, 453, 452, 451, 450, 449, 447, 446, 445, 444,
+ 442, 441, 440, 439, 438, 436, 435, 433, 432, 430,
+ 429, 428, 427, 426, 425, 423, 422, 421, 420, 419,
+
+ 414, 413, 411, 410, 409, 408, 407, 405, 404, 402,
+ 399, 397, 396, 394, 393, 391, 390, 389, 388, 387,
+ 386, 385, 384, 383, 382, 380, 379, 378, 376, 375,
+ 374, 373, 371, 370, 369, 368, 366, 365, 364, 363,
+ 362, 361, 360, 359, 358, 356, 354, 353, 352, 351,
+ 350, 348, 347, 346, 345, 344, 343, 342, 341, 340,
+ 338, 337, 336, 335, 334, 333, 332, 331, 330, 329,
+ 328, 327, 325, 324, 323, 322, 319, 318, 317, 316,
+ 315, 314, 313, 312, 311, 307, 305, 302, 301, 298,
+ 294, 287, 285, 284, 283, 282, 280, 279, 278, 277,
+
+ 276, 275, 274, 273, 272, 271, 270, 269, 268, 267,
+ 265, 264, 263, 262, 261, 260, 259, 258, 257, 256,
+ 255, 254, 253, 251, 250, 249, 248, 247, 246, 245,
+ 244, 242, 241, 240, 239, 238, 237, 236, 235, 233,
+ 232, 231, 230, 229, 228, 227, 226, 225, 224, 223,
+ 222, 221, 220, 219, 218, 217, 216, 215, 214, 212,
+ 211, 210, 209, 208, 207, 206, 204, 201, 199, 197,
+ 195, 192, 191, 189, 186, 178, 177, 176, 174, 173,
+ 171, 170, 169, 168, 164, 161, 159, 158, 157, 156,
+ 155, 153, 152, 151, 150, 148, 147, 146, 145, 144,
+
+ 143, 142, 141, 140, 138, 137, 135, 133, 132, 131,
+ 130, 128, 127, 126, 124, 123, 122, 121, 120, 116,
+ 110, 107, 106, 104, 99, 98, 79, 74, 68, 60,
+ 53, 50, 49, 47, 43, 41, 39, 38, 24, 14,
+ 11, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+ 1478, 1478, 1478
} ;
static yy_state_type yy_last_accepting_state;
extern int yy_flex_debug;
int yy_flex_debug = 1;
-static const flex_int16_t yy_rule_linenum[176] =
+static const flex_int16_t yy_rule_linenum[177] =
{ 0,
145, 147, 149, 154, 155, 160, 161, 162, 174, 177,
182, 189, 198, 207, 216, 225, 234, 243, 253, 262,
1080, 1089, 1099, 1109, 1118, 1128, 1137, 1146, 1155, 1164,
1173, 1182, 1191, 1200, 1209, 1218, 1227, 1236, 1245, 1254,
1263, 1272, 1281, 1290, 1299, 1308, 1317, 1326, 1335, 1344,
- 1353, 1362, 1371, 1380, 1389, 1398, 1407, 1416, 1426, 1436,
- 1446, 1456, 1466, 1476, 1486, 1496, 1506, 1515, 1524, 1533,
- 1542, 1551, 1560, 1569, 1580, 1593, 1606, 1621, 1720, 1725,
- 1730, 1735, 1736, 1737, 1738, 1739, 1740, 1742, 1760, 1773,
- 1778, 1782, 1784, 1786, 1788
+ 1353, 1362, 1371, 1380, 1389, 1398, 1407, 1416, 1425, 1435,
+ 1445, 1455, 1465, 1475, 1485, 1495, 1505, 1515, 1524, 1533,
+ 1542, 1551, 1560, 1569, 1578, 1589, 1602, 1615, 1630, 1729,
+ 1734, 1739, 1744, 1745, 1746, 1747, 1748, 1749, 1751, 1769,
+ 1782, 1787, 1791, 1793, 1795, 1797
} ;
/* The intent behind this definition is that it'll catch
/* To avoid the call to exit... oops! */
#define YY_FATAL_ERROR(msg) isc::dhcp::Parser4Context::fatal(msg)
-#line 1755 "dhcp4_lexer.cc"
+#line 1757 "dhcp4_lexer.cc"
/* noyywrap disables automatic rewinding for the next file to parse. Since we
always parse only a single string, there's no need to do any wraps. And
using yywrap requires linking with -lfl, which provides the default yywrap
by moving it ahead by yyleng bytes. yyleng specifies the length of the
currently matched token. */
#define YY_USER_ACTION driver.loc_.columns(yyleng);
-#line 1781 "dhcp4_lexer.cc"
-#line 1782 "dhcp4_lexer.cc"
+#line 1783 "dhcp4_lexer.cc"
+#line 1784 "dhcp4_lexer.cc"
#define INITIAL 0
#define COMMENT 1
}
-#line 2110 "dhcp4_lexer.cc"
+#line 2112 "dhcp4_lexer.cc"
while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
{
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 1474 )
+ if ( yy_current_state >= 1479 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
++yy_cp;
}
- while ( yy_current_state != 1473 );
+ while ( yy_current_state != 1478 );
yy_cp = (yy_last_accepting_cpos);
yy_current_state = (yy_last_accepting_state);
{
if ( yy_act == 0 )
fprintf( stderr, "--scanner backing up\n" );
- else if ( yy_act < 176 )
+ else if ( yy_act < 177 )
fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
(long)yy_rule_linenum[yy_act], yytext );
- else if ( yy_act == 176 )
+ else if ( yy_act == 177 )
fprintf( stderr, "--accepting default rule (\"%s\")\n",
yytext );
- else if ( yy_act == 177 )
+ else if ( yy_act == 178 )
fprintf( stderr, "--(end of buffer or a NUL)\n" );
else
fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::QUEUE_CONTROL:
- return isc::dhcp::Dhcp4Parser::make_CAPACITY(driver.loc_);
+ return isc::dhcp::Dhcp4Parser::make_QUEUE_TYPE(driver.loc_);
default:
- return isc::dhcp::Dhcp4Parser::make_STRING("capacity", driver.loc_);
+ return isc::dhcp::Dhcp4Parser::make_STRING("queue-type", driver.loc_);
}
}
YY_BREAK
case 121:
YY_RULE_SETUP
#line 1263 "dhcp4_lexer.ll"
+{
+ switch(driver.ctx_) {
+ case isc::dhcp::Parser4Context::QUEUE_CONTROL:
+ return isc::dhcp::Dhcp4Parser::make_CAPACITY(driver.loc_);
+ default:
+ return isc::dhcp::Dhcp4Parser::make_STRING("capacity", driver.loc_);
+ }
+}
+ YY_BREAK
+case 122:
+YY_RULE_SETUP
+#line 1272 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
-case 122:
+case 123:
YY_RULE_SETUP
-#line 1272 "dhcp4_lexer.ll"
+#line 1281 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
-case 123:
+case 124:
YY_RULE_SETUP
-#line 1281 "dhcp4_lexer.ll"
+#line 1290 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
-case 124:
+case 125:
YY_RULE_SETUP
-#line 1290 "dhcp4_lexer.ll"
+#line 1299 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
-case 125:
+case 126:
YY_RULE_SETUP
-#line 1299 "dhcp4_lexer.ll"
+#line 1308 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
-case 126:
+case 127:
YY_RULE_SETUP
-#line 1308 "dhcp4_lexer.ll"
+#line 1317 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
-case 127:
+case 128:
YY_RULE_SETUP
-#line 1317 "dhcp4_lexer.ll"
+#line 1326 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
-case 128:
+case 129:
YY_RULE_SETUP
-#line 1326 "dhcp4_lexer.ll"
+#line 1335 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
-case 129:
+case 130:
YY_RULE_SETUP
-#line 1335 "dhcp4_lexer.ll"
+#line 1344 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
-case 130:
+case 131:
YY_RULE_SETUP
-#line 1344 "dhcp4_lexer.ll"
+#line 1353 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
-case 131:
+case 132:
YY_RULE_SETUP
-#line 1353 "dhcp4_lexer.ll"
+#line 1362 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
-case 132:
+case 133:
YY_RULE_SETUP
-#line 1362 "dhcp4_lexer.ll"
+#line 1371 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
-case 133:
+case 134:
YY_RULE_SETUP
-#line 1371 "dhcp4_lexer.ll"
+#line 1380 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
-case 134:
+case 135:
YY_RULE_SETUP
-#line 1380 "dhcp4_lexer.ll"
+#line 1389 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
-case 135:
+case 136:
YY_RULE_SETUP
-#line 1389 "dhcp4_lexer.ll"
+#line 1398 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
-case 136:
+case 137:
YY_RULE_SETUP
-#line 1398 "dhcp4_lexer.ll"
+#line 1407 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
-case 137:
+case 138:
YY_RULE_SETUP
-#line 1407 "dhcp4_lexer.ll"
+#line 1416 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP_DDNS:
}
}
YY_BREAK
-case 138:
+case 139:
YY_RULE_SETUP
-#line 1416 "dhcp4_lexer.ll"
+#line 1425 "dhcp4_lexer.ll"
{
/* dhcp-ddns value keywords are case insensitive */
if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_PROTOCOL) {
return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
}
YY_BREAK
-case 139:
+case 140:
YY_RULE_SETUP
-#line 1426 "dhcp4_lexer.ll"
+#line 1435 "dhcp4_lexer.ll"
{
/* dhcp-ddns value keywords are case insensitive */
if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_PROTOCOL) {
return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
}
YY_BREAK
-case 140:
+case 141:
YY_RULE_SETUP
-#line 1436 "dhcp4_lexer.ll"
+#line 1445 "dhcp4_lexer.ll"
{
/* dhcp-ddns value keywords are case insensitive */
if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_FORMAT) {
return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
}
YY_BREAK
-case 141:
+case 142:
YY_RULE_SETUP
-#line 1446 "dhcp4_lexer.ll"
+#line 1455 "dhcp4_lexer.ll"
{
/* dhcp-ddns value keywords are case insensitive */
if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
}
YY_BREAK
-case 142:
+case 143:
YY_RULE_SETUP
-#line 1456 "dhcp4_lexer.ll"
+#line 1465 "dhcp4_lexer.ll"
{
/* dhcp-ddns value keywords are case insensitive */
if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
}
YY_BREAK
-case 143:
+case 144:
YY_RULE_SETUP
-#line 1466 "dhcp4_lexer.ll"
+#line 1475 "dhcp4_lexer.ll"
{
/* dhcp-ddns value keywords are case insensitive */
if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
}
YY_BREAK
-case 144:
+case 145:
YY_RULE_SETUP
-#line 1476 "dhcp4_lexer.ll"
+#line 1485 "dhcp4_lexer.ll"
{
/* dhcp-ddns value keywords are case insensitive */
if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
}
YY_BREAK
-case 145:
+case 146:
YY_RULE_SETUP
-#line 1486 "dhcp4_lexer.ll"
+#line 1495 "dhcp4_lexer.ll"
{
/* dhcp-ddns value keywords are case insensitive */
if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
}
YY_BREAK
-case 146:
+case 147:
YY_RULE_SETUP
-#line 1496 "dhcp4_lexer.ll"
+#line 1505 "dhcp4_lexer.ll"
{
/* dhcp-ddns value keywords are case insensitive */
if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
}
YY_BREAK
-case 147:
+case 148:
YY_RULE_SETUP
-#line 1506 "dhcp4_lexer.ll"
+#line 1515 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::CONFIG:
}
}
YY_BREAK
-case 148:
+case 149:
YY_RULE_SETUP
-#line 1515 "dhcp4_lexer.ll"
+#line 1524 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::CONFIG:
}
}
YY_BREAK
-case 149:
+case 150:
YY_RULE_SETUP
-#line 1524 "dhcp4_lexer.ll"
+#line 1533 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::CONFIG:
}
}
YY_BREAK
-case 150:
+case 151:
YY_RULE_SETUP
-#line 1533 "dhcp4_lexer.ll"
+#line 1542 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::SUBNET4:
}
}
YY_BREAK
-case 151:
+case 152:
YY_RULE_SETUP
-#line 1542 "dhcp4_lexer.ll"
+#line 1551 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::SUBNET4:
}
}
YY_BREAK
-case 152:
+case 153:
YY_RULE_SETUP
-#line 1551 "dhcp4_lexer.ll"
+#line 1560 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::SUBNET4:
}
}
YY_BREAK
-case 153:
+case 154:
YY_RULE_SETUP
-#line 1560 "dhcp4_lexer.ll"
+#line 1569 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
-case 154:
+case 155:
YY_RULE_SETUP
-#line 1569 "dhcp4_lexer.ll"
+#line 1578 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
-case 155:
+case 156:
YY_RULE_SETUP
-#line 1580 "dhcp4_lexer.ll"
+#line 1589 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
-case 156:
+case 157:
YY_RULE_SETUP
-#line 1593 "dhcp4_lexer.ll"
+#line 1602 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
-case 157:
+case 158:
YY_RULE_SETUP
-#line 1606 "dhcp4_lexer.ll"
+#line 1615 "dhcp4_lexer.ll"
{
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
}
}
YY_BREAK
-case 158:
+case 159:
YY_RULE_SETUP
-#line 1621 "dhcp4_lexer.ll"
+#line 1630 "dhcp4_lexer.ll"
{
/* A string has been matched. It contains the actual string and single quotes.
We need to get those quotes out of the way and just use its content, e.g.
return isc::dhcp::Dhcp4Parser::make_STRING(decoded, driver.loc_);
}
YY_BREAK
-case 159:
-/* rule 159 can match eol */
+case 160:
+/* rule 160 can match eol */
YY_RULE_SETUP
-#line 1720 "dhcp4_lexer.ll"
+#line 1729 "dhcp4_lexer.ll"
{
/* Bad string with a forbidden control character inside */
driver.error(driver.loc_, "Invalid control in " + std::string(yytext));
}
YY_BREAK
-case 160:
-/* rule 160 can match eol */
+case 161:
+/* rule 161 can match eol */
YY_RULE_SETUP
-#line 1725 "dhcp4_lexer.ll"
+#line 1734 "dhcp4_lexer.ll"
{
/* Bad string with a bad escape inside */
driver.error(driver.loc_, "Bad escape in " + std::string(yytext));
}
YY_BREAK
-case 161:
+case 162:
YY_RULE_SETUP
-#line 1730 "dhcp4_lexer.ll"
+#line 1739 "dhcp4_lexer.ll"
{
/* Bad string with an open escape at the end */
driver.error(driver.loc_, "Overflow escape in " + std::string(yytext));
}
YY_BREAK
-case 162:
+case 163:
YY_RULE_SETUP
-#line 1735 "dhcp4_lexer.ll"
+#line 1744 "dhcp4_lexer.ll"
{ return isc::dhcp::Dhcp4Parser::make_LSQUARE_BRACKET(driver.loc_); }
YY_BREAK
-case 163:
+case 164:
YY_RULE_SETUP
-#line 1736 "dhcp4_lexer.ll"
+#line 1745 "dhcp4_lexer.ll"
{ return isc::dhcp::Dhcp4Parser::make_RSQUARE_BRACKET(driver.loc_); }
YY_BREAK
-case 164:
+case 165:
YY_RULE_SETUP
-#line 1737 "dhcp4_lexer.ll"
+#line 1746 "dhcp4_lexer.ll"
{ return isc::dhcp::Dhcp4Parser::make_LCURLY_BRACKET(driver.loc_); }
YY_BREAK
-case 165:
+case 166:
YY_RULE_SETUP
-#line 1738 "dhcp4_lexer.ll"
+#line 1747 "dhcp4_lexer.ll"
{ return isc::dhcp::Dhcp4Parser::make_RCURLY_BRACKET(driver.loc_); }
YY_BREAK
-case 166:
+case 167:
YY_RULE_SETUP
-#line 1739 "dhcp4_lexer.ll"
+#line 1748 "dhcp4_lexer.ll"
{ return isc::dhcp::Dhcp4Parser::make_COMMA(driver.loc_); }
YY_BREAK
-case 167:
+case 168:
YY_RULE_SETUP
-#line 1740 "dhcp4_lexer.ll"
+#line 1749 "dhcp4_lexer.ll"
{ return isc::dhcp::Dhcp4Parser::make_COLON(driver.loc_); }
YY_BREAK
-case 168:
+case 169:
YY_RULE_SETUP
-#line 1742 "dhcp4_lexer.ll"
+#line 1751 "dhcp4_lexer.ll"
{
/* An integer was found. */
std::string tmp(yytext);
return isc::dhcp::Dhcp4Parser::make_INTEGER(integer, driver.loc_);
}
YY_BREAK
-case 169:
+case 170:
YY_RULE_SETUP
-#line 1760 "dhcp4_lexer.ll"
+#line 1769 "dhcp4_lexer.ll"
{
/* A floating point was found. */
std::string tmp(yytext);
return isc::dhcp::Dhcp4Parser::make_FLOAT(fp, driver.loc_);
}
YY_BREAK
-case 170:
+case 171:
YY_RULE_SETUP
-#line 1773 "dhcp4_lexer.ll"
+#line 1782 "dhcp4_lexer.ll"
{
string tmp(yytext);
return isc::dhcp::Dhcp4Parser::make_BOOLEAN(tmp == "true", driver.loc_);
}
YY_BREAK
-case 171:
+case 172:
YY_RULE_SETUP
-#line 1778 "dhcp4_lexer.ll"
+#line 1787 "dhcp4_lexer.ll"
{
return isc::dhcp::Dhcp4Parser::make_NULL_TYPE(driver.loc_);
}
YY_BREAK
-case 172:
+case 173:
YY_RULE_SETUP
-#line 1782 "dhcp4_lexer.ll"
+#line 1791 "dhcp4_lexer.ll"
driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
YY_BREAK
-case 173:
+case 174:
YY_RULE_SETUP
-#line 1784 "dhcp4_lexer.ll"
+#line 1793 "dhcp4_lexer.ll"
driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
YY_BREAK
-case 174:
+case 175:
YY_RULE_SETUP
-#line 1786 "dhcp4_lexer.ll"
+#line 1795 "dhcp4_lexer.ll"
driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
YY_BREAK
-case 175:
+case 176:
YY_RULE_SETUP
-#line 1788 "dhcp4_lexer.ll"
+#line 1797 "dhcp4_lexer.ll"
driver.error (driver.loc_, "Invalid character: " + std::string(yytext));
YY_BREAK
case YY_STATE_EOF(INITIAL):
-#line 1790 "dhcp4_lexer.ll"
+#line 1799 "dhcp4_lexer.ll"
{
if (driver.states_.empty()) {
return isc::dhcp::Dhcp4Parser::make_END(driver.loc_);
BEGIN(DIR_EXIT);
}
YY_BREAK
-case 176:
+case 177:
YY_RULE_SETUP
-#line 1813 "dhcp4_lexer.ll"
+#line 1822 "dhcp4_lexer.ll"
ECHO;
YY_BREAK
-#line 4401 "dhcp4_lexer.cc"
+#line 4415 "dhcp4_lexer.cc"
case YY_END_OF_BUFFER:
{
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 1474 )
+ if ( yy_current_state >= 1479 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 1474 )
+ if ( yy_current_state >= 1479 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
- yy_is_jam = (yy_current_state == 1473);
+ yy_is_jam = (yy_current_state == 1478);
return yy_is_jam ? 0 : yy_current_state;
}
/* %ok-for-header */
-#line 1813 "dhcp4_lexer.ll"
+#line 1822 "dhcp4_lexer.ll"
using namespace isc::dhcp;
}
}
+\"queue-type\" {
+ switch(driver.ctx_) {
+ case isc::dhcp::Parser4Context::QUEUE_CONTROL:
+ return isc::dhcp::Dhcp4Parser::make_QUEUE_TYPE(driver.loc_);
+ default:
+ return isc::dhcp::Dhcp4Parser::make_STRING("queue-type", driver.loc_);
+ }
+}
+
\"capacity\" {
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::QUEUE_CONTROL:
configuration is committed by the administrator. Additional information
may be provided.
+% DHCP4_CONFIG_PACKET_QUEUE DHCPv4 packet queue info after configuration: %1
+This debug message is emitted during DHCPv4 server configuration, immediately
+after configuring the DHCPv4 packet queue. The information shown depends
+upon the packet queue type selected.
+
% DHCP4_CONFIG_LOAD_FAIL configuration error using file: %1, reason: %2
This error message indicates that the DHCPv4 configuration has failed.
If this is an initial configuration (during server's startup) the server
{
switch (that.type_get ())
{
- case 186: // value
- case 190: // map_value
- case 230: // socket_type
- case 233: // outbound_interface_value
- case 255: // db_type
- case 337: // hr_mode
- case 489: // ncr_protocol_value
- case 497: // replace_client_name_value
+ case 187: // value
+ case 191: // map_value
+ case 231: // socket_type
+ case 234: // outbound_interface_value
+ case 256: // db_type
+ case 338: // hr_mode
+ case 492: // ncr_protocol_value
+ case 500: // replace_client_name_value
value.move< ElementPtr > (that.value);
break;
- case 169: // "boolean"
+ case 170: // "boolean"
value.move< bool > (that.value);
break;
- case 168: // "floating point"
+ case 169: // "floating point"
value.move< double > (that.value);
break;
- case 167: // "integer"
+ case 168: // "integer"
value.move< int64_t > (that.value);
break;
- case 166: // "constant string"
+ case 167: // "constant string"
value.move< std::string > (that.value);
break;
state = that.state;
switch (that.type_get ())
{
- case 186: // value
- case 190: // map_value
- case 230: // socket_type
- case 233: // outbound_interface_value
- case 255: // db_type
- case 337: // hr_mode
- case 489: // ncr_protocol_value
- case 497: // replace_client_name_value
+ case 187: // value
+ case 191: // map_value
+ case 231: // socket_type
+ case 234: // outbound_interface_value
+ case 256: // db_type
+ case 338: // hr_mode
+ case 492: // ncr_protocol_value
+ case 500: // replace_client_name_value
value.copy< ElementPtr > (that.value);
break;
- case 169: // "boolean"
+ case 170: // "boolean"
value.copy< bool > (that.value);
break;
- case 168: // "floating point"
+ case 169: // "floating point"
value.copy< double > (that.value);
break;
- case 167: // "integer"
+ case 168: // "integer"
value.copy< int64_t > (that.value);
break;
- case 166: // "constant string"
+ case 167: // "constant string"
value.copy< std::string > (that.value);
break;
<< yysym.location << ": ";
switch (yytype)
{
- case 166: // "constant string"
+ case 167: // "constant string"
-#line 246 "dhcp4_parser.yy" // lalr1.cc:636
+#line 247 "dhcp4_parser.yy" // lalr1.cc:636
{ yyoutput << yysym.value.template as< std::string > (); }
#line 366 "dhcp4_parser.cc" // lalr1.cc:636
break;
- case 167: // "integer"
+ case 168: // "integer"
-#line 246 "dhcp4_parser.yy" // lalr1.cc:636
+#line 247 "dhcp4_parser.yy" // lalr1.cc:636
{ yyoutput << yysym.value.template as< int64_t > (); }
#line 373 "dhcp4_parser.cc" // lalr1.cc:636
break;
- case 168: // "floating point"
+ case 169: // "floating point"
-#line 246 "dhcp4_parser.yy" // lalr1.cc:636
+#line 247 "dhcp4_parser.yy" // lalr1.cc:636
{ yyoutput << yysym.value.template as< double > (); }
#line 380 "dhcp4_parser.cc" // lalr1.cc:636
break;
- case 169: // "boolean"
+ case 170: // "boolean"
-#line 246 "dhcp4_parser.yy" // lalr1.cc:636
+#line 247 "dhcp4_parser.yy" // lalr1.cc:636
{ yyoutput << yysym.value.template as< bool > (); }
#line 387 "dhcp4_parser.cc" // lalr1.cc:636
break;
- case 186: // value
+ case 187: // value
-#line 246 "dhcp4_parser.yy" // lalr1.cc:636
+#line 247 "dhcp4_parser.yy" // lalr1.cc:636
{ yyoutput << yysym.value.template as< ElementPtr > (); }
#line 394 "dhcp4_parser.cc" // lalr1.cc:636
break;
- case 190: // map_value
+ case 191: // map_value
-#line 246 "dhcp4_parser.yy" // lalr1.cc:636
+#line 247 "dhcp4_parser.yy" // lalr1.cc:636
{ yyoutput << yysym.value.template as< ElementPtr > (); }
#line 401 "dhcp4_parser.cc" // lalr1.cc:636
break;
- case 230: // socket_type
+ case 231: // socket_type
-#line 246 "dhcp4_parser.yy" // lalr1.cc:636
+#line 247 "dhcp4_parser.yy" // lalr1.cc:636
{ yyoutput << yysym.value.template as< ElementPtr > (); }
#line 408 "dhcp4_parser.cc" // lalr1.cc:636
break;
- case 233: // outbound_interface_value
+ case 234: // outbound_interface_value
-#line 246 "dhcp4_parser.yy" // lalr1.cc:636
+#line 247 "dhcp4_parser.yy" // lalr1.cc:636
{ yyoutput << yysym.value.template as< ElementPtr > (); }
#line 415 "dhcp4_parser.cc" // lalr1.cc:636
break;
- case 255: // db_type
+ case 256: // db_type
-#line 246 "dhcp4_parser.yy" // lalr1.cc:636
+#line 247 "dhcp4_parser.yy" // lalr1.cc:636
{ yyoutput << yysym.value.template as< ElementPtr > (); }
#line 422 "dhcp4_parser.cc" // lalr1.cc:636
break;
- case 337: // hr_mode
+ case 338: // hr_mode
-#line 246 "dhcp4_parser.yy" // lalr1.cc:636
+#line 247 "dhcp4_parser.yy" // lalr1.cc:636
{ yyoutput << yysym.value.template as< ElementPtr > (); }
#line 429 "dhcp4_parser.cc" // lalr1.cc:636
break;
- case 489: // ncr_protocol_value
+ case 492: // ncr_protocol_value
-#line 246 "dhcp4_parser.yy" // lalr1.cc:636
+#line 247 "dhcp4_parser.yy" // lalr1.cc:636
{ yyoutput << yysym.value.template as< ElementPtr > (); }
#line 436 "dhcp4_parser.cc" // lalr1.cc:636
break;
- case 497: // replace_client_name_value
+ case 500: // replace_client_name_value
-#line 246 "dhcp4_parser.yy" // lalr1.cc:636
+#line 247 "dhcp4_parser.yy" // lalr1.cc:636
{ yyoutput << yysym.value.template as< ElementPtr > (); }
#line 443 "dhcp4_parser.cc" // lalr1.cc:636
break;
when using variants. */
switch (yyr1_[yyn])
{
- case 186: // value
- case 190: // map_value
- case 230: // socket_type
- case 233: // outbound_interface_value
- case 255: // db_type
- case 337: // hr_mode
- case 489: // ncr_protocol_value
- case 497: // replace_client_name_value
+ case 187: // value
+ case 191: // map_value
+ case 231: // socket_type
+ case 234: // outbound_interface_value
+ case 256: // db_type
+ case 338: // hr_mode
+ case 492: // ncr_protocol_value
+ case 500: // replace_client_name_value
yylhs.value.build< ElementPtr > ();
break;
- case 169: // "boolean"
+ case 170: // "boolean"
yylhs.value.build< bool > ();
break;
- case 168: // "floating point"
+ case 169: // "floating point"
yylhs.value.build< double > ();
break;
- case 167: // "integer"
+ case 168: // "integer"
yylhs.value.build< int64_t > ();
break;
- case 166: // "constant string"
+ case 167: // "constant string"
yylhs.value.build< std::string > ();
break;
switch (yyn)
{
case 2:
-#line 255 "dhcp4_parser.yy" // lalr1.cc:859
+#line 256 "dhcp4_parser.yy" // lalr1.cc:859
{ ctx.ctx_ = ctx.NO_KEYWORD; }
#line 690 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 4:
-#line 256 "dhcp4_parser.yy" // lalr1.cc:859
+#line 257 "dhcp4_parser.yy" // lalr1.cc:859
{ ctx.ctx_ = ctx.CONFIG; }
#line 696 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 6:
-#line 257 "dhcp4_parser.yy" // lalr1.cc:859
+#line 258 "dhcp4_parser.yy" // lalr1.cc:859
{ ctx.ctx_ = ctx.DHCP4; }
#line 702 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 8:
-#line 258 "dhcp4_parser.yy" // lalr1.cc:859
+#line 259 "dhcp4_parser.yy" // lalr1.cc:859
{ ctx.ctx_ = ctx.INTERFACES_CONFIG; }
#line 708 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 10:
-#line 259 "dhcp4_parser.yy" // lalr1.cc:859
+#line 260 "dhcp4_parser.yy" // lalr1.cc:859
{ ctx.ctx_ = ctx.SUBNET4; }
#line 714 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 12:
-#line 260 "dhcp4_parser.yy" // lalr1.cc:859
+#line 261 "dhcp4_parser.yy" // lalr1.cc:859
{ ctx.ctx_ = ctx.POOLS; }
#line 720 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 14:
-#line 261 "dhcp4_parser.yy" // lalr1.cc:859
+#line 262 "dhcp4_parser.yy" // lalr1.cc:859
{ ctx.ctx_ = ctx.RESERVATIONS; }
#line 726 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 16:
-#line 262 "dhcp4_parser.yy" // lalr1.cc:859
+#line 263 "dhcp4_parser.yy" // lalr1.cc:859
{ ctx.ctx_ = ctx.DHCP4; }
#line 732 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 18:
-#line 263 "dhcp4_parser.yy" // lalr1.cc:859
+#line 264 "dhcp4_parser.yy" // lalr1.cc:859
{ ctx.ctx_ = ctx.OPTION_DEF; }
#line 738 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 20:
-#line 264 "dhcp4_parser.yy" // lalr1.cc:859
+#line 265 "dhcp4_parser.yy" // lalr1.cc:859
{ ctx.ctx_ = ctx.OPTION_DATA; }
#line 744 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 22:
-#line 265 "dhcp4_parser.yy" // lalr1.cc:859
+#line 266 "dhcp4_parser.yy" // lalr1.cc:859
{ ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
#line 750 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 24:
-#line 266 "dhcp4_parser.yy" // lalr1.cc:859
+#line 267 "dhcp4_parser.yy" // lalr1.cc:859
{ ctx.ctx_ = ctx.DHCP_DDNS; }
#line 756 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 26:
-#line 267 "dhcp4_parser.yy" // lalr1.cc:859
+#line 268 "dhcp4_parser.yy" // lalr1.cc:859
{ ctx.ctx_ = ctx.LOGGING; }
#line 762 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 28:
-#line 268 "dhcp4_parser.yy" // lalr1.cc:859
+#line 269 "dhcp4_parser.yy" // lalr1.cc:859
{ ctx.ctx_ = ctx.CONFIG_CONTROL; }
#line 768 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 30:
-#line 276 "dhcp4_parser.yy" // lalr1.cc:859
+#line 277 "dhcp4_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
#line 774 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 31:
-#line 277 "dhcp4_parser.yy" // lalr1.cc:859
+#line 278 "dhcp4_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
#line 780 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 32:
-#line 278 "dhcp4_parser.yy" // lalr1.cc:859
+#line 279 "dhcp4_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
#line 786 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 33:
-#line 279 "dhcp4_parser.yy" // lalr1.cc:859
+#line 280 "dhcp4_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
#line 792 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 34:
-#line 280 "dhcp4_parser.yy" // lalr1.cc:859
+#line 281 "dhcp4_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
#line 798 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 35:
-#line 281 "dhcp4_parser.yy" // lalr1.cc:859
+#line 282 "dhcp4_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
#line 804 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 36:
-#line 282 "dhcp4_parser.yy" // lalr1.cc:859
+#line 283 "dhcp4_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
#line 810 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 37:
-#line 285 "dhcp4_parser.yy" // lalr1.cc:859
+#line 286 "dhcp4_parser.yy" // lalr1.cc:859
{
// Push back the JSON value on the stack
ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ());
break;
case 38:
-#line 290 "dhcp4_parser.yy" // lalr1.cc:859
+#line 291 "dhcp4_parser.yy" // lalr1.cc:859
{
// This code is executed when we're about to start parsing
// the content of the map
break;
case 39:
-#line 295 "dhcp4_parser.yy" // lalr1.cc:859
+#line 296 "dhcp4_parser.yy" // lalr1.cc:859
{
// map parsing completed. If we ever want to do any wrap up
// (maybe some sanity checking), this would be the best place
break;
case 40:
-#line 301 "dhcp4_parser.yy" // lalr1.cc:859
+#line 302 "dhcp4_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
#line 846 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 43:
-#line 308 "dhcp4_parser.yy" // lalr1.cc:859
+#line 309 "dhcp4_parser.yy" // lalr1.cc:859
{
// map containing a single entry
ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
break;
case 44:
-#line 312 "dhcp4_parser.yy" // lalr1.cc:859
+#line 313 "dhcp4_parser.yy" // lalr1.cc:859
{
// map consisting of a shorter map followed by
// comma and string:value
break;
case 45:
-#line 319 "dhcp4_parser.yy" // lalr1.cc:859
+#line 320 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
break;
case 46:
-#line 322 "dhcp4_parser.yy" // lalr1.cc:859
+#line 323 "dhcp4_parser.yy" // lalr1.cc:859
{
// list parsing complete. Put any sanity checking here
}
break;
case 49:
-#line 330 "dhcp4_parser.yy" // lalr1.cc:859
+#line 331 "dhcp4_parser.yy" // lalr1.cc:859
{
// List consisting of a single element.
ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
break;
case 50:
-#line 334 "dhcp4_parser.yy" // lalr1.cc:859
+#line 335 "dhcp4_parser.yy" // lalr1.cc:859
{
// List ending with , and a value.
ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
break;
case 51:
-#line 341 "dhcp4_parser.yy" // lalr1.cc:859
+#line 342 "dhcp4_parser.yy" // lalr1.cc:859
{
// List parsing about to start
}
break;
case 52:
-#line 343 "dhcp4_parser.yy" // lalr1.cc:859
+#line 344 "dhcp4_parser.yy" // lalr1.cc:859
{
// list parsing complete. Put any sanity checking here
//ctx.stack_.pop_back();
break;
case 55:
-#line 352 "dhcp4_parser.yy" // lalr1.cc:859
+#line 353 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(s);
break;
case 56:
-#line 356 "dhcp4_parser.yy" // lalr1.cc:859
+#line 357 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(s);
break;
case 57:
-#line 367 "dhcp4_parser.yy" // lalr1.cc:859
+#line 368 "dhcp4_parser.yy" // lalr1.cc:859
{
const std::string& where = ctx.contextName();
const std::string& keyword = yystack_[1].value.as< std::string > ();
break;
case 58:
-#line 377 "dhcp4_parser.yy" // lalr1.cc:859
+#line 378 "dhcp4_parser.yy" // lalr1.cc:859
{
// This code is executed when we're about to start parsing
// the content of the map
break;
case 59:
-#line 382 "dhcp4_parser.yy" // lalr1.cc:859
+#line 383 "dhcp4_parser.yy" // lalr1.cc:859
{
// map parsing completed. If we ever want to do any wrap up
// (maybe some sanity checking), this would be the best place
break;
case 68:
-#line 406 "dhcp4_parser.yy" // lalr1.cc:859
+#line 407 "dhcp4_parser.yy" // lalr1.cc:859
{
// This code is executed when we're about to start parsing
// the content of the map
break;
case 69:
-#line 413 "dhcp4_parser.yy" // lalr1.cc:859
+#line 414 "dhcp4_parser.yy" // lalr1.cc:859
{
// No global parameter is required
ctx.stack_.pop_back();
break;
case 70:
-#line 421 "dhcp4_parser.yy" // lalr1.cc:859
+#line 422 "dhcp4_parser.yy" // lalr1.cc:859
{
// Parse the Dhcp4 map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
break;
case 71:
-#line 425 "dhcp4_parser.yy" // lalr1.cc:859
+#line 426 "dhcp4_parser.yy" // lalr1.cc:859
{
// No global parameter is required
// parsing completed
break;
case 106:
-#line 470 "dhcp4_parser.yy" // lalr1.cc:859
+#line 471 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("valid-lifetime", prf);
break;
case 107:
-#line 475 "dhcp4_parser.yy" // lalr1.cc:859
+#line 476 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("renew-timer", prf);
break;
case 108:
-#line 480 "dhcp4_parser.yy" // lalr1.cc:859
+#line 481 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("rebind-timer", prf);
break;
case 109:
-#line 485 "dhcp4_parser.yy" // lalr1.cc:859
+#line 486 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr dpp(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("decline-probation-period", dpp);
break;
case 110:
-#line 490 "dhcp4_parser.yy" // lalr1.cc:859
+#line 491 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 111:
-#line 492 "dhcp4_parser.yy" // lalr1.cc:859
+#line 493 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr stag(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("server-tag", stag);
break;
case 112:
-#line 498 "dhcp4_parser.yy" // lalr1.cc:859
+#line 499 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr echo(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("echo-client-id", echo);
break;
case 113:
-#line 503 "dhcp4_parser.yy" // lalr1.cc:859
+#line 504 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr match(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("match-client-id", match);
break;
case 114:
-#line 509 "dhcp4_parser.yy" // lalr1.cc:859
+#line 510 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("interfaces-config", i);
break;
case 115:
-#line 514 "dhcp4_parser.yy" // lalr1.cc:859
+#line 515 "dhcp4_parser.yy" // lalr1.cc:859
{
// No interfaces config param is required
ctx.stack_.pop_back();
break;
case 125:
-#line 533 "dhcp4_parser.yy" // lalr1.cc:859
+#line 534 "dhcp4_parser.yy" // lalr1.cc:859
{
// Parse the interfaces-config map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
break;
case 126:
-#line 537 "dhcp4_parser.yy" // lalr1.cc:859
+#line 538 "dhcp4_parser.yy" // lalr1.cc:859
{
// No interfaces config param is required
// parsing completed
break;
case 127:
-#line 542 "dhcp4_parser.yy" // lalr1.cc:859
+#line 543 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("interfaces", l);
break;
case 128:
-#line 547 "dhcp4_parser.yy" // lalr1.cc:859
+#line 548 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
break;
case 129:
-#line 552 "dhcp4_parser.yy" // lalr1.cc:859
+#line 553 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.DHCP_SOCKET_TYPE);
}
break;
case 130:
-#line 554 "dhcp4_parser.yy" // lalr1.cc:859
+#line 555 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.back()->set("dhcp-socket-type", yystack_[0].value.as< ElementPtr > ());
ctx.leave();
break;
case 131:
-#line 559 "dhcp4_parser.yy" // lalr1.cc:859
+#line 560 "dhcp4_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("raw", ctx.loc2pos(yystack_[0].location))); }
#line 1167 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 132:
-#line 560 "dhcp4_parser.yy" // lalr1.cc:859
+#line 561 "dhcp4_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("udp", ctx.loc2pos(yystack_[0].location))); }
#line 1173 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 133:
-#line 563 "dhcp4_parser.yy" // lalr1.cc:859
+#line 564 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.OUTBOUND_INTERFACE);
}
break;
case 134:
-#line 565 "dhcp4_parser.yy" // lalr1.cc:859
+#line 566 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.back()->set("outbound-interface", yystack_[0].value.as< ElementPtr > ());
ctx.leave();
break;
case 135:
-#line 570 "dhcp4_parser.yy" // lalr1.cc:859
+#line 571 "dhcp4_parser.yy" // lalr1.cc:859
{
yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("same-as-inbound", ctx.loc2pos(yystack_[0].location)));
}
break;
case 136:
-#line 572 "dhcp4_parser.yy" // lalr1.cc:859
+#line 573 "dhcp4_parser.yy" // lalr1.cc:859
{
yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("use-routing", ctx.loc2pos(yystack_[0].location)));
}
break;
case 137:
-#line 576 "dhcp4_parser.yy" // lalr1.cc:859
+#line 577 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("re-detect", b);
break;
case 138:
-#line 582 "dhcp4_parser.yy" // lalr1.cc:859
+#line 583 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("lease-database", i);
break;
case 139:
-#line 587 "dhcp4_parser.yy" // lalr1.cc:859
+#line 588 "dhcp4_parser.yy" // lalr1.cc:859
{
// The type parameter is required
ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
break;
case 140:
-#line 594 "dhcp4_parser.yy" // lalr1.cc:859
+#line 595 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("sanity-checks", m);
break;
case 141:
-#line 599 "dhcp4_parser.yy" // lalr1.cc:859
+#line 600 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
break;
case 145:
-#line 609 "dhcp4_parser.yy" // lalr1.cc:859
+#line 610 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 146:
-#line 611 "dhcp4_parser.yy" // lalr1.cc:859
+#line 612 "dhcp4_parser.yy" // lalr1.cc:859
{
if ( (string(yystack_[0].value.as< std::string > ()) == "none") ||
break;
case 147:
-#line 627 "dhcp4_parser.yy" // lalr1.cc:859
+#line 628 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("hosts-database", i);
break;
case 148:
-#line 632 "dhcp4_parser.yy" // lalr1.cc:859
+#line 633 "dhcp4_parser.yy" // lalr1.cc:859
{
// The type parameter is required
ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
break;
case 149:
-#line 639 "dhcp4_parser.yy" // lalr1.cc:859
+#line 640 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("hosts-databases", l);
break;
case 150:
-#line 644 "dhcp4_parser.yy" // lalr1.cc:859
+#line 645 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
break;
case 155:
-#line 657 "dhcp4_parser.yy" // lalr1.cc:859
+#line 658 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
break;
case 156:
-#line 661 "dhcp4_parser.yy" // lalr1.cc:859
+#line 662 "dhcp4_parser.yy" // lalr1.cc:859
{
// The type parameter is required
ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
break;
case 177:
-#line 691 "dhcp4_parser.yy" // lalr1.cc:859
+#line 692 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.DATABASE_TYPE);
}
break;
case 178:
-#line 693 "dhcp4_parser.yy" // lalr1.cc:859
+#line 694 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
ctx.leave();
break;
case 179:
-#line 698 "dhcp4_parser.yy" // lalr1.cc:859
+#line 699 "dhcp4_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
#line 1370 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 180:
-#line 699 "dhcp4_parser.yy" // lalr1.cc:859
+#line 700 "dhcp4_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
#line 1376 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 181:
-#line 700 "dhcp4_parser.yy" // lalr1.cc:859
+#line 701 "dhcp4_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
#line 1382 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 182:
-#line 701 "dhcp4_parser.yy" // lalr1.cc:859
+#line 702 "dhcp4_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("cql", ctx.loc2pos(yystack_[0].location))); }
#line 1388 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 183:
-#line 704 "dhcp4_parser.yy" // lalr1.cc:859
+#line 705 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 184:
-#line 706 "dhcp4_parser.yy" // lalr1.cc:859
+#line 707 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("user", user);
break;
case 185:
-#line 712 "dhcp4_parser.yy" // lalr1.cc:859
+#line 713 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 186:
-#line 714 "dhcp4_parser.yy" // lalr1.cc:859
+#line 715 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr pwd(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("password", pwd);
break;
case 187:
-#line 720 "dhcp4_parser.yy" // lalr1.cc:859
+#line 721 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 188:
-#line 722 "dhcp4_parser.yy" // lalr1.cc:859
+#line 723 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr h(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("host", h);
break;
case 189:
-#line 728 "dhcp4_parser.yy" // lalr1.cc:859
+#line 729 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr p(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("port", p);
break;
case 190:
-#line 733 "dhcp4_parser.yy" // lalr1.cc:859
+#line 734 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 191:
-#line 735 "dhcp4_parser.yy" // lalr1.cc:859
+#line 736 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("name", name);
break;
case 192:
-#line 741 "dhcp4_parser.yy" // lalr1.cc:859
+#line 742 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("persist", n);
break;
case 193:
-#line 746 "dhcp4_parser.yy" // lalr1.cc:859
+#line 747 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("lfc-interval", n);
break;
case 194:
-#line 751 "dhcp4_parser.yy" // lalr1.cc:859
+#line 752 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("readonly", n);
break;
case 195:
-#line 756 "dhcp4_parser.yy" // lalr1.cc:859
+#line 757 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("connect-timeout", n);
break;
case 196:
-#line 761 "dhcp4_parser.yy" // lalr1.cc:859
+#line 762 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("request-timeout", n);
break;
case 197:
-#line 766 "dhcp4_parser.yy" // lalr1.cc:859
+#line 767 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("tcp-keepalive", n);
break;
case 198:
-#line 771 "dhcp4_parser.yy" // lalr1.cc:859
+#line 772 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("tcp-nodelay", n);
break;
case 199:
-#line 776 "dhcp4_parser.yy" // lalr1.cc:859
+#line 777 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 200:
-#line 778 "dhcp4_parser.yy" // lalr1.cc:859
+#line 779 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr cp(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("contact-points", cp);
break;
case 201:
-#line 784 "dhcp4_parser.yy" // lalr1.cc:859
+#line 785 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 202:
-#line 786 "dhcp4_parser.yy" // lalr1.cc:859
+#line 787 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr ks(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("keyspace", ks);
break;
case 203:
-#line 792 "dhcp4_parser.yy" // lalr1.cc:859
+#line 793 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("max-reconnect-tries", n);
break;
case 204:
-#line 797 "dhcp4_parser.yy" // lalr1.cc:859
+#line 798 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("reconnect-wait-time", n);
break;
case 205:
-#line 802 "dhcp4_parser.yy" // lalr1.cc:859
+#line 803 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("host-reservation-identifiers", l);
break;
case 206:
-#line 807 "dhcp4_parser.yy" // lalr1.cc:859
+#line 808 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
break;
case 214:
-#line 823 "dhcp4_parser.yy" // lalr1.cc:859
+#line 824 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(duid);
break;
case 215:
-#line 828 "dhcp4_parser.yy" // lalr1.cc:859
+#line 829 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(hwaddr);
break;
case 216:
-#line 833 "dhcp4_parser.yy" // lalr1.cc:859
+#line 834 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr circuit(new StringElement("circuit-id", ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(circuit);
break;
case 217:
-#line 838 "dhcp4_parser.yy" // lalr1.cc:859
+#line 839 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr client(new StringElement("client-id", ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(client);
break;
case 218:
-#line 843 "dhcp4_parser.yy" // lalr1.cc:859
+#line 844 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(flex_id);
break;
case 219:
-#line 848 "dhcp4_parser.yy" // lalr1.cc:859
+#line 849 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("hooks-libraries", l);
break;
case 220:
-#line 853 "dhcp4_parser.yy" // lalr1.cc:859
+#line 854 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
break;
case 225:
-#line 866 "dhcp4_parser.yy" // lalr1.cc:859
+#line 867 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
break;
case 226:
-#line 870 "dhcp4_parser.yy" // lalr1.cc:859
+#line 871 "dhcp4_parser.yy" // lalr1.cc:859
{
// The library hooks parameter is required
ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
break;
case 227:
-#line 876 "dhcp4_parser.yy" // lalr1.cc:859
+#line 877 "dhcp4_parser.yy" // lalr1.cc:859
{
// Parse the hooks-libraries list entry map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
break;
case 228:
-#line 880 "dhcp4_parser.yy" // lalr1.cc:859
+#line 881 "dhcp4_parser.yy" // lalr1.cc:859
{
// The library hooks parameter is required
ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
break;
case 234:
-#line 895 "dhcp4_parser.yy" // lalr1.cc:859
+#line 896 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 235:
-#line 897 "dhcp4_parser.yy" // lalr1.cc:859
+#line 898 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr lib(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("library", lib);
break;
case 236:
-#line 903 "dhcp4_parser.yy" // lalr1.cc:859
+#line 904 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 237:
-#line 905 "dhcp4_parser.yy" // lalr1.cc:859
+#line 906 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.back()->set("parameters", yystack_[0].value.as< ElementPtr > ());
ctx.leave();
break;
case 238:
-#line 911 "dhcp4_parser.yy" // lalr1.cc:859
+#line 912 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("expired-leases-processing", m);
break;
case 239:
-#line 916 "dhcp4_parser.yy" // lalr1.cc:859
+#line 917 "dhcp4_parser.yy" // lalr1.cc:859
{
// No expired lease parameter is required
ctx.stack_.pop_back();
break;
case 248:
-#line 934 "dhcp4_parser.yy" // lalr1.cc:859
+#line 935 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("reclaim-timer-wait-time", value);
break;
case 249:
-#line 939 "dhcp4_parser.yy" // lalr1.cc:859
+#line 940 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("flush-reclaimed-timer-wait-time", value);
break;
case 250:
-#line 944 "dhcp4_parser.yy" // lalr1.cc:859
+#line 945 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("hold-reclaimed-time", value);
break;
case 251:
-#line 949 "dhcp4_parser.yy" // lalr1.cc:859
+#line 950 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("max-reclaim-leases", value);
break;
case 252:
-#line 954 "dhcp4_parser.yy" // lalr1.cc:859
+#line 955 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("max-reclaim-time", value);
break;
case 253:
-#line 959 "dhcp4_parser.yy" // lalr1.cc:859
+#line 960 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("unwarned-reclaim-cycles", value);
break;
case 254:
-#line 967 "dhcp4_parser.yy" // lalr1.cc:859
+#line 968 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("subnet4", l);
break;
case 255:
-#line 972 "dhcp4_parser.yy" // lalr1.cc:859
+#line 973 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
break;
case 260:
-#line 992 "dhcp4_parser.yy" // lalr1.cc:859
+#line 993 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
break;
case 261:
-#line 996 "dhcp4_parser.yy" // lalr1.cc:859
+#line 997 "dhcp4_parser.yy" // lalr1.cc:859
{
// Once we reached this place, the subnet parsing is now complete.
// If we want to, we can implement default values here.
break;
case 262:
-#line 1018 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1019 "dhcp4_parser.yy" // lalr1.cc:859
{
// Parse the subnet4 list entry map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
break;
case 263:
-#line 1022 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1023 "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));
break;
case 289:
-#line 1059 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1060 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 290:
-#line 1061 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1062 "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);
break;
case 291:
-#line 1067 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1068 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 292:
-#line 1069 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1070 "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);
break;
case 293:
-#line 1075 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1076 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 294:
-#line 1077 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1078 "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);
break;
case 295:
-#line 1083 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1084 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 296:
-#line 1085 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1086 "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);
break;
case 297:
-#line 1091 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1092 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 298:
-#line 1093 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1094 "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);
break;
case 299:
-#line 1099 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1100 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 300:
-#line 1101 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1102 "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);
break;
case 301:
-#line 1107 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1108 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("require-client-classes", c);
break;
case 302:
-#line 1112 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1113 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
break;
case 303:
-#line 1117 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1118 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.RESERVATION_MODE);
}
break;
case 304:
-#line 1119 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1120 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as< ElementPtr > ());
ctx.leave();
break;
case 305:
-#line 1124 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1125 "dhcp4_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); }
#line 2048 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 306:
-#line 1125 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1126 "dhcp4_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); }
#line 2054 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 307:
-#line 1126 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1127 "dhcp4_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("global", ctx.loc2pos(yystack_[0].location))); }
#line 2060 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 308:
-#line 1127 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1128 "dhcp4_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); }
#line 2066 "dhcp4_parser.cc" // lalr1.cc:859
break;
case 309:
-#line 1130 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1131 "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);
break;
case 310:
-#line 1137 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1138 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("shared-networks", l);
break;
case 311:
-#line 1142 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1143 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
break;
case 316:
-#line 1157 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1158 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
break;
case 317:
-#line 1161 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1162 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
}
break;
case 338:
-#line 1193 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1194 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("option-def", l);
break;
case 339:
-#line 1198 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1199 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
break;
case 340:
-#line 1206 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1207 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
break;
case 341:
-#line 1209 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1210 "dhcp4_parser.yy" // lalr1.cc:859
{
// parsing completed
}
break;
case 346:
-#line 1225 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1226 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
break;
case 347:
-#line 1229 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1230 "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));
break;
case 348:
-#line 1240 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1241 "dhcp4_parser.yy" // lalr1.cc:859
{
// Parse the option-def list entry map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
break;
case 349:
-#line 1244 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1245 "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));
break;
case 365:
-#line 1276 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1277 "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);
break;
case 367:
-#line 1283 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1284 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 368:
-#line 1285 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1286 "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);
break;
case 369:
-#line 1291 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1292 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 370:
-#line 1293 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1294 "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);
break;
case 371:
-#line 1299 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1300 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 372:
-#line 1301 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1302 "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);
break;
case 374:
-#line 1309 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1310 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 375:
-#line 1311 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1312 "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);
break;
case 376:
-#line 1317 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1318 "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);
break;
case 377:
-#line 1326 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1327 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("option-data", l);
break;
case 378:
-#line 1331 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1332 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
break;
case 383:
-#line 1350 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1351 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
break;
case 384:
-#line 1354 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1355 "dhcp4_parser.yy" // lalr1.cc:859
{
/// @todo: the code or name parameters are required.
ctx.stack_.pop_back();
break;
case 385:
-#line 1362 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1363 "dhcp4_parser.yy" // lalr1.cc:859
{
// Parse the option-data list entry map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
break;
case 386:
-#line 1366 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1367 "dhcp4_parser.yy" // lalr1.cc:859
{
/// @todo: the code or name parameters are required.
// parsing completed
break;
case 401:
-#line 1399 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1400 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 402:
-#line 1401 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1402 "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);
break;
case 405:
-#line 1411 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1412 "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);
break;
case 406:
-#line 1416 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1417 "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);
break;
case 407:
-#line 1424 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1425 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("pools", l);
break;
case 408:
-#line 1429 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1430 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
break;
case 413:
-#line 1444 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1445 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
break;
case 414:
-#line 1448 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1449 "dhcp4_parser.yy" // lalr1.cc:859
{
// The pool parameter is required.
ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
break;
case 415:
-#line 1454 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1455 "dhcp4_parser.yy" // lalr1.cc:859
{
// Parse the pool list entry map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
break;
case 416:
-#line 1458 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1459 "dhcp4_parser.yy" // lalr1.cc:859
{
// The pool parameter is required.
ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
break;
case 426:
-#line 1477 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1478 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 427:
-#line 1479 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1480 "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);
break;
case 428:
-#line 1485 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1486 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 429:
-#line 1487 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1488 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr parent = ctx.stack_.back();
ElementPtr user_context = yystack_[0].value.as< ElementPtr > ();
break;
case 430:
-#line 1510 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1511 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 431:
-#line 1512 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1513 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr parent = ctx.stack_.back();
ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location)));
break;
case 432:
-#line 1540 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1541 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("reservations", l);
break;
case 433:
-#line 1545 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1546 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
break;
case 438:
-#line 1558 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1559 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
break;
case 439:
-#line 1562 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1563 "dhcp4_parser.yy" // lalr1.cc:859
{
/// @todo: an identifier parameter is required.
ctx.stack_.pop_back();
break;
case 440:
-#line 1567 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1568 "dhcp4_parser.yy" // lalr1.cc:859
{
// Parse the reservations list entry map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
break;
case 441:
-#line 1571 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1572 "dhcp4_parser.yy" // lalr1.cc:859
{
/// @todo: an identifier parameter is required.
// parsing completed
break;
case 461:
-#line 1602 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1603 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 462:
-#line 1604 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1605 "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);
break;
case 463:
-#line 1610 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1611 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 464:
-#line 1612 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1613 "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);
break;
case 465:
-#line 1618 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1619 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 466:
-#line 1620 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1621 "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);
break;
case 467:
-#line 1626 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1627 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 468:
-#line 1628 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1629 "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);
break;
case 469:
-#line 1634 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1635 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("ip-addresses", l);
break;
case 470:
-#line 1639 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1640 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
break;
case 471:
-#line 1644 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1645 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 472:
-#line 1646 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1647 "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);
break;
case 473:
-#line 1652 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1653 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 474:
-#line 1654 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1655 "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);
break;
case 475:
-#line 1660 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1661 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 476:
-#line 1662 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1663 "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);
break;
case 477:
-#line 1668 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1669 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 478:
-#line 1670 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1671 "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);
break;
case 479:
-#line 1676 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1677 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 480:
-#line 1678 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1679 "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);
break;
case 481:
-#line 1684 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1685 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 482:
-#line 1686 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1687 "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);
break;
case 483:
-#line 1692 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1693 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("client-classes", c);
break;
case 484:
-#line 1697 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1698 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
break;
case 485:
-#line 1705 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1706 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("relay", m);
break;
case 486:
-#line 1710 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1711 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
break;
case 489:
-#line 1722 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1723 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("client-classes", l);
break;
case 490:
-#line 1727 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1728 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
break;
case 493:
-#line 1736 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1737 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
break;
case 494:
-#line 1740 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1741 "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));
break;
case 511:
-#line 1769 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1770 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 512:
-#line 1771 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1772 "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);
break;
case 513:
-#line 1777 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1778 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("only-if-required", b);
break;
case 514:
-#line 1786 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1787 "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);
break;
case 515:
-#line 1793 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1794 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("control-socket", m);
break;
case 516:
-#line 1798 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1799 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
break;
case 524:
-#line 1814 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1815 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 525:
-#line 1816 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1817 "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);
break;
case 526:
-#line 1822 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1823 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
break;
case 527:
-#line 1824 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1825 "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);
break;
case 528:
-#line 1833 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1834 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("queue-control", m);
break;
case 529:
-#line 1838 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1839 "dhcp4_parser.yy" // lalr1.cc:859
{
+ ctx.require("queue-type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
ctx.require("capacity", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2979 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2980 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 536:
-#line 1854 "dhcp4_parser.yy" // lalr1.cc:859
+ case 537:
+#line 1857 "dhcp4_parser.yy" // lalr1.cc:859
+ {
+ ctx.enter(ctx.NO_KEYWORD);
+}
+#line 2988 "dhcp4_parser.cc" // lalr1.cc:859
+ break;
+
+ case 538:
+#line 1859 "dhcp4_parser.yy" // lalr1.cc:859
+ {
+ ElementPtr qtype(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
+ ctx.stack_.back()->set("queue-type", qtype);
+ ctx.leave();
+}
+#line 2998 "dhcp4_parser.cc" // lalr1.cc:859
+ break;
+
+ case 539:
+#line 1865 "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("capacity", i);
}
-#line 2988 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3007 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 537:
-#line 1861 "dhcp4_parser.yy" // lalr1.cc:859
+ case 540:
+#line 1872 "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 2999 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3018 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 538:
-#line 1866 "dhcp4_parser.yy" // lalr1.cc:859
+ case 541:
+#line 1877 "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 3010 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3029 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 539:
-#line 1873 "dhcp4_parser.yy" // lalr1.cc:859
+ case 542:
+#line 1884 "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 3020 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3039 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 540:
-#line 1877 "dhcp4_parser.yy" // lalr1.cc:859
+ case 543:
+#line 1888 "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 3030 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3049 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 562:
-#line 1908 "dhcp4_parser.yy" // lalr1.cc:859
+ case 565:
+#line 1919 "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 3039 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3058 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 563:
-#line 1913 "dhcp4_parser.yy" // lalr1.cc:859
+ case 566:
+#line 1924 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3047 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3066 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 564:
-#line 1915 "dhcp4_parser.yy" // lalr1.cc:859
+ case 567:
+#line 1926 "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 3057 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3076 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 565:
-#line 1921 "dhcp4_parser.yy" // lalr1.cc:859
+ case 568:
+#line 1932 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3065 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3084 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 566:
-#line 1923 "dhcp4_parser.yy" // lalr1.cc:859
+ case 569:
+#line 1934 "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 3075 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3094 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 567:
-#line 1929 "dhcp4_parser.yy" // lalr1.cc:859
+ case 570:
+#line 1940 "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 3084 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3103 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 568:
-#line 1934 "dhcp4_parser.yy" // lalr1.cc:859
+ case 571:
+#line 1945 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3092 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3111 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 569:
-#line 1936 "dhcp4_parser.yy" // lalr1.cc:859
+ case 572:
+#line 1947 "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 3102 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3121 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 570:
-#line 1942 "dhcp4_parser.yy" // lalr1.cc:859
+ case 573:
+#line 1953 "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 3111 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3130 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 571:
-#line 1947 "dhcp4_parser.yy" // lalr1.cc:859
+ case 574:
+#line 1958 "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 3120 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3139 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 572:
-#line 1952 "dhcp4_parser.yy" // lalr1.cc:859
+ case 575:
+#line 1963 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NCR_PROTOCOL);
}
-#line 3128 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3147 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 573:
-#line 1954 "dhcp4_parser.yy" // lalr1.cc:859
+ case 576:
+#line 1965 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as< ElementPtr > ());
ctx.leave();
}
-#line 3137 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3156 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 574:
-#line 1960 "dhcp4_parser.yy" // lalr1.cc:859
+ case 577:
+#line 1971 "dhcp4_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
-#line 3143 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3162 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 575:
-#line 1961 "dhcp4_parser.yy" // lalr1.cc:859
+ case 578:
+#line 1972 "dhcp4_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
-#line 3149 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3168 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 576:
-#line 1964 "dhcp4_parser.yy" // lalr1.cc:859
+ case 579:
+#line 1975 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NCR_FORMAT);
}
-#line 3157 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3176 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 577:
-#line 1966 "dhcp4_parser.yy" // lalr1.cc:859
+ case 580:
+#line 1977 "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 3167 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3186 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 578:
-#line 1972 "dhcp4_parser.yy" // lalr1.cc:859
+ case 581:
+#line 1983 "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 3176 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3195 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 579:
-#line 1977 "dhcp4_parser.yy" // lalr1.cc:859
+ case 582:
+#line 1988 "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 3185 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3204 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 580:
-#line 1982 "dhcp4_parser.yy" // lalr1.cc:859
+ case 583:
+#line 1993 "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 3194 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3213 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 581:
-#line 1987 "dhcp4_parser.yy" // lalr1.cc:859
+ case 584:
+#line 1998 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.REPLACE_CLIENT_NAME);
}
-#line 3202 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3221 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 582:
-#line 1989 "dhcp4_parser.yy" // lalr1.cc:859
+ case 585:
+#line 2000 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as< ElementPtr > ());
ctx.leave();
}
-#line 3211 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3230 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 583:
-#line 1995 "dhcp4_parser.yy" // lalr1.cc:859
+ case 586:
+#line 2006 "dhcp4_parser.yy" // lalr1.cc:859
{
yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location)));
}
-#line 3219 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3238 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 584:
-#line 1998 "dhcp4_parser.yy" // lalr1.cc:859
+ case 587:
+#line 2009 "dhcp4_parser.yy" // lalr1.cc:859
{
yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
}
-#line 3227 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3246 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 585:
-#line 2001 "dhcp4_parser.yy" // lalr1.cc:859
+ case 588:
+#line 2012 "dhcp4_parser.yy" // lalr1.cc:859
{
yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
}
-#line 3235 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3254 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 586:
-#line 2004 "dhcp4_parser.yy" // lalr1.cc:859
+ case 589:
+#line 2015 "dhcp4_parser.yy" // lalr1.cc:859
{
yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
}
-#line 3243 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3262 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 587:
-#line 2007 "dhcp4_parser.yy" // lalr1.cc:859
+ case 590:
+#line 2018 "dhcp4_parser.yy" // lalr1.cc:859
{
error(yystack_[0].location, "boolean values for the replace-client-name are "
"no longer supported");
}
-#line 3252 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3271 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 588:
-#line 2013 "dhcp4_parser.yy" // lalr1.cc:859
+ case 591:
+#line 2024 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3260 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3279 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 589:
-#line 2015 "dhcp4_parser.yy" // lalr1.cc:859
+ case 592:
+#line 2026 "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 3270 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3289 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 590:
-#line 2021 "dhcp4_parser.yy" // lalr1.cc:859
+ case 593:
+#line 2032 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3278 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3297 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 591:
-#line 2023 "dhcp4_parser.yy" // lalr1.cc:859
+ case 594:
+#line 2034 "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("hostname-char-set", s);
ctx.leave();
}
-#line 3288 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3307 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 592:
-#line 2029 "dhcp4_parser.yy" // lalr1.cc:859
+ case 595:
+#line 2040 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3296 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3315 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 593:
-#line 2031 "dhcp4_parser.yy" // lalr1.cc:859
+ case 596:
+#line 2042 "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("hostname-char-replacement", s);
ctx.leave();
}
-#line 3306 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3325 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 594:
-#line 2040 "dhcp4_parser.yy" // lalr1.cc:859
+ case 597:
+#line 2051 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3314 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3333 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 595:
-#line 2042 "dhcp4_parser.yy" // lalr1.cc:859
+ case 598:
+#line 2053 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.back()->set("Dhcp6", yystack_[0].value.as< ElementPtr > ());
ctx.leave();
}
-#line 3323 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3342 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 596:
-#line 2047 "dhcp4_parser.yy" // lalr1.cc:859
+ case 599:
+#line 2058 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3331 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3350 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 597:
-#line 2049 "dhcp4_parser.yy" // lalr1.cc:859
+ case 600:
+#line 2060 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ());
ctx.leave();
}
-#line 3340 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3359 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 598:
-#line 2054 "dhcp4_parser.yy" // lalr1.cc:859
+ case 601:
+#line 2065 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3348 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3367 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 599:
-#line 2056 "dhcp4_parser.yy" // lalr1.cc:859
+ case 602:
+#line 2067 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.back()->set("Control-agent", yystack_[0].value.as< ElementPtr > ());
ctx.leave();
}
-#line 3357 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3376 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 600:
-#line 2061 "dhcp4_parser.yy" // lalr1.cc:859
+ case 603:
+#line 2072 "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 3367 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3386 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 601:
-#line 2065 "dhcp4_parser.yy" // lalr1.cc:859
+ case 604:
+#line 2076 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
}
-#line 3375 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3394 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 602:
-#line 2070 "dhcp4_parser.yy" // lalr1.cc:859
+ case 605:
+#line 2081 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("config-control", i);
ctx.stack_.push_back(i);
ctx.enter(ctx.CONFIG_CONTROL);
}
-#line 3386 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3405 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 603:
-#line 2075 "dhcp4_parser.yy" // lalr1.cc:859
+ case 606:
+#line 2086 "dhcp4_parser.yy" // lalr1.cc:859
{
// No config control params are required
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3396 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3415 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 604:
-#line 2081 "dhcp4_parser.yy" // lalr1.cc:859
+ case 607:
+#line 2092 "dhcp4_parser.yy" // lalr1.cc:859
{
// Parse the config-control map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 3406 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3425 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 605:
-#line 2085 "dhcp4_parser.yy" // lalr1.cc:859
+ case 608:
+#line 2096 "dhcp4_parser.yy" // lalr1.cc:859
{
// No config_control params are required
// parsing completed
}
-#line 3415 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3434 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 610:
-#line 2100 "dhcp4_parser.yy" // lalr1.cc:859
+ case 613:
+#line 2111 "dhcp4_parser.yy" // lalr1.cc:859
{
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("config-databases", l);
ctx.stack_.push_back(l);
ctx.enter(ctx.CONFIG_DATABASE);
}
-#line 3426 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3445 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 611:
-#line 2105 "dhcp4_parser.yy" // lalr1.cc:859
+ case 614:
+#line 2116 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3435 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3454 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 612:
-#line 2115 "dhcp4_parser.yy" // lalr1.cc:859
+ case 615:
+#line 2126 "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 3446 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3465 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 613:
-#line 2120 "dhcp4_parser.yy" // lalr1.cc:859
+ case 616:
+#line 2131 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3455 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3474 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 614:
-#line 2125 "dhcp4_parser.yy" // lalr1.cc:859
+ case 617:
+#line 2136 "dhcp4_parser.yy" // lalr1.cc:859
{
// Parse the Logging map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 3465 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3484 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 615:
-#line 2129 "dhcp4_parser.yy" // lalr1.cc:859
+ case 618:
+#line 2140 "dhcp4_parser.yy" // lalr1.cc:859
{
// parsing completed
}
-#line 3473 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3492 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 619:
-#line 2145 "dhcp4_parser.yy" // lalr1.cc:859
+ case 622:
+#line 2156 "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 3484 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3503 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 620:
-#line 2150 "dhcp4_parser.yy" // lalr1.cc:859
+ case 623:
+#line 2161 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3493 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3512 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 623:
-#line 2162 "dhcp4_parser.yy" // lalr1.cc:859
+ case 626:
+#line 2173 "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 3503 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3522 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 624:
-#line 2166 "dhcp4_parser.yy" // lalr1.cc:859
+ case 627:
+#line 2177 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
}
-#line 3511 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3530 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 634:
-#line 2183 "dhcp4_parser.yy" // lalr1.cc:859
+ case 637:
+#line 2194 "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 3520 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3539 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 635:
-#line 2188 "dhcp4_parser.yy" // lalr1.cc:859
+ case 638:
+#line 2199 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3528 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3547 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 636:
-#line 2190 "dhcp4_parser.yy" // lalr1.cc:859
+ case 639:
+#line 2201 "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 3538 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3557 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 637:
-#line 2196 "dhcp4_parser.yy" // lalr1.cc:859
+ case 640:
+#line 2207 "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 3549 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3568 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 638:
-#line 2201 "dhcp4_parser.yy" // lalr1.cc:859
+ case 641:
+#line 2212 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3558 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3577 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 641:
-#line 2210 "dhcp4_parser.yy" // lalr1.cc:859
+ case 644:
+#line 2221 "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 3568 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3587 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 642:
-#line 2214 "dhcp4_parser.yy" // lalr1.cc:859
+ case 645:
+#line 2225 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
}
-#line 3576 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3595 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 649:
-#line 2228 "dhcp4_parser.yy" // lalr1.cc:859
+ case 652:
+#line 2239 "dhcp4_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3584 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3603 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 650:
-#line 2230 "dhcp4_parser.yy" // lalr1.cc:859
+ case 653:
+#line 2241 "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 3594 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3613 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 651:
-#line 2236 "dhcp4_parser.yy" // lalr1.cc:859
+ case 654:
+#line 2247 "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 3603 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3622 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 652:
-#line 2241 "dhcp4_parser.yy" // lalr1.cc:859
+ case 655:
+#line 2252 "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 3612 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3631 "dhcp4_parser.cc" // lalr1.cc:859
break;
- case 653:
-#line 2246 "dhcp4_parser.yy" // lalr1.cc:859
+ case 656:
+#line 2257 "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);
}
-#line 3621 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3640 "dhcp4_parser.cc" // lalr1.cc:859
break;
-#line 3625 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3644 "dhcp4_parser.cc" // lalr1.cc:859
default:
break;
}
}
- const short int Dhcp4Parser::yypact_ninf_ = -811;
+ const short int Dhcp4Parser::yypact_ninf_ = -813;
const signed char Dhcp4Parser::yytable_ninf_ = -1;
const short int
Dhcp4Parser::yypact_[] =
{
- 155, -811, -811, -811, -811, -811, -811, -811, -811, -811,
- -811, -811, -811, -811, -811, 55, 21, 24, 52, 74,
- 78, 121, 123, 130, 141, 156, 163, 187, 193, 195,
- -811, -811, -811, -811, -811, -811, -811, -811, -811, -811,
- -811, -811, -811, -811, -811, -811, -811, -811, -811, -811,
- -811, -811, -811, -811, -811, -811, -811, -811, -811, -811,
- -811, -811, -811, -811, -811, -811, -811, -811, 21, -83,
- 42, 64, 47, 179, 37, 188, 83, 230, 159, -52,
- 434, 45, 32, -811, 205, 225, 238, 221, 248, -811,
- -811, -811, -811, -811, 249, -811, 76, -811, -811, -811,
- -811, -811, -811, -811, -811, -811, -811, 271, 274, -811,
- -811, -811, -811, -811, -811, 284, 294, 298, 325, -811,
- -811, -811, -811, -811, -811, -811, -811, -811, -811, -811,
- -811, 333, -811, -811, -811, -811, 79, -811, -811, -811,
- -811, -811, -811, -811, -811, -811, -811, -811, -811, -811,
- -811, -811, -811, -811, -811, -811, -811, -811, -811, -811,
- -811, -811, -811, -811, -811, -811, -811, -811, -811, -811,
- -811, -811, 337, -811, 107, -811, -811, -811, -811, -811,
- -811, -811, -811, -811, -811, -811, -811, -811, 359, -811,
- -811, -811, -811, -811, -811, -811, -811, -811, 126, -811,
- -811, -811, -811, -811, -811, -811, -811, -811, -811, -811,
- -811, -811, -811, -811, -811, -811, -811, -811, -811, -811,
- -811, -811, -811, 154, -811, -811, -811, -811, -811, -811,
- -811, -811, -811, -811, -811, -811, -811, -811, -811, -811,
- 253, 276, -811, -811, -811, -811, -811, -811, -811, -811,
- -811, -811, -811, -811, 332, -811, -811, 362, -811, -811,
- -811, 364, -811, -811, 341, 368, -811, -811, -811, -811,
- -811, -811, -811, -811, -811, -811, -811, -811, -811, 369,
- 370, -811, -811, -811, -811, 377, 374, -811, -811, -811,
- -811, -811, -811, -811, -811, -811, -811, -811, -811, 158,
- -811, -811, -811, 384, -811, -811, 387, -811, 391, 394,
- -811, -811, 398, 399, 404, -811, -811, -811, -811, -811,
- -811, -811, 161, -811, -811, -811, -811, -811, -811, -811,
- -811, -811, -811, -811, -811, -811, -811, -811, -811, -811,
- -811, 164, -811, -811, -811, -811, 170, -811, -811, -811,
- 21, 21, -811, 243, 407, 409, 411, 412, 418, -811,
- 42, -811, 32, 419, 420, 422, 258, 269, 435, 436,
- 453, 454, 455, 460, 245, 299, 300, 302, 468, 469,
- 470, 471, 472, 473, 474, 475, 476, 477, 478, 481,
- 322, 483, 486, 487, 64, -811, 488, 489, 490, 327,
- 47, -811, 493, 495, 496, 497, 498, 499, 338, 500,
- 507, 508, 509, 179, -811, 510, 37, -811, 512, 513,
- 514, 515, 518, 519, 520, 521, -811, 188, -811, 522,
- 524, 365, 525, 527, 529, 366, -811, 230, 530, 371,
- 372, -811, 159, 535, 538, -30, -811, 375, 539, 541,
- 379, 547, 400, 410, 562, 571, 413, 414, 415, 572,
- 574, 575, 576, 434, -811, 577, 45, -811, 581, 32,
- -811, -811, -811, 582, 580, 583, 21, 21, 21, -811,
- 209, 584, 585, 586, -811, -811, 423, 428, 429, 589,
- 590, 593, -811, -811, -811, -811, 433, 596, 597, 598,
- 599, 600, 439, 601, 603, 604, 605, 606, -811, 607,
- 608, 609, -811, 612, 92, 190, -811, -811, 445, 446,
- 452, 614, 456, 457, -811, 137, 612, 458, 613, -811,
- 459, -811, 612, 461, 462, 463, 464, 465, 466, 467,
- -811, 479, 480, -811, 482, 484, 485, -811, -811, 491,
- -811, -811, -811, 492, 21, -811, -811, 494, 501, -811,
- 502, -811, -811, 28, 503, -811, -811, -811, -34, 504,
- 505, 506, -811, 616, -811, 621, -811, 21, 64, 45,
- -811, -811, -811, -811, 32, 47, 565, -811, -811, -811,
- 405, 405, 627, -811, 628, 630, 631, 632, -811, -811,
- -811, 59, 633, 634, 635, 226, 29, 31, 434, -811,
- -811, -811, -811, -811, -811, -811, -811, -811, -811, -811,
- 636, -811, -811, -811, -811, -811, -811, -811, -811, -811,
- 84, -811, -811, -811, -811, -811, -811, -811, -811, -811,
- -811, -811, -811, -811, -811, -811, -811, -811, -811, -811,
- -811, -811, -811, -811, -811, -811, -811, -811, -811, -811,
- -811, -811, -811, -811, 637, 627, -811, 237, 240, 241,
- 257, -811, 264, -811, -811, -811, -811, -811, -811, 643,
- 645, 648, 649, 650, -811, -811, 651, 652, 655, 657,
- 658, -811, 265, -811, -811, -811, -811, -811, -811, -811,
- -811, -811, -811, -811, -811, -811, -811, -811, -811, -811,
- -811, 268, -811, 659, 660, -811, -811, 663, 661, -811,
- -811, 667, 671, -811, -811, 669, 673, -811, -811, 672,
- 674, -811, -811, -811, -811, -811, -811, 60, -811, -811,
- -811, -811, -811, -811, -811, 135, -811, -811, 675, 676,
- -811, -811, 677, 679, -811, 662, 680, 681, 682, 683,
- 684, 283, -811, -811, -811, -811, -811, -811, -811, -811,
- -811, -811, -811, -811, 286, -811, -811, -811, 685, -811,
- -811, -811, 289, -811, -811, 318, 526, -811, 687, 688,
- -811, -811, -811, -811, 686, -811, 168, -811, 689, -811,
- -811, -811, -811, 692, 565, -811, 693, 694, 695, 696,
- 523, 511, 534, 533, 536, 700, 701, 540, 542, 543,
- 544, 537, 405, -811, -811, 405, -811, 627, 179, -811,
- 628, 230, -811, 630, 159, -811, 631, 408, -811, 632,
- 59, -811, 70, 633, -811, 188, -811, 634, -52, -811,
- 635, 545, 546, 548, 549, 550, 551, 226, -811, 704,
- 710, 29, -811, 552, 31, -811, -811, -811, 714, 718,
- 37, -811, 636, 719, -811, 275, 637, -811, -811, 556,
- -811, 347, 558, 559, 560, -811, -811, -811, -811, -811,
- 561, 563, -811, -811, -811, -811, -811, -811, 319, -811,
- 320, -811, 720, -811, 722, -811, -811, -811, -811, -811,
- -811, -811, -811, -811, -811, -811, -811, 336, -811, -811,
- -811, -811, -811, -811, -811, -811, -811, -811, -811, 727,
- -811, -811, -811, -811, -811, -811, -811, -811, -811, 724,
- 730, -811, -811, -811, -811, -811, 726, -811, 344, -811,
- -811, -811, -811, -811, -811, -811, -811, 569, 570, -811,
- -811, -811, -811, 573, 345, -811, 612, -811, 733, -811,
- -811, -811, -811, -811, 353, -811, -811, -811, -811, -811,
- -811, -811, -811, -811, -811, -811, -811, -811, -811, -811,
- -811, -811, -811, -811, -811, 408, -811, 734, 578, -811,
- 70, -811, -811, -811, -811, -811, -811, -811, 736, 579,
- 737, 275, -811, -811, 587, -811, -811, 738, -811, 588,
- -811, -811, 735, -811, -811, 174, -811, -90, 735, -811,
- -811, 740, 741, 744, 356, -811, -811, -811, -811, -811,
- -811, 745, 591, 592, 602, -90, -811, 617, -811, -811,
- -811, -811, -811
+ 439, -813, -813, -813, -813, -813, -813, -813, -813, -813,
+ -813, -813, -813, -813, -813, 45, 29, 60, 64, 66,
+ 70, 86, 88, 90, 99, 108, 110, 123, 142, 152,
+ -813, -813, -813, -813, -813, -813, -813, -813, -813, -813,
+ -813, -813, -813, -813, -813, -813, -813, -813, -813, -813,
+ -813, -813, -813, -813, -813, -813, -813, -813, -813, -813,
+ -813, -813, -813, -813, -813, -813, -813, -813, 29, 3,
+ 42, 57, 51, 154, 196, 239, 127, 412, 337, -60,
+ 420, 32, 34, -813, 180, 192, 199, 203, 214, -813,
+ -813, -813, -813, -813, 215, -813, 96, -813, -813, -813,
+ -813, -813, -813, -813, -813, -813, -813, 224, 242, -813,
+ -813, -813, -813, -813, -813, 249, 276, 277, 287, -813,
+ -813, -813, -813, -813, -813, -813, -813, -813, -813, -813,
+ -813, 295, -813, -813, -813, -813, 113, -813, -813, -813,
+ -813, -813, -813, -813, -813, -813, -813, -813, -813, -813,
+ -813, -813, -813, -813, -813, -813, -813, -813, -813, -813,
+ -813, -813, -813, -813, -813, -813, -813, -813, -813, -813,
+ -813, -813, 306, -813, 136, -813, -813, -813, -813, -813,
+ -813, -813, -813, -813, -813, -813, -813, -813, 315, -813,
+ -813, -813, -813, -813, -813, -813, -813, -813, 138, -813,
+ -813, -813, -813, -813, -813, -813, -813, -813, -813, -813,
+ -813, -813, -813, -813, -813, -813, -813, -813, -813, -813,
+ -813, -813, -813, 144, -813, -813, -813, -813, -813, -813,
+ -813, -813, -813, -813, -813, -813, -813, -813, -813, -813,
+ 318, 324, -813, -813, -813, -813, -813, -813, -813, -813,
+ -813, -813, -813, -813, 321, -813, -813, 335, -813, -813,
+ -813, 336, -813, -813, 333, 341, -813, -813, -813, -813,
+ -813, -813, -813, -813, -813, -813, -813, -813, -813, 343,
+ 349, -813, -813, -813, -813, 347, 342, -813, -813, -813,
+ -813, -813, -813, -813, -813, -813, -813, -813, -813, 157,
+ -813, -813, -813, 354, -813, -813, 358, -813, 361, 364,
+ -813, -813, 365, 367, 369, -813, -813, -813, -813, -813,
+ -813, -813, 159, -813, -813, -813, -813, -813, -813, -813,
+ -813, -813, -813, -813, -813, -813, -813, -813, -813, -813,
+ -813, 163, -813, -813, -813, -813, 170, -813, -813, -813,
+ 29, 29, -813, 210, 370, 374, 376, 378, 380, -813,
+ 42, -813, 34, 382, 383, 384, 221, 225, 390, 394,
+ 403, 404, 405, 411, 248, 256, 258, 259, 415, 425,
+ 426, 427, 429, 431, 432, 433, 441, 443, 446, 447,
+ 275, 449, 465, 466, 57, -813, 467, 468, 470, 309,
+ 51, -813, 472, 480, 481, 482, 485, 486, 323, 488,
+ 489, 490, 493, 154, -813, 494, 196, -813, 496, 497,
+ 498, 499, 501, 502, 503, 505, -813, 239, -813, 506,
+ 507, 344, 509, 510, 512, 348, -813, 412, 513, 353,
+ 355, -813, 337, 515, 520, 74, -813, 356, 523, 524,
+ 362, 525, 363, 366, 528, 531, 387, 388, 391, 549,
+ 558, 559, 560, 420, -813, 561, 32, -813, 562, 34,
+ -813, -813, -813, 563, 564, 565, 29, 29, 29, -813,
+ 207, 566, 567, 568, -813, -813, 402, 409, 410, 571,
+ 573, 576, -813, -813, -813, -813, 416, 577, 580, 581,
+ 583, 599, 440, 603, 604, 605, 606, 607, -813, 608,
+ 609, 610, -813, 613, 168, 31, -813, -813, 445, 452,
+ 453, 616, 455, 456, -813, 268, 613, 457, 618, -813,
+ 459, -813, 613, 460, 461, 462, 463, 464, 469, 471,
+ -813, 473, 474, -813, 475, 476, 477, -813, -813, 478,
+ -813, -813, -813, 479, 29, -813, -813, 483, 484, -813,
+ 487, -813, -813, 20, 436, -813, -813, -813, 19, 491,
+ 492, 495, -813, 627, -813, 628, -813, 29, 57, 32,
+ -813, -813, -813, -813, 34, 51, 590, -813, -813, -813,
+ 417, 417, 630, -813, 632, 640, 641, 642, -813, -813,
+ -813, 128, 645, 646, 648, 198, -22, -27, 420, -813,
+ -813, -813, -813, -813, -813, -813, -813, -813, -813, -813,
+ 649, -813, -813, -813, -813, -813, -813, -813, -813, -813,
+ 137, -813, -813, -813, -813, -813, -813, -813, -813, -813,
+ -813, -813, -813, -813, -813, -813, -813, -813, -813, -813,
+ -813, -813, -813, -813, -813, -813, -813, -813, -813, -813,
+ -813, -813, -813, -813, 650, 630, -813, 232, 235, 251,
+ 252, -813, 253, -813, -813, -813, -813, -813, -813, 631,
+ 656, 657, 659, 660, -813, -813, 661, 662, 663, 664,
+ 665, -813, 254, -813, -813, -813, -813, -813, -813, -813,
+ -813, -813, -813, -813, -813, -813, -813, -813, -813, -813,
+ -813, 260, -813, 666, 667, -813, -813, 668, 670, -813,
+ -813, 669, 673, -813, -813, 671, 675, -813, -813, 674,
+ 676, -813, -813, -813, -813, -813, -813, 41, -813, -813,
+ -813, -813, -813, -813, -813, 56, -813, -813, 677, 678,
+ -813, -813, 679, 681, -813, 682, 683, 684, 685, 686,
+ 687, 261, -813, -813, -813, -813, -813, -813, -813, -813,
+ -813, -813, -813, -813, 270, -813, -813, -813, -813, 688,
+ -813, -813, -813, 274, -813, -813, -813, 284, 504, -813,
+ 689, 690, -813, -813, -813, -813, 626, -813, 102, -813,
+ 691, -813, -813, -813, -813, 692, 590, -813, 694, 695,
+ 696, 697, 514, 532, 526, 533, 536, 701, 702, 539,
+ 540, 541, 542, 543, 417, -813, -813, 417, -813, 630,
+ 154, -813, 632, 412, -813, 640, 337, -813, 641, 222,
+ -813, 642, 128, -813, 75, 645, -813, 239, -813, 646,
+ -60, -813, 648, 544, 546, 547, 548, 550, 551, 198,
+ -813, 707, 713, -22, -813, 716, 553, -27, -813, -813,
+ -813, 717, 719, 196, -813, 649, 720, -813, 59, 650,
+ -813, -813, 569, -813, 406, 570, 572, 574, -813, -813,
+ -813, -813, -813, 575, 578, -813, -813, -813, -813, -813,
+ -813, 285, -813, 286, -813, 718, -813, 721, -813, -813,
+ -813, -813, -813, -813, -813, -813, -813, -813, -813, -813,
+ 308, -813, -813, -813, -813, -813, -813, -813, -813, -813,
+ -813, -813, 723, -813, -813, -813, -813, -813, -813, -813,
+ -813, -813, 722, 725, -813, -813, -813, -813, -813, 724,
+ -813, 310, -813, -813, -813, -813, -813, -813, -813, -813,
+ 579, 582, -813, 584, -813, -813, -813, 585, 314, -813,
+ 613, -813, 727, -813, -813, -813, -813, -813, 320, -813,
+ -813, -813, -813, -813, -813, -813, -813, -813, -813, -813,
+ -813, -813, -813, -813, -813, -813, -813, -813, -813, 222,
+ -813, 729, 555, -813, 75, -813, -813, -813, -813, -813,
+ -813, -813, -813, 730, 587, 731, 59, -813, -813, 586,
+ -813, -813, 733, -813, 589, -813, -813, 736, -813, -813,
+ 125, -813, -24, 736, -813, -813, 740, 743, 744, 334,
+ -813, -813, -813, -813, -813, -813, 746, 588, 591, 593,
+ -24, -813, 595, -813, -813, -813, -813, -813
};
const unsigned short int
1, 45, 38, 34, 33, 30, 31, 32, 37, 3,
35, 36, 58, 5, 70, 7, 125, 9, 262, 11,
415, 13, 440, 15, 340, 17, 348, 19, 385, 21,
- 227, 23, 539, 25, 614, 27, 604, 29, 47, 41,
+ 227, 23, 542, 25, 617, 27, 607, 29, 47, 41,
0, 0, 0, 0, 0, 442, 0, 350, 387, 0,
0, 0, 0, 49, 0, 48, 0, 0, 42, 68,
- 612, 594, 596, 598, 0, 67, 0, 60, 62, 64,
- 65, 66, 63, 600, 602, 114, 140, 0, 0, 461,
+ 615, 597, 599, 601, 0, 67, 0, 60, 62, 64,
+ 65, 66, 63, 603, 605, 114, 140, 0, 0, 461,
463, 465, 138, 147, 149, 0, 0, 0, 0, 110,
254, 338, 377, 310, 428, 430, 205, 489, 432, 219,
- 238, 0, 515, 528, 537, 105, 0, 72, 74, 75,
+ 238, 0, 515, 528, 540, 105, 0, 72, 74, 75,
76, 77, 104, 94, 95, 80, 81, 101, 82, 83,
84, 88, 89, 78, 79, 86, 87, 99, 100, 102,
96, 97, 98, 85, 90, 91, 92, 93, 103, 127,
356, 357, 373, 358, 359, 360, 361, 362, 401, 0,
0, 399, 400, 403, 404, 0, 388, 389, 391, 392,
393, 394, 395, 396, 397, 398, 234, 236, 231, 0,
- 229, 232, 233, 0, 563, 565, 0, 568, 0, 0,
- 572, 576, 0, 0, 0, 581, 588, 590, 592, 561,
- 559, 560, 0, 541, 543, 544, 545, 546, 547, 548,
- 549, 550, 551, 552, 553, 554, 555, 556, 557, 558,
- 619, 0, 616, 618, 610, 609, 0, 606, 608, 46,
+ 229, 232, 233, 0, 566, 568, 0, 571, 0, 0,
+ 575, 579, 0, 0, 0, 584, 591, 593, 595, 564,
+ 562, 563, 0, 544, 546, 547, 548, 549, 550, 551,
+ 552, 553, 554, 555, 556, 557, 558, 559, 560, 561,
+ 622, 0, 619, 621, 613, 612, 0, 609, 611, 46,
0, 0, 39, 0, 0, 0, 0, 0, 0, 57,
0, 59, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 349, 0, 0, 0,
0, 386, 0, 0, 0, 0, 228, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 540, 0, 0, 615, 0, 0,
- 605, 50, 43, 0, 0, 0, 0, 0, 0, 61,
+ 0, 0, 0, 0, 543, 0, 0, 618, 0, 0,
+ 608, 50, 43, 0, 0, 0, 0, 0, 0, 61,
0, 0, 0, 0, 112, 113, 0, 0, 0, 0,
0, 0, 106, 107, 108, 109, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 514, 0,
0, 0, 0, 0, 309, 0, 0, 0, 0, 265,
0, 418, 0, 0, 0, 0, 0, 0, 0, 0,
445, 0, 0, 365, 0, 0, 0, 376, 353, 0,
- 405, 406, 390, 0, 0, 230, 562, 0, 0, 567,
- 0, 570, 571, 0, 0, 578, 579, 580, 0, 0,
- 0, 0, 542, 0, 617, 0, 607, 0, 0, 0,
- 595, 597, 599, 601, 0, 0, 0, 462, 464, 466,
+ 405, 406, 390, 0, 0, 230, 565, 0, 0, 570,
+ 0, 573, 574, 0, 0, 581, 582, 583, 0, 0,
+ 0, 0, 545, 0, 620, 0, 610, 0, 0, 0,
+ 598, 600, 602, 604, 0, 0, 0, 462, 464, 466,
0, 0, 151, 111, 256, 342, 379, 312, 40, 429,
431, 0, 0, 434, 221, 0, 0, 0, 0, 51,
128, 131, 132, 130, 135, 136, 134, 292, 294, 296,
409, 290, 298, 305, 306, 307, 308, 304, 302, 300,
0, 427, 484, 472, 474, 478, 476, 482, 480, 468,
- 368, 191, 372, 370, 375, 402, 235, 237, 564, 566,
- 569, 574, 575, 573, 577, 583, 584, 585, 586, 587,
- 582, 589, 591, 593, 0, 151, 44, 0, 0, 0,
+ 368, 191, 372, 370, 375, 402, 235, 237, 567, 569,
+ 572, 577, 578, 576, 580, 586, 587, 588, 589, 590,
+ 585, 592, 594, 596, 0, 151, 44, 0, 0, 0,
0, 145, 0, 142, 144, 177, 183, 185, 187, 0,
0, 0, 0, 0, 199, 201, 0, 0, 0, 0,
0, 176, 0, 157, 159, 160, 161, 162, 163, 164,
210, 211, 212, 213, 493, 0, 491, 438, 0, 435,
436, 225, 0, 222, 223, 0, 0, 0, 0, 0,
0, 0, 240, 242, 243, 244, 245, 246, 247, 524,
- 526, 523, 521, 522, 0, 517, 519, 520, 0, 535,
- 533, 534, 0, 530, 532, 0, 53, 413, 0, 410,
- 411, 469, 487, 488, 0, 623, 0, 621, 0, 69,
- 613, 603, 115, 0, 0, 141, 0, 0, 0, 0,
+ 526, 523, 521, 522, 0, 517, 519, 520, 537, 0,
+ 536, 534, 535, 0, 530, 532, 533, 0, 53, 413,
+ 0, 410, 411, 469, 487, 488, 0, 626, 0, 624,
+ 0, 69, 616, 606, 115, 0, 0, 141, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 139, 148, 0, 150, 0, 0, 255,
- 0, 350, 339, 0, 387, 378, 0, 0, 311, 0,
- 0, 206, 495, 0, 490, 442, 433, 0, 0, 220,
- 0, 0, 0, 0, 0, 0, 0, 0, 239, 0,
- 0, 0, 516, 0, 0, 529, 538, 55, 0, 54,
- 0, 408, 0, 0, 486, 0, 0, 620, 611, 0,
- 143, 0, 0, 0, 0, 189, 192, 193, 194, 195,
- 0, 0, 203, 204, 196, 197, 198, 158, 0, 154,
- 0, 259, 0, 345, 0, 382, 337, 334, 323, 324,
- 326, 320, 321, 322, 332, 333, 331, 0, 318, 325,
- 335, 336, 327, 328, 329, 330, 315, 208, 511, 0,
- 509, 510, 502, 503, 507, 508, 504, 505, 506, 0,
- 496, 497, 499, 500, 501, 492, 0, 437, 0, 224,
- 248, 249, 250, 251, 252, 253, 241, 0, 0, 518,
- 536, 531, 52, 0, 0, 412, 0, 637, 0, 635,
- 633, 627, 631, 632, 0, 625, 629, 630, 628, 622,
- 146, 179, 180, 181, 182, 178, 184, 186, 188, 200,
- 202, 156, 261, 347, 384, 0, 317, 0, 0, 494,
- 0, 439, 226, 525, 527, 56, 414, 470, 0, 0,
- 0, 0, 624, 319, 0, 513, 498, 0, 634, 0,
- 626, 512, 0, 636, 641, 0, 639, 0, 0, 638,
- 649, 0, 0, 0, 0, 643, 645, 646, 647, 648,
- 640, 0, 0, 0, 0, 0, 642, 0, 651, 652,
- 653, 644, 650
+ 0, 0, 0, 0, 0, 139, 148, 0, 150, 0,
+ 0, 255, 0, 350, 339, 0, 387, 378, 0, 0,
+ 311, 0, 0, 206, 495, 0, 490, 442, 433, 0,
+ 0, 220, 0, 0, 0, 0, 0, 0, 0, 0,
+ 239, 0, 0, 0, 516, 0, 0, 0, 529, 541,
+ 55, 0, 54, 0, 408, 0, 0, 486, 0, 0,
+ 623, 614, 0, 143, 0, 0, 0, 0, 189, 192,
+ 193, 194, 195, 0, 0, 203, 204, 196, 197, 198,
+ 158, 0, 154, 0, 259, 0, 345, 0, 382, 337,
+ 334, 323, 324, 326, 320, 321, 322, 332, 333, 331,
+ 0, 318, 325, 335, 336, 327, 328, 329, 330, 315,
+ 208, 511, 0, 509, 510, 502, 503, 507, 508, 504,
+ 505, 506, 0, 496, 497, 499, 500, 501, 492, 0,
+ 437, 0, 224, 248, 249, 250, 251, 252, 253, 241,
+ 0, 0, 518, 0, 539, 531, 52, 0, 0, 412,
+ 0, 640, 0, 638, 636, 630, 634, 635, 0, 628,
+ 632, 633, 631, 625, 146, 179, 180, 181, 182, 178,
+ 184, 186, 188, 200, 202, 156, 261, 347, 384, 0,
+ 317, 0, 0, 494, 0, 439, 226, 525, 527, 538,
+ 56, 414, 470, 0, 0, 0, 0, 627, 319, 0,
+ 513, 498, 0, 637, 0, 629, 512, 0, 639, 644,
+ 0, 642, 0, 0, 641, 652, 0, 0, 0, 0,
+ 646, 648, 649, 650, 651, 643, 0, 0, 0, 0,
+ 0, 645, 0, 654, 655, 656, 647, 653
};
const short int
Dhcp4Parser::yypgoto_[] =
{
- -811, -811, -811, -811, -811, -811, -811, -811, -811, -811,
- -811, -811, -811, -811, -811, -811, -47, -811, 250, -811,
- -811, -811, -811, -811, -811, -811, -811, -503, -811, -811,
- -811, -70, -811, -811, -811, 390, -811, -811, -811, -811,
- 178, 363, -27, -19, -13, -811, -811, -811, -811, -3,
- -811, -811, 180, 382, -811, -811, -811, -811, -811, -811,
- -811, -811, -811, -811, -811, -811, -811, -811, -811, -811,
- -41, -811, -811, -811, -811, -811, -811, 101, -811, -53,
- -811, -578, -51, -811, -811, -811, -811, -811, -811, -811,
- -811, -811, -811, -45, -811, -811, -811, -811, -811, -811,
- -811, -811, -811, -811, -811, -811, -811, -811, -811, -811,
- -811, -55, -811, -811, -811, -811, -811, -811, -811, -811,
- -811, -62, -811, -811, -811, -50, 350, -811, -811, -811,
- -811, -811, -811, -811, -49, -811, -811, -811, -811, -811,
- -811, -810, -811, -811, -811, -17, -811, -811, -811, -8,
- 427, -811, -811, -811, -811, -811, -811, -811, -811, -799,
- -811, -56, -811, -10, -811, -796, -811, -811, -811, -811,
- -811, -811, -811, -18, -811, -811, -167, -65, -811, -811,
- -811, -811, -811, 2, -811, -811, -811, 10, -811, 416,
- -811, -72, -811, -811, -811, -811, -811, -66, -811, -811,
- -811, -811, -811, -26, -811, -811, -811, 9, -811, -811,
- -811, 14, -811, 417, -811, -811, -811, -811, -811, -811,
- -811, -811, -811, -811, -811, -23, -811, -811, -811, -16,
- 440, -811, -811, -58, -811, -38, -811, -48, -811, -811,
- -811, 4, -811, -811, -811, 7, -811, 430, -6, -811,
- 1, -811, 5, -811, 228, -811, -811, -811, -811, -811,
- -811, -811, -811, -811, -811, -811, -811, -811, -811, -811,
- -811, -811, -794, -811, -811, -811, -811, -811, 12, -811,
- -811, -811, -139, -811, -811, -811, -811, -811, -811, -811,
- -811, 3, -811, -811, -811, -811, -811, -811, -811, -2,
- -811, -811, -811, -811, -811, 255, 402, -811, -811, -811,
- -811, -811, -811, -811, -811, -811, -811, -811, -811, -811,
- -811, -811, -811, -811, -811, -811, -811, -811, -811, -811,
- -811, -811, -811, -811, -811, -811, -811, -811, -811, -811,
- -811, -811, -811, -811, -811, -338, 397, -811, -811, -811,
- -811, -811, -811, 288, 403, -811, -811, -811, -5, -811,
- -811, -143, -811, -811, -811, -811, -811, -811, -158, -811,
- -811, -173, -811, -811, -811, -811, -811
+ -813, -813, -813, -813, -813, -813, -813, -813, -813, -813,
+ -813, -813, -813, -813, -813, -813, -55, -813, 264, -813,
+ -813, -813, -813, -813, -813, -813, -813, -497, -813, -813,
+ -813, -70, -813, -813, -813, 407, -813, -813, -813, -813,
+ 162, 381, -57, -54, -34, -813, -813, -813, -813, -32,
+ -813, -813, 183, 372, -813, -813, -813, -813, -813, -813,
+ -813, -813, -813, -813, -813, -813, -813, -813, -813, -813,
+ -20, -813, -813, -813, -813, -813, -813, 135, -813, -39,
+ -813, -576, -23, -813, -813, -813, -813, -813, -813, -813,
+ -813, -813, -813, -45, -813, -813, -813, -813, -813, -813,
+ -813, -813, -813, -813, -813, -813, -813, -813, -813, -813,
+ -813, -40, -813, -813, -813, -813, -813, -813, -813, -813,
+ -813, -48, -813, -813, -813, -44, 373, -813, -813, -813,
+ -813, -813, -813, -813, -49, -813, -813, -813, -813, -813,
+ -813, -812, -813, -813, -813, -18, -813, -813, -813, -21,
+ 399, -813, -813, -813, -813, -813, -813, -813, -813, -809,
+ -813, -56, -813, -50, -813, -808, -813, -813, -813, -813,
+ -813, -813, -813, -16, -813, -813, -179, -65, -813, -813,
+ -813, -813, -813, -11, -813, -813, -813, -5, -813, 392,
+ -813, -72, -813, -813, -813, -813, -813, -66, -813, -813,
+ -813, -813, -813, 1, -813, -813, -813, -6, -813, -813,
+ -813, -2, -813, 395, -813, -813, -813, -813, -813, -813,
+ -813, -813, -813, -813, -813, -37, -813, -813, -813, -31,
+ 423, -813, -813, -52, -813, -17, -813, -59, -813, -813,
+ -813, -13, -813, -813, -813, -4, -813, 414, 5, -813,
+ 21, -813, 25, -813, 217, -813, -813, -813, -813, -813,
+ -813, -813, -813, -813, -813, -813, -813, -813, -813, -813,
+ -813, -813, -799, -813, -813, -813, -813, -813, 8, -813,
+ -813, -813, -150, -813, -813, -813, -813, -813, -813, -813,
+ -813, -1, -813, -813, -813, -813, -813, -813, -813, -10,
+ -813, -813, -813, -813, -813, -813, -813, 250, 396, -813,
+ -813, -813, -813, -813, -813, -813, -813, -813, -813, -813,
+ -813, -813, -813, -813, -813, -813, -813, -813, -813, -813,
+ -813, -813, -813, -813, -813, -813, -813, -813, -813, -813,
+ -813, -813, -813, -813, -813, -813, -813, -345, 397, -813,
+ -813, -813, -813, -813, -813, 288, 413, -813, -813, -813,
+ -9, -813, -813, -153, -813, -813, -813, -813, -813, -813,
+ -162, -813, -813, -177, -813, -813, -813, -813, -813
};
const short int
{
-1, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, 29, 38, 39, 40, 69,
- 599, 87, 88, 41, 68, 84, 85, 610, 786, 868,
- 869, 345, 43, 70, 96, 97, 98, 354, 45, 71,
+ 599, 87, 88, 41, 68, 84, 85, 610, 788, 871,
+ 872, 345, 43, 70, 96, 97, 98, 354, 45, 71,
136, 137, 138, 139, 140, 141, 142, 378, 143, 144,
145, 364, 174, 175, 47, 72, 176, 396, 177, 397,
613, 178, 398, 616, 179, 146, 371, 147, 365, 672,
- 673, 674, 803, 148, 372, 149, 373, 713, 714, 715,
- 825, 692, 693, 694, 806, 985, 695, 807, 696, 808,
- 697, 809, 698, 699, 430, 700, 701, 702, 703, 704,
- 705, 706, 707, 815, 708, 816, 709, 710, 150, 385,
+ 673, 674, 805, 148, 372, 149, 373, 713, 714, 715,
+ 827, 692, 693, 694, 808, 989, 695, 809, 696, 810,
+ 697, 811, 698, 699, 430, 700, 701, 702, 703, 704,
+ 705, 706, 707, 817, 708, 818, 709, 710, 150, 385,
737, 738, 739, 740, 741, 742, 743, 151, 388, 752,
- 753, 754, 848, 61, 79, 299, 300, 301, 443, 302,
+ 753, 754, 850, 61, 79, 299, 300, 301, 443, 302,
444, 152, 389, 761, 762, 763, 764, 765, 766, 767,
- 768, 153, 379, 717, 718, 719, 828, 49, 73, 198,
+ 768, 153, 379, 717, 718, 719, 830, 49, 73, 198,
199, 200, 406, 201, 402, 202, 403, 203, 404, 204,
407, 205, 411, 206, 410, 207, 409, 627, 208, 154,
- 382, 729, 730, 731, 837, 917, 918, 155, 380, 55,
- 76, 721, 722, 723, 831, 57, 77, 264, 265, 266,
+ 382, 729, 730, 731, 839, 920, 921, 155, 380, 55,
+ 76, 721, 722, 723, 833, 57, 77, 264, 265, 266,
267, 268, 269, 270, 429, 271, 433, 272, 432, 273,
- 274, 434, 275, 156, 381, 725, 726, 727, 834, 59,
+ 274, 434, 275, 156, 381, 725, 726, 727, 836, 59,
78, 285, 286, 287, 288, 289, 438, 290, 291, 292,
- 293, 210, 405, 788, 789, 790, 870, 51, 74, 223,
+ 293, 210, 405, 790, 791, 792, 873, 51, 74, 223,
224, 225, 415, 157, 383, 158, 384, 159, 387, 748,
- 749, 750, 845, 53, 75, 240, 241, 242, 160, 368,
- 161, 369, 162, 370, 246, 425, 793, 873, 247, 419,
+ 749, 750, 847, 53, 75, 240, 241, 242, 160, 368,
+ 161, 369, 162, 370, 246, 425, 795, 876, 247, 419,
248, 420, 249, 422, 250, 421, 251, 424, 252, 423,
- 253, 418, 217, 412, 794, 163, 386, 745, 746, 842,
- 939, 940, 941, 942, 943, 997, 944, 164, 165, 391,
- 774, 775, 776, 859, 777, 860, 166, 392, 782, 783,
- 784, 167, 393, 63, 80, 322, 323, 324, 325, 448,
- 326, 449, 327, 328, 451, 329, 330, 331, 454, 653,
- 332, 455, 333, 334, 335, 336, 459, 660, 337, 460,
- 338, 461, 339, 462, 99, 356, 100, 357, 101, 358,
- 168, 362, 363, 67, 82, 346, 347, 348, 468, 102,
- 355, 65, 81, 341, 342, 343, 465, 796, 797, 875,
- 974, 975, 976, 977, 1010, 978, 1008, 1025, 1026, 1027,
- 1034, 1035, 1036, 1041, 1037, 1038, 1039
+ 253, 418, 217, 412, 796, 163, 386, 745, 746, 844,
+ 942, 943, 944, 945, 946, 1001, 947, 164, 165, 391,
+ 774, 775, 776, 861, 777, 862, 166, 392, 783, 784,
+ 785, 865, 786, 167, 393, 63, 80, 322, 323, 324,
+ 325, 448, 326, 449, 327, 328, 451, 329, 330, 331,
+ 454, 653, 332, 455, 333, 334, 335, 336, 459, 660,
+ 337, 460, 338, 461, 339, 462, 99, 356, 100, 357,
+ 101, 358, 168, 362, 363, 67, 82, 346, 347, 348,
+ 468, 102, 355, 65, 81, 341, 342, 343, 465, 798,
+ 799, 878, 978, 979, 980, 981, 1015, 982, 1013, 1030,
+ 1031, 1032, 1039, 1040, 1041, 1046, 1042, 1043, 1044
};
const unsigned short int
Dhcp4Parser::yytable_[] =
{
95, 135, 173, 193, 219, 236, 283, 262, 281, 298,
- 319, 254, 284, 711, 180, 211, 226, 238, 220, 276,
- 294, 83, 320, 628, 480, 213, 31, 912, 32, 632,
- 33, 42, 263, 282, 181, 212, 227, 239, 913, 277,
- 295, 916, 321, 925, 344, 651, 194, 209, 222, 237,
- 296, 297, 89, 1030, 195, 30, 1031, 1032, 1033, 44,
- 196, 169, 170, 840, 221, 171, 841, 214, 172, 243,
- 197, 103, 296, 297, 215, 104, 244, 105, 216, 360,
- 245, 46, 394, 86, 361, 48, 106, 395, 107, 108,
- 109, 110, 111, 112, 113, 114, 109, 110, 111, 122,
- 655, 656, 657, 658, 124, 125, 124, 125, 611, 612,
- 400, 218, 124, 125, 94, 401, 115, 116, 117, 118,
- 119, 120, 124, 125, 190, 121, 122, 191, 50, 413,
- 52, 121, 122, 256, 414, 659, 123, 54, 843, 124,
- 125, 844, 769, 770, 121, 124, 125, 778, 56, 126,
- 127, 732, 733, 734, 735, 128, 736, 416, 928, 929,
- 652, 445, 417, 58, 463, 129, 446, 466, 130, 464,
- 60, 876, 467, 469, 877, 131, 132, 1028, 470, 133,
- 1029, 134, 90, 235, 791, 912, 340, 34, 35, 36,
- 37, 91, 92, 93, 62, 94, 913, 94, 94, 916,
- 64, 925, 66, 94, 108, 109, 110, 111, 94, 614,
- 615, 349, 469, 94, 109, 110, 111, 583, 623, 624,
- 625, 626, 256, 278, 257, 258, 279, 280, 350, 352,
- 94, 115, 116, 117, 124, 125, 94, 182, 183, 184,
- 394, 122, 351, 466, 469, 799, 669, 898, 800, 801,
- 122, 353, 185, 359, 124, 125, 186, 187, 188, 189,
- 400, 426, 255, 124, 125, 802, 190, 804, 822, 191,
- 128, 822, 805, 823, 228, 366, 824, 192, 367, 427,
- 229, 230, 231, 232, 233, 234, 857, 235, 374, 861,
- 95, 858, 864, 256, 862, 257, 258, 865, 375, 259,
- 260, 261, 376, 471, 472, 124, 125, 1, 2, 3,
- 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
- 14, 463, 822, 413, 135, 94, 866, 991, 992, 377,
- 173, 755, 756, 757, 758, 759, 760, 390, 256, 995,
- 428, 399, 180, 193, 996, 94, 219, 445, 416, 436,
- 124, 125, 1002, 1006, 94, 211, 1011, 236, 226, 1045,
- 220, 1012, 181, 408, 1046, 213, 431, 262, 435, 238,
- 283, 437, 281, 439, 440, 212, 284, 442, 227, 276,
- 981, 982, 983, 984, 294, 441, 194, 209, 447, 239,
- 222, 450, 263, 319, 195, 452, 94, 282, 453, 277,
- 196, 237, 456, 457, 295, 320, 221, 214, 458, 473,
- 197, 474, 492, 475, 215, 476, 477, 967, 216, 968,
- 969, 243, 478, 481, 482, 321, 483, 484, 244, 580,
- 581, 582, 245, 108, 109, 110, 111, 675, 485, 486,
- 487, 94, 676, 677, 678, 679, 680, 681, 682, 683,
- 684, 685, 686, 687, 688, 689, 690, 488, 489, 490,
- 115, 116, 117, 1007, 491, 120, 493, 494, 256, 495,
- 122, 256, 496, 497, 498, 499, 500, 501, 502, 503,
- 504, 505, 506, 124, 125, 507, 187, 509, 189, 508,
- 510, 511, 513, 514, 515, 190, 516, 518, 191, 519,
- 520, 521, 522, 523, 525, 524, 192, 647, 135, 124,
- 125, 526, 527, 528, 530, 173, 532, 533, 534, 535,
- 691, 691, 536, 537, 538, 539, 541, 180, 542, 544,
- 666, 545, 543, 546, 549, 547, 771, 779, 319, 553,
- 550, 551, 554, 557, 556, 558, 559, 181, 772, 780,
- 320, 560, 303, 304, 305, 306, 307, 308, 309, 310,
- 311, 312, 313, 314, 315, 316, 563, 561, 773, 781,
- 321, 94, 317, 318, 94, 564, 568, 562, 569, 570,
- 571, 573, 565, 566, 567, 575, 577, 578, 671, 587,
- 579, 584, 585, 586, 588, 589, 590, 591, 592, 593,
- 94, 594, 595, 596, 597, 600, 601, 32, 602, 603,
- 604, 617, 618, 605, 606, 607, 608, 609, 619, 620,
- 630, 664, 621, 622, 629, 631, 665, 633, 634, 635,
- 636, 637, 638, 639, 712, 716, 654, 720, 724, 728,
- 744, 747, 751, 787, 795, 640, 641, 810, 642, 811,
- 643, 644, 812, 813, 814, 817, 818, 645, 646, 819,
- 648, 820, 821, 827, 830, 826, 851, 649, 650, 829,
- 661, 662, 663, 832, 833, 835, 836, 839, 838, 847,
- 886, 846, 850, 849, 852, 853, 854, 855, 856, 863,
- 885, 872, 867, 871, 874, 878, 879, 881, 882, 883,
- 884, 887, 888, 889, 890, 891, 896, 892, 957, 893,
- 894, 895, 950, 951, 958, 952, 953, 954, 955, 960,
- 962, 963, 980, 966, 986, 987, 988, 989, 993, 990,
- 994, 998, 999, 1000, 1001, 1003, 1004, 1009, 1014, 1005,
- 1017, 1019, 1024, 1022, 1042, 1043, 1018, 1015, 1044, 1047,
- 479, 598, 691, 1021, 1023, 691, 667, 512, 193, 1049,
- 1048, 262, 283, 880, 281, 670, 798, 906, 284, 1050,
- 211, 897, 930, 276, 899, 236, 294, 932, 298, 920,
- 213, 914, 517, 1052, 934, 927, 263, 238, 949, 282,
- 212, 771, 911, 277, 779, 555, 295, 931, 948, 921,
- 219, 194, 209, 772, 935, 970, 780, 239, 956, 195,
- 907, 919, 226, 901, 220, 196, 933, 972, 908, 237,
- 900, 926, 214, 773, 909, 197, 781, 915, 1013, 215,
- 971, 922, 227, 216, 910, 903, 936, 973, 923, 243,
- 529, 902, 924, 937, 222, 905, 244, 938, 904, 965,
- 245, 947, 946, 548, 964, 945, 531, 540, 792, 552,
- 221, 1016, 961, 785, 959, 572, 576, 668, 1020, 574,
- 1040, 979, 1051, 0, 0, 0, 0, 0, 0, 0,
+ 319, 254, 284, 83, 213, 711, 194, 480, 220, 195,
+ 180, 211, 226, 238, 221, 276, 294, 915, 320, 628,
+ 916, 919, 263, 282, 31, 632, 32, 651, 33, 196,
+ 928, 197, 296, 297, 842, 30, 344, 843, 124, 125,
+ 614, 615, 89, 124, 125, 181, 212, 227, 239, 845,
+ 277, 295, 846, 321, 103, 169, 170, 42, 104, 171,
+ 105, 44, 172, 46, 209, 222, 237, 48, 214, 106,
+ 243, 107, 108, 109, 110, 111, 112, 113, 114, 778,
+ 779, 769, 770, 50, 215, 52, 244, 54, 216, 360,
+ 245, 109, 110, 111, 361, 879, 56, 94, 880, 115,
+ 116, 117, 118, 119, 120, 58, 394, 60, 121, 122,
+ 1035, 395, 256, 1036, 1037, 1038, 124, 125, 1033, 123,
+ 62, 1034, 124, 125, 124, 125, 121, 122, 256, 400,
+ 94, 413, 126, 127, 401, 94, 414, 416, 128, 64,
+ 124, 125, 417, 652, 655, 656, 657, 658, 129, 66,
+ 445, 130, 463, 931, 932, 446, 466, 464, 131, 132,
+ 86, 467, 133, 469, 340, 134, 296, 297, 470, 108,
+ 109, 110, 111, 90, 611, 612, 349, 915, 121, 659,
+ 916, 919, 91, 92, 93, 350, 34, 35, 36, 37,
+ 928, 94, 971, 351, 972, 973, 115, 116, 117, 94,
+ 469, 352, 182, 183, 184, 583, 122, 353, 94, 359,
+ 732, 733, 734, 735, 94, 736, 94, 185, 366, 124,
+ 125, 186, 187, 188, 189, 394, 235, 793, 466, 669,
+ 801, 190, 94, 802, 191, 128, 367, 108, 109, 110,
+ 111, 901, 192, 374, 469, 400, 806, 824, 122, 803,
+ 804, 807, 825, 824, 859, 109, 110, 111, 826, 860,
+ 218, 124, 125, 863, 115, 116, 117, 867, 864, 120,
+ 375, 376, 868, 190, 122, 256, 191, 463, 824, 413,
+ 95, 377, 869, 995, 996, 471, 472, 124, 125, 390,
+ 187, 122, 189, 755, 756, 757, 758, 759, 760, 190,
+ 399, 999, 191, 445, 124, 125, 1000, 416, 1006, 408,
+ 192, 94, 1011, 1016, 135, 228, 426, 427, 1017, 428,
+ 173, 229, 230, 231, 232, 233, 234, 1050, 235, 431,
+ 435, 436, 1051, 193, 437, 442, 219, 439, 180, 623,
+ 624, 625, 626, 440, 213, 441, 194, 236, 447, 195,
+ 220, 211, 450, 94, 226, 452, 221, 262, 453, 456,
+ 283, 457, 281, 458, 474, 238, 284, 473, 475, 196,
+ 476, 197, 477, 181, 478, 276, 481, 482, 483, 94,
+ 294, 484, 263, 319, 486, 485, 212, 282, 487, 227,
+ 256, 278, 257, 258, 279, 280, 94, 488, 489, 490,
+ 239, 320, 124, 125, 209, 491, 492, 222, 214, 496,
+ 277, 580, 581, 582, 493, 295, 494, 495, 237, 497,
+ 498, 499, 243, 500, 215, 501, 502, 503, 216, 985,
+ 986, 987, 988, 508, 255, 504, 321, 505, 244, 675,
+ 506, 507, 245, 509, 676, 677, 678, 679, 680, 681,
+ 682, 683, 684, 685, 686, 687, 688, 689, 690, 510,
+ 511, 513, 514, 1012, 515, 256, 518, 257, 258, 516,
+ 256, 259, 260, 261, 519, 520, 521, 124, 125, 522,
+ 523, 524, 525, 526, 527, 124, 125, 528, 530, 647,
+ 532, 533, 534, 535, 94, 536, 537, 538, 135, 539,
+ 541, 542, 543, 544, 545, 173, 546, 549, 547, 553,
+ 691, 691, 666, 550, 554, 551, 556, 557, 558, 560,
+ 559, 561, 563, 180, 562, 564, 771, 780, 319, 303,
+ 304, 305, 306, 307, 308, 309, 310, 311, 312, 313,
+ 314, 315, 316, 568, 772, 781, 320, 565, 566, 317,
+ 318, 567, 569, 570, 571, 573, 575, 577, 181, 587,
+ 654, 578, 579, 584, 585, 586, 588, 589, 590, 94,
+ 591, 592, 594, 593, 94, 595, 596, 94, 597, 773,
+ 782, 321, 1, 2, 3, 4, 5, 6, 7, 8,
+ 9, 10, 11, 12, 13, 14, 32, 600, 601, 602,
+ 603, 604, 617, 671, 605, 606, 607, 608, 609, 618,
+ 619, 620, 621, 622, 629, 630, 631, 633, 634, 635,
+ 636, 637, 664, 665, 877, 812, 638, 712, 639, 716,
+ 640, 641, 642, 643, 644, 645, 646, 720, 724, 728,
+ 648, 649, 744, 747, 650, 751, 789, 797, 661, 662,
+ 813, 814, 663, 815, 816, 819, 820, 821, 822, 823,
+ 829, 870, 828, 832, 831, 834, 835, 837, 838, 841,
+ 840, 849, 888, 848, 852, 851, 853, 854, 855, 856,
+ 857, 858, 866, 875, 890, 874, 882, 881, 884, 885,
+ 886, 887, 889, 891, 892, 893, 894, 895, 896, 897,
+ 898, 960, 953, 899, 954, 955, 956, 961, 957, 958,
+ 963, 964, 967, 966, 970, 1020, 997, 1002, 1004, 998,
+ 1003, 1014, 1005, 1019, 1022, 1024, 984, 990, 1027, 991,
+ 667, 992, 993, 1029, 1047, 994, 1007, 1048, 1049, 1008,
+ 1052, 1009, 1010, 1026, 691, 1023, 1028, 691, 1053, 1054,
+ 193, 1055, 1057, 262, 283, 598, 281, 479, 670, 909,
+ 284, 213, 517, 194, 933, 512, 195, 236, 211, 935,
+ 298, 276, 910, 917, 294, 911, 883, 923, 263, 918,
+ 902, 282, 937, 771, 914, 238, 196, 780, 197, 934,
+ 800, 900, 930, 219, 952, 912, 951, 913, 974, 903,
+ 959, 772, 529, 212, 904, 781, 277, 220, 555, 295,
+ 1018, 226, 924, 221, 906, 929, 976, 938, 905, 548,
+ 239, 209, 908, 975, 907, 214, 950, 552, 969, 531,
+ 922, 540, 968, 949, 925, 936, 773, 794, 237, 939,
+ 782, 215, 243, 948, 1021, 216, 227, 965, 787, 572,
+ 926, 977, 962, 1025, 927, 940, 576, 668, 244, 941,
+ 983, 1045, 245, 1056, 222, 0, 0, 0, 0, 574,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 906, 0, 0, 0, 0,
- 930, 0, 0, 0, 0, 932, 0, 920, 0, 914,
- 0, 970, 934, 0, 0, 0, 0, 0, 0, 0,
- 911, 0, 0, 972, 0, 931, 0, 921, 0, 0,
- 0, 0, 935, 0, 0, 0, 971, 0, 907, 919,
- 0, 0, 0, 973, 933, 0, 908, 0, 0, 0,
- 0, 0, 909, 0, 0, 915, 0, 0, 0, 922,
- 0, 0, 910, 0, 936, 0, 923, 0, 0, 0,
- 924, 937, 0, 0, 0, 938
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 909,
+ 0, 0, 0, 0, 933, 0, 0, 0, 0, 935,
+ 0, 0, 910, 917, 0, 911, 974, 923, 0, 918,
+ 0, 0, 937, 0, 914, 0, 0, 0, 0, 934,
+ 0, 0, 0, 0, 976, 912, 0, 913, 0, 0,
+ 0, 975, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 924, 0, 0, 0, 0, 938, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 977,
+ 922, 0, 0, 0, 925, 936, 0, 0, 0, 939,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 926, 0, 0, 0, 927, 940, 0, 0, 0, 941
};
const short int
Dhcp4Parser::yycheck_[] =
{
70, 71, 72, 73, 74, 75, 78, 77, 78, 79,
- 80, 76, 78, 591, 72, 73, 74, 75, 74, 77,
- 78, 68, 80, 526, 362, 73, 5, 837, 7, 532,
- 9, 7, 77, 78, 72, 73, 74, 75, 837, 77,
- 78, 837, 80, 837, 12, 17, 73, 73, 74, 75,
- 102, 103, 10, 143, 73, 0, 146, 147, 148, 7,
- 73, 14, 15, 3, 74, 18, 6, 73, 21, 75,
- 73, 7, 102, 103, 73, 11, 75, 13, 73, 3,
- 75, 7, 3, 166, 8, 7, 22, 8, 24, 25,
- 26, 27, 28, 29, 30, 31, 26, 27, 28, 62,
- 134, 135, 136, 137, 75, 76, 75, 76, 16, 17,
- 3, 74, 75, 76, 166, 8, 52, 53, 54, 55,
- 56, 57, 75, 76, 87, 61, 62, 90, 7, 3,
- 7, 61, 62, 63, 8, 169, 72, 7, 3, 75,
- 76, 6, 113, 114, 61, 75, 76, 116, 7, 85,
- 86, 92, 93, 94, 95, 91, 97, 3, 88, 89,
- 132, 3, 8, 7, 3, 101, 8, 3, 104, 8,
- 7, 3, 8, 3, 6, 111, 112, 3, 8, 115,
- 6, 117, 140, 99, 100, 995, 141, 166, 167, 168,
- 169, 149, 150, 151, 7, 166, 995, 166, 166, 995,
- 7, 995, 7, 166, 25, 26, 27, 28, 166, 19,
- 20, 6, 3, 166, 26, 27, 28, 8, 81, 82,
- 83, 84, 63, 64, 65, 66, 67, 68, 3, 8,
- 166, 52, 53, 54, 75, 76, 166, 58, 59, 60,
- 3, 62, 4, 3, 3, 8, 584, 825, 8, 8,
- 62, 3, 73, 4, 75, 76, 77, 78, 79, 80,
- 3, 8, 32, 75, 76, 8, 87, 3, 3, 90,
- 91, 3, 8, 8, 86, 4, 8, 98, 4, 3,
- 92, 93, 94, 95, 96, 97, 3, 99, 4, 3,
- 360, 8, 3, 63, 8, 65, 66, 8, 4, 69,
- 70, 71, 4, 350, 351, 75, 76, 152, 153, 154,
- 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
- 165, 3, 3, 3, 394, 166, 8, 8, 8, 4,
- 400, 105, 106, 107, 108, 109, 110, 4, 63, 3,
- 8, 4, 400, 413, 8, 166, 416, 3, 3, 8,
- 75, 76, 8, 8, 166, 413, 3, 427, 416, 3,
- 416, 8, 400, 4, 8, 413, 4, 437, 4, 427,
- 442, 3, 442, 4, 4, 413, 442, 3, 416, 437,
- 33, 34, 35, 36, 442, 8, 413, 413, 4, 427,
- 416, 4, 437, 463, 413, 4, 166, 442, 4, 437,
- 413, 427, 4, 4, 442, 463, 416, 413, 4, 166,
- 413, 4, 167, 4, 413, 4, 4, 142, 413, 144,
- 145, 427, 4, 4, 4, 463, 4, 169, 427, 476,
- 477, 478, 427, 25, 26, 27, 28, 32, 169, 4,
- 4, 166, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 47, 48, 49, 50, 51, 4, 4, 4,
- 52, 53, 54, 966, 4, 57, 167, 167, 63, 167,
- 62, 63, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 75, 76, 4, 78, 4, 80, 167,
- 4, 4, 4, 4, 4, 87, 169, 4, 90, 4,
- 4, 4, 4, 4, 4, 167, 98, 554, 578, 75,
- 76, 4, 4, 4, 4, 585, 4, 4, 4, 4,
- 590, 591, 4, 4, 4, 4, 4, 585, 4, 4,
- 577, 4, 167, 4, 4, 169, 606, 607, 608, 4,
- 169, 169, 4, 4, 169, 4, 167, 585, 606, 607,
- 608, 4, 118, 119, 120, 121, 122, 123, 124, 125,
- 126, 127, 128, 129, 130, 131, 4, 167, 606, 607,
- 608, 166, 138, 139, 166, 4, 4, 167, 4, 4,
- 4, 4, 169, 169, 169, 4, 4, 7, 23, 166,
- 7, 7, 7, 7, 166, 166, 7, 7, 5, 166,
- 166, 5, 5, 5, 5, 166, 5, 7, 5, 5,
- 5, 166, 166, 7, 7, 7, 7, 5, 166, 5,
- 7, 5, 166, 166, 166, 166, 5, 166, 166, 166,
- 166, 166, 166, 166, 7, 7, 133, 7, 7, 7,
- 7, 7, 7, 7, 7, 166, 166, 4, 166, 4,
- 166, 166, 4, 4, 4, 4, 4, 166, 166, 4,
- 166, 4, 4, 3, 3, 6, 4, 166, 166, 6,
- 166, 166, 166, 6, 3, 6, 3, 3, 6, 3,
- 169, 6, 3, 6, 4, 4, 4, 4, 4, 4,
- 167, 3, 166, 6, 8, 6, 4, 4, 4, 4,
- 4, 167, 169, 167, 4, 4, 169, 167, 4, 167,
- 167, 167, 167, 167, 4, 167, 167, 167, 167, 167,
- 6, 3, 166, 4, 166, 166, 166, 166, 8, 166,
- 8, 4, 8, 3, 8, 166, 166, 4, 4, 166,
- 4, 4, 7, 5, 4, 4, 167, 169, 4, 4,
- 360, 501, 822, 166, 166, 825, 578, 394, 828, 167,
- 169, 831, 834, 804, 834, 585, 665, 837, 834, 167,
- 828, 822, 842, 831, 827, 845, 834, 842, 848, 837,
- 828, 837, 400, 166, 842, 840, 831, 845, 850, 834,
- 828, 861, 837, 831, 864, 445, 834, 842, 848, 837,
- 870, 828, 828, 861, 842, 875, 864, 845, 857, 828,
- 837, 837, 870, 830, 870, 828, 842, 875, 837, 845,
- 828, 839, 828, 861, 837, 828, 864, 837, 995, 828,
- 875, 837, 870, 828, 837, 833, 842, 875, 837, 845,
- 413, 831, 837, 842, 870, 836, 845, 842, 834, 872,
- 845, 847, 845, 437, 870, 843, 416, 427, 630, 442,
- 870, 1000, 864, 608, 861, 463, 469, 579, 1011, 466,
- 1028, 876, 1045, -1, -1, -1, -1, -1, -1, -1,
+ 80, 76, 78, 68, 73, 591, 73, 362, 74, 73,
+ 72, 73, 74, 75, 74, 77, 78, 839, 80, 526,
+ 839, 839, 77, 78, 5, 532, 7, 17, 9, 73,
+ 839, 73, 102, 103, 3, 0, 12, 6, 75, 76,
+ 19, 20, 10, 75, 76, 72, 73, 74, 75, 3,
+ 77, 78, 6, 80, 7, 14, 15, 7, 11, 18,
+ 13, 7, 21, 7, 73, 74, 75, 7, 73, 22,
+ 75, 24, 25, 26, 27, 28, 29, 30, 31, 116,
+ 117, 113, 114, 7, 73, 7, 75, 7, 73, 3,
+ 75, 26, 27, 28, 8, 3, 7, 167, 6, 52,
+ 53, 54, 55, 56, 57, 7, 3, 7, 61, 62,
+ 144, 8, 63, 147, 148, 149, 75, 76, 3, 72,
+ 7, 6, 75, 76, 75, 76, 61, 62, 63, 3,
+ 167, 3, 85, 86, 8, 167, 8, 3, 91, 7,
+ 75, 76, 8, 133, 135, 136, 137, 138, 101, 7,
+ 3, 104, 3, 88, 89, 8, 3, 8, 111, 112,
+ 167, 8, 115, 3, 142, 118, 102, 103, 8, 25,
+ 26, 27, 28, 141, 16, 17, 6, 999, 61, 170,
+ 999, 999, 150, 151, 152, 3, 167, 168, 169, 170,
+ 999, 167, 143, 4, 145, 146, 52, 53, 54, 167,
+ 3, 8, 58, 59, 60, 8, 62, 3, 167, 4,
+ 92, 93, 94, 95, 167, 97, 167, 73, 4, 75,
+ 76, 77, 78, 79, 80, 3, 99, 100, 3, 584,
+ 8, 87, 167, 8, 90, 91, 4, 25, 26, 27,
+ 28, 827, 98, 4, 3, 3, 3, 3, 62, 8,
+ 8, 8, 8, 3, 3, 26, 27, 28, 8, 8,
+ 74, 75, 76, 3, 52, 53, 54, 3, 8, 57,
+ 4, 4, 8, 87, 62, 63, 90, 3, 3, 3,
+ 360, 4, 8, 8, 8, 350, 351, 75, 76, 4,
+ 78, 62, 80, 105, 106, 107, 108, 109, 110, 87,
+ 4, 3, 90, 3, 75, 76, 8, 3, 8, 4,
+ 98, 167, 8, 3, 394, 86, 8, 3, 8, 8,
+ 400, 92, 93, 94, 95, 96, 97, 3, 99, 4,
+ 4, 8, 8, 413, 3, 3, 416, 4, 400, 81,
+ 82, 83, 84, 4, 413, 8, 413, 427, 4, 413,
+ 416, 413, 4, 167, 416, 4, 416, 437, 4, 4,
+ 442, 4, 442, 4, 4, 427, 442, 167, 4, 413,
+ 4, 413, 4, 400, 4, 437, 4, 4, 4, 167,
+ 442, 170, 437, 463, 4, 170, 413, 442, 4, 416,
+ 63, 64, 65, 66, 67, 68, 167, 4, 4, 4,
+ 427, 463, 75, 76, 413, 4, 168, 416, 413, 4,
+ 437, 476, 477, 478, 168, 442, 168, 168, 427, 4,
+ 4, 4, 427, 4, 413, 4, 4, 4, 413, 33,
+ 34, 35, 36, 168, 32, 4, 463, 4, 427, 32,
+ 4, 4, 427, 4, 37, 38, 39, 40, 41, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 4,
+ 4, 4, 4, 970, 4, 63, 4, 65, 66, 170,
+ 63, 69, 70, 71, 4, 4, 4, 75, 76, 4,
+ 4, 168, 4, 4, 4, 75, 76, 4, 4, 554,
+ 4, 4, 4, 4, 167, 4, 4, 4, 578, 4,
+ 4, 4, 168, 4, 4, 585, 4, 4, 170, 4,
+ 590, 591, 577, 170, 4, 170, 170, 4, 4, 4,
+ 168, 168, 4, 585, 168, 4, 606, 607, 608, 119,
+ 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
+ 130, 131, 132, 4, 606, 607, 608, 170, 170, 139,
+ 140, 170, 4, 4, 4, 4, 4, 4, 585, 167,
+ 134, 7, 7, 7, 7, 7, 167, 167, 7, 167,
+ 7, 5, 5, 167, 167, 5, 5, 167, 5, 606,
+ 607, 608, 153, 154, 155, 156, 157, 158, 159, 160,
+ 161, 162, 163, 164, 165, 166, 7, 167, 5, 5,
+ 5, 5, 167, 23, 7, 7, 7, 7, 5, 167,
+ 167, 5, 167, 167, 167, 7, 167, 167, 167, 167,
+ 167, 167, 5, 5, 8, 4, 167, 7, 167, 7,
+ 167, 167, 167, 167, 167, 167, 167, 7, 7, 7,
+ 167, 167, 7, 7, 167, 7, 7, 7, 167, 167,
+ 4, 4, 167, 4, 4, 4, 4, 4, 4, 4,
+ 3, 167, 6, 3, 6, 6, 3, 6, 3, 3,
+ 6, 3, 168, 6, 3, 6, 4, 4, 4, 4,
+ 4, 4, 4, 3, 168, 6, 4, 6, 4, 4,
+ 4, 4, 170, 170, 168, 4, 4, 168, 168, 168,
+ 168, 4, 168, 170, 168, 168, 168, 4, 168, 168,
+ 4, 168, 3, 6, 4, 170, 8, 4, 3, 8,
+ 8, 4, 8, 4, 4, 4, 167, 167, 5, 167,
+ 578, 167, 167, 7, 4, 167, 167, 4, 4, 167,
+ 4, 167, 167, 167, 824, 168, 167, 827, 170, 168,
+ 830, 168, 167, 833, 836, 501, 836, 360, 585, 839,
+ 836, 830, 400, 830, 844, 394, 830, 847, 830, 844,
+ 850, 833, 839, 839, 836, 839, 806, 839, 833, 839,
+ 829, 836, 844, 863, 839, 847, 830, 867, 830, 844,
+ 665, 824, 842, 873, 852, 839, 850, 839, 878, 830,
+ 859, 863, 413, 830, 832, 867, 833, 873, 445, 836,
+ 999, 873, 839, 873, 835, 841, 878, 844, 833, 437,
+ 847, 830, 838, 878, 836, 830, 849, 442, 875, 416,
+ 839, 427, 873, 847, 839, 844, 863, 630, 847, 844,
+ 867, 830, 847, 845, 1004, 830, 873, 867, 608, 463,
+ 839, 878, 863, 1016, 839, 844, 469, 579, 847, 844,
+ 879, 1033, 847, 1050, 873, -1, -1, -1, -1, 466,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 999,
+ -1, -1, -1, -1, 1004, -1, -1, -1, -1, 1004,
+ -1, -1, 999, 999, -1, 999, 1016, 999, -1, 999,
+ -1, -1, 1004, -1, 999, -1, -1, -1, -1, 1004,
+ -1, -1, -1, -1, 1016, 999, -1, 999, -1, -1,
+ -1, 1016, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 999, -1, -1, -1, -1, 1004, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 1016,
+ 999, -1, -1, -1, 999, 1004, -1, -1, -1, 1004,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 995, -1, -1, -1, -1,
- 1000, -1, -1, -1, -1, 1000, -1, 995, -1, 995,
- -1, 1011, 1000, -1, -1, -1, -1, -1, -1, -1,
- 995, -1, -1, 1011, -1, 1000, -1, 995, -1, -1,
- -1, -1, 1000, -1, -1, -1, 1011, -1, 995, 995,
- -1, -1, -1, 1011, 1000, -1, 995, -1, -1, -1,
- -1, -1, 995, -1, -1, 995, -1, -1, -1, 995,
- -1, -1, 995, -1, 1000, -1, 995, -1, -1, -1,
- 995, 1000, -1, -1, -1, 1000
+ 999, -1, -1, -1, 999, 1004, -1, -1, -1, 1004
};
const unsigned short int
Dhcp4Parser::yystos_[] =
{
- 0, 152, 153, 154, 155, 156, 157, 158, 159, 160,
- 161, 162, 163, 164, 165, 171, 172, 173, 174, 175,
- 176, 177, 178, 179, 180, 181, 182, 183, 184, 185,
- 0, 5, 7, 9, 166, 167, 168, 169, 186, 187,
- 188, 193, 7, 202, 7, 208, 7, 224, 7, 317,
- 7, 397, 7, 413, 7, 349, 7, 355, 7, 379,
- 7, 293, 7, 473, 7, 521, 7, 513, 194, 189,
- 203, 209, 225, 318, 398, 414, 350, 356, 380, 294,
- 474, 522, 514, 186, 195, 196, 166, 191, 192, 10,
- 140, 149, 150, 151, 166, 201, 204, 205, 206, 504,
- 506, 508, 519, 7, 11, 13, 22, 24, 25, 26,
+ 0, 153, 154, 155, 156, 157, 158, 159, 160, 161,
+ 162, 163, 164, 165, 166, 172, 173, 174, 175, 176,
+ 177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
+ 0, 5, 7, 9, 167, 168, 169, 170, 187, 188,
+ 189, 194, 7, 203, 7, 209, 7, 225, 7, 318,
+ 7, 398, 7, 414, 7, 350, 7, 356, 7, 380,
+ 7, 294, 7, 476, 7, 524, 7, 516, 195, 190,
+ 204, 210, 226, 319, 399, 415, 351, 357, 381, 295,
+ 477, 525, 517, 187, 196, 197, 167, 192, 193, 10,
+ 141, 150, 151, 152, 167, 202, 205, 206, 207, 507,
+ 509, 511, 522, 7, 11, 13, 22, 24, 25, 26,
27, 28, 29, 30, 31, 52, 53, 54, 55, 56,
57, 61, 62, 72, 75, 76, 85, 86, 91, 101,
- 104, 111, 112, 115, 117, 201, 210, 211, 212, 213,
- 214, 215, 216, 218, 219, 220, 235, 237, 243, 245,
- 278, 287, 301, 311, 339, 347, 373, 403, 405, 407,
- 418, 420, 422, 445, 457, 458, 466, 471, 510, 14,
- 15, 18, 21, 201, 222, 223, 226, 228, 231, 234,
- 403, 405, 58, 59, 60, 73, 77, 78, 79, 80,
- 87, 90, 98, 201, 212, 213, 214, 219, 319, 320,
- 321, 323, 325, 327, 329, 331, 333, 335, 338, 373,
- 391, 403, 405, 407, 418, 420, 422, 442, 74, 201,
- 331, 333, 373, 399, 400, 401, 403, 405, 86, 92,
- 93, 94, 95, 96, 97, 99, 201, 373, 403, 405,
- 415, 416, 417, 418, 420, 422, 424, 428, 430, 432,
- 434, 436, 438, 440, 347, 32, 63, 65, 66, 69,
- 70, 71, 201, 263, 357, 358, 359, 360, 361, 362,
- 363, 365, 367, 369, 370, 372, 403, 405, 64, 67,
- 68, 201, 263, 361, 367, 381, 382, 383, 384, 385,
- 387, 388, 389, 390, 403, 405, 102, 103, 201, 295,
- 296, 297, 299, 118, 119, 120, 121, 122, 123, 124,
- 125, 126, 127, 128, 129, 130, 131, 138, 139, 201,
- 403, 405, 475, 476, 477, 478, 480, 482, 483, 485,
- 486, 487, 490, 492, 493, 494, 495, 498, 500, 502,
- 141, 523, 524, 525, 12, 201, 515, 516, 517, 6,
- 3, 4, 8, 3, 207, 520, 505, 507, 509, 4,
- 3, 8, 511, 512, 221, 238, 4, 4, 419, 421,
- 423, 236, 244, 246, 4, 4, 4, 4, 217, 312,
- 348, 374, 340, 404, 406, 279, 446, 408, 288, 302,
- 4, 459, 467, 472, 3, 8, 227, 229, 232, 4,
- 3, 8, 324, 326, 328, 392, 322, 330, 4, 336,
- 334, 332, 443, 3, 8, 402, 3, 8, 441, 429,
- 431, 435, 433, 439, 437, 425, 8, 3, 8, 364,
- 264, 4, 368, 366, 371, 4, 8, 3, 386, 4,
- 4, 8, 3, 298, 300, 3, 8, 4, 479, 481,
- 4, 484, 4, 4, 488, 491, 4, 4, 4, 496,
- 499, 501, 503, 3, 8, 526, 3, 8, 518, 3,
- 8, 186, 186, 166, 4, 4, 4, 4, 4, 205,
- 515, 4, 4, 4, 169, 169, 4, 4, 4, 4,
- 4, 4, 167, 167, 167, 167, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 167, 4,
- 4, 4, 211, 4, 4, 4, 169, 223, 4, 4,
- 4, 4, 4, 4, 167, 4, 4, 4, 4, 320,
- 4, 400, 4, 4, 4, 4, 4, 4, 4, 4,
- 417, 4, 4, 167, 4, 4, 4, 169, 359, 4,
- 169, 169, 383, 4, 4, 296, 169, 4, 4, 167,
- 4, 167, 167, 4, 4, 169, 169, 169, 4, 4,
- 4, 4, 476, 4, 524, 4, 516, 4, 7, 7,
- 186, 186, 186, 8, 7, 7, 7, 166, 166, 166,
- 7, 7, 5, 166, 5, 5, 5, 5, 188, 190,
- 166, 5, 5, 5, 5, 7, 7, 7, 7, 5,
- 197, 16, 17, 230, 19, 20, 233, 166, 166, 166,
- 5, 166, 166, 81, 82, 83, 84, 337, 197, 166,
- 7, 166, 197, 166, 166, 166, 166, 166, 166, 166,
- 166, 166, 166, 166, 166, 166, 166, 186, 166, 166,
- 166, 17, 132, 489, 133, 134, 135, 136, 137, 169,
- 497, 166, 166, 166, 5, 5, 186, 210, 523, 515,
- 222, 23, 239, 240, 241, 32, 37, 38, 39, 40,
+ 104, 111, 112, 115, 118, 202, 211, 212, 213, 214,
+ 215, 216, 217, 219, 220, 221, 236, 238, 244, 246,
+ 279, 288, 302, 312, 340, 348, 374, 404, 406, 408,
+ 419, 421, 423, 446, 458, 459, 467, 474, 513, 14,
+ 15, 18, 21, 202, 223, 224, 227, 229, 232, 235,
+ 404, 406, 58, 59, 60, 73, 77, 78, 79, 80,
+ 87, 90, 98, 202, 213, 214, 215, 220, 320, 321,
+ 322, 324, 326, 328, 330, 332, 334, 336, 339, 374,
+ 392, 404, 406, 408, 419, 421, 423, 443, 74, 202,
+ 332, 334, 374, 400, 401, 402, 404, 406, 86, 92,
+ 93, 94, 95, 96, 97, 99, 202, 374, 404, 406,
+ 416, 417, 418, 419, 421, 423, 425, 429, 431, 433,
+ 435, 437, 439, 441, 348, 32, 63, 65, 66, 69,
+ 70, 71, 202, 264, 358, 359, 360, 361, 362, 363,
+ 364, 366, 368, 370, 371, 373, 404, 406, 64, 67,
+ 68, 202, 264, 362, 368, 382, 383, 384, 385, 386,
+ 388, 389, 390, 391, 404, 406, 102, 103, 202, 296,
+ 297, 298, 300, 119, 120, 121, 122, 123, 124, 125,
+ 126, 127, 128, 129, 130, 131, 132, 139, 140, 202,
+ 404, 406, 478, 479, 480, 481, 483, 485, 486, 488,
+ 489, 490, 493, 495, 496, 497, 498, 501, 503, 505,
+ 142, 526, 527, 528, 12, 202, 518, 519, 520, 6,
+ 3, 4, 8, 3, 208, 523, 508, 510, 512, 4,
+ 3, 8, 514, 515, 222, 239, 4, 4, 420, 422,
+ 424, 237, 245, 247, 4, 4, 4, 4, 218, 313,
+ 349, 375, 341, 405, 407, 280, 447, 409, 289, 303,
+ 4, 460, 468, 475, 3, 8, 228, 230, 233, 4,
+ 3, 8, 325, 327, 329, 393, 323, 331, 4, 337,
+ 335, 333, 444, 3, 8, 403, 3, 8, 442, 430,
+ 432, 436, 434, 440, 438, 426, 8, 3, 8, 365,
+ 265, 4, 369, 367, 372, 4, 8, 3, 387, 4,
+ 4, 8, 3, 299, 301, 3, 8, 4, 482, 484,
+ 4, 487, 4, 4, 491, 494, 4, 4, 4, 499,
+ 502, 504, 506, 3, 8, 529, 3, 8, 521, 3,
+ 8, 187, 187, 167, 4, 4, 4, 4, 4, 206,
+ 518, 4, 4, 4, 170, 170, 4, 4, 4, 4,
+ 4, 4, 168, 168, 168, 168, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 168, 4,
+ 4, 4, 212, 4, 4, 4, 170, 224, 4, 4,
+ 4, 4, 4, 4, 168, 4, 4, 4, 4, 321,
+ 4, 401, 4, 4, 4, 4, 4, 4, 4, 4,
+ 418, 4, 4, 168, 4, 4, 4, 170, 360, 4,
+ 170, 170, 384, 4, 4, 297, 170, 4, 4, 168,
+ 4, 168, 168, 4, 4, 170, 170, 170, 4, 4,
+ 4, 4, 479, 4, 527, 4, 519, 4, 7, 7,
+ 187, 187, 187, 8, 7, 7, 7, 167, 167, 167,
+ 7, 7, 5, 167, 5, 5, 5, 5, 189, 191,
+ 167, 5, 5, 5, 5, 7, 7, 7, 7, 5,
+ 198, 16, 17, 231, 19, 20, 234, 167, 167, 167,
+ 5, 167, 167, 81, 82, 83, 84, 338, 198, 167,
+ 7, 167, 198, 167, 167, 167, 167, 167, 167, 167,
+ 167, 167, 167, 167, 167, 167, 167, 187, 167, 167,
+ 167, 17, 133, 492, 134, 135, 136, 137, 138, 170,
+ 500, 167, 167, 167, 5, 5, 187, 211, 526, 518,
+ 223, 23, 240, 241, 242, 32, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- 51, 201, 251, 252, 253, 256, 258, 260, 262, 263,
- 265, 266, 267, 268, 269, 270, 271, 272, 274, 276,
- 277, 251, 7, 247, 248, 249, 7, 313, 314, 315,
- 7, 351, 352, 353, 7, 375, 376, 377, 7, 341,
- 342, 343, 92, 93, 94, 95, 97, 280, 281, 282,
- 283, 284, 285, 286, 7, 447, 448, 7, 409, 410,
- 411, 7, 289, 290, 291, 105, 106, 107, 108, 109,
- 110, 303, 304, 305, 306, 307, 308, 309, 310, 113,
- 114, 201, 403, 405, 460, 461, 462, 464, 116, 201,
- 403, 405, 468, 469, 470, 475, 198, 7, 393, 394,
- 395, 100, 424, 426, 444, 7, 527, 528, 247, 8,
- 8, 8, 8, 242, 3, 8, 254, 257, 259, 261,
- 4, 4, 4, 4, 4, 273, 275, 4, 4, 4,
- 4, 4, 3, 8, 8, 250, 6, 3, 316, 6,
- 3, 354, 6, 3, 378, 6, 3, 344, 6, 3,
- 3, 6, 449, 3, 6, 412, 6, 3, 292, 6,
- 3, 4, 4, 4, 4, 4, 4, 3, 8, 463,
- 465, 3, 8, 4, 3, 8, 8, 166, 199, 200,
- 396, 6, 3, 427, 8, 529, 3, 6, 6, 4,
- 240, 4, 4, 4, 4, 167, 169, 167, 169, 167,
- 4, 4, 167, 167, 167, 167, 169, 252, 251, 249,
- 319, 315, 357, 353, 381, 377, 201, 212, 213, 214,
- 219, 263, 311, 329, 331, 333, 335, 345, 346, 373,
- 403, 405, 418, 420, 422, 442, 343, 281, 88, 89,
- 201, 263, 347, 373, 403, 405, 418, 420, 422, 450,
- 451, 452, 453, 454, 456, 448, 415, 411, 295, 291,
- 167, 167, 167, 167, 167, 167, 304, 4, 4, 461,
- 167, 469, 6, 3, 399, 395, 4, 142, 144, 145,
- 201, 263, 403, 405, 530, 531, 532, 533, 535, 528,
- 166, 33, 34, 35, 36, 255, 166, 166, 166, 166,
- 166, 8, 8, 8, 8, 3, 8, 455, 4, 8,
- 3, 8, 8, 166, 166, 166, 8, 197, 536, 4,
- 534, 3, 8, 346, 4, 169, 452, 4, 167, 4,
- 531, 166, 5, 166, 7, 537, 538, 539, 3, 6,
- 143, 146, 147, 148, 540, 541, 542, 544, 545, 546,
- 538, 543, 4, 4, 4, 3, 8, 4, 169, 167,
- 167, 541, 166
+ 51, 202, 252, 253, 254, 257, 259, 261, 263, 264,
+ 266, 267, 268, 269, 270, 271, 272, 273, 275, 277,
+ 278, 252, 7, 248, 249, 250, 7, 314, 315, 316,
+ 7, 352, 353, 354, 7, 376, 377, 378, 7, 342,
+ 343, 344, 92, 93, 94, 95, 97, 281, 282, 283,
+ 284, 285, 286, 287, 7, 448, 449, 7, 410, 411,
+ 412, 7, 290, 291, 292, 105, 106, 107, 108, 109,
+ 110, 304, 305, 306, 307, 308, 309, 310, 311, 113,
+ 114, 202, 404, 406, 461, 462, 463, 465, 116, 117,
+ 202, 404, 406, 469, 470, 471, 473, 478, 199, 7,
+ 394, 395, 396, 100, 425, 427, 445, 7, 530, 531,
+ 248, 8, 8, 8, 8, 243, 3, 8, 255, 258,
+ 260, 262, 4, 4, 4, 4, 4, 274, 276, 4,
+ 4, 4, 4, 4, 3, 8, 8, 251, 6, 3,
+ 317, 6, 3, 355, 6, 3, 379, 6, 3, 345,
+ 6, 3, 3, 6, 450, 3, 6, 413, 6, 3,
+ 293, 6, 3, 4, 4, 4, 4, 4, 4, 3,
+ 8, 464, 466, 3, 8, 472, 4, 3, 8, 8,
+ 167, 200, 201, 397, 6, 3, 428, 8, 532, 3,
+ 6, 6, 4, 241, 4, 4, 4, 4, 168, 170,
+ 168, 170, 168, 4, 4, 168, 168, 168, 168, 170,
+ 253, 252, 250, 320, 316, 358, 354, 382, 378, 202,
+ 213, 214, 215, 220, 264, 312, 330, 332, 334, 336,
+ 346, 347, 374, 404, 406, 419, 421, 423, 443, 344,
+ 282, 88, 89, 202, 264, 348, 374, 404, 406, 419,
+ 421, 423, 451, 452, 453, 454, 455, 457, 449, 416,
+ 412, 296, 292, 168, 168, 168, 168, 168, 168, 305,
+ 4, 4, 462, 4, 168, 470, 6, 3, 400, 396,
+ 4, 143, 145, 146, 202, 264, 404, 406, 533, 534,
+ 535, 536, 538, 531, 167, 33, 34, 35, 36, 256,
+ 167, 167, 167, 167, 167, 8, 8, 8, 8, 3,
+ 8, 456, 4, 8, 3, 8, 8, 167, 167, 167,
+ 167, 8, 198, 539, 4, 537, 3, 8, 347, 4,
+ 170, 453, 4, 168, 4, 534, 167, 5, 167, 7,
+ 540, 541, 542, 3, 6, 144, 147, 148, 149, 543,
+ 544, 545, 547, 548, 549, 541, 546, 4, 4, 4,
+ 3, 8, 4, 170, 168, 168, 544, 167
};
const unsigned short int
Dhcp4Parser::yyr1_[] =
{
- 0, 170, 172, 171, 173, 171, 174, 171, 175, 171,
- 176, 171, 177, 171, 178, 171, 179, 171, 180, 171,
- 181, 171, 182, 171, 183, 171, 184, 171, 185, 171,
- 186, 186, 186, 186, 186, 186, 186, 187, 189, 188,
- 190, 191, 191, 192, 192, 194, 193, 195, 195, 196,
- 196, 198, 197, 199, 199, 200, 200, 201, 203, 202,
- 204, 204, 205, 205, 205, 205, 205, 205, 207, 206,
- 209, 208, 210, 210, 211, 211, 211, 211, 211, 211,
- 211, 211, 211, 211, 211, 211, 211, 211, 211, 211,
- 211, 211, 211, 211, 211, 211, 211, 211, 211, 211,
- 211, 211, 211, 211, 211, 211, 212, 213, 214, 215,
- 217, 216, 218, 219, 221, 220, 222, 222, 223, 223,
- 223, 223, 223, 223, 223, 225, 224, 227, 226, 229,
- 228, 230, 230, 232, 231, 233, 233, 234, 236, 235,
- 238, 237, 239, 239, 240, 242, 241, 244, 243, 246,
- 245, 247, 247, 248, 248, 250, 249, 251, 251, 252,
- 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
- 252, 252, 252, 252, 252, 252, 252, 254, 253, 255,
- 255, 255, 255, 257, 256, 259, 258, 261, 260, 262,
- 264, 263, 265, 266, 267, 268, 269, 270, 271, 273,
- 272, 275, 274, 276, 277, 279, 278, 280, 280, 281,
- 281, 281, 281, 281, 282, 283, 284, 285, 286, 288,
- 287, 289, 289, 290, 290, 292, 291, 294, 293, 295,
- 295, 295, 296, 296, 298, 297, 300, 299, 302, 301,
- 303, 303, 304, 304, 304, 304, 304, 304, 305, 306,
- 307, 308, 309, 310, 312, 311, 313, 313, 314, 314,
- 316, 315, 318, 317, 319, 319, 320, 320, 320, 320,
- 320, 320, 320, 320, 320, 320, 320, 320, 320, 320,
- 320, 320, 320, 320, 320, 320, 320, 320, 320, 322,
- 321, 324, 323, 326, 325, 328, 327, 330, 329, 332,
- 331, 334, 333, 336, 335, 337, 337, 337, 337, 338,
- 340, 339, 341, 341, 342, 342, 344, 343, 345, 345,
- 346, 346, 346, 346, 346, 346, 346, 346, 346, 346,
- 346, 346, 346, 346, 346, 346, 346, 346, 348, 347,
- 350, 349, 351, 351, 352, 352, 354, 353, 356, 355,
- 357, 357, 358, 358, 359, 359, 359, 359, 359, 359,
- 359, 359, 359, 359, 360, 361, 362, 364, 363, 366,
- 365, 368, 367, 369, 371, 370, 372, 374, 373, 375,
- 375, 376, 376, 378, 377, 380, 379, 381, 381, 382,
- 382, 383, 383, 383, 383, 383, 383, 383, 383, 383,
- 384, 386, 385, 387, 388, 389, 390, 392, 391, 393,
- 393, 394, 394, 396, 395, 398, 397, 399, 399, 400,
- 400, 400, 400, 400, 400, 400, 402, 401, 404, 403,
- 406, 405, 408, 407, 409, 409, 410, 410, 412, 411,
- 414, 413, 415, 415, 416, 416, 417, 417, 417, 417,
- 417, 417, 417, 417, 417, 417, 417, 417, 417, 417,
- 417, 419, 418, 421, 420, 423, 422, 425, 424, 427,
- 426, 429, 428, 431, 430, 433, 432, 435, 434, 437,
- 436, 439, 438, 441, 440, 443, 442, 444, 444, 446,
- 445, 447, 447, 449, 448, 450, 450, 451, 451, 452,
- 452, 452, 452, 452, 452, 452, 452, 452, 452, 452,
- 453, 455, 454, 456, 457, 459, 458, 460, 460, 461,
- 461, 461, 461, 461, 463, 462, 465, 464, 467, 466,
- 468, 468, 469, 469, 469, 469, 470, 472, 471, 474,
- 473, 475, 475, 476, 476, 476, 476, 476, 476, 476,
- 476, 476, 476, 476, 476, 476, 476, 476, 476, 476,
- 476, 476, 477, 479, 478, 481, 480, 482, 484, 483,
- 485, 486, 488, 487, 489, 489, 491, 490, 492, 493,
- 494, 496, 495, 497, 497, 497, 497, 497, 499, 498,
- 501, 500, 503, 502, 505, 504, 507, 506, 509, 508,
- 511, 510, 512, 510, 514, 513, 515, 515, 516, 516,
- 518, 517, 520, 519, 522, 521, 523, 523, 524, 526,
- 525, 527, 527, 529, 528, 530, 530, 531, 531, 531,
- 531, 531, 531, 531, 532, 534, 533, 536, 535, 537,
- 537, 539, 538, 540, 540, 541, 541, 541, 541, 543,
- 542, 544, 545, 546
+ 0, 171, 173, 172, 174, 172, 175, 172, 176, 172,
+ 177, 172, 178, 172, 179, 172, 180, 172, 181, 172,
+ 182, 172, 183, 172, 184, 172, 185, 172, 186, 172,
+ 187, 187, 187, 187, 187, 187, 187, 188, 190, 189,
+ 191, 192, 192, 193, 193, 195, 194, 196, 196, 197,
+ 197, 199, 198, 200, 200, 201, 201, 202, 204, 203,
+ 205, 205, 206, 206, 206, 206, 206, 206, 208, 207,
+ 210, 209, 211, 211, 212, 212, 212, 212, 212, 212,
+ 212, 212, 212, 212, 212, 212, 212, 212, 212, 212,
+ 212, 212, 212, 212, 212, 212, 212, 212, 212, 212,
+ 212, 212, 212, 212, 212, 212, 213, 214, 215, 216,
+ 218, 217, 219, 220, 222, 221, 223, 223, 224, 224,
+ 224, 224, 224, 224, 224, 226, 225, 228, 227, 230,
+ 229, 231, 231, 233, 232, 234, 234, 235, 237, 236,
+ 239, 238, 240, 240, 241, 243, 242, 245, 244, 247,
+ 246, 248, 248, 249, 249, 251, 250, 252, 252, 253,
+ 253, 253, 253, 253, 253, 253, 253, 253, 253, 253,
+ 253, 253, 253, 253, 253, 253, 253, 255, 254, 256,
+ 256, 256, 256, 258, 257, 260, 259, 262, 261, 263,
+ 265, 264, 266, 267, 268, 269, 270, 271, 272, 274,
+ 273, 276, 275, 277, 278, 280, 279, 281, 281, 282,
+ 282, 282, 282, 282, 283, 284, 285, 286, 287, 289,
+ 288, 290, 290, 291, 291, 293, 292, 295, 294, 296,
+ 296, 296, 297, 297, 299, 298, 301, 300, 303, 302,
+ 304, 304, 305, 305, 305, 305, 305, 305, 306, 307,
+ 308, 309, 310, 311, 313, 312, 314, 314, 315, 315,
+ 317, 316, 319, 318, 320, 320, 321, 321, 321, 321,
+ 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
+ 321, 321, 321, 321, 321, 321, 321, 321, 321, 323,
+ 322, 325, 324, 327, 326, 329, 328, 331, 330, 333,
+ 332, 335, 334, 337, 336, 338, 338, 338, 338, 339,
+ 341, 340, 342, 342, 343, 343, 345, 344, 346, 346,
+ 347, 347, 347, 347, 347, 347, 347, 347, 347, 347,
+ 347, 347, 347, 347, 347, 347, 347, 347, 349, 348,
+ 351, 350, 352, 352, 353, 353, 355, 354, 357, 356,
+ 358, 358, 359, 359, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 361, 362, 363, 365, 364, 367,
+ 366, 369, 368, 370, 372, 371, 373, 375, 374, 376,
+ 376, 377, 377, 379, 378, 381, 380, 382, 382, 383,
+ 383, 384, 384, 384, 384, 384, 384, 384, 384, 384,
+ 385, 387, 386, 388, 389, 390, 391, 393, 392, 394,
+ 394, 395, 395, 397, 396, 399, 398, 400, 400, 401,
+ 401, 401, 401, 401, 401, 401, 403, 402, 405, 404,
+ 407, 406, 409, 408, 410, 410, 411, 411, 413, 412,
+ 415, 414, 416, 416, 417, 417, 418, 418, 418, 418,
+ 418, 418, 418, 418, 418, 418, 418, 418, 418, 418,
+ 418, 420, 419, 422, 421, 424, 423, 426, 425, 428,
+ 427, 430, 429, 432, 431, 434, 433, 436, 435, 438,
+ 437, 440, 439, 442, 441, 444, 443, 445, 445, 447,
+ 446, 448, 448, 450, 449, 451, 451, 452, 452, 453,
+ 453, 453, 453, 453, 453, 453, 453, 453, 453, 453,
+ 454, 456, 455, 457, 458, 460, 459, 461, 461, 462,
+ 462, 462, 462, 462, 464, 463, 466, 465, 468, 467,
+ 469, 469, 470, 470, 470, 470, 470, 472, 471, 473,
+ 475, 474, 477, 476, 478, 478, 479, 479, 479, 479,
+ 479, 479, 479, 479, 479, 479, 479, 479, 479, 479,
+ 479, 479, 479, 479, 479, 480, 482, 481, 484, 483,
+ 485, 487, 486, 488, 489, 491, 490, 492, 492, 494,
+ 493, 495, 496, 497, 499, 498, 500, 500, 500, 500,
+ 500, 502, 501, 504, 503, 506, 505, 508, 507, 510,
+ 509, 512, 511, 514, 513, 515, 513, 517, 516, 518,
+ 518, 519, 519, 521, 520, 523, 522, 525, 524, 526,
+ 526, 527, 529, 528, 530, 530, 532, 531, 533, 533,
+ 534, 534, 534, 534, 534, 534, 534, 535, 537, 536,
+ 539, 538, 540, 540, 542, 541, 543, 543, 544, 544,
+ 544, 544, 546, 545, 547, 548, 549
};
const unsigned char
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 0, 4, 3, 3, 0, 6, 1, 3, 1,
1, 1, 1, 1, 0, 4, 0, 4, 0, 6,
- 1, 3, 1, 1, 1, 1, 3, 0, 6, 0,
- 4, 1, 3, 1, 1, 1, 1, 1, 1, 1,
+ 1, 3, 1, 1, 1, 1, 1, 0, 4, 3,
+ 0, 6, 0, 4, 1, 3, 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, 4, 0, 4,
- 0, 4, 0, 6, 0, 4, 1, 3, 1, 1,
- 0, 6, 0, 6, 0, 4, 1, 3, 1, 0,
- 6, 1, 3, 0, 4, 1, 3, 1, 1, 1,
- 1, 1, 1, 1, 3, 0, 4, 0, 6, 1,
- 3, 0, 4, 1, 3, 1, 1, 1, 1, 0,
- 4, 3, 3, 3
+ 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,
+ 4, 0, 4, 0, 4, 0, 6, 0, 4, 1,
+ 3, 1, 1, 0, 6, 0, 6, 0, 4, 1,
+ 3, 1, 0, 6, 1, 3, 0, 4, 1, 3,
+ 1, 1, 1, 1, 1, 1, 1, 3, 0, 4,
+ 0, 6, 1, 3, 0, 4, 1, 3, 1, 1,
+ 1, 1, 0, 4, 3, 3, 3
};
"\"hold-reclaimed-time\"", "\"max-reclaim-leases\"",
"\"max-reclaim-time\"", "\"unwarned-reclaim-cycles\"",
"\"dhcp4o6-port\"", "\"control-socket\"", "\"socket-type\"",
- "\"socket-name\"", "\"queue-control\"", "\"capacity\"", "\"dhcp-ddns\"",
- "\"enable-updates\"", "\"qualifying-suffix\"", "\"server-ip\"",
- "\"server-port\"", "\"sender-ip\"", "\"sender-port\"",
+ "\"socket-name\"", "\"queue-control\"", "\"queue-type\"", "\"capacity\"",
+ "\"dhcp-ddns\"", "\"enable-updates\"", "\"qualifying-suffix\"",
+ "\"server-ip\"", "\"server-port\"", "\"sender-ip\"", "\"sender-port\"",
"\"max-queue-size\"", "\"ncr-protocol\"", "\"ncr-format\"",
"\"always-include-fqdn\"", "\"override-no-update\"",
"\"override-client-update\"", "\"replace-client-name\"",
"only_if_required", "dhcp4o6_port", "control_socket", "$@97",
"control_socket_params", "control_socket_param", "control_socket_type",
"$@98", "control_socket_name", "$@99", "queue_control", "$@100",
- "queue_control_params", "queue_control_param", "capacity", "dhcp_ddns",
- "$@101", "sub_dhcp_ddns", "$@102", "dhcp_ddns_params", "dhcp_ddns_param",
- "enable_updates", "qualifying_suffix", "$@103", "server_ip", "$@104",
- "server_port", "sender_ip", "$@105", "sender_port", "max_queue_size",
- "ncr_protocol", "$@106", "ncr_protocol_value", "ncr_format", "$@107",
+ "queue_control_params", "queue_control_param", "queue_type", "$@101",
+ "capacity", "dhcp_ddns", "$@102", "sub_dhcp_ddns", "$@103",
+ "dhcp_ddns_params", "dhcp_ddns_param", "enable_updates",
+ "qualifying_suffix", "$@104", "server_ip", "$@105", "server_port",
+ "sender_ip", "$@106", "sender_port", "max_queue_size", "ncr_protocol",
+ "$@107", "ncr_protocol_value", "ncr_format", "$@108",
"always_include_fqdn", "override_no_update", "override_client_update",
- "replace_client_name", "$@108", "replace_client_name_value",
- "generated_prefix", "$@109", "hostname_char_set", "$@110",
- "hostname_char_replacement", "$@111", "dhcp6_json_object", "$@112",
- "dhcpddns_json_object", "$@113", "control_agent_json_object", "$@114",
- "config_control", "$@115", "$@116", "sub_config_control", "$@117",
+ "replace_client_name", "$@109", "replace_client_name_value",
+ "generated_prefix", "$@110", "hostname_char_set", "$@111",
+ "hostname_char_replacement", "$@112", "dhcp6_json_object", "$@113",
+ "dhcpddns_json_object", "$@114", "control_agent_json_object", "$@115",
+ "config_control", "$@116", "$@117", "sub_config_control", "$@118",
"config_control_params", "config_control_param", "config_databases",
- "$@118", "logging_object", "$@119", "sub_logging", "$@120",
- "logging_params", "logging_param", "loggers", "$@121", "loggers_entries",
- "logger_entry", "$@122", "logger_params", "logger_param", "debuglevel",
- "severity", "$@123", "output_options_list", "$@124",
- "output_options_list_content", "output_entry", "$@125",
- "output_params_list", "output_params", "output", "$@126", "flush",
+ "$@119", "logging_object", "$@120", "sub_logging", "$@121",
+ "logging_params", "logging_param", "loggers", "$@122", "loggers_entries",
+ "logger_entry", "$@123", "logger_params", "logger_param", "debuglevel",
+ "severity", "$@124", "output_options_list", "$@125",
+ "output_options_list_content", "output_entry", "$@126",
+ "output_params_list", "output_params", "output", "$@127", "flush",
"maxsize", "maxver", YY_NULLPTR
};
const unsigned short int
Dhcp4Parser::yyrline_[] =
{
- 0, 255, 255, 255, 256, 256, 257, 257, 258, 258,
- 259, 259, 260, 260, 261, 261, 262, 262, 263, 263,
- 264, 264, 265, 265, 266, 266, 267, 267, 268, 268,
- 276, 277, 278, 279, 280, 281, 282, 285, 290, 290,
- 301, 304, 305, 308, 312, 319, 319, 326, 327, 330,
- 334, 341, 341, 348, 349, 352, 356, 367, 377, 377,
- 393, 394, 398, 399, 400, 401, 402, 403, 406, 406,
- 421, 421, 430, 431, 436, 437, 438, 439, 440, 441,
- 442, 443, 444, 445, 446, 447, 448, 449, 450, 451,
- 452, 453, 454, 455, 456, 457, 458, 459, 460, 461,
- 462, 463, 464, 465, 466, 467, 470, 475, 480, 485,
- 490, 490, 498, 503, 509, 509, 520, 521, 524, 525,
- 526, 527, 528, 529, 530, 533, 533, 542, 542, 552,
- 552, 559, 560, 563, 563, 570, 572, 576, 582, 582,
- 594, 594, 604, 605, 607, 609, 609, 627, 627, 639,
- 639, 649, 650, 653, 654, 657, 657, 667, 668, 671,
- 672, 673, 674, 675, 676, 677, 678, 679, 680, 681,
- 682, 683, 684, 685, 686, 687, 688, 691, 691, 698,
- 699, 700, 701, 704, 704, 712, 712, 720, 720, 728,
- 733, 733, 741, 746, 751, 756, 761, 766, 771, 776,
- 776, 784, 784, 792, 797, 802, 802, 812, 813, 816,
- 817, 818, 819, 820, 823, 828, 833, 838, 843, 848,
- 848, 858, 859, 862, 863, 866, 866, 876, 876, 886,
- 887, 888, 891, 892, 895, 895, 903, 903, 911, 911,
- 922, 923, 926, 927, 928, 929, 930, 931, 934, 939,
- 944, 949, 954, 959, 967, 967, 980, 981, 984, 985,
- 992, 992, 1018, 1018, 1029, 1030, 1034, 1035, 1036, 1037,
- 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047,
- 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1059,
- 1059, 1067, 1067, 1075, 1075, 1083, 1083, 1091, 1091, 1099,
- 1099, 1107, 1107, 1117, 1117, 1124, 1125, 1126, 1127, 1130,
- 1137, 1137, 1148, 1149, 1153, 1154, 1157, 1157, 1165, 1166,
- 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178,
- 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1193, 1193,
- 1206, 1206, 1215, 1216, 1219, 1220, 1225, 1225, 1240, 1240,
- 1254, 1255, 1258, 1259, 1262, 1263, 1264, 1265, 1266, 1267,
- 1268, 1269, 1270, 1271, 1274, 1276, 1281, 1283, 1283, 1291,
- 1291, 1299, 1299, 1307, 1309, 1309, 1317, 1326, 1326, 1338,
- 1339, 1344, 1345, 1350, 1350, 1362, 1362, 1374, 1375, 1380,
- 1381, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394,
- 1397, 1399, 1399, 1407, 1409, 1411, 1416, 1424, 1424, 1436,
- 1437, 1440, 1441, 1444, 1444, 1454, 1454, 1464, 1465, 1468,
- 1469, 1470, 1471, 1472, 1473, 1474, 1477, 1477, 1485, 1485,
- 1510, 1510, 1540, 1540, 1550, 1551, 1554, 1555, 1558, 1558,
- 1567, 1567, 1576, 1577, 1580, 1581, 1585, 1586, 1587, 1588,
- 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598,
- 1599, 1602, 1602, 1610, 1610, 1618, 1618, 1626, 1626, 1634,
- 1634, 1644, 1644, 1652, 1652, 1660, 1660, 1668, 1668, 1676,
- 1676, 1684, 1684, 1692, 1692, 1705, 1705, 1715, 1716, 1722,
- 1722, 1732, 1733, 1736, 1736, 1746, 1747, 1750, 1751, 1754,
- 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764,
- 1767, 1769, 1769, 1777, 1786, 1793, 1793, 1803, 1804, 1807,
- 1808, 1809, 1810, 1811, 1814, 1814, 1822, 1822, 1833, 1833,
- 1844, 1845, 1848, 1849, 1850, 1851, 1854, 1861, 1861, 1873,
- 1873, 1883, 1884, 1887, 1888, 1889, 1890, 1891, 1892, 1893,
- 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903,
- 1904, 1905, 1908, 1913, 1913, 1921, 1921, 1929, 1934, 1934,
- 1942, 1947, 1952, 1952, 1960, 1961, 1964, 1964, 1972, 1977,
- 1982, 1987, 1987, 1995, 1998, 2001, 2004, 2007, 2013, 2013,
- 2021, 2021, 2029, 2029, 2040, 2040, 2047, 2047, 2054, 2054,
- 2061, 2061, 2070, 2070, 2081, 2081, 2091, 2092, 2096, 2097,
- 2100, 2100, 2115, 2115, 2125, 2125, 2136, 2137, 2141, 2145,
- 2145, 2157, 2158, 2162, 2162, 2170, 2171, 2174, 2175, 2176,
- 2177, 2178, 2179, 2180, 2183, 2188, 2188, 2196, 2196, 2206,
- 2207, 2210, 2210, 2218, 2219, 2222, 2223, 2224, 2225, 2228,
- 2228, 2236, 2241, 2246
+ 0, 256, 256, 256, 257, 257, 258, 258, 259, 259,
+ 260, 260, 261, 261, 262, 262, 263, 263, 264, 264,
+ 265, 265, 266, 266, 267, 267, 268, 268, 269, 269,
+ 277, 278, 279, 280, 281, 282, 283, 286, 291, 291,
+ 302, 305, 306, 309, 313, 320, 320, 327, 328, 331,
+ 335, 342, 342, 349, 350, 353, 357, 368, 378, 378,
+ 394, 395, 399, 400, 401, 402, 403, 404, 407, 407,
+ 422, 422, 431, 432, 437, 438, 439, 440, 441, 442,
+ 443, 444, 445, 446, 447, 448, 449, 450, 451, 452,
+ 453, 454, 455, 456, 457, 458, 459, 460, 461, 462,
+ 463, 464, 465, 466, 467, 468, 471, 476, 481, 486,
+ 491, 491, 499, 504, 510, 510, 521, 522, 525, 526,
+ 527, 528, 529, 530, 531, 534, 534, 543, 543, 553,
+ 553, 560, 561, 564, 564, 571, 573, 577, 583, 583,
+ 595, 595, 605, 606, 608, 610, 610, 628, 628, 640,
+ 640, 650, 651, 654, 655, 658, 658, 668, 669, 672,
+ 673, 674, 675, 676, 677, 678, 679, 680, 681, 682,
+ 683, 684, 685, 686, 687, 688, 689, 692, 692, 699,
+ 700, 701, 702, 705, 705, 713, 713, 721, 721, 729,
+ 734, 734, 742, 747, 752, 757, 762, 767, 772, 777,
+ 777, 785, 785, 793, 798, 803, 803, 813, 814, 817,
+ 818, 819, 820, 821, 824, 829, 834, 839, 844, 849,
+ 849, 859, 860, 863, 864, 867, 867, 877, 877, 887,
+ 888, 889, 892, 893, 896, 896, 904, 904, 912, 912,
+ 923, 924, 927, 928, 929, 930, 931, 932, 935, 940,
+ 945, 950, 955, 960, 968, 968, 981, 982, 985, 986,
+ 993, 993, 1019, 1019, 1030, 1031, 1035, 1036, 1037, 1038,
+ 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048,
+ 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1060,
+ 1060, 1068, 1068, 1076, 1076, 1084, 1084, 1092, 1092, 1100,
+ 1100, 1108, 1108, 1118, 1118, 1125, 1126, 1127, 1128, 1131,
+ 1138, 1138, 1149, 1150, 1154, 1155, 1158, 1158, 1166, 1167,
+ 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179,
+ 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1194, 1194,
+ 1207, 1207, 1216, 1217, 1220, 1221, 1226, 1226, 1241, 1241,
+ 1255, 1256, 1259, 1260, 1263, 1264, 1265, 1266, 1267, 1268,
+ 1269, 1270, 1271, 1272, 1275, 1277, 1282, 1284, 1284, 1292,
+ 1292, 1300, 1300, 1308, 1310, 1310, 1318, 1327, 1327, 1339,
+ 1340, 1345, 1346, 1351, 1351, 1363, 1363, 1375, 1376, 1381,
+ 1382, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395,
+ 1398, 1400, 1400, 1408, 1410, 1412, 1417, 1425, 1425, 1437,
+ 1438, 1441, 1442, 1445, 1445, 1455, 1455, 1465, 1466, 1469,
+ 1470, 1471, 1472, 1473, 1474, 1475, 1478, 1478, 1486, 1486,
+ 1511, 1511, 1541, 1541, 1551, 1552, 1555, 1556, 1559, 1559,
+ 1568, 1568, 1577, 1578, 1581, 1582, 1586, 1587, 1588, 1589,
+ 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599,
+ 1600, 1603, 1603, 1611, 1611, 1619, 1619, 1627, 1627, 1635,
+ 1635, 1645, 1645, 1653, 1653, 1661, 1661, 1669, 1669, 1677,
+ 1677, 1685, 1685, 1693, 1693, 1706, 1706, 1716, 1717, 1723,
+ 1723, 1733, 1734, 1737, 1737, 1747, 1748, 1751, 1752, 1755,
+ 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765,
+ 1768, 1770, 1770, 1778, 1787, 1794, 1794, 1804, 1805, 1808,
+ 1809, 1810, 1811, 1812, 1815, 1815, 1823, 1823, 1834, 1834,
+ 1846, 1847, 1850, 1851, 1852, 1853, 1854, 1857, 1857, 1865,
+ 1872, 1872, 1884, 1884, 1894, 1895, 1898, 1899, 1900, 1901,
+ 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911,
+ 1912, 1913, 1914, 1915, 1916, 1919, 1924, 1924, 1932, 1932,
+ 1940, 1945, 1945, 1953, 1958, 1963, 1963, 1971, 1972, 1975,
+ 1975, 1983, 1988, 1993, 1998, 1998, 2006, 2009, 2012, 2015,
+ 2018, 2024, 2024, 2032, 2032, 2040, 2040, 2051, 2051, 2058,
+ 2058, 2065, 2065, 2072, 2072, 2081, 2081, 2092, 2092, 2102,
+ 2103, 2107, 2108, 2111, 2111, 2126, 2126, 2136, 2136, 2147,
+ 2148, 2152, 2156, 2156, 2168, 2169, 2173, 2173, 2181, 2182,
+ 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2194, 2199, 2199,
+ 2207, 2207, 2217, 2218, 2221, 2221, 2229, 2230, 2233, 2234,
+ 2235, 2236, 2239, 2239, 2247, 2252, 2257
};
// Print the state stack on the debug stream.
#line 14 "dhcp4_parser.yy" // lalr1.cc:1167
} } // isc::dhcp
-#line 4908 "dhcp4_parser.cc" // lalr1.cc:1167
-#line 2251 "dhcp4_parser.yy" // lalr1.cc:1168
+#line 4932 "dhcp4_parser.cc" // lalr1.cc:1167
+#line 2262 "dhcp4_parser.yy" // lalr1.cc:1168
void
TOKEN_SOCKET_TYPE = 368,
TOKEN_SOCKET_NAME = 369,
TOKEN_QUEUE_CONTROL = 370,
- TOKEN_CAPACITY = 371,
- TOKEN_DHCP_DDNS = 372,
- TOKEN_ENABLE_UPDATES = 373,
- TOKEN_QUALIFYING_SUFFIX = 374,
- TOKEN_SERVER_IP = 375,
- TOKEN_SERVER_PORT = 376,
- TOKEN_SENDER_IP = 377,
- TOKEN_SENDER_PORT = 378,
- TOKEN_MAX_QUEUE_SIZE = 379,
- TOKEN_NCR_PROTOCOL = 380,
- TOKEN_NCR_FORMAT = 381,
- TOKEN_ALWAYS_INCLUDE_FQDN = 382,
- TOKEN_OVERRIDE_NO_UPDATE = 383,
- TOKEN_OVERRIDE_CLIENT_UPDATE = 384,
- TOKEN_REPLACE_CLIENT_NAME = 385,
- TOKEN_GENERATED_PREFIX = 386,
- TOKEN_TCP = 387,
- TOKEN_JSON = 388,
- TOKEN_WHEN_PRESENT = 389,
- TOKEN_NEVER = 390,
- TOKEN_ALWAYS = 391,
- TOKEN_WHEN_NOT_PRESENT = 392,
- TOKEN_HOSTNAME_CHAR_SET = 393,
- TOKEN_HOSTNAME_CHAR_REPLACEMENT = 394,
- TOKEN_LOGGING = 395,
- TOKEN_LOGGERS = 396,
- TOKEN_OUTPUT_OPTIONS = 397,
- TOKEN_OUTPUT = 398,
- TOKEN_DEBUGLEVEL = 399,
- TOKEN_SEVERITY = 400,
- TOKEN_FLUSH = 401,
- TOKEN_MAXSIZE = 402,
- TOKEN_MAXVER = 403,
- TOKEN_DHCP6 = 404,
- TOKEN_DHCPDDNS = 405,
- TOKEN_CONTROL_AGENT = 406,
- TOKEN_TOPLEVEL_JSON = 407,
- TOKEN_TOPLEVEL_DHCP4 = 408,
- TOKEN_SUB_DHCP4 = 409,
- TOKEN_SUB_INTERFACES4 = 410,
- TOKEN_SUB_SUBNET4 = 411,
- TOKEN_SUB_POOL4 = 412,
- TOKEN_SUB_RESERVATION = 413,
- TOKEN_SUB_OPTION_DEFS = 414,
- TOKEN_SUB_OPTION_DEF = 415,
- TOKEN_SUB_OPTION_DATA = 416,
- TOKEN_SUB_HOOKS_LIBRARY = 417,
- TOKEN_SUB_DHCP_DDNS = 418,
- TOKEN_SUB_LOGGING = 419,
- TOKEN_SUB_CONFIG_CONTROL = 420,
- TOKEN_STRING = 421,
- TOKEN_INTEGER = 422,
- TOKEN_FLOAT = 423,
- TOKEN_BOOLEAN = 424
+ TOKEN_QUEUE_TYPE = 371,
+ TOKEN_CAPACITY = 372,
+ TOKEN_DHCP_DDNS = 373,
+ TOKEN_ENABLE_UPDATES = 374,
+ TOKEN_QUALIFYING_SUFFIX = 375,
+ TOKEN_SERVER_IP = 376,
+ TOKEN_SERVER_PORT = 377,
+ TOKEN_SENDER_IP = 378,
+ TOKEN_SENDER_PORT = 379,
+ TOKEN_MAX_QUEUE_SIZE = 380,
+ TOKEN_NCR_PROTOCOL = 381,
+ TOKEN_NCR_FORMAT = 382,
+ TOKEN_ALWAYS_INCLUDE_FQDN = 383,
+ TOKEN_OVERRIDE_NO_UPDATE = 384,
+ TOKEN_OVERRIDE_CLIENT_UPDATE = 385,
+ TOKEN_REPLACE_CLIENT_NAME = 386,
+ TOKEN_GENERATED_PREFIX = 387,
+ TOKEN_TCP = 388,
+ TOKEN_JSON = 389,
+ TOKEN_WHEN_PRESENT = 390,
+ TOKEN_NEVER = 391,
+ TOKEN_ALWAYS = 392,
+ TOKEN_WHEN_NOT_PRESENT = 393,
+ TOKEN_HOSTNAME_CHAR_SET = 394,
+ TOKEN_HOSTNAME_CHAR_REPLACEMENT = 395,
+ TOKEN_LOGGING = 396,
+ TOKEN_LOGGERS = 397,
+ TOKEN_OUTPUT_OPTIONS = 398,
+ TOKEN_OUTPUT = 399,
+ TOKEN_DEBUGLEVEL = 400,
+ TOKEN_SEVERITY = 401,
+ TOKEN_FLUSH = 402,
+ TOKEN_MAXSIZE = 403,
+ TOKEN_MAXVER = 404,
+ TOKEN_DHCP6 = 405,
+ TOKEN_DHCPDDNS = 406,
+ TOKEN_CONTROL_AGENT = 407,
+ TOKEN_TOPLEVEL_JSON = 408,
+ TOKEN_TOPLEVEL_DHCP4 = 409,
+ TOKEN_SUB_DHCP4 = 410,
+ TOKEN_SUB_INTERFACES4 = 411,
+ TOKEN_SUB_SUBNET4 = 412,
+ TOKEN_SUB_POOL4 = 413,
+ TOKEN_SUB_RESERVATION = 414,
+ TOKEN_SUB_OPTION_DEFS = 415,
+ TOKEN_SUB_OPTION_DEF = 416,
+ TOKEN_SUB_OPTION_DATA = 417,
+ TOKEN_SUB_HOOKS_LIBRARY = 418,
+ TOKEN_SUB_DHCP_DDNS = 419,
+ TOKEN_SUB_LOGGING = 420,
+ TOKEN_SUB_CONFIG_CONTROL = 421,
+ TOKEN_STRING = 422,
+ TOKEN_INTEGER = 423,
+ TOKEN_FLOAT = 424,
+ TOKEN_BOOLEAN = 425
};
};
symbol_type
make_QUEUE_CONTROL (const location_type& l);
+ static inline
+ symbol_type
+ make_QUEUE_TYPE (const location_type& l);
+
static inline
symbol_type
make_CAPACITY (const location_type& l);
enum
{
yyeof_ = 0,
- yylast_ = 1005, ///< Last index in yytable_.
- yynnts_ = 377, ///< Number of nonterminal symbols.
+ yylast_ = 1029, ///< Last index in yytable_.
+ yynnts_ = 379, ///< Number of nonterminal symbols.
yyfinal_ = 30, ///< Termination state number.
yyterror_ = 1,
yyerrcode_ = 256,
- yyntokens_ = 170 ///< Number of tokens.
+ yyntokens_ = 171 ///< Number of tokens.
};
135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
- 165, 166, 167, 168, 169
+ 165, 166, 167, 168, 169, 170
};
- const unsigned int user_token_number_max_ = 424;
+ const unsigned int user_token_number_max_ = 425;
const token_number_type undef_token_ = 2;
if (static_cast<int>(t) <= yyeof_)
{
switch (other.type_get ())
{
- case 186: // value
- case 190: // map_value
- case 230: // socket_type
- case 233: // outbound_interface_value
- case 255: // db_type
- case 337: // hr_mode
- case 489: // ncr_protocol_value
- case 497: // replace_client_name_value
+ case 187: // value
+ case 191: // map_value
+ case 231: // socket_type
+ case 234: // outbound_interface_value
+ case 256: // db_type
+ case 338: // hr_mode
+ case 492: // ncr_protocol_value
+ case 500: // replace_client_name_value
value.copy< ElementPtr > (other.value);
break;
- case 169: // "boolean"
+ case 170: // "boolean"
value.copy< bool > (other.value);
break;
- case 168: // "floating point"
+ case 169: // "floating point"
value.copy< double > (other.value);
break;
- case 167: // "integer"
+ case 168: // "integer"
value.copy< int64_t > (other.value);
break;
- case 166: // "constant string"
+ case 167: // "constant string"
value.copy< std::string > (other.value);
break;
(void) v;
switch (this->type_get ())
{
- case 186: // value
- case 190: // map_value
- case 230: // socket_type
- case 233: // outbound_interface_value
- case 255: // db_type
- case 337: // hr_mode
- case 489: // ncr_protocol_value
- case 497: // replace_client_name_value
+ case 187: // value
+ case 191: // map_value
+ case 231: // socket_type
+ case 234: // outbound_interface_value
+ case 256: // db_type
+ case 338: // hr_mode
+ case 492: // ncr_protocol_value
+ case 500: // replace_client_name_value
value.copy< ElementPtr > (v);
break;
- case 169: // "boolean"
+ case 170: // "boolean"
value.copy< bool > (v);
break;
- case 168: // "floating point"
+ case 169: // "floating point"
value.copy< double > (v);
break;
- case 167: // "integer"
+ case 168: // "integer"
value.copy< int64_t > (v);
break;
- case 166: // "constant string"
+ case 167: // "constant string"
value.copy< std::string > (v);
break;
// Type destructor.
switch (yytype)
{
- case 186: // value
- case 190: // map_value
- case 230: // socket_type
- case 233: // outbound_interface_value
- case 255: // db_type
- case 337: // hr_mode
- case 489: // ncr_protocol_value
- case 497: // replace_client_name_value
+ case 187: // value
+ case 191: // map_value
+ case 231: // socket_type
+ case 234: // outbound_interface_value
+ case 256: // db_type
+ case 338: // hr_mode
+ case 492: // ncr_protocol_value
+ case 500: // replace_client_name_value
value.template destroy< ElementPtr > ();
break;
- case 169: // "boolean"
+ case 170: // "boolean"
value.template destroy< bool > ();
break;
- case 168: // "floating point"
+ case 169: // "floating point"
value.template destroy< double > ();
break;
- case 167: // "integer"
+ case 168: // "integer"
value.template destroy< int64_t > ();
break;
- case 166: // "constant string"
+ case 167: // "constant string"
value.template destroy< std::string > ();
break;
super_type::move(s);
switch (this->type_get ())
{
- case 186: // value
- case 190: // map_value
- case 230: // socket_type
- case 233: // outbound_interface_value
- case 255: // db_type
- case 337: // hr_mode
- case 489: // ncr_protocol_value
- case 497: // replace_client_name_value
+ case 187: // value
+ case 191: // map_value
+ case 231: // socket_type
+ case 234: // outbound_interface_value
+ case 256: // db_type
+ case 338: // hr_mode
+ case 492: // ncr_protocol_value
+ case 500: // replace_client_name_value
value.move< ElementPtr > (s.value);
break;
- case 169: // "boolean"
+ case 170: // "boolean"
value.move< bool > (s.value);
break;
- case 168: // "floating point"
+ case 169: // "floating point"
value.move< double > (s.value);
break;
- case 167: // "integer"
+ case 168: // "integer"
value.move< int64_t > (s.value);
break;
- case 166: // "constant string"
+ case 167: // "constant string"
value.move< std::string > (s.value);
break;
385, 386, 387, 388, 389, 390, 391, 392, 393, 394,
395, 396, 397, 398, 399, 400, 401, 402, 403, 404,
405, 406, 407, 408, 409, 410, 411, 412, 413, 414,
- 415, 416, 417, 418, 419, 420, 421, 422, 423, 424
+ 415, 416, 417, 418, 419, 420, 421, 422, 423, 424,
+ 425
};
return static_cast<token_type> (yytoken_number_[type]);
}
return symbol_type (token::TOKEN_QUEUE_CONTROL, l);
}
+ Dhcp4Parser::symbol_type
+ Dhcp4Parser::make_QUEUE_TYPE (const location_type& l)
+ {
+ return symbol_type (token::TOKEN_QUEUE_TYPE, l);
+ }
+
Dhcp4Parser::symbol_type
Dhcp4Parser::make_CAPACITY (const location_type& l)
{
#line 14 "dhcp4_parser.yy" // lalr1.cc:377
} } // isc::dhcp
-#line 2920 "dhcp4_parser.h" // lalr1.cc:377
+#line 2932 "dhcp4_parser.h" // lalr1.cc:377
SOCKET_NAME "socket-name"
QUEUE_CONTROL "queue-control"
+ QUEUE_TYPE "queue-type"
CAPACITY "capacity"
DHCP_DDNS "dhcp-ddns"
ctx.stack_.push_back(m);
ctx.enter(ctx.QUEUE_CONTROL);
} COLON LCURLY_BRACKET queue_control_params RCURLY_BRACKET {
+ ctx.require("queue-type", ctx.loc2pos(@4), ctx.loc2pos(@6));
ctx.require("capacity", ctx.loc2pos(@4), ctx.loc2pos(@6));
ctx.stack_.pop_back();
ctx.leave();
| queue_control_params COMMA queue_control_param
;
-queue_control_param: capacity
+queue_control_param: queue_type
+ | capacity
| user_context
| comment
| unknown_map_entry
;
+queue_type : QUEUE_TYPE {
+ ctx.enter(ctx.NO_KEYWORD);
+} COLON STRING {
+ ElementPtr qtype(new StringElement($4, ctx.loc2pos(@4)));
+ ctx.stack_.back()->set("queue-type", qtype);
+ ctx.leave();
+};
+
capacity: CAPACITY COLON INTEGER {
ElementPtr i(new IntElement($3, ctx.loc2pos(@3)));
ctx.stack_.back()->set("capacity", i);
"{ " + genIfaceConfig() + ", \n" +
" \"subnet4\": [ ], \n"
" \"queue-control\": { \n"
+ " \"queue-type\": \"some-type\", \n"
" \"capacity\": 75 \n"
" } \n"
"} \n";
"{ " + genIfaceConfig() + ", \n" +
" \"subnet4\": [ ], \n"
" \"queue-control\": { \n"
+ " \"queue-type\": \"some-type\", \n"
" \"capacity\": 90, \n"
" \"user-context\": { \"comment\": \"some text\" } \n"
" } \n"
" \"queue-control\": 75 \n"
"} \n"
},
+ {
+ "queue type missing",
+ "{ " + genIfaceConfig() + ", \n" +
+ " \"subnet4\": [ ], \n"
+ " \"queue-control\": { \n"
+ " \"capacity\": 100 \n"
+ " } \n"
+ "} \n"
+ },
{
"capacity missing",
"{ " + genIfaceConfig() + ", \n" +
libkea_dhcp___la_SOURCES += option_vendor.cc option_vendor.h
libkea_dhcp___la_SOURCES += option_vendor_class.cc option_vendor_class.h
libkea_dhcp___la_SOURCES += packet_queue.h
+libkea_dhcp___la_SOURCES += packet_queue_mgr.h
+libkea_dhcp___la_SOURCES += packet_queue_mgr4.cc packet_queue_mgr4.h
+libkea_dhcp___la_SOURCES += packet_queue_mgr6.cc packet_queue_mgr6.h
libkea_dhcp___la_SOURCES += pkt.cc pkt.h
libkea_dhcp___la_SOURCES += pkt4.cc pkt4.h
libkea_dhcp___la_SOURCES += pkt4o6.cc pkt4o6.h
option_vendor.h \
option_vendor_class.h \
packet_queue.h \
+ packet_queue_mgr.h \
+ packet_queue_mgr4.h \
+ packet_queue_mgr6.h \
pkt.h \
pkt4.h \
pkt4o6.h \
packet_filter6_(new PktFilterInet6()),
test_mode_(false),
allow_loopback_(false),
- receiver_error_("no error"),
- packet_queue4_(new PacketQueueRing4()),
- packet_queue6_(new PacketQueueRing6()) {
+ receiver_error_("no error") {
+
+ // Ensure that PQMs have been created to guarantee we have
+ // default packet queues in place.
+ try {
+ PacketQueueMgr4::create();
+ PacketQueueMgr6::create();
+ } catch (const std::exception& ex) {
+ isc_throw(Unexpected, "Failed to create PacketQueueManagers: " << ex.what());
+ }
try {
}
}
-void IfaceMgr::stopReceiver() {
+void IfaceMgr::stopDHCPReceiver() {
if (receiver_thread_) {
terminate_watch_.markReady();
receiver_thread_->wait();
error_watch_.clearReady();
}
receiver_error_ = "no error";
- if (packet_queue4_) {
- packet_queue4_->clear();
+
+ /* if(getPacketQueue4())*/ {
+ getPacketQueue4()->clear();
}
- if (packet_queue6_) {
- packet_queue6_->clear();
+ /* if (getPacketQueue6()) */ {
+ getPacketQueue4()->clear();
}
}
+
void
IfaceMgr::closeSockets(const uint16_t) {
isc_throw(NotImplemented, "closeSockets(family) is obsolete");
// control_buf_ is deleted automatically (scoped_ptr)
control_buf_len_ = 0;
- stopReceiver();
+ stopDHCPReceiver();
closeSockets();
+
+ // Explicitly delete PQM singletons.
+ PacketQueueMgr4::destroy();
+ PacketQueueMgr6::destroy();
}
bool
switch (family) {
case AF_INET:
+ if(!getPacketQueue4()) {
+ isc_throw(Unexpected, "startDHCPRecever - no packet queue?");
+ }
+
receiver_thread_.reset(new Thread(boost::bind(&IfaceMgr::receiveDHCP4Packets, this)));
break;
case AF_INET6:
+ if(!getPacketQueue6()) {
+ isc_throw(Unexpected, "startDHCPRecever - no packet queue?");
+ }
+
receiver_thread_.reset(new Thread(boost::bind(&IfaceMgr::receiveDHCP6Packets, this)));
break;
default:
}
struct timeval select_timeout;
- if (packet_queue4_->empty()) {
+ if (getPacketQueue4()->empty()) {
select_timeout.tv_sec = timeout_sec;
select_timeout.tv_usec = timeout_usec;
} else {
int result = select(maxfd + 1, &sockets, NULL, NULL, &select_timeout);
- if ((result == 0) && packet_queue4_->empty()) {
+ if ((result == 0) && getPacketQueue4()->empty()) {
// nothing received and timeout has been reached
return (Pkt4Ptr()); // NULL
// Protected packet queue access.
{
Mutex::Locker lock(receiver_lock_);
- Pkt4Ptr pkt = packet_queue4_->dequeuePacket();
+ Pkt4Ptr pkt = getPacketQueue4()->dequeuePacket();
if (!pkt) {
receive_watch_.clearReady();
}
}
struct timeval select_timeout;
- if (packet_queue6_->empty()) {
+ if (getPacketQueue6()->empty()) {
select_timeout.tv_sec = timeout_sec;
select_timeout.tv_usec = timeout_usec;
} else {
int result = select(maxfd + 1, &sockets, NULL, NULL, &select_timeout);
- if ((result == 0) && packet_queue6_->empty()) {
+ if ((result == 0) && getPacketQueue6()->empty()) {
// nothing received and timeout has been reached
return (Pkt6Ptr()); // NULL
// Protected DHCP packet queue access.
{
Mutex::Locker lock(receiver_lock_);
- Pkt6Ptr pkt = packet_queue6_->dequeuePacket();
+ Pkt6Ptr pkt = getPacketQueue6()->dequeuePacket();
if (!pkt) {
receive_watch_.clearReady();
}
if (pkt) {
Mutex::Locker lock(receiver_lock_);
- packet_queue4_->enqueuePacket(pkt, socket_info);
+ getPacketQueue4()->enqueuePacket(pkt, socket_info);
receive_watch_.markReady();
}
}
if (pkt) {
Mutex::Locker lock(receiver_lock_);
- packet_queue6_->enqueuePacket(pkt, socket_info);
+ getPacketQueue6()->enqueuePacket(pkt, socket_info);
receive_watch_.markReady();
}
}
return (*candidate);
}
-void
-IfaceMgr::setPacketQueue4(PacketQueue4Ptr& packet_queue4) {
- if (!packet_queue4) {
- isc_throw(BadValue, "IfaceMgr::setPacketQueue4 "
- " queue pointer cannot be empty");
- }
-
- // On the off chance the existing impl doesn't clear on
- // destruction, we will as a safe guard.
- packet_queue4_->clear();
- packet_queue4_ = packet_queue4;
-}
-
-void
-IfaceMgr::setPacketQueue6(PacketQueue6Ptr& packet_queue6) {
- if (!packet_queue6) {
- isc_throw(BadValue, "IfaceMgr::setPacketQueue6 "
- " queue pointer cannot be empty");
- }
-
- // On the off chance the existing impl doesn't clear on
- // destruction, we will as a safe guard.
- packet_queue6_->clear();
- packet_queue6_ = packet_queue6;
-}
-
-ConstQueueControlPtr
-IfaceMgr::getPacketQueueControl4() const {
- return (packet_queue4_->getQueueControl());
-}
-
-void
-IfaceMgr::setPacketQueueControl4(ConstQueueControlPtr queue_control) {
- packet_queue4_->setQueueControl(queue_control);
-}
-
-ConstQueueControlPtr
-IfaceMgr::getPacketQueueControl6() const {
- return (packet_queue6_->getQueueControl());
-}
-
-void
-IfaceMgr::setPacketQueueControl6(ConstQueueControlPtr queue_control) {
- packet_queue6_->setQueueControl(queue_control);
-}
-
} // end of namespace isc::dhcp
} // end of namespace isc
#include <dhcp/dhcp6.h>
#include <dhcp/pkt4.h>
#include <dhcp/pkt6.h>
-#include <dhcp/packet_queue.h>
+#include <dhcp/packet_queue_mgr4.h>
+#include <dhcp/packet_queue_mgr6.h>
#include <dhcp/pkt_filter.h>
#include <dhcp/pkt_filter6.h>
#include <util/optional_value.h>
/// @return true if there is a socket bound to the specified address.
bool hasOpenSocket(const isc::asiolink::IOAddress& addr) const;
- /// @brief Sets the DHCPv4 packet queue
- ///
- /// Replaces the existing DHCPv4 packet queue with the
- /// given queue. Any packets contained in the existing
- /// queue will be discarded. This method is intended to
- /// be used by hook developers to install their own packet
- /// queue implementation(s).
- ///
- /// @param packet_queue4 pointer to a PacketQueue4 instance
- /// to use to manage inbound DHCPv4 packets.
- ///
- /// @throw BadValue if given an empty pointer
- void setPacketQueue4(PacketQueue4Ptr& packet_queue4);
-
- /// @brief Sets the DHCPv6 packet queue
- ///
- /// Replaces the existing DHCPv6 packet queue with the
- /// given queue. Any packets contained in the existing
- /// queue will be discarded. This method is intended to
- /// be used by hook developers to install their own packet
- /// queue implementation(s).
- ///
- /// @param packet_queue6 pointer to a PacketQueue6 instance
- /// to use to manage inbound DHCPv6 packets.
- ///
- /// @throw BadValue if given an empty pointer
- void setPacketQueue6(PacketQueue6Ptr& packet_queue6);
-
- /// @brief Returns the current queue control information
- /// for the DHCPv4 packet queue buffer.
- ConstQueueControlPtr getPacketQueueControl4() const;
-
- /// @brief Set the queue controls for the DHCPv4 packet queue buffer.
+ /// @brief DHCPv4 receiver packet queue.
///
- /// @param new queue controls to use
- void setPacketQueueControl4(ConstQueueControlPtr queue_control);
-
- /// @brief Returns the current queue control information
- /// for the DHCPv6 packet queue buffer.
- ConstQueueControlPtr getPacketQueueControl6() const;
+ /// Incoming packets are read by the receiver thread and
+ /// added to this queue. @c receive4() dequeues and
+ /// returns them.
+ PacketQueue4Ptr getPacketQueue4() {
+ return (PacketQueueMgr4::instance().getPacketQueue());
+ }
- /// @brief Set the queue controls for the DHCPv6 packet queue buffer.
+ /// @brief DHCPv6 receiver packet queue.
///
- /// @param new queue controls to use
- void setPacketQueueControl6(ConstQueueControlPtr queue_control);
+ /// Incoming packets are read by the receiver thread and
+ /// added to this queue. @c receive6() dequeues and
+ /// returns them.
+ PacketQueue6Ptr getPacketQueue6() {
+ return (PacketQueueMgr6::instance().getPacketQueue());
+ }
/// @brief Starts DHCP packet receiver.
///
/// @brief Stops the DHCP packet receiver.
///
/// Stops the receiver and delete the dedicated thread.
- void stopReceiver();
+ void stopDHCPReceiver();
// don't use private, we need derived classes in tests
protected:
/// @brief Error message of the last DHCP packet receive error.
std::string receiver_error_;
- /// @brief DHCPv4 receiver packet queue.
- ///
- /// Incoming packets are read by the receiver thread and
- /// added to this queue. @c receive4() dequeues and
- /// returns them.
- PacketQueue4Ptr packet_queue4_;
-
- /// @brief DHCPv6 receiver packet queue.
- ///
- /// Incoming packets are read by the receiver thread and
- /// added to this queue. @c receive6() dequeues and
- /// returns them.
- PacketQueue6Ptr packet_queue6_;
-
/// @brief DHCP packet receive error watch socket.
/// Marked as ready when the DHCP packet receiver experiences
/// an I/O error.
#ifndef PACKET_QUEUE_H
#define PACKET_QUEUE_H
+#include <cc/data.h>
#include <dhcp/queue_control.h>
#include <dhcp/socket_info.h>
#include <dhcp/pkt4.h>
#include <boost/function.hpp>
#include <boost/circular_buffer.hpp>
+#include <sstream>
namespace isc {
namespace dhcp {
+/// @brief Invalid queue parameter exception
+///
+/// Thrown when packet queue is supplied an invalid/missing parameter
+class InvalidQueueParameter : public Exception {
+public:
+ InvalidQueueParameter(const char* file, size_t line, const char* what) :
+ isc::Exception(file, line, what) {}
+};
+
/// @brief Enumerates choices between the two ends of the queue.
enum class QueueEnd {
FRONT, // Typically the end packets are read from
public:
/// @brief Constructor
- PacketQueue() {}
-
- /// @brief virtual Destructor
+ ///
+ /// @param queue_type name of this queue's implementation type.
+ /// Typically this is assigned by the factory that creates the
+ /// queue. It is the logical name used to register queue
+ /// implementations.
+ PacketQueue(const std::string& queue_type)
+ : queue_type_(queue_type) {}
+
+ /// Virtual destructor
virtual ~PacketQueue(){};
/// @brief Adds a packet to the queue
/// @brief return True if the queue is empty.
virtual bool empty() const = 0;
- /// @brief Fetches the current queue control parameters
- virtual ConstQueueControlPtr getQueueControl() const = 0;
-
- /// @brief Sets queue control parameters from the given control structure.
- ///
- /// @param queue_control new control parameters to implement
- virtual void setQueueControl(ConstQueueControlPtr queue_control) = 0;
-
- /// @brief Returns the maximum number of packets allowed in the buffer.
- virtual size_t getCapacity() const = 0;
-
- /// @brief Sets the maximum number of packets allowed in the buffer.
- virtual void setCapacity(size_t capacity) = 0;
-
+ /// @todo size may not apply either... what if there are two internal buffers?
/// @brief Returns the current number of packets in the buffer.
virtual size_t getSize() const = 0;
/// @brief Discards all packets currently in the buffer.
virtual void clear() = 0;
- /// @brief Sets queue control parameters to their default values.
- virtual void useDefaults() = 0;
+ virtual data::ElementPtr getInfo() {
+ data::ElementPtr info = data::Element::createMap();
+ info->set("queue-type", data::Element::create(queue_type_));
+ return(info);
+ }
+
+ virtual std::string getInfoStr() {
+ data::ElementPtr info = getInfo();
+ std::ostringstream os;
+ info->toJSON(os);
+ return (os.str());
+ }
+
+ /// @brief
+ std::string getQueueType() {
+ return (queue_type_);
+ };
+
+private:
+ /// @brief Name of the this queue's implementation type.
+ std::string queue_type_;
+
};
/// @brief Defines pointer to the DHCPv4 queue interface used at the application level.
/// @brief Constructor
///
/// @param queue_capacity maximum number of packets the queue can hold
- PacketQueueRing(size_t capacity) {
+ PacketQueueRing(const std::string& queue_type, size_t capacity)
+ : PacketQueue<PacketTypePtr>(queue_type) {
queue_.set_capacity(capacity);
}
return(queue_.empty());
}
- /// @brief Fetches the current queue control parameters
- virtual ConstQueueControlPtr getQueueControl() const {
- QueueControlPtr queue_control(new QueueControl());
- queue_control->setCapacity(getCapacity());
- return (queue_control);
- }
-
- /// @brief Sets queue control parameters from the given control structure.
- ///
- /// @param queue_control new control parameters to implement. If it is
- /// an empty pointer we reset to default values.
- virtual void setQueueControl(ConstQueueControlPtr queue_control) {
- if (!queue_control) {
- useDefaults();
- return;
- }
-
- setCapacity(queue_control->getCapacity());
- }
-
/// @brief Returns the maximum number of packets allowed in the buffer.
virtual size_t getCapacity() const {
return (queue_.capacity());
/// @brief Sets the maximum number of packets allowed in the buffer.
///
+ /// @todo - do we want to change size on the fly? This might need
+ /// to be private, called only by constructor
+ ///
/// @throw BadValue if capacity is too low.
virtual void setCapacity(size_t capacity) {
if (capacity < MIN_RING_CAPACITY) {
queue_.clear();
}
- /// @brief Sets capacity for default value of MIN_RING_CAPACITY
- virtual void useDefaults() {
- setCapacity(MIN_RING_CAPACITY);
+ virtual data::ElementPtr getInfo() {
+ data::ElementPtr info = PacketQueue<PacketTypePtr>::getInfo();
+ info->set("capacity", data::Element::create(static_cast<int64_t>(getCapacity())));
+ info->set("size", data::Element::create(static_cast<int64_t>(getSize())));
+ return(info);
}
private:
/// @brief Constructor
///
/// @param capacity maximum number of packets the queue can hold
- PacketQueueRing4(size_t capacity=DEFAULT_RING_CAPACITY)
- : PacketQueueRing(capacity) {
+ PacketQueueRing4(const std::string& queue_type, size_t capacity=DEFAULT_RING_CAPACITY)
+ : PacketQueueRing(queue_type, capacity) {
};
/// @brief virtual Destructor
/// @brief Constructor
///
/// @param capacity maximum number of packets the queue can hold
- PacketQueueRing6(size_t capacity=DEFAULT_RING_CAPACITY)
- : PacketQueueRing(capacity) {
+ PacketQueueRing6(const std::string& queue_type, size_t capacity=DEFAULT_RING_CAPACITY)
+ : PacketQueueRing(queue_type, capacity) {
};
/// @brief virtual Destructor
};
-
}; // namespace isc::dhcp
}; // namespace isc
--- /dev/null
+// Copyright (C) 2018 Internet Systems Consortium, Inc. ("ISC")
+//
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+#ifndef PACKET_QUEUE_MGR_H
+#define PACKET_QUEUE_MGR_H
+
+#include <dhcp/packet_queue.h>
+#include <exceptions/exceptions.h>
+#include <boost/shared_ptr.hpp>
+#include <functional>
+#include <map>
+#include <string>
+
+namespace isc {
+namespace dhcp {
+
+/// @brief Invalid Queue type exception
+///
+/// Thrown when a packet queue manager doesn't recognize the type of the queue.
+class InvalidQueueType : public Exception {
+public:
+ InvalidQueueType(const char* file, size_t line, const char* what) :
+ isc::Exception(file, line, what) {}
+};
+
+/// @brief Packet Queue Managers (PQM).
+///
+
+/// @todo TKM rewrite this...
+
+/// Each Kea server supporting Configuration Backend feature implements
+/// a "manager" class which holds information about supported and
+/// configured backends and provides access to the backends. This is
+/// similar to @c HostMgr and @c LeaseMgr singletons being used by the
+/// DHCP servers.
+///
+/// The Config Backend Managers are typically implemented as singletons
+/// which can be accessed from any place within the server code. This
+/// includes server configuration, data fetching during normal server
+/// operation and data management, including processing of control
+/// commands implemented within hooks libraries.
+///
+/// The @c BaseConfigBackendMgr is a base class for all PQMs implemented
+/// for respective Kea servers. It includes mechanisms to register config
+/// backend factory functions and to create instances of the backends using
+/// those factory functions as a result of server configuration. The mechanism
+/// of factory functions registration is useful in cases when the config
+/// backend is implemented within the hook library. Such hook library
+/// registers factory function in its @c load function and the server
+/// simply calls this function to create the instance of this backend when
+/// instructed to do so via configuration. Similar mechanism exists in
+/// DHCP @c HostMgr.
+///
+/// Unlike @c HostMgr, the PQMs do not directly expose API to fetch and
+/// manipulate the data in the database. This is done via, so called,
+/// Configuration Backends Pools. See @c BaseConfigBackendPool for
+/// details. The @c BaseConfigBackendMgr is provided with the pool type
+/// via class template parameter. Respective PQM implementations
+/// use their own pools, which provide APIs appropriate for those
+/// implementations.
+///
+/// @tparam ConfgBackendPoolType Type of the configuration backend pool
+/// to be used by the manager. It must derive from @c BaseConfigBackendPool
+/// template class.
+template<typename PacketQueueTypePtr>
+class PacketQueueMgr {
+public:
+ /// @brief Type of the backend factory function.
+ ///
+ /// Factory function returns a pointer to the instance of the configuration
+ /// backend created.
+ typedef std::function<PacketQueueTypePtr(const QueueControl&)> Factory;
+
+ /// @brief Constructor.
+ PacketQueueMgr()
+ : factories_(), packet_queue_() {
+ }
+
+ /// @brief Registers new queue factory function for a given queue type.
+ ///
+ /// The typical usage of this function is to make the PQM aware of a
+ /// packet queue implementation. This implementation may exist
+ /// in a hooks library. In such a case, this function should be called from
+ /// the @c load function in this library. When the queue impl is registered,
+ /// the server will use it when required by the configuration, i.e. a
+ /// user specifies it by name in "queue-control".
+ ///
+ /// If the given queue type has already been registered, perhaps
+ /// by another hooks library, the PQM will refuse to register another
+ /// of the same type.
+ ///
+ /// @param queue_type Queue type, e.g. "kea-ring4"
+ /// @param factory Pointer to the queue factory function.
+ ///
+ /// @return true if the queue type has been successfully registered, false
+ /// if the type already exists.
+ bool registerPacketQueueFactory(const std::string& queue_type,
+ const Factory& factory) {
+ // Check if this backend has been already registered.
+ if (factories_.count(queue_type)) {
+ return (false);
+ }
+
+ // Register the new backend.
+ factories_.insert(std::make_pair(queue_type, factory));
+ return (true);
+ }
+
+ /// @brief Unregisters the queue factory function for a given type.
+ ///
+ /// This function is used to remove the factory function for a given type.
+ /// Typically, it would be called when unloading the hook library which
+ /// loaded the type, and thus called by the library's @c unload function.
+ ///
+ /// @param queue_type queue type, e.g. "kea-ring4".
+ ///
+ /// @return false if no factory for the given type was unregistered, true
+ /// if the factory was removed.
+ bool unregisterPacketQueueFactory(const std::string& queue_type) {
+ // Look for it.
+ auto index = factories_.find(queue_type);
+
+ // If it's there remove it
+ if (index != factories_.end()) {
+ factories_.erase(index);
+ // @todo What do we do here, if we only have one queue?
+ // I think we don't care, as we should be reloading/reconfiging...
+ // It may be that PQM doesn't retain the instance at all?
+ // pool_->delAllBackends(db_type);
+ return (true);
+
+ }
+
+ return (false);
+ }
+
+ /// @brief Create an instance of a packet queue.
+ ///
+ /// This method uses provided @c dbaccess string representing database
+ /// connection information to create an instance of the database
+ /// backend. If the specified backend type is not supported, i.e. there
+ /// is no relevant factory function registered, an exception is thrown.
+ ///
+ /// @param dbaccess Database access string being a collection of
+ /// key=value pairs.
+ ///
+ /// @throw InvalidQueueType if the queue type requested is not supported
+ /// @throw Unexpected if the backend factory function returned NULL.
+ void createPacketQueue(const QueueControl& queue_control) {
+ // Get the database type to locate a factory function.
+ // easier if these are elements no?
+ std::string queue_type = queue_control.getQueueType();
+ auto index = factories_.find(queue_type);
+
+ // No match?
+ if (index == factories_.end()) {
+ isc_throw(InvalidQueueType, "The type of the packet queue: '" <<
+ queue_type << "' is not supported");
+ }
+
+ // Call the factory to create the new queue.
+ // Factories should throw InvalidQueueParameter if given
+ // bad values in the control.
+ auto new_queue = index->second(queue_control);
+ if (!new_queue) {
+ isc_throw(Unexpected, "Packet queue " << queue_type <<
+ " factory returned NULL");
+ }
+
+ // Replace the existing queue with the new one.
+ packet_queue_ = new_queue;
+ }
+
+ /// @brief Returns underlying packet queue.
+ PacketQueueTypePtr getPacketQueue() const {
+ return (packet_queue_);
+ }
+
+protected:
+ /// @brief A map holding registered backend factory functions.
+ std::map<std::string, Factory> factories_;
+
+ /// @brief the current queue_ ?
+ PacketQueueTypePtr packet_queue_;
+};
+
+} // end of namespace isc::dhcp
+} // end of namespace isc
+
+#endif // PACKET_QUEUE_MGR_H
--- /dev/null
+// Copyright (C) 2018 Internet Systems Consortium, Inc. ("ISC")
+//
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+#include <config.h>
+#include <dhcp/packet_queue_mgr4.h>
+
+#include <boost/scoped_ptr.hpp>
+
+namespace isc {
+namespace dhcp {
+
+PacketQueueMgr4::PacketQueueMgr4() {
+ // Register default queue factory
+ registerPacketQueueFactory("kea-ring4", [](const QueueControl& control)
+ -> PacketQueue4Ptr {
+ PacketQueue4Ptr queue(new PacketQueueRing4("kea-ring4", control.getCapacity()));
+ return (queue);
+ });
+
+ QueueControl control;
+ control.setQueueType("kea-ring4");
+ // @todo default comes from ?
+ control.setCapacity(500);
+ createPacketQueue(control);
+}
+
+boost::scoped_ptr<PacketQueueMgr4>&
+PacketQueueMgr4::getPacketQueueMgr4Ptr() {
+ static boost::scoped_ptr<PacketQueueMgr4> packet_mgr;
+ return (packet_mgr);
+}
+
+void
+PacketQueueMgr4::create() {
+ getPacketQueueMgr4Ptr().reset(new PacketQueueMgr4());
+}
+
+void
+PacketQueueMgr4::destroy() {
+ getPacketQueueMgr4Ptr().reset(new PacketQueueMgr4());
+}
+
+PacketQueueMgr4&
+PacketQueueMgr4::instance() {
+ boost::scoped_ptr<PacketQueueMgr4>& packet_mgr = getPacketQueueMgr4Ptr();
+ if (!packet_mgr) {
+ create();
+ }
+ return (*packet_mgr);
+}
+
+} // end of isc::dhcp namespace
+} // end of isc namespace
--- /dev/null
+// Copyright (C) 2018 Internet Systems Consortium, Inc. ("ISC")
+//
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+#ifndef PACKET_QUEUE_MGR4_H
+#define PACKET_QUEUE_MGR4_H
+
+#include <dhcp/packet_queue_mgr.h>
+
+#include <boost/scoped_ptr.hpp>
+
+namespace isc {
+namespace dhcp {
+
+/// @brief Packet Queue Manager for DHPCv4 servers.
+///
+/// Implements the "manager" class which holds information about the
+/// supported and packet queues and provides management of the current
+/// queue instance.
+///
+/// It is implemented as a singleton that can be accessed from any place
+/// within the server code. This includes server configuration, data
+/// fetching during normal server operation and data management, including
+/// processing of control commands implemented within hooks libraries.
+class PacketQueueMgr4 : public PacketQueueMgr<PacketQueue4Ptr>,
+ public boost::noncopyable {
+public:
+
+ /// @brief virtual Destructor
+ virtual ~PacketQueueMgr4(){}
+
+ /// @brief Creates new instance of the @c PacketQueueMgr4.
+ ///
+ /// If an instance of the @c PacketQueueMgr4 already exists,
+ /// it will be replaced by the new instance. Thus, all factories
+ /// will be unregistered and config databases will be dropped.
+ static void create();
+
+ /// @brief Destroys the instance of the @c PacketQueueMgr4.
+ ///
+ /// If an instance of the @c PacketQueueMgr4 exists,
+ /// it will be destroyed. Thus, all factories will be unregistered
+ /// and config databases will be dropped.
+ static void destroy();
+
+ /// @brief Returns a sole instance of the @c PacketQueueMgr4.
+ ///
+ /// This method is used to retrieve the instance of the of the
+ /// @c PacketQueueMgr4 created by the @c create method. If the
+ /// instance doesn't exist yet, it is created using the @c create
+ /// method.
+ static PacketQueueMgr4& instance();
+
+private:
+ /// @brief Private constructor.
+ ///
+ /// @todo probably will add the open source/default impl(s)
+ PacketQueueMgr4();
+
+ /// @brief Returns a pointer to the currently used instance of the
+ /// @c PacketQueueMgr4.
+ static boost::scoped_ptr<PacketQueueMgr4>& getPacketQueueMgr4Ptr();
+};
+
+} // end of namespace isc::dhcp
+} // end of namespace isc
+
+#endif // PACKET_QUEUE_MGR4_H
--- /dev/null
+// Copyright (C) 2018 Internet Systems Consortium, Inc. ("ISC")
+//
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+#include <config.h>
+#include <dhcp/packet_queue_mgr6.h>
+
+#include <boost/scoped_ptr.hpp>
+
+namespace isc {
+namespace dhcp {
+
+PacketQueueMgr6::PacketQueueMgr6() {
+ // Register default queue factory
+ registerPacketQueueFactory("kea-ring6", [](const QueueControl& control)
+ -> PacketQueue6Ptr {
+ PacketQueue6Ptr queue(new PacketQueueRing6("kea-ring6", control.getCapacity()));
+ return (queue);
+ });
+
+ QueueControl control;
+ control.setQueueType("kea-ring6");
+ // @todo default comes from ?
+ control.setCapacity(500);
+ createPacketQueue(control);
+}
+
+boost::scoped_ptr<PacketQueueMgr6>&
+PacketQueueMgr6::getPacketQueueMgr6Ptr() {
+ static boost::scoped_ptr<PacketQueueMgr6> packet_mgr;
+ return (packet_mgr);
+}
+
+void
+PacketQueueMgr6::create() {
+ getPacketQueueMgr6Ptr().reset(new PacketQueueMgr6());
+}
+
+void
+PacketQueueMgr6::destroy() {
+ getPacketQueueMgr6Ptr().reset(new PacketQueueMgr6());
+}
+
+PacketQueueMgr6&
+PacketQueueMgr6::instance() {
+ boost::scoped_ptr<PacketQueueMgr6>& packet_mgr = getPacketQueueMgr6Ptr();
+ if (!packet_mgr) {
+ create();
+ }
+ return (*packet_mgr);
+}
+
+} // end of isc::dhcp namespace
+} // end of isc namespace
--- /dev/null
+// Copyright (C) 2018 Internet Systems Consortium, Inc. ("ISC")
+//
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+#ifndef PACKET_QUEUE_MGR6_H
+#define PACKET_QUEUE_MGR6_H
+
+#include <dhcp/packet_queue_mgr.h>
+
+#include <boost/scoped_ptr.hpp>
+
+namespace isc {
+namespace dhcp {
+
+/// @brief Packet Queue Manager for DHPCv6 servers.
+///
+/// Implements the "manager" class which holds information about the
+/// supported and packet queues and provides management of the current
+/// queue instance.
+///
+/// It is implemented as a singleton that can be accessed from any place
+/// within the server code. This includes server configuration, data
+/// fetching during normal server operation and data management, including
+/// processing of control commands implemented within hooks libraries.
+class PacketQueueMgr6 : public PacketQueueMgr<PacketQueue6Ptr>,
+ public boost::noncopyable {
+public:
+
+ /// @brief virtual Destructor
+ virtual ~PacketQueueMgr6(){}
+
+ /// @brief Creates new instance of the @c PacketQueueMgr6.
+ ///
+ /// If an instance of the @c PacketQueueMgr6 already exists,
+ /// it will be replaced by the new instance. Thus, all factories
+ /// will be unregistered and config databases will be dropped.
+ static void create();
+
+ /// @brief Destroys the instance of the @c PacketQueueMgr6.
+ ///
+ /// If an instance of the @c PacketQueueMgr6 exists,
+ /// it will be destroyed. Thus, all factories will be unregistered
+ /// and config databases will be dropped.
+ static void destroy();
+
+ /// @brief Returns a sole instance of the @c PacketQueueMgr6.
+ ///
+ /// This method is used to retrieve the instance of the of the
+ /// @c PacketQueueMgr6 created by the @c create method. If the
+ /// instance doesn't exist yet, it is created using the @c create
+ /// method.
+ static PacketQueueMgr6& instance();
+
+private:
+ /// @brief Private constructor.
+ ///
+ /// @todo probably will add the open source/default impl(s)
+ PacketQueueMgr6();
+
+ /// @brief Returns a pointer to the currently used instance of the
+ /// @c PacketQueueMgr6.
+ static boost::scoped_ptr<PacketQueueMgr6>& getPacketQueueMgr6Ptr();
+};
+
+} // end of namespace isc::dhcp
+} // end of namespace isc
+
+#endif // PACKET_QUEUE_MGR6_H
namespace dhcp {
QueueControl::QueueControl()
- : capacity_(0) {
+ : queue_type_(""), capacity_(0) {
}
bool
QueueControl::equals(const QueueControl& other) const {
- return (capacity_ == other.capacity_);
+ return (queue_type_ == other.queue_type_ &&
+ capacity_ == other.capacity_);
}
ElementPtr
QueueControl::toElement() const {
ElementPtr result = Element::createMap();
- // Set user context
- contextToElement(result);
+ // Add "capacity"
+ result->set("queue-type", Element::create(queue_type_));
// Add "capacity"
result->set("capacity", Element::create(static_cast<long int>(capacity_)));
+ // Set user context
+ contextToElement(result);
+
+
return (result);
}
/// @return true if objects are equal, false otherwise.
bool equals(const QueueControl& other) const;
+ /// @brief Fetches the queue type
+ ///
+ /// @return string containg the queue type
+ std::string getQueueType() const {
+ return (queue_type_);
+ }
+
+ /// @brief Sets the queue type
+ ///
+ /// @param queue_type new value for the queue type
+ void setQueueType(const std::string& queue_type) {
+ queue_type_ = queue_type;
+ }
+
/// @brief Fetches the maximum number of packets that the queue may hold.
///
/// @return the current capacity of the packet queue.
virtual isc::data::ElementPtr toElement() const;
private:
+ /// @brief Name of the queue type
+ /// This is the value used to uniquely identify/register
+ /// packet queue implementations
+ std::string queue_type_;
+
/// @brief A set of interface names specified by the user.
size_t capacity_;
};
libdhcp___unittests_SOURCES += pkt_captures4.cc pkt_captures6.cc pkt_captures.h
libdhcp___unittests_SOURCES += packet_queue4_unittest.cc
libdhcp___unittests_SOURCES += packet_queue6_unittest.cc
+libdhcp___unittests_SOURCES += packet_queue_mgr4_unittest.cc
+libdhcp___unittests_SOURCES += packet_queue_mgr6_unittest.cc
libdhcp___unittests_SOURCES += pkt4_unittest.cc
libdhcp___unittests_SOURCES += pkt6_unittest.cc
libdhcp___unittests_SOURCES += pkt4o6_unittest.cc
}
IfaceMgrTestConfig::~IfaceMgrTestConfig() {
- IfaceMgr::instance().stopReceiver();
+ IfaceMgr::instance().stopDHCPReceiver();
IfaceMgr::instance().closeSockets();
IfaceMgr::instance().clearIfaces();
IfaceMgr::instance().setPacketFilter(PktFilterPtr(new PktFilterInet()));
#include <dhcp/pkt_filter.h>
#include <dhcp/tests/iface_mgr_test_config.h>
#include <dhcp/tests/pkt_filter6_test_utils.h>
+#include <dhcp/tests/packet_queue_testutils.h>
#include <boost/bind.hpp>
#include <boost/foreach.hpp>
EXPECT_EQ(0, ifacemgr.countIfaces());
}
-// Verify that we can manipulate the DHCPv4 packet queue.
+// Verify that we have the expected default DHCPv4 packet queue.
TEST_F(IfaceMgrTest, packetQueue4) {
NakedIfaceMgr ifacemgr;
-
- // Verify the default packet queue exists and has the default capacity.
- size_t default_cap = PacketQueueRing4::DEFAULT_RING_CAPACITY;
- ConstQueueControlPtr control;
- ASSERT_NO_THROW(control = ifacemgr.getPacketQueueControl4());
- ASSERT_TRUE(control);
- EXPECT_EQ(default_cap, control->getCapacity());
+ // Get the default queue.
+ PacketQueue4Ptr q4 = ifacemgr.getPacketQueue4();
+ ASSERT_TRUE(q4);
- PacketQueue4Ptr myQueue;
- // Verify we cannot set the queue to an empty pointer.
- ASSERT_THROW(ifacemgr.setPacketQueue4(myQueue), BadValue);
+ // Verify that the queue is what we expect.
+ checkInfo(q4, "{ \"capacity\": 500, \"queue-type\": \"kea-ring4\", \"size\": 0 }");
- // Verify we can replace the default packet queue with our own.
- myQueue.reset(new PacketQueueRing4(default_cap + 1));
- ASSERT_NO_THROW(ifacemgr.setPacketQueue4(myQueue));
-
- // Verify the new queue has the expected capacity.
- control = ifacemgr.getPacketQueueControl4();
- ASSERT_TRUE(control);
- EXPECT_EQ(default_cap + 1, control->getCapacity());
-
- // Verify we can't set the capacity to an invalid value.
- QueueControlPtr new_control(new QueueControl());
- new_control->setCapacity(0);
- ASSERT_THROW(ifacemgr.setPacketQueueControl4(new_control), BadValue);
-
- // Verify we can set the capacity to an invalid value.
- new_control->setCapacity(default_cap + 2);
- ASSERT_NO_THROW(ifacemgr.setPacketQueueControl4(new_control));
- ASSERT_NO_THROW(control = ifacemgr.getPacketQueueControl4());
- EXPECT_EQ(default_cap + 2, control->getCapacity());
+ // Verify that fetching the queue via IfaceMgr and PacketQueueMgr
+ // returns the same queue.
+ ASSERT_EQ(ifacemgr.getPacketQueue4(), PacketQueueMgr4::instance().getPacketQueue());
}
-#if 0
-// Verify that we can manipulate the DHCPv6 packet queue.
+// Verify that we have the expected default DHCPv6 packet queue.
TEST_F(IfaceMgrTest, packetQueue6) {
NakedIfaceMgr ifacemgr;
-
- // Verify the default packet queue exists and has the default capacity.
- size_t default_cap = PacketQueueRing6::DEFAULT_RING_CAPACITY;
- EXPECT_EQ(default_cap, ifacemgr.getPacketQueueCapacity6());
- PacketQueue6Ptr myQueue;
- // Verify we cannot set the queue to an empty pointer.
- ASSERT_THROW(ifacemgr.setPacketQueue6(myQueue), BadValue);
+ // Get the default queue.
+ PacketQueue6Ptr q6 = ifacemgr.getPacketQueue6();
- // Verify we can replace the default packet queue with our own.
- myQueue.reset(new PacketQueueRing6(default_cap + 1));
- ASSERT_NO_THROW(ifacemgr.setPacketQueue6(myQueue));
+ // Verify that we have a default queue and its info is correct.
+ checkInfo(q6, "{ \"capacity\": 500, \"queue-type\": \"kea-ring6\", \"size\": 0 }");
- // Verify the new queue has the expected capacity.
- EXPECT_EQ(default_cap + 1, ifacemgr.getPacketQueueCapacity6());
-
- // Verify we can't set the capacity to an invalid value.
- ASSERT_THROW(ifacemgr.setPacketQueueCapacity6(0), BadValue);
-
- // Verify we can set the capacity to an invalid value.
- ASSERT_NO_THROW(ifacemgr.setPacketQueueCapacity6(default_cap + 2));
- EXPECT_EQ(default_cap + 2, ifacemgr.getPacketQueueCapacity6());
+ // Verify that fetching the queue via IfaceMgr and PacketQueueMgr
+ // returns the same queue.
+ ASSERT_EQ(ifacemgr.getPacketQueue6(), PacketQueueMgr6::instance().getPacketQueue());
}
-#endif
+
TEST_F(IfaceMgrTest, receiveTimeout6) {
using namespace boost::posix_time;
EXPECT_THROW(ifacemgr->receive6(1, 1000010), isc::BadValue);
// Stop receiver.
- EXPECT_NO_THROW(ifacemgr->stopReceiver());
+ EXPECT_NO_THROW(ifacemgr->stopDHCPReceiver());
}
TEST_F(IfaceMgrTest, receiveTimeout4) {
EXPECT_THROW(ifacemgr->receive6(2, 1000005), isc::BadValue);
// Stop receiver.
- EXPECT_NO_THROW(ifacemgr->stopReceiver());
+ EXPECT_NO_THROW(ifacemgr->stopDHCPReceiver());
}
TEST_F(IfaceMgrTest, multipleSockets) {
// we should accept both values as source ports.
EXPECT_TRUE((rcvPkt->getRemotePort() == 10546) || (rcvPkt->getRemotePort() == 10547));
- ifacemgr->stopReceiver();
+ ifacemgr->stopDHCPReceiver();
}
TEST_F(IfaceMgrTest, sendReceive4) {
// @todo Closing the socket does NOT cause a read error out of the
// receiveDHCP<X>Packets() select. Apparently this is because the
// thread is already inside the select when the socket is closed,
- // and (at least under Centos 7.5), this does not interrupt the
+ // and (at least under Centos 7.5), this does not interrupt the
// select.
EXPECT_THROW(ifacemgr->receive4(10), SocketReadError);
#endif
EXPECT_THROW(ifacemgr->send(sendPkt), SocketWriteError);
- ifacemgr->stopReceiver();
+ ifacemgr->stopDHCPReceiver();
}
// Verifies that it is possible to set custom packet filter object
close(pipefd[1]);
close(pipefd[0]);
- ASSERT_NO_THROW(ifacemgr->stopReceiver());
+ ASSERT_NO_THROW(ifacemgr->stopDHCPReceiver());
}
// Tests if multiple external sockets and their callbacks can be passed and
#include <config.h>
#include <dhcp/packet_queue.h>
+#include <packet_queue_testutils.h>
#include <boost/shared_ptr.hpp>
#include <gtest/gtest.h>
namespace {
-class TestQueue4 : public PacketQueueRing<Pkt4Ptr> {
+class TestQueue4 : public PacketQueueRing4 {
public:
/// @brief Constructor
///
/// @param queue_size maximum number of packets the queue can hold
- TestQueue4(size_t queue_size)
- : PacketQueueRing(queue_size), drop_enabled_(false), eat_count_(0) {
+ TestQueue4(size_t queue_size)
+ : PacketQueueRing4("kea-ring4", queue_size), drop_enabled_(false), eat_count_(0) {
};
/// @brief virtual Destructor
virtual bool dropPacket(Pkt4Ptr packet,
const SocketInfo& source) {
if (drop_enabled_) {
- return ((packet->getTransid() % 2 == 0) ||
- (source.port_ % 2 == 0));
+ return ((packet->getTransid() % 2 == 0) ||
+ (source.port_ % 2 == 0));
}
return (false);
int eat_count_;
};
-// Verifies basic use onf PacketQueue interface:
-// 1. Construction
-// 2. Manipulation of configurable parameters
+// Verifies use of the generic PacketQueue interface to
+// construct a queue implementation.
TEST(TestQueue4, interfaceBasics) {
- // Use minimum allowed
- size_t min = TestQueue4::MIN_RING_CAPACITY;
-
- PacketQueue4Ptr q4(new TestQueue4(min));
+ // Verify we can create a queue
+ PacketQueue4Ptr q4(new TestQueue4(100));
ASSERT_TRUE(q4);
+
+ // It should be empty.
EXPECT_TRUE(q4->empty());
- ConstQueueControlPtr orig_control = q4->getQueueControl();
- ASSERT_TRUE(orig_control);
- EXPECT_EQ(min, orig_control->getCapacity());
- EXPECT_EQ(min, q4->getCapacity());
- EXPECT_EQ(0, q4->getSize());
-
- // Verify we cannot violate minium.
- QueueControlPtr new_control(new QueueControl());
- new_control->setCapacity(min - 1);
- ASSERT_THROW(q4->setQueueControl(new_control), BadValue);
-
- // Verify original control values remain
- EXPECT_TRUE(*(q4->getQueueControl()) == *orig_control);
-
- // Verify we can update to a valid value.
- new_control->setCapacity(min + 10);
- ASSERT_NO_THROW(q4->setQueueControl(new_control));
- ConstQueueControlPtr control = q4->getQueueControl();
- ASSERT_TRUE(control);
- EXPECT_TRUE(*control == *new_control);
- EXPECT_EQ(min + 10, control->getCapacity());
- EXPECT_EQ(min + 10, q4->getCapacity());
-
- ASSERT_NO_THROW(q4->setQueueControl(ConstQueueControlPtr()));
- control = q4->getQueueControl();
- ASSERT_TRUE(control);
- EXPECT_EQ(411, control->getCapacity());
+ // Type should match.
+ EXPECT_EQ("kea-ring4", q4->getQueueType());
+
+ // Fetch the queue info and verify it has all the expected values.
+ checkInfo(q4, "{ \"capacity\": 100, \"queue-type\": \"kea-ring4\", \"size\": 0 }");
}
// Verifies the basic mechanics of the adding and
TEST(TestQueue4, ringTest) {
PacketQueue4Ptr q4(new TestQueue4(3));
- EXPECT_EQ(3, q4->getCapacity());
+ // Fetch the queue info and verify it has all the expected values.
+ checkInfo(q4, "{ \"capacity\": 3, \"queue-type\": \"kea-ring4\", \"size\": 0 }");
+
// Enqueue five packets. The first two should be pushed off.
SocketInfo sock1(isc::asiolink::IOAddress("127.0.0.1"), 777, 10);
for (int i = 1; i < 6; ++i) {
Pkt4Ptr pkt(new Pkt4(DHCPDISCOVER, 1000+i));
ASSERT_NO_THROW(q4->enqueuePacket(pkt, sock1));
-
- int exp_size = (i > 3 ? 3 : i);
- EXPECT_EQ(exp_size, q4->getSize());
+ checkIntStat(q4, "size", (i > 3 ? 3 : i));
}
+ // Fetch the queue info and verify it has all the expected values.
+ checkInfo(q4, "{ \"capacity\": 3, \"queue-type\": \"kea-ring4\", \"size\": 3 }");
+
// We should have transids 1005,1004,1003 (back to front)
// Peek front should be transid 1003.
for (int i = 1; i < 3; ++i) {
Pkt4Ptr pkt(new Pkt4(DHCPDISCOVER, 1000+i));
ASSERT_NO_THROW(q4->enqueuePacket(pkt, sock1));
- EXPECT_EQ(i, q4->getSize());
+ checkIntStat(q4, "size", i);
}
// Let's flush the buffer and then verify it is empty.
q4->clear();
- EXPECT_TRUE(q4->empty());
- EXPECT_EQ(0, q4->getSize());
+ EXPECT_TRUE(q4->empty());
+ checkIntStat(q4, "size", 0);
}
// Verifies the higher level functions of queueing and
// Enqueue the first packet.
Pkt4Ptr pkt(new Pkt4(DHCPDISCOVER, 1002));
ASSERT_NO_THROW(q4->enqueuePacket(pkt, sock1));
- EXPECT_EQ(1, q4->getSize());
+ checkIntStat(q4, "size", 1);
// Enqueue a packet onto the front.
pkt.reset(new Pkt4(DHCPDISCOVER, 1003));
ASSERT_NO_THROW(q4->enqueuePacket(pkt, sock1, QueueEnd::FRONT));
- EXPECT_EQ(2, q4->getSize());
+ checkIntStat(q4, "size", 2);
// Enqueue a packet onto the back.
pkt.reset(new Pkt4(DHCPDISCOVER, 1001));
ASSERT_NO_THROW(q4->enqueuePacket(pkt, sock1, QueueEnd::BACK));
- EXPECT_EQ(3, q4->getSize());
+ checkIntStat(q4, "size", 3);
// By default we dequeue from the front. We should get transid 1003.
ASSERT_NO_THROW(pkt = q4->dequeuePacket());
}
// Verifies enqueuing operations when drop logic is enabled.
+// This accesses it's queue instance as a TestQueue4, rather than
+// a PacketQueue4Ptr, to provide access to TestQueue4 specifics.
TEST(TestQueue4, dropPacketTest) {
TestQueue4 q4(100);
EXPECT_TRUE(q4.empty());
SocketInfo sockEven(isc::asiolink::IOAddress("127.0.0.1"), 888, 10);
SocketInfo sockOdd(isc::asiolink::IOAddress("127.0.0.1"), 777, 11);
- // Drop is not enabled.
+ // Drop is not enabled.
// We should be able to enqueu a packet with even numbered values.
Pkt4Ptr pkt(new Pkt4(DHCPDISCOVER, 1002));
ASSERT_NO_THROW(q4.enqueuePacket(pkt, sockEven));
// Enable drop logic.
q4.drop_enabled_ = true;
- // We should not be able to add one with an even-numbered transid.
+ // We should not be able to add one with an even-numbered transid.
pkt.reset(new Pkt4(DHCPDISCOVER, 1004));
ASSERT_NO_THROW(q4.enqueuePacket(pkt, sockOdd));
EXPECT_EQ(2, q4.getSize());
- // We should not be able to add one with from even-numbered port.
+ // We should not be able to add one with from even-numbered port.
pkt.reset(new Pkt4(DHCPDISCOVER, 1005));
ASSERT_NO_THROW(q4.enqueuePacket(pkt, sockEven));
EXPECT_EQ(2, q4.getSize());
ASSERT_NO_THROW(q4.enqueuePacket(pkt, sockOdd));
EXPECT_EQ(3, q4.getSize());
- // Dequeue them and make sure they are as expected: 1002,1003, and 1007.
+ // Dequeue them and make sure they are as expected: 1002,1003, and 1007.
ASSERT_NO_THROW(pkt = q4.dequeuePacket());
ASSERT_TRUE(pkt);
EXPECT_EQ(1002, pkt->getTransid());
ASSERT_NO_THROW(pkt = q4.dequeuePacket());
ASSERT_FALSE(pkt);
}
+
// Verifies dequeuing operations when eat packets is enabled.
+// This accesses it's queue instance as a TestQueue4, rather than
+// a PacketQueue4Ptr, to provide access to TestQueue4 specifics.
TEST(TestQueue4, eatPacketsTest) {
TestQueue4 q4(100);
EXPECT_TRUE(q4.empty());
EXPECT_EQ(i, q4.getSize());
}
- // Setting eat count to two and dequeuing (from the front, by default),
+ // Setting eat count to two and dequeuing (from the front, by default),
// should discard 1001 and 1002, resulting in a dequeue of 1003.
q4.eat_count_ = 2;
ASSERT_NO_THROW(pkt = q4.dequeuePacket());
#include <config.h>
-#include <asiolink/io_address.h>
#include <dhcp/dhcp6.h>
#include <dhcp/packet_queue.h>
+#include <packet_queue_testutils.h>
#include <boost/shared_ptr.hpp>
#include <gtest/gtest.h>
-#include <iostream>
-#include <sstream>
-
using namespace std;
using namespace isc;
using namespace isc::dhcp;
namespace {
-class TestQueue6 : public PacketQueueRing<Pkt6Ptr> {
+class TestQueue6 : public PacketQueueRing6 {
public:
-
/// @brief Constructor
///
/// @param queue_size maximum number of packets the queue can hold
- TestQueue6(size_t queue_size)
- : PacketQueueRing(queue_size), drop_enabled_(false), eat_count_(0) {
+ TestQueue6(size_t queue_size)
+ : PacketQueueRing6("kea-ring6", queue_size), drop_enabled_(false), eat_count_(0) {
};
/// @brief virtual Destructor
virtual bool dropPacket(Pkt6Ptr packet,
const SocketInfo& source) {
if (drop_enabled_) {
- return ((packet->getTransid() % 2 == 0) ||
- (source.port_ % 2 == 0));
+ return ((packet->getTransid() % 2 == 0) ||
+ (source.port_ % 2 == 0));
}
return (false);
return (eaten);
}
+ virtual void useDefaults() {
+ setCapacity(411);
+ }
+
bool drop_enabled_;
int eat_count_;
};
-// Verifies basic operation of the PacketQueue interface:
-// 1. Construction
-// 2. Manipulation of configurable parameters
+// Verifies use of the generic PacketQueue interface to
+// construct a queue implementation.
TEST(TestQueue6, interfaceBasics) {
- // Use minimum allowed
- size_t min = TestQueue6::MIN_RING_CAPACITY;
-
- PacketQueue6Ptr q6(new TestQueue6(min));
+ // Verify we can create a queue
+ PacketQueue6Ptr q6(new TestQueue6(100));
ASSERT_TRUE(q6);
+
+ // It should be empty.
EXPECT_TRUE(q6->empty());
- ConstQueueControlPtr orig_control = q6->getQueueControl();
- ASSERT_TRUE(orig_control);
- EXPECT_EQ(min, orig_control->getCapacity());
- EXPECT_EQ(min, q6->getCapacity());
- EXPECT_EQ(0, q6->getSize());
-
- // Verify we cannot violate minium.
- QueueControlPtr new_control(new QueueControl());
- new_control->setCapacity(min - 1);
- ASSERT_THROW(q6->setQueueControl(new_control), BadValue);
-
- // Verify original control values remain
- EXPECT_TRUE(*(q6->getQueueControl()) == *orig_control);
-
- // Verify we can update to a valid value.
- new_control->setCapacity(min + 10);
- ASSERT_NO_THROW(q6->setQueueControl(new_control));
- ConstQueueControlPtr control = q6->getQueueControl();
- ASSERT_TRUE(control);
- EXPECT_TRUE(*control == *new_control);
- EXPECT_EQ(min + 10, control->getCapacity());
- EXPECT_EQ(min + 10, q6->getCapacity());
+ // Type should match.
+ EXPECT_EQ("kea-ring6", q6->getQueueType());
+
+ // Fetch the queue info and verify it has all the expected values.
+ checkInfo(q6, "{ \"capacity\": 100, \"queue-type\": \"kea-ring6\", \"size\": 0 }");
}
// Verifies the basic mechanics of the adding and
TEST(TestQueue6, ringTest) {
PacketQueue6Ptr q6(new TestQueue6(3));
- EXPECT_EQ(3, q6->getCapacity());
+ // Fetch the queue info and verify it has all the expected values.
+ checkInfo(q6, "{ \"capacity\": 3, \"queue-type\": \"kea-ring6\", \"size\": 0 }");
+
// Enqueue five packets. The first two should be pushed off.
SocketInfo sock1(isc::asiolink::IOAddress("127.0.0.1"), 777, 10);
for (int i = 1; i < 6; ++i) {
Pkt6Ptr pkt(new Pkt6(DHCPV6_SOLICIT, 1000+i));
ASSERT_NO_THROW(q6->enqueuePacket(pkt, sock1));
-
- int exp_size = (i > 3 ? 3 : i);
- EXPECT_EQ(exp_size, q6->getSize());
+ checkIntStat(q6, "size", (i > 3 ? 3 : i));
}
+ // Fetch the queue info and verify it has all the expected values.
+ checkInfo(q6, "{ \"capacity\": 3, \"queue-type\": \"kea-ring6\", \"size\": 3 }");
+
// We should have transids 1005,1004,1003 (back to front)
// Peek front should be transid 1003.
for (int i = 1; i < 3; ++i) {
Pkt6Ptr pkt(new Pkt6(DHCPV6_SOLICIT, 1000+i));
ASSERT_NO_THROW(q6->enqueuePacket(pkt, sock1));
- EXPECT_EQ(i, q6->getSize());
+ checkIntStat(q6, "size", i);
}
// Let's flush the buffer and then verify it is empty.
q6->clear();
- EXPECT_TRUE(q6->empty());
- EXPECT_EQ(0, q6->getSize());
+ EXPECT_TRUE(q6->empty());
+ checkIntStat(q6, "size", 0);
}
// Verifies the higher level functions of queueing and
// Enqueue the first packet.
Pkt6Ptr pkt(new Pkt6(DHCPV6_SOLICIT, 1002));
ASSERT_NO_THROW(q6->enqueuePacket(pkt, sock1));
- EXPECT_EQ(1, q6->getSize());
+ checkIntStat(q6, "size", 1);
// Enqueue a packet onto the front.
pkt.reset(new Pkt6(DHCPV6_SOLICIT, 1003));
ASSERT_NO_THROW(q6->enqueuePacket(pkt, sock1, QueueEnd::FRONT));
- EXPECT_EQ(2, q6->getSize());
+ checkIntStat(q6, "size", 2);
// Enqueue a packet onto the back.
pkt.reset(new Pkt6(DHCPV6_SOLICIT, 1001));
ASSERT_NO_THROW(q6->enqueuePacket(pkt, sock1, QueueEnd::BACK));
- EXPECT_EQ(3, q6->getSize());
+ checkIntStat(q6, "size", 3);
// By default we dequeue from the front. We should get transid 1003.
ASSERT_NO_THROW(pkt = q6->dequeuePacket());
}
// Verifies enqueuing operations when drop logic is enabled.
+// This accesses it's queue instance as a TestQueue6, rather than
+// a PacketQueue6Ptr, to provide access to TestQueue6 specifics.
TEST(TestQueue6, dropPacketTest) {
TestQueue6 q6(100);
EXPECT_TRUE(q6.empty());
SocketInfo sockEven(isc::asiolink::IOAddress("127.0.0.1"), 888, 10);
SocketInfo sockOdd(isc::asiolink::IOAddress("127.0.0.1"), 777, 11);
- // Drop is not enabled.
+ // Drop is not enabled.
// We should be able to enqueu a packet with even numbered values.
Pkt6Ptr pkt(new Pkt6(DHCPV6_SOLICIT, 1002));
ASSERT_NO_THROW(q6.enqueuePacket(pkt, sockEven));
// Enable drop logic.
q6.drop_enabled_ = true;
- // We should not be able to add one with an even-numbered transid.
+ // We should not be able to add one with an even-numbered transid.
pkt.reset(new Pkt6(DHCPV6_SOLICIT, 1004));
ASSERT_NO_THROW(q6.enqueuePacket(pkt, sockOdd));
EXPECT_EQ(2, q6.getSize());
- // We should not be able to add one with from even-numbered port.
+ // We should not be able to add one with from even-numbered port.
pkt.reset(new Pkt6(DHCPV6_SOLICIT, 1005));
ASSERT_NO_THROW(q6.enqueuePacket(pkt, sockEven));
EXPECT_EQ(2, q6.getSize());
ASSERT_NO_THROW(q6.enqueuePacket(pkt, sockOdd));
EXPECT_EQ(3, q6.getSize());
- // Dequeue them and make sure they are as expected: 1002,1003, and 1007.
+ // Dequeue them and make sure they are as expected: 1002,1003, and 1007.
ASSERT_NO_THROW(pkt = q6.dequeuePacket());
ASSERT_TRUE(pkt);
EXPECT_EQ(1002, pkt->getTransid());
}
// Verifies dequeuing operations when eat packets is enabled.
+// This accesses it's queue instance as a TestQueue6, rather than
+// a PacketQueue6Ptr, to provide access to TestQueue6 specifics.
TEST(TestQueue6, eatPacketsTest) {
TestQueue6 q6(100);
EXPECT_TRUE(q6.empty());
EXPECT_EQ(i, q6.getSize());
}
- // Setting eat count to two and dequeuing (from the front, by default),
+ // Setting eat count to two and dequeuing (from the front, by default),
// should discard 1001 and 1002, resulting in a dequeue of 1003.
q6.eat_count_ = 2;
ASSERT_NO_THROW(pkt = q6.dequeuePacket());
--- /dev/null
+// Copyright (C) 2018 Internet Systems Consortium, Inc. ("ISC")
+//
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+#include <config.h>
+
+#include <dhcp/packet_queue_mgr4.h>
+#include <packet_queue_testutils.h>
+
+#include <boost/shared_ptr.hpp>
+#include <gtest/gtest.h>
+
+using namespace std;
+using namespace isc;
+using namespace isc::dhcp;
+
+namespace {
+
+class PacketQueueMgr4Test : public ::testing::Test {
+public:
+ PacketQueueMgr4Test(){
+ PacketQueueMgr4::create();
+ }
+
+ ~PacketQueueMgr4Test(){
+ PacketQueueMgr4::destroy();
+ }
+
+ /// @brief Registers a queue type factory
+ bool addCustomQueueType(const std::string& queue_type) {
+ bool did_it =
+ mgr().registerPacketQueueFactory(queue_type,
+ [](const QueueControl& control)
+ -> PacketQueue4Ptr {
+ return (PacketQueue4Ptr(new PacketQueueRing4(control.getQueueType(),
+ control.getCapacity())));
+ });
+
+ return did_it;
+ }
+
+ PacketQueueMgr4& mgr() {
+ return (PacketQueueMgr4::instance());
+ };
+
+ void checkMyInfo(const std::string& exp_json) {
+ checkInfo((mgr().getPacketQueue()), exp_json);
+ }
+
+};
+
+TEST_F(PacketQueueMgr4Test, defaultQueue) {
+
+ // Verify that we have a default queue and its info is correct.
+ checkMyInfo("{ \"capacity\": 500, \"queue-type\": \"kea-ring4\", \"size\": 0 }");
+
+ QueueControl control;
+ control.setQueueType("kea-ring4");
+ control.setCapacity(2000);
+
+ // Verify that we can replace the default queue with different capacity queue
+ ASSERT_NO_THROW(mgr().createPacketQueue(control));
+ checkMyInfo("{ \"capacity\": 2000, \"queue-type\": \"kea-ring4\", \"size\": 0 }");
+
+ // We should be able to recreate the manager.
+ ASSERT_NO_THROW(PacketQueueMgr4::create());
+
+ // And be back to having the default queue.
+ checkMyInfo("{ \"capacity\": 500, \"queue-type\": \"kea-ring4\", \"size\": 0 }");
+}
+
+TEST_F(PacketQueueMgr4Test, customQueueType) {
+ QueueControl control;
+ control.setQueueType("custom-queue");
+ control.setCapacity(2000);
+
+ // Verify that we cannot create a queue for a non-existant type
+ ASSERT_THROW(mgr().createPacketQueue(control), InvalidQueueType);
+
+ // Register our adjustable-type factory
+ ASSERT_TRUE(addCustomQueueType("custom-queue"));
+
+ // We still have our default queue.
+ checkMyInfo("{ \"capacity\": 500, \"queue-type\": \"kea-ring4\", \"size\": 0 }");
+
+ // Verify that we can replace the default queue with a "custom-queue" queue
+ ASSERT_NO_THROW(mgr().createPacketQueue(control));
+ checkMyInfo("{ \"capacity\": 2000, \"queue-type\": \"custom-queue\", \"size\": 0 }");
+
+ // Now unregister the factory.
+ ASSERT_NO_THROW(mgr().unregisterPacketQueueFactory("custom-queue"));
+
+ // Verify we did not lose the queue.
+ checkMyInfo("{ \"capacity\": 2000, \"queue-type\": \"custom-queue\", \"size\": 0 }");
+
+ // Try and recreate the custom queue, type should be invalid.
+ ASSERT_THROW(mgr().createPacketQueue(control), InvalidQueueType);
+
+ // Verify we can create a default type queue.
+ control.setQueueType("kea-ring4");
+ ASSERT_NO_THROW(mgr().createPacketQueue(control));
+ checkMyInfo("{ \"capacity\": 2000, \"queue-type\": \"kea-ring4\", \"size\": 0 }");
+}
+
+} // end of anonymous namespace
--- /dev/null
+// Copyright (C) 2018 Internet Systems Consortium, Inc. ("ISC")
+//
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+#include <config.h>
+
+#include <dhcp/packet_queue_mgr6.h>
+
+#include <boost/shared_ptr.hpp>
+#include <gtest/gtest.h>
+
+using namespace std;
+using namespace isc;
+using namespace isc::dhcp;
+
+namespace {
+
+class PacketQueueMgr6Test : public ::testing::Test {
+public:
+ PacketQueueMgr6Test(){
+ PacketQueueMgr6::create();
+ }
+
+ ~PacketQueueMgr6Test(){
+ PacketQueueMgr6::destroy();
+ }
+
+ /// @brief Registers a queue type factory
+ bool addCustomQueueType(const std::string& queue_type) {
+ bool did_it =
+ mgr().registerPacketQueueFactory(queue_type,
+ [](const QueueControl& control)
+ -> PacketQueue6Ptr {
+ return (PacketQueue6Ptr(new PacketQueueRing6(control.getQueueType(),
+ control.getCapacity())));
+ });
+
+ return did_it;
+ }
+
+ PacketQueueMgr6& mgr() {
+ return (PacketQueueMgr6::instance());
+ };
+
+ void checkInfo(const std::string& exp_json) {
+ // Fetch the queue info and verify it has all the expected values.
+ ASSERT_TRUE(mgr().getPacketQueue()) << " no packet queue!";
+ data::ElementPtr info;
+ ASSERT_NO_THROW(info = mgr().getPacketQueue()->getInfo());
+ ASSERT_TRUE(info);
+ data::ElementPtr exp_elems;
+ ASSERT_NO_THROW(exp_elems = data::Element::fromJSON(exp_json))
+ << " exp_elems is invalid JSON : " << exp_json
+ << " test is broken";
+ EXPECT_TRUE(exp_elems->equals(*info));
+ }
+
+};
+
+TEST_F(PacketQueueMgr6Test, defaultQueue) {
+
+ // Verify that we have a default queue and its info is correct.
+ checkInfo("{ \"capacity\": 500, \"queue-type\": \"kea-ring6\", \"size\": 0 }");
+
+ QueueControl control;
+ control.setQueueType("kea-ring6");
+ control.setCapacity(2000);
+
+ // Verify that we can replace the default queue with different capacity queue
+ ASSERT_NO_THROW(mgr().createPacketQueue(control));
+ checkInfo("{ \"capacity\": 2000, \"queue-type\": \"kea-ring6\", \"size\": 0 }");
+
+ // We should be able to recreate the manager.
+ ASSERT_NO_THROW(PacketQueueMgr6::create());
+
+ // And be back to having the default queue.
+ checkInfo("{ \"capacity\": 500, \"queue-type\": \"kea-ring6\", \"size\": 0 }");
+}
+
+TEST_F(PacketQueueMgr6Test, customQueueType) {
+ QueueControl control;
+ control.setQueueType("custom-queue");
+ control.setCapacity(2000);
+
+ // Verify that we cannot create a queue for a non-existant type
+ ASSERT_THROW(mgr().createPacketQueue(control), InvalidQueueType);
+
+ // Register our adjustable-type factory
+ ASSERT_TRUE(addCustomQueueType("custom-queue"));
+
+ // We still have our default queue.
+ checkInfo("{ \"capacity\": 500, \"queue-type\": \"kea-ring6\", \"size\": 0 }");
+
+ // Verify that we can replace the default queue with a "custom-queue" queue
+ ASSERT_NO_THROW(mgr().createPacketQueue(control));
+ checkInfo("{ \"capacity\": 2000, \"queue-type\": \"custom-queue\", \"size\": 0 }");
+
+ // Now unregister the factory.
+ ASSERT_NO_THROW(mgr().unregisterPacketQueueFactory("custom-queue"));
+
+ // Verify we did not lose the queue.
+ checkInfo("{ \"capacity\": 2000, \"queue-type\": \"custom-queue\", \"size\": 0 }");
+
+ // Try and recreate the custom queue, type should be invalid.
+ ASSERT_THROW(mgr().createPacketQueue(control), InvalidQueueType);
+
+ // Verify we can create a default type queue.
+ control.setQueueType("kea-ring6");
+ ASSERT_NO_THROW(mgr().createPacketQueue(control));
+ checkInfo("{ \"capacity\": 2000, \"queue-type\": \"kea-ring6\", \"size\": 0 }");
+}
+
+} // end of anonymous namespace
--- /dev/null
+// Copyright (C) 2018 Internet Systems Consortium, Inc. ("ISC")
+//
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+#include <config.h>
+
+#include <dhcp/packet_queue.h>
+
+#include <boost/shared_ptr.hpp>
+#include <gtest/gtest.h>
+
+using namespace std;
+using namespace isc;
+using namespace isc::dhcp;
+
+template<typename PacketQueuePtrType> void checkInfo(PacketQueuePtrType queue, const std::string& exp_json) {
+ ASSERT_TRUE(queue) << "packet queue ptr is null";
+ // Fetch the queue info and verify it has all the expected values.
+ data::ElementPtr info;
+ ASSERT_NO_THROW(info = queue->getInfo());
+ ASSERT_TRUE(info);
+ data::ElementPtr exp_elems;
+ ASSERT_NO_THROW(exp_elems = data::Element::fromJSON(exp_json)) <<
+ " exp_elems is invalid JSON : " << exp_json << " test is broken";
+ EXPECT_TRUE(exp_elems->equals(*info));
+}
+
+template<typename PacketQueuePtrType> void checkIntStat(PacketQueuePtrType queue,
+ const std::string& name, size_t exp_value) {
+ ASSERT_TRUE(queue) << "packet queue ptr is null";
+ data::ElementPtr info;
+ ASSERT_NO_THROW(info = queue->getInfo());
+ ASSERT_TRUE(info);
+
+ data::ConstElementPtr elem;
+ ASSERT_NO_THROW(elem = info->get(name)) << "stat: " << name << " not in info" << std::endl;
+ ASSERT_TRUE(elem);
+
+ int64_t value;
+ ASSERT_NO_THROW(value = elem->intValue());
+ EXPECT_EQ(exp_value, value) << "stat: " << name << " is wrong" << std::endl;;
+}
TEST(QueueControl, toElement) {
QueueControlPtr control;
ASSERT_NO_THROW(control.reset(new QueueControl()));
+ control->setQueueType("qtype");
control->setCapacity(100);
data::ElementPtr exp_elements;
- std::string json = "{ \"capacity\": 100 }";
+ std::string json = "{ \"capacity\": 100, \"queue-type\": \"qtype\" }";
ASSERT_NO_THROW(exp_elements = data::Element::fromJSON(json))
<< "invalid JSON, test is broken";
void
CfgIface::closeSockets() const {
- IfaceMgr::instance().stopReceiver();
+ IfaceMgr::instance().stopDHCPReceiver();
IfaceMgr::instance().closeSockets();
}
if (re_detect) {
// Interface clear will drop opened socket information
// so close them if the caller did not.
- IfaceMgr::instance().stopReceiver();
+ IfaceMgr::instance().stopDHCPReceiver();
IfaceMgr::instance().closeSockets();
IfaceMgr::instance().clearIfaces();
IfaceMgr::instance().detectIfaces();
isc_throw(DhcpConfigError, "queue-control must be a map");
}
+ ConstElementPtr elem = queue_elem->get("queue-type");
+ if (!elem) {
+ isc_throw(DhcpConfigError, "queue-type is required");
+ } else {
+ if (elem->getType() != Element::string) {
+ isc_throw(DhcpConfigError, "queue-type must be a string");
+ }
+
+ queue_control->setQueueType(elem->stringValue());
+ }
+
try {
size_t capacity = getInteger(queue_elem, "capacity");
queue_control->setCapacity(capacity);
} catch (const std::exception& ex) {
isc_throw(DhcpConfigError, ex.what()
- << " (" << getPosition("ip-addresses", queue_elem) << ")");
+ << " (" << getPosition("capacity", queue_elem) << ")");
}
ConstElementPtr user_context = queue_elem->get("user-context");