From d41571ce170bce6f9e87e01ebf9292f4372ce3c6 Mon Sep 17 00:00:00 2001 From: Razvan Becheriu Date: Wed, 30 Mar 2022 12:46:28 +0300 Subject: [PATCH] [#2116] remove cql code --- .clang-format | 2 +- .gitlab-ci.yml | 7 - CONTRIBUTING.md | 10 +- configure.ac | 96 +- doc/Makefile.am | 2 - doc/devel/Doxyfile | 1 - doc/devel/cross-compile.dox | 1 - doc/devel/unit-tests.dox | 23 - doc/examples/kea4/advanced.json | 2 +- doc/examples/kea4/all-keys-netconf.json | 41 +- doc/examples/kea4/all-keys.json | 41 +- doc/examples/kea4/backends.json | 16 - doc/examples/kea4/cassandra.json | 121 - doc/examples/kea4/global-reservations.json | 2 +- .../kea4/ha-load-balancing-primary.json | 4 +- doc/examples/kea4/leases-expiration.json | 2 +- doc/examples/kea4/multiple-options.json | 2 +- doc/examples/kea4/mysql-reservations.json | 2 +- doc/examples/kea4/pgsql-reservations.json | 2 +- doc/examples/kea4/reservations.json | 6 +- doc/examples/kea4/several-subnets.json | 2 +- doc/examples/kea4/single-subnet.json | 2 +- doc/examples/kea4/with-ddns.json | 2 +- doc/examples/kea6/advanced.json | 2 +- doc/examples/kea6/all-keys-netconf.json | 41 +- doc/examples/kea6/all-keys.json | 41 +- doc/examples/kea6/backends.json | 16 - doc/examples/kea6/cassandra.json | 122 - doc/examples/kea6/duid.json | 2 +- doc/examples/kea6/global-reservations.json | 2 +- doc/examples/kea6/ha-hot-standby.json | 4 +- doc/examples/kea6/leases-expiration.json | 2 +- doc/examples/kea6/multiple-options.json | 2 +- doc/examples/kea6/mysql-reservations.json | 2 +- doc/examples/kea6/pgsql-reservations.json | 2 +- doc/examples/kea6/reservations.json | 2 +- doc/examples/kea6/several-subnets.json | 2 +- doc/examples/kea6/simple.json | 2 +- doc/examples/kea6/tee-times.json | 2 +- doc/examples/kea6/with-ddns.json | 2 +- .../template-power-user-home/kea-dhcp4-1.conf | 4 +- .../template-power-user-home/kea-dhcp4-2.conf | 4 +- doc/sphinx/arm/admin.rst | 159 +- doc/sphinx/arm/database-connectivity.rst | 2 - doc/sphinx/arm/dhcp4-srv.rst | 141 +- doc/sphinx/arm/dhcp6-srv.rst | 74 +- doc/sphinx/arm/hammer.rst | 2 +- doc/sphinx/arm/hooks-ha.rst | 6 +- doc/sphinx/arm/hooks-host-cache.rst | 5 +- doc/sphinx/arm/hooks-lease-cmds.rst | 8 +- doc/sphinx/arm/hooks-radius.rst | 2 - doc/sphinx/arm/hooks.rst | 60 +- doc/sphinx/arm/install.rst | 96 +- doc/sphinx/arm/logging.rst | 3 +- doc/sphinx/arm/security.rst | 11 +- doc/sphinx/grammar/grammar-dhcp4-parser.rst | 22 - doc/sphinx/grammar/grammar-dhcp6-parser.rst | 22 - platforms.rst | 5 - src/bin/admin/admin-utils.sh | 60 - src/bin/admin/kea-admin.in | 124 +- src/bin/admin/tests/.gitignore | 1 - src/bin/admin/tests/Makefile.am | 4 - src/bin/admin/tests/cql_tests.sh.in | 507 -- src/bin/admin/tests/data/Makefile.am | 7 +- .../admin/tests/data/cql.hosts_data_test.csv | 24 - .../data/cql.hosts_data_test.reference.csv | 24 - .../data/cql.lease4_dump_test.reference.csv | 4 - .../data/cql.lease6_dump_test.reference.csv | 4 - .../data/cql.subnet_id_test.reference.csv | 6 - src/bin/admin/tests/dhcpdb_create_1.0.cql | 193 - src/bin/d2/tests/Makefile.am | 3 - src/bin/dhcp4/Makefile.am | 9 - src/bin/dhcp4/dhcp4_lexer.cc | 2871 +++++---- src/bin/dhcp4/dhcp4_lexer.ll | 86 - src/bin/dhcp4/dhcp4_parser.cc | 5051 ++++++++-------- src/bin/dhcp4/dhcp4_parser.h | 1885 ++---- src/bin/dhcp4/dhcp4_parser.yy | 70 - src/bin/dhcp4/dhcp4_srv.cc | 6 - src/bin/dhcp4/location.hh | 54 +- src/bin/dhcp4/tests/Makefile.am | 7 - src/bin/dhcp4/tests/dora_unittest.cc | 107 +- src/bin/dhcp4/tests/parser_unittest.cc | 1 - src/bin/dhcp6/Makefile.am | 9 - src/bin/dhcp6/dhcp6_lexer.cc | 2830 +++++---- src/bin/dhcp6/dhcp6_lexer.ll | 86 - src/bin/dhcp6/dhcp6_parser.cc | 5193 ++++++++--------- src/bin/dhcp6/dhcp6_parser.h | 1921 ++---- src/bin/dhcp6/dhcp6_parser.yy | 70 - src/bin/dhcp6/dhcp6_srv.cc | 6 - src/bin/dhcp6/location.hh | 54 +- src/bin/dhcp6/tests/Makefile.am | 7 - src/bin/dhcp6/tests/parser_unittest.cc | 1 - src/bin/keactrl/kea-dhcp4.conf.pre | 4 +- src/bin/keactrl/kea-dhcp6.conf.pre | 4 +- src/bin/lfc/Makefile.am | 6 - src/bin/lfc/tests/Makefile.am | 6 - src/hooks/dhcp/lease_cmds/lease_cmds.dox | 10 +- src/hooks/dhcp/lease_cmds/tests/Makefile.am | 4 - src/hooks/dhcp/stat_cmds/stat_cmds.dox | 6 +- src/hooks/dhcp/stat_cmds/tests/Makefile.am | 7 - src/lib/Makefile.am | 4 - src/lib/config_backend/base_config_backend.h | 4 +- .../tests/config_backend_mgr_unittest.cc | 6 +- src/lib/cql/Makefile.am | 32 - src/lib/cql/cql_connection.cc | 470 -- src/lib/cql/cql_connection.h | 240 - src/lib/cql/cql_exchange.cc | 1021 ---- src/lib/cql/cql_exchange.h | 325 -- src/lib/cql/sql_common.h | 56 - src/lib/cql/tests/.gitignore | 1 - src/lib/cql/tests/Makefile.am | 38 - src/lib/cql/tests/cql_connection_unittest.cc | 78 - src/lib/cql/tests/run_unittests.cc | 20 - src/lib/cql/testutils/Makefile.am | 23 - src/lib/cql/testutils/cql_schema.cc | 100 - src/lib/cql/testutils/cql_schema.h | 105 - src/lib/database/backend_selector.cc | 5 - src/lib/database/backend_selector.h | 1 - src/lib/database/database.dox | 3 +- src/lib/database/database_connection.cc | 7 - src/lib/database/db_exceptions.h | 12 - src/lib/database/db_log.cc | 6 - src/lib/database/db_log.h | 5 - src/lib/database/db_messages.cc | 8 - src/lib/database/db_messages.h | 4 - src/lib/database/db_messages.mes | 16 - src/lib/database/dbaccess_parser.cc | 38 +- .../tests/backend_selector_unittest.cc | 4 - .../tests/database_connection_unittest.cc | 7 - src/lib/dhcpsrv/Makefile.am | 20 - src/lib/dhcpsrv/benchmarks/Makefile.am | 21 - src/lib/dhcpsrv/benchmarks/benchmarks.dox | 20 +- .../cql_host_data_source_benchmark.cc | 200 - .../benchmarks/cql_lease_mgr_benchmark.cc | 268 - src/lib/dhcpsrv/cql_host_data_source.cc | 3729 ------------ src/lib/dhcpsrv/cql_host_data_source.h | 470 -- src/lib/dhcpsrv/cql_lease_mgr.cc | 2884 --------- src/lib/dhcpsrv/cql_lease_mgr.h | 617 -- src/lib/dhcpsrv/database_backends.dox | 16 - src/lib/dhcpsrv/dhcpsrv_messages.cc | 80 - src/lib/dhcpsrv/dhcpsrv_messages.h | 40 - src/lib/dhcpsrv/dhcpsrv_messages.mes | 174 - src/lib/dhcpsrv/host.h | 8 +- src/lib/dhcpsrv/host_data_source_factory.cc | 32 +- src/lib/dhcpsrv/lease_mgr_factory.cc | 14 - src/lib/dhcpsrv/tests/Makefile.am | 14 - .../dhcpsrv/tests/alloc_engine4_unittest.cc | 175 - .../dhcpsrv/tests/cfg_db_access_unittest.cc | 78 - .../tests/cql_host_data_source_unittest.cc | 929 --- .../dhcpsrv/tests/cql_lease_mgr_unittest.cc | 892 --- src/lib/dhcpsrv/testutils/Makefile.am | 8 - .../generic_host_data_source_unittest.cc | 66 +- src/lib/process/config_ctl_info.h | 2 +- .../tests/config_ctl_info_unittests.cc | 2 +- .../yang/tests/adaptor_config_unittests.cc | 2 - src/lib/yang/tests/config_unittests.cc | 6 +- src/lib/yang/translator_database.cc | 56 - src/lib/yang/translator_database.h | 14 - src/share/database/scripts/Makefile.am | 2 +- src/share/database/scripts/cql/.gitignore | 5 - src/share/database/scripts/cql/Makefile.am | 20 - .../database/scripts/cql/dhcpdb_create.cql | 386 -- .../database/scripts/cql/dhcpdb_drop.cql | 64 - .../scripts/cql/upgrade_1.0_to_2.0.sh.in | 118 - .../scripts/cql/upgrade_2.0_to_3.0.sh.in | 281 - .../scripts/cql/upgrade_3.0_to_4.0.sh.in | 371 -- .../scripts/cql/upgrade_4.0_to_5.0.sh.in | 434 -- .../database/scripts/cql/wipe_data.sh.in | 62 - tools/Makefile.am | 8 - tools/cql_config | 101 - tools/cql_config_defines.sh.sample | 9 - 171 files changed, 8964 insertions(+), 28968 deletions(-) delete mode 100644 doc/examples/kea4/cassandra.json delete mode 100644 doc/examples/kea6/cassandra.json delete mode 100644 src/bin/admin/tests/cql_tests.sh.in delete mode 100644 src/bin/admin/tests/data/cql.hosts_data_test.csv delete mode 100644 src/bin/admin/tests/data/cql.hosts_data_test.reference.csv delete mode 100644 src/bin/admin/tests/data/cql.lease4_dump_test.reference.csv delete mode 100644 src/bin/admin/tests/data/cql.lease6_dump_test.reference.csv delete mode 100644 src/bin/admin/tests/data/cql.subnet_id_test.reference.csv delete mode 100644 src/bin/admin/tests/dhcpdb_create_1.0.cql delete mode 100644 src/lib/cql/Makefile.am delete mode 100644 src/lib/cql/cql_connection.cc delete mode 100644 src/lib/cql/cql_connection.h delete mode 100644 src/lib/cql/cql_exchange.cc delete mode 100644 src/lib/cql/cql_exchange.h delete mode 100644 src/lib/cql/sql_common.h delete mode 100644 src/lib/cql/tests/.gitignore delete mode 100644 src/lib/cql/tests/Makefile.am delete mode 100644 src/lib/cql/tests/cql_connection_unittest.cc delete mode 100644 src/lib/cql/tests/run_unittests.cc delete mode 100644 src/lib/cql/testutils/Makefile.am delete mode 100644 src/lib/cql/testutils/cql_schema.cc delete mode 100644 src/lib/cql/testutils/cql_schema.h delete mode 100644 src/lib/dhcpsrv/benchmarks/cql_host_data_source_benchmark.cc delete mode 100644 src/lib/dhcpsrv/benchmarks/cql_lease_mgr_benchmark.cc delete mode 100644 src/lib/dhcpsrv/cql_host_data_source.cc delete mode 100644 src/lib/dhcpsrv/cql_host_data_source.h delete mode 100644 src/lib/dhcpsrv/cql_lease_mgr.cc delete mode 100644 src/lib/dhcpsrv/cql_lease_mgr.h delete mode 100644 src/lib/dhcpsrv/tests/cql_host_data_source_unittest.cc delete mode 100644 src/lib/dhcpsrv/tests/cql_lease_mgr_unittest.cc delete mode 100644 src/share/database/scripts/cql/.gitignore delete mode 100644 src/share/database/scripts/cql/Makefile.am delete mode 100644 src/share/database/scripts/cql/dhcpdb_create.cql delete mode 100644 src/share/database/scripts/cql/dhcpdb_drop.cql delete mode 100644 src/share/database/scripts/cql/upgrade_1.0_to_2.0.sh.in delete mode 100644 src/share/database/scripts/cql/upgrade_2.0_to_3.0.sh.in delete mode 100644 src/share/database/scripts/cql/upgrade_3.0_to_4.0.sh.in delete mode 100644 src/share/database/scripts/cql/upgrade_4.0_to_5.0.sh.in delete mode 100644 src/share/database/scripts/cql/wipe_data.sh.in delete mode 100755 tools/cql_config delete mode 100755 tools/cql_config_defines.sh.sample diff --git a/.clang-format b/.clang-format index 7166e2f123..a514955776 100644 --- a/.clang-format +++ b/.clang-format @@ -50,7 +50,7 @@ IncludeCategories: - Regex: '^$' Priority: 0 # Kea's own files - - Regex: '^<(asiodns|asiolink|cc|cfgrpt|config|config_backend|cql|cryptolink|database|dhcp|dhcpsrv|dhcp_ddns|dns|eval|exceptions|hooks|http|log|mysql|pgsql|process|stats|testutils|util|yang|admin|agent|d2|dhcp4|dhcp6|keactrl|lfc|netconf|perfdhcp|shell)/' + - Regex: '^<(asiodns|asiolink|cc|cfgrpt|config|config_backend|cryptolink|database|dhcp|dhcpsrv|dhcp_ddns|dns|eval|exceptions|hooks|http|log|mysql|pgsql|process|stats|testutils|util|yang|admin|agent|d2|dhcp4|dhcp6|keactrl|lfc|netconf|perfdhcp|shell)/' Priority: 1 # C++ standard library headers - Regex: '^<[[:alnum:]]>$' diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 381f92bb84..636b11f55a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -31,7 +31,6 @@ shellcheck: - SCRIPTS+="src/bin/admin/admin-utils.sh " - SCRIPTS+="src/bin/admin/kea-admin.in " - SCRIPTS+="src/bin/admin/tests/admin_tests.sh.in " - - SCRIPTS+="src/bin/admin/tests/cql_tests.sh.in " - SCRIPTS+="src/bin/admin/tests/memfile_tests.sh.in " - SCRIPTS+="src/bin/admin/tests/mysql_tests.sh.in " - SCRIPTS+="src/bin/admin/tests/pgsql_tests.sh.in " @@ -56,11 +55,6 @@ shellcheck: - SCRIPTS+="src/lib/testutils/dhcp_test_lib.sh.in " - SCRIPTS+="src/lib/testutils/xml_reporting_test_lib.sh.in " - SCRIPTS+="src/hooks/dhcp/run_script/tests/run_script_test.sh.in " - - SCRIPTS+="src/share/database/scripts/cql/upgrade_1.0_to_2.0.sh.in " - - SCRIPTS+="src/share/database/scripts/cql/upgrade_2.0_to_3.0.sh.in " - - SCRIPTS+="src/share/database/scripts/cql/upgrade_3.0_to_4.0.sh.in " - - SCRIPTS+="src/share/database/scripts/cql/upgrade_4.0_to_5.0.sh.in " - - SCRIPTS+="src/share/database/scripts/cql/wipe_data.sh.in " - SCRIPTS+="src/share/database/scripts/mysql/upgrade_001.0_to_002.0.sh.in " - SCRIPTS+="src/share/database/scripts/mysql/upgrade_002.0_to_003.0.sh.in " - SCRIPTS+="src/share/database/scripts/mysql/upgrade_003.0_to_004.0.sh.in " @@ -104,7 +98,6 @@ shellcheck: - SCRIPTS+="tools/add-config-h.sh " - SCRIPTS+="tools/bump-lib-versions.sh " - SCRIPTS+="tools/check-for-duplicate-includes.sh " - - SCRIPTS+="tools/cql_config " - SCRIPTS+="tools/mk_cfgrpt.sh " - SCRIPTS+="tools/path_replacer.sh.in " - SCRIPTS+="tools/print-generated-files.sh " diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ac7ec2e0c5..f8176e16b6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -175,9 +175,9 @@ such long periods, code tends to be refactored several times. The change you mad some other change or by the code that hasn't been written yet. See Building Kea with Unit Tests for instructions on how to run unit-tests. If you happen to touch -any database related code, make sure you compile your code with –with-mysql, –with-pgsql and/or -–with-cql as needed. For example, if you change something substantial, make sure the other -compilation options still work. +any database related code, make sure you compile your code with –with-mysql and/or –with-pgsql as +needed. For example, if you change something substantial, make sure the other compilation options +still work. If you happen to add new files or have modified any Makefile.am files, it is also a good idea to check if you haven't broken the distribution process: @@ -192,8 +192,8 @@ enable various additional consistency checks that reduce performance but help du you happen to modify anything in the documentation, use `–-enable-generate-docs`. If you are modifying DHCP code, you are likely to be interested in enabling a non-default database backends for DHCP. Note that if the backend is not enabled, the database-specific unit-tests are skipped. To -enable the MySQL backend, use the switch `–with-mysql`; for PostgreSQL, use `–with-pgsql` and for -Cassandra use `--with-cql`. A complete list of all switches can be obtained with the command: +enable the MySQL backend, use the switch `–with-mysql`; for PostgreSQL, use `–with-pgsql`. +A complete list of all switches can be obtained with the command: ```bash ./configure --help diff --git a/configure.ac b/configure.ac index f8b35d3945..b0c8389a9e 100644 --- a/configure.ac +++ b/configure.ac @@ -824,76 +824,16 @@ if test "${pgsql_ssl}" = "yes"; then AC_DEFINE([HAVE_PGSQL_SSL], [1], [PostgreSQL was built with OpenSSL support]) fi -# allow building kea programs with static link to cassandra cpp-driver. -AC_ARG_ENABLE([cql-static-lib], - [AS_HELP_STRING([--enable-cql-static-lib], - [build programs with cassandra cpp driver static library [[default=no]]])], - [enable_cql_static_lib=yes], [enable_cql_static_lib=no]) -AM_CONDITIONAL(USE_CQL_STATIC_LIB, test "$enable_cql_static_lib" = yes) -#AC_DEFINE USE_CQL_STATIC_LIB? (unused) - -cql_lib="cassandra" -if test "${enable_cql_static_lib}" = "yes" ; then - cql_lib="${cql_lib}_static" -fi - cql_config="no" AC_ARG_WITH([cql], [AS_HELP_STRING([--with-cql[[=PATH]]], [path to pkg-config or the Cassandra CQL 'cql_config' script (deprecated)])], [cql_config="$withval"]) -if test "${cql_config}" = "yes" ; then - CQL_CONFIG="$PKG_CONFIG" -elif test "${cql_config}" != "no" ; then - CQL_CONFIG="${cql_config}" +if test "${cql_config}" != "no" ; then + AC_MSG_ERROR([$CQL_CONFIG CAssandra is no longer supported]) fi -if test "$CQL_CONFIG" != "" ; then - if test -d "$CQL_CONFIG" -o ! -x "$CQL_CONFIG" ; then - AC_MSG_ERROR([--with-cql should point to a pkg-config or cql_config program]) - fi - - $CQL_CONFIG --print-errors $cql_lib - if test $? -ne 0; then - AC_MSG_ERROR([$CQL_CONFIG $cql_lib failed]) - fi - - CQL_INCLUDEDIR=`$CQL_CONFIG --cflags-only-I $cql_lib` - CQL_CPPFLAGS=`$CQL_CONFIG --cflags-only-other $cql_lib` - CQL_LIBS=`$CQL_CONFIG --libs $cql_lib` - CQL_LIBS="$CQL_LIBS $CRYPTO_LIBS" - CQL_VERSION=`$CQL_CONFIG --modversion $cql_lib` - - CQL_CPPFLAGS="${CQL_CPPFLAGS} ${CQL_INCLUDEDIR}" - AC_SUBST(CQL_CPPFLAGS) - AC_SUBST(CQL_LIBS) - - # Check that a simple program using CQL functions can compile and link. - CPPFLAGS_SAVED="$CPPFLAGS" - LIBS_SAVED="$LIBS" - - CPPFLAGS="$CQL_CPPFLAGS $CPPFLAGS" - LIBS="$CQL_LIBS $LIBS" - - AC_LINK_IFELSE( - [AC_LANG_PROGRAM([#include ], - [CassCluster* cluster = cass_cluster_new(); - cass_cluster_free(cluster);])], - [AC_MSG_RESULT([checking for Cassandra CQL headers and library... yes])], - [AC_MSG_RESULT([checking for Cassandra CQL headers and library... no]) - AC_MSG_ERROR([Needs Cassandra CQL library])] - ) - CPPFLAGS=$CPPFLAGS_SAVED - LIBS=$LIBS_SAVED - - # Note that CQL is present in the config.h file - AC_DEFINE([HAVE_CQL], [1], [CQL is present]) -fi - -# ... and at the shell level, so Makefile.am can take action depending on this. -AM_CONDITIONAL(HAVE_CQL, test "$CQL_CONFIG" != "") - # Check for sysrepo. AX_SYSREPO @@ -1554,8 +1494,6 @@ AC_CONFIG_FILES([src/bin/admin/Makefile]) AC_CONFIG_FILES([src/bin/admin/kea-admin], [chmod +x src/bin/admin/kea-admin]) AC_CONFIG_FILES([src/bin/admin/tests/Makefile]) -AC_CONFIG_FILES([src/bin/admin/tests/cql_tests.sh], - [chmod +x src/bin/admin/tests/cql_tests.sh]) AC_CONFIG_FILES([src/bin/admin/tests/data/Makefile]) AC_CONFIG_FILES([src/bin/admin/tests/admin_tests.sh], [chmod +x src/bin/admin/tests/admin_tests.sh]) @@ -1726,9 +1664,6 @@ AC_CONFIG_FILES([src/lib/mysql/tests/Makefile]) AC_CONFIG_FILES([src/lib/pgsql/Makefile]) AC_CONFIG_FILES([src/lib/pgsql/tests/Makefile]) AC_CONFIG_FILES([src/lib/pgsql/testutils/Makefile]) -AC_CONFIG_FILES([src/lib/cql/Makefile]) -AC_CONFIG_FILES([src/lib/cql/tests/Makefile]) -AC_CONFIG_FILES([src/lib/cql/testutils/Makefile]) AC_CONFIG_FILES([src/lib/process/Makefile]) AC_CONFIG_FILES([src/lib/process/tests/Makefile]) AC_CONFIG_FILES([src/lib/process/testutils/Makefile]) @@ -1755,17 +1690,6 @@ AC_CONFIG_FILES([src/share/Makefile]) AC_CONFIG_FILES([src/share/api/Makefile]) AC_CONFIG_FILES([src/share/database/Makefile]) AC_CONFIG_FILES([src/share/database/scripts/Makefile]) -AC_CONFIG_FILES([src/share/database/scripts/cql/Makefile]) -AC_CONFIG_FILES([src/share/database/scripts/cql/upgrade_1.0_to_2.0.sh], - [chmod +x src/share/database/scripts/cql/upgrade_1.0_to_2.0.sh]) -AC_CONFIG_FILES([src/share/database/scripts/cql/upgrade_2.0_to_3.0.sh], - [chmod +x src/share/database/scripts/cql/upgrade_2.0_to_3.0.sh]) -AC_CONFIG_FILES([src/share/database/scripts/cql/upgrade_3.0_to_4.0.sh], - [chmod +x src/share/database/scripts/cql/upgrade_3.0_to_4.0.sh]) -AC_CONFIG_FILES([src/share/database/scripts/cql/upgrade_4.0_to_5.0.sh], - [chmod +x src/share/database/scripts/cql/upgrade_4.0_to_5.0.sh]) -AC_CONFIG_FILES([src/share/database/scripts/cql/wipe_data.sh], - [chmod +x src/share/database/scripts/cql/wipe_data.sh]) AC_CONFIG_FILES([src/share/database/scripts/mysql/Makefile]) AC_CONFIG_FILES([src/share/database/scripts/mysql/upgrade_001.0_to_002.0.sh], [chmod +x src/share/database/scripts/mysql/upgrade_001.0_to_002.0.sh]) @@ -2022,22 +1946,6 @@ PostgreSQL: END fi -if test "$CQL_CPPFLAGS" != "" ; then -cat >> config.report << END - -Cassandra CQL (deprecated): - CQL_VERSION: ${CQL_VERSION} - CQL_CPPFLAGS: ${CQL_CPPFLAGS} - CQL_LIBS: ${CQL_LIBS} -END -else -cat >> config.report << END - -Cassandra CQL: - no -END -fi - if "${HAVE_SYSREPO}"; then cat >> config.report << END diff --git a/doc/Makefile.am b/doc/Makefile.am index 52be1809d2..062ec66f21 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -19,7 +19,6 @@ nobase_dist_doc_DATA += examples/kea4/all-keys.json nobase_dist_doc_DATA += examples/kea4/all-keys-netconf.json nobase_dist_doc_DATA += examples/kea4/all-options.json nobase_dist_doc_DATA += examples/kea4/backends.json -nobase_dist_doc_DATA += examples/kea4/cassandra.json nobase_dist_doc_DATA += examples/kea4/classify.json nobase_dist_doc_DATA += examples/kea4/classify2.json nobase_dist_doc_DATA += examples/kea4/comments.json @@ -45,7 +44,6 @@ nobase_dist_doc_DATA += examples/kea6/all-keys.json nobase_dist_doc_DATA += examples/kea6/all-keys-netconf.json nobase_dist_doc_DATA += examples/kea6/all-options.json nobase_dist_doc_DATA += examples/kea6/backends.json -nobase_dist_doc_DATA += examples/kea6/cassandra.json nobase_dist_doc_DATA += examples/kea6/classify.json nobase_dist_doc_DATA += examples/kea6/classify2.json nobase_dist_doc_DATA += examples/kea6/comments.json diff --git a/doc/devel/Doxyfile b/doc/devel/Doxyfile index e190a0fada..128d6255af 100644 --- a/doc/devel/Doxyfile +++ b/doc/devel/Doxyfile @@ -873,7 +873,6 @@ INPUT = ../../src/bin/agent \ ../../src/lib/cfgrpt \ ../../src/lib/config \ ../../src/lib/config_backend \ - ../../src/lib/cql \ ../../src/lib/cryptolink \ ../../src/lib/d2srv \ ../../src/lib/database \ diff --git a/doc/devel/cross-compile.dox b/doc/devel/cross-compile.dox index 08cc92d744..cf98c9f287 100644 --- a/doc/devel/cross-compile.dox +++ b/doc/devel/cross-compile.dox @@ -102,7 +102,6 @@ a native (i.e. not cross-compiled) Kea build. Required and optional Kea dependencies, usually available as packages: - Python (built-in) - - Cassandra (skipped here) - libssl-dev (built-in in the full image) - liblog4cplus-dev (in liblog4cplus package, load both the library and the development part) diff --git a/doc/devel/unit-tests.dox b/doc/devel/unit-tests.dox index 9843774bac..3d6f8b9f54 100644 --- a/doc/devel/unit-tests.dox +++ b/doc/devel/unit-tests.dox @@ -389,29 +389,6 @@ local all postgres trust section in the Kea Administrator Reference Manual). - - @subsection cqlUnitTestsPrerequisites Cassandra database - - @todo: Describe steps necessary to set up Cassandra database suitable - for running unittests. - - It seems this was enough: - - -# Launch cassandra if not running (-f for foreground) - @verbatim - % cassandra -f - @endverbatim - - The tool is cqlsh: - - -# Run the tool - @verbatim - % cqlsh - Connected to Test Cluster at 127.0.0.1:9042. - [cqlsh 5.0.1 | Cassandra 3.11.1 | CQL spec 3.4.4 | Native protocol v4] - Use HELP for help. - cqlsh> @endverbatim\n - @section unitTestsKerberos Kerberos Configuration for Unit Tests The GSS-TSIG hook library uses the GSS-API with Kerberos. While there are diff --git a/doc/examples/kea4/advanced.json b/doc/examples/kea4/advanced.json index a3c4299e23..bbbd7d4825 100644 --- a/doc/examples/kea4/advanced.json +++ b/doc/examples/kea4/advanced.json @@ -74,7 +74,7 @@ // We need to specify the database used to store leases. As of // September 2016, four database backends are supported: MySQL, - // PostgreSQL, Cassandra, and the in-memory database, Memfile. + // PostgreSQL and the in-memory database, Memfile. // We'll use memfile because it doesn't require any prior set up. // For memfile, it's important to always specify lfc-interval, so // the lease file would not grow without bounds and be sanitized diff --git a/doc/examples/kea4/all-keys-netconf.json b/doc/examples/kea4/all-keys-netconf.json index a0f7955fe7..6b4a7fad02 100644 --- a/doc/examples/kea4/all-keys-netconf.json +++ b/doc/examples/kea4/all-keys-netconf.json @@ -309,7 +309,7 @@ // Port on which the database is available. "port": 3306, - // Type of the database, e.g. "mysql", "postgresql", "cql". + // Type of the database, e.g. "mysql", "postgresql". "type": "mysql", // User name to be used to access the database. @@ -331,41 +331,25 @@ // Port on which the database is available. "port": 5432, - // Type of the database, e.g. "mysql", "postgresql", "cql". + // Type of the database, e.g. "mysql", "postgresql". "type": "postgresql", // User name to be used to access the database. "user": "kea" }, { - // Name of the database to connect to. - "keyspace": "kea", - - // Host on which the database resides. - "contact-points": "127.0.0.1", - // Database password. "password": "kea", // Port on which the database is available. "port": 9042, - // Type of the database, e.g. "mysql", "postgresql", "cql". - "type": "cql", + // Type of the database, e.g. "mysql", "postgresql". + "type": "mysql", // User name to be used to access the database. "user": "kea", - // Consistency level for all queries. - // Supported values: any, one, two, three, quorum, all, - // local-quorum, each-quorum, serial, local-serial, local-one. - "consistency": "quorum", - - // Serial consistency level for all queries. - // Supported values: any, one, two, three, quorum, all, - // local-quorum, each-quorum, serial, local-serial, local-one. - "serial-consistency": "serial", - // Connection reconnect wait time. // This parameter governs how long Kea waits before attempting // to reconnect. Expressed in milliseconds. The default is 2000 [ms] @@ -381,16 +365,7 @@ "on-fail": "stop-retry-exit", // Connection connect timeout. - "connect-timeout": 100, - - // Connection request timeout. - "request-timeout": 100, - - // Connection tcp keepalive. - "tcp-keepalive": 100, - - // Connection tcp nodelay. - "tcp-nodelay": true + "connect-timeout": 100 } ], @@ -481,8 +456,8 @@ // because non stored leases will be lost upon Kea server restart. "persist": true, - // Lease database backend type, i.e. "memfile", "mysql", - // "postgresql" or "cql". + // Lease database backend type, i.e. "memfile", "mysql", or + // "postgresql". "type": "memfile" }, @@ -1023,7 +998,7 @@ // Name of the database to connect to. "name": "config", - // Type of the database, e.g. "mysql", "postgresql", "cql". + // Type of the database, e.g. "mysql", "postgresql". "type": "mysql" } ], diff --git a/doc/examples/kea4/all-keys.json b/doc/examples/kea4/all-keys.json index 8f404fd3dc..a4878d240b 100644 --- a/doc/examples/kea4/all-keys.json +++ b/doc/examples/kea4/all-keys.json @@ -309,7 +309,7 @@ // Port on which the database is available. "port": 3306, - // Type of the database, e.g. "mysql", "postgresql", "cql". + // Type of the database, e.g. "mysql", "postgresql". "type": "mysql", // User name to be used to access the database. @@ -345,41 +345,25 @@ // Port on which the database is available. "port": 5432, - // Type of the database, e.g. "mysql", "postgresql", "cql". + // Type of the database, e.g. "mysql", "postgresql". "type": "postgresql", // User name to be used to access the database. "user": "kea" }, { - // Name of the database to connect to. - "keyspace": "kea", - - // Host on which the database resides. - "contact-points": "127.0.0.1", - // Database password. "password": "kea", // Port on which the database is available. "port": 9042, - // Type of the database, e.g. "mysql", "postgresql", "cql". - "type": "cql", + // Type of the database, e.g. "mysql", "postgresql". + "type": "mysql", // User name to be used to access the database. "user": "kea", - // Consistency level for all queries. - // Supported values: any, one, two, three, quorum, all, - // local-quorum, each-quorum, serial, local-serial, local-one. - "consistency": "quorum", - - // Serial consistency level for all queries. - // Supported values: any, one, two, three, quorum, all, - // local-quorum, each-quorum, serial, local-serial, local-one. - "serial-consistency": "serial", - // Connection reconnect wait time. // This parameter governs how long Kea waits before attempting // to reconnect. Expressed in milliseconds. The default is 2000 [ms] @@ -395,16 +379,7 @@ "on-fail": "stop-retry-exit", // Connection connect timeout. - "connect-timeout": 100, - - // Connection request timeout. - "request-timeout": 100, - - // Connection tcp keepalive. - "tcp-keepalive": 100, - - // Connection tcp nodelay. - "tcp-nodelay": true + "connect-timeout": 100 } ], @@ -510,8 +485,8 @@ // because non stored leases will be lost upon Kea server restart. "persist": true, - // Lease database backend type, i.e. "memfile", "mysql", - // "postgresql" or "cql". + // Lease database backend type, i.e. "memfile", "mysql" or + // "postgresql". "type": "memfile" }, @@ -1052,7 +1027,7 @@ // Name of the database to connect to. "name": "config", - // Type of the database, e.g. "mysql", "postgresql", "cql". + // Type of the database, e.g. "mysql", "postgresql". "type": "mysql" } ], diff --git a/doc/examples/kea4/backends.json b/doc/examples/kea4/backends.json index 68c12af174..84ef38bbda 100644 --- a/doc/examples/kea4/backends.json +++ b/doc/examples/kea4/backends.json @@ -4,7 +4,6 @@ // - memfile // - MySQL // - PostgreSQL -// - CQL (Cassandra) backend { "Dhcp4": @@ -66,21 +65,6 @@ // "connect-timeout": 3 // }, -// 4. CQL (Cassandra) backend. Leases will be stored in Cassandra -// database. Make sure it is up, running and properly initialized. See -// kea-admin documentation for details on how to initialize the -// database. The only strictly required parameters are type, keyspace -// and contact-points. At least one contact point must be specified, but -// more than one is required for redundancy. Make sure you specify the -// contact points without spaces. Kea must be compiled with --with-cql -// option to use this backend. -// "lease-database": { -// "type": "cql", -// "keyspace": "keatest", -// "contact-points": "192.0.2.1,192.0.2.2,192.0.2.3", -// "port": 9042 -// }, - // Addresses will be assigned with a lifetime of 4000 seconds. "valid-lifetime": 4000, diff --git a/doc/examples/kea4/cassandra.json b/doc/examples/kea4/cassandra.json deleted file mode 100644 index 83fad11a94..0000000000 --- a/doc/examples/kea4/cassandra.json +++ /dev/null @@ -1,121 +0,0 @@ -// This is an example configuration file for the DHCPv4 server in Kea. -// It is a basic scenario with one IPv4 subnet configured. It demonstrates -// how to configure Kea to use CQL (Cassandra) backend - -{ "Dhcp4": - -{ -// Kea is told to listen on ethX interface only. - "interfaces-config": { - "interfaces": [ "ethX" ] - }, - -// 4. CQL (Cassandra) backend. Leases will be stored in Cassandra -// database. Make sure it is up, running and properly initialized. See -// kea-admin documentation for details on how to initialize the -// database. The only strictly required parameters are type, keyspace -// and contact-points. At least one contact point must be specified, but -// more than one is required for redundancy. Make sure you specify the -// contact points without spaces. Kea must be compiled with --with-cql -// option to use this backend. - "lease-database": { - "type": "cql", - "keyspace": "keatest", - "contact-points": "192.0.2.1,192.0.2.2,192.0.2.3", - "port": 9042, - - // Cassandra supports many additonal parameters that are typically - // not needed, but may be used to tweak your deployment. - - // This parameter governs how long Kea waits before attempting - // to reconnect. Expressed in milliseconds. The default is 2000 [ms]. - "reconnect-wait-time": 2000, - - // This parameter sets the timeout for connecting to a node. Expressed - // in milliseconds. The default is 5000 [ms]. - "connect-timeout": 5000, - - // This parameter sets the timeout for waiting for a response - // from a node. Expressed in milliseconds. The default is 12000 [ms]. - "request-timeout": 12000, - - // This parameter governs the TCP keep-alive mechanism. Expressed - // in seconds of delay. The default is disabled. In this example - // it is set to 20 minutes. - "tcp-keepalive": 1200, - - // This parameter enables/disables Nagle's algorithm on connections. - // The default is true. - "tcp-nodelay": true, - - // This parameter configures consistency level. The default is "quorum". - // Supported values: - // - any - // - one - // - two - // - three - // - quorum - // - all - // - local-quorum - // - each-quorum - // - serial - // - local-serial - // - local-one - // See https://docs.datastax.com/en/cassandra/3.0/cassandra/dml/dmlConfigConsistency.html for more details. - "consistency": "quorum", - - // This parameter configures serial consistency level which manages - // lightweight transaction isolation. The default is "serial". - // Supported values: - // - any - // - one - // - two - // - three - // - quorum - // - all - // - local-quorum - // - each-quorum - // - serial - // - local-serial - // - local-one - // See https://docs.datastax.com/en/cassandra/3.0/cassandra/dml/dmlConfigSerialConsistency.html for more details. - "serial-consistency": "serial" - }, - -// Addresses will be assigned with a lifetime of 4000 seconds. - "valid-lifetime": 4000, - -// Renew and rebind timers are commented out. This implies that options -// 58 and 59 will not be sent to the client. In this case it is up to -// the client to pick the timer values according to RFC2131. Uncomment the -// timers to send these options to the client. -// "renew-timer": 1000, -// "rebind-timer": 2000, - -// The following list defines subnets. We have only one subnet -// here. We tell Kea that it is directly available over local interface. - "subnet4": [ - { - "pools": [ { "pool": "192.0.2.1 - 192.0.2.200" } ], - "subnet": "192.0.2.0/24", - "interface": "ethX" - } - ], - -// The following configures logging. It assumes that messages with at -// least informational level (info, warn, error and fatal) should be -// logged to stdout. - "loggers": [ - { - "name": "kea-dhcp4", - "output_options": [ - { - "output": "stdout" - } - ], - "severity": "INFO" - } - ] -} - -} diff --git a/doc/examples/kea4/global-reservations.json b/doc/examples/kea4/global-reservations.json index 1248be5eed..c54ada30ec 100644 --- a/doc/examples/kea4/global-reservations.json +++ b/doc/examples/kea4/global-reservations.json @@ -15,7 +15,7 @@ }, // We need to specify the database used to store leases. As of September -// 2016, four database backends are supported: MySQL, PostgreSQL, Cassandra, and +// 2016, four database backends are supported: MySQL, PostgreSQL and // the in-memory database, Memfile. We'll use memfile because it doesn't // require any prior set up. "lease-database": { diff --git a/doc/examples/kea4/ha-load-balancing-primary.json b/doc/examples/kea4/ha-load-balancing-primary.json index f5b3aa409a..e5cb40f1e1 100644 --- a/doc/examples/kea4/ha-load-balancing-primary.json +++ b/doc/examples/kea4/ha-load-balancing-primary.json @@ -28,8 +28,8 @@ // Use Memfile lease database backend to store leases in a CSV file. // Depending on how Kea was compiled, it may also support SQL databases - // (MySQL and/or PostgreSQL) and even Cassandra. Those database backends - // require more parameters, like name, host and possibly user and password. + // (MySQL and/or PostgreSQL). Those database backends require more + // parameters, like name, host and possibly user and password. // There are dedicated examples for each backend. See Section 7.2.2 "Lease // Storage" for details. "lease-database": { diff --git a/doc/examples/kea4/leases-expiration.json b/doc/examples/kea4/leases-expiration.json index 96300fbf30..ea86a43d6c 100644 --- a/doc/examples/kea4/leases-expiration.json +++ b/doc/examples/kea4/leases-expiration.json @@ -12,7 +12,7 @@ // We need to specify the database used to store leases. As of // September 2016, four database backends are supported: MySQL, -// PostgreSQL, Cassandra, and the in-memory database, Memfile. +// PostgreSQL and the in-memory database, Memfile. // We'll use memfile because it doesn't require any prior set up. // Note, we're setting the maximum number of row read errors to 100, // (defaults to 0, meaning unlimited). diff --git a/doc/examples/kea4/multiple-options.json b/doc/examples/kea4/multiple-options.json index dd3a7cd123..3c791c2feb 100644 --- a/doc/examples/kea4/multiple-options.json +++ b/doc/examples/kea4/multiple-options.json @@ -11,7 +11,7 @@ // We need to specify the database used to store leases. As of // September 2016, four database backends are supported: MySQL, -// PostgreSQL, Cassandra, and the in-memory database, Memfile. +// PostgreSQL and the in-memory database, Memfile. // We'll use memfile because it doesn't require any prior set up. "lease-database": { "type": "memfile" diff --git a/doc/examples/kea4/mysql-reservations.json b/doc/examples/kea4/mysql-reservations.json index 31cabf7586..5286d8938e 100644 --- a/doc/examples/kea4/mysql-reservations.json +++ b/doc/examples/kea4/mysql-reservations.json @@ -13,7 +13,7 @@ // We need to specify the database used to store leases. As of // September 2016, four database backends are supported: MySQL, -// PostgreSQL, Cassandra, and the in-memory database, Memfile. +// PostgreSQL and the in-memory database, Memfile. // We'll use memfile because it doesn't require any prior set up. "lease-database": { "type": "memfile", diff --git a/doc/examples/kea4/pgsql-reservations.json b/doc/examples/kea4/pgsql-reservations.json index 1ad822f933..3999e6dac4 100644 --- a/doc/examples/kea4/pgsql-reservations.json +++ b/doc/examples/kea4/pgsql-reservations.json @@ -13,7 +13,7 @@ // We need to specify the database used to store leases. As of // September 2016, four database backends are supported: MySQL, -// PostgreSQL, Cassandra, and the in-memory database, Memfile. +// PostgreSQL and the in-memory database, Memfile. // We'll use memfile because it doesn't require any prior set up. "lease-database": { "type": "memfile" diff --git a/doc/examples/kea4/reservations.json b/doc/examples/kea4/reservations.json index 9c03c089ec..2e25c51c4e 100644 --- a/doc/examples/kea4/reservations.json +++ b/doc/examples/kea4/reservations.json @@ -9,9 +9,9 @@ "interfaces": [ "ethX" ] }, -// We need to specify the database used to store leases. As of September -// 2016, four database backends are supported: MySQL, PostgreSQL, Cassandra, and -// the in-memory database, Memfile. We'll use memfile because it doesn't +// We need to specify the database used to store leases. As of April +// 2022, three database backends are supported: MySQL, PostgreSQL, and the +// in-memory database, Memfile. We'll use memfile because it doesn't // require any prior set up. "lease-database": { "type": "memfile", diff --git a/doc/examples/kea4/several-subnets.json b/doc/examples/kea4/several-subnets.json index 37a7a3671b..a1935ea2f2 100644 --- a/doc/examples/kea4/several-subnets.json +++ b/doc/examples/kea4/several-subnets.json @@ -12,7 +12,7 @@ // We need to specify the database used to store leases. As of // September 2016, four database backends are supported: MySQL, -// PostgreSQL, Cassandra, and the in-memory database, Memfile. +// PostgreSQL and the in-memory database, Memfile. // We'll use memfile because it doesn't require any prior set up. "lease-database": { "type": "memfile" diff --git a/doc/examples/kea4/single-subnet.json b/doc/examples/kea4/single-subnet.json index bcbf864f45..ae7f0cfdf0 100644 --- a/doc/examples/kea4/single-subnet.json +++ b/doc/examples/kea4/single-subnet.json @@ -12,7 +12,7 @@ // We need to specify the database used to store leases. As of // September 2016, four database backends are supported: MySQL, -// PostgreSQL, Cassandra, and the in-memory database, Memfile. +// PostgreSQL and the in-memory database, Memfile. // We'll use memfile because it doesn't require any prior set up. "lease-database": { "type": "memfile", diff --git a/doc/examples/kea4/with-ddns.json b/doc/examples/kea4/with-ddns.json index e29a7b18e1..8e76f7c548 100644 --- a/doc/examples/kea4/with-ddns.json +++ b/doc/examples/kea4/with-ddns.json @@ -12,7 +12,7 @@ // We need to specify the database used to store leases. As of // September 2016, four database backends are supported: MySQL, -// PostgreSQL, Cassandra, and the in-memory database, Memfile. +// PostgreSQL and the in-memory database, Memfile. // We'll use memfile because it doesn't require any prior set up. "lease-database": { "type": "memfile", diff --git a/doc/examples/kea6/advanced.json b/doc/examples/kea6/advanced.json index c8b48c1b31..3ea1c613ad 100644 --- a/doc/examples/kea6/advanced.json +++ b/doc/examples/kea6/advanced.json @@ -25,7 +25,7 @@ // We need to specify the database used to store leases. As of // September 2016, four database backends are supported: MySQL, - // PostgreSQL, Cassandra, and the in-memory database, Memfile. + // PostgreSQL and the in-memory database, Memfile. // We will use memfile because it doesn't require any prior set up. "lease-database": { "type": "memfile", diff --git a/doc/examples/kea6/all-keys-netconf.json b/doc/examples/kea6/all-keys-netconf.json index f55512cbce..4eb5d55e20 100644 --- a/doc/examples/kea6/all-keys-netconf.json +++ b/doc/examples/kea6/all-keys-netconf.json @@ -269,7 +269,7 @@ // Port on which the database is available. "port": 3306, - // Type of the database, e.g. "mysql", "postgresql", "cql". + // Type of the database, e.g. "mysql", "postgresql". "type": "mysql", // User name to be used to access the database. @@ -291,41 +291,25 @@ // Port on which the database is available. "port": 5432, - // Type of the database, e.g. "mysql", "postgresql", "cql". + // Type of the database, e.g. "mysql", "postgresql". "type": "postgresql", // User name to be used to access the database. "user": "kea" }, { - // Name of the database to connect to. - "keyspace": "kea", - - // Host on which the database resides. - "contact-points": "127.0.0.1", - // Database password. "password": "kea", // Port on which the database is available. "port": 9042, - // Type of the database, e.g. "mysql", "postgresql", "cql". - "type": "cql", + // Type of the database, e.g. "mysql", "postgresql". + "type": "mysql", // User name to be used to access the database. "user": "kea", - // Consistency level for all queries. - // Supported values: any, one, two, three, quorum, all, - // local-quorum, each-quorum, serial, local-serial, local-one. - "consistency": "quorum", - - // Serial consistency level for all queries. - // Supported values: any, one, two, three, quorum, all, - // local-quorum, each-quorum, serial, local-serial, local-one. - "serial-consistency": "serial", - // Connection reconnect wait time. // This parameter governs how long Kea waits before attempting // to reconnect. Expressed in milliseconds. The default is 2000 [ms] @@ -341,16 +325,7 @@ "on-fail": "stop-retry-exit", // Connection connect timeout. - "connect-timeout": 100, - - // Connection request timeout. - "request-timeout": 100, - - // Connection tcp keepalive. - "tcp-keepalive": 100, - - // Connection tcp nodelay. - "tcp-nodelay": true + "connect-timeout": 100 } ], @@ -425,8 +400,8 @@ // because non stored leases will be lost upon Kea server restart. "persist": true, - // Lease database backend type, i.e. "memfile", "mysql", - // "postgresql" or "cql". + // Lease database backend type, i.e. "memfile", "mysql", or + // "postgresql". "type": "memfile" }, @@ -1011,7 +986,7 @@ // Name of the database to connect to. "name": "config", - // Type of the database, e.g. "mysql", "postgresql", "cql". + // Type of the database, e.g. "mysql", "postgresql". "type": "mysql" } ], diff --git a/doc/examples/kea6/all-keys.json b/doc/examples/kea6/all-keys.json index f05126e346..09b750af9c 100644 --- a/doc/examples/kea6/all-keys.json +++ b/doc/examples/kea6/all-keys.json @@ -269,7 +269,7 @@ // Port on which the database is available. "port": 3306, - // Type of the database, e.g. "mysql", "postgresql", "cql". + // Type of the database, e.g. "mysql", "postgresql". "type": "mysql", // User name to be used to access the database. @@ -305,41 +305,25 @@ // Port on which the database is available. "port": 5432, - // Type of the database, e.g. "mysql", "postgresql", "cql". + // Type of the database, e.g. "mysql", "postgresql". "type": "postgresql", // User name to be used to access the database. "user": "kea" }, { - // Name of the database to connect to. - "keyspace": "kea", - - // Host on which the database resides. - "contact-points": "127.0.0.1", - // Database password. "password": "kea", // Port on which the database is available. "port": 9042, - // Type of the database, e.g. "mysql", "postgresql", "cql". - "type": "cql", + // Type of the database, e.g. "mysql", "postgresql". + "type": "mysql", // User name to be used to access the database. "user": "kea", - // Consistency level for all queries. - // Supported values: any, one, two, three, quorum, all, - // local-quorum, each-quorum, serial, local-serial, local-one. - "consistency": "quorum", - - // Serial consistency level for all queries. - // Supported values: any, one, two, three, quorum, all, - // local-quorum, each-quorum, serial, local-serial, local-one. - "serial-consistency": "serial", - // Connection reconnect wait time. // This parameter governs how long Kea waits before attempting // to reconnect. Expressed in milliseconds. The default is 2000 [ms] @@ -355,16 +339,7 @@ "on-fail": "stop-retry-exit", // Connection connect timeout. - "connect-timeout": 100, - - // Connection request timeout. - "request-timeout": 100, - - // Connection tcp keepalive. - "tcp-keepalive": 100, - - // Connection tcp nodelay. - "tcp-nodelay": true + "connect-timeout": 100 } ], @@ -454,8 +429,8 @@ // because non stored leases will be lost upon Kea server restart. "persist": true, - // Lease database backend type, i.e. "memfile", "mysql", - // "postgresql" or "cql". + // Lease database backend type, i.e. "memfile", "mysql" or + // "postgresql". "type": "memfile" }, @@ -1040,7 +1015,7 @@ // Name of the database to connect to. "name": "config", - // Type of the database, e.g. "mysql", "postgresql", "cql". + // Type of the database, e.g. "mysql", "postgresql". "type": "mysql" } ], diff --git a/doc/examples/kea6/backends.json b/doc/examples/kea6/backends.json index 9a3b5224df..148a5834a4 100644 --- a/doc/examples/kea6/backends.json +++ b/doc/examples/kea6/backends.json @@ -4,7 +4,6 @@ // - memfile // - MySQL // - PostgreSQL -// - CQL (Cassandra) backend { "Dhcp6": @@ -66,21 +65,6 @@ // "connect-timeout": 3 // }, -// 4. CQL (Cassandra) backend. Leases will be stored in Cassandra -// database. Make sure it is up, running and properly initialized. See -// kea-admin documentation for details on how to initialize the -// database. The only strictly required parameters are type, keyspace -// and contact-points. At least one contact point must be specified, but -// more than one is required for redundancy. Make sure you specify the -// contact points without spaces. Kea must be compiled with --with-cql -// option to use this backend. -// "lease-database": { -// "type": "cql", -// "keyspace": "keatest", -// "contact-points": "192.0.2.1,192.0.2.2,192.0.2.3", -// "port": 9042 -// }, - // Addresses will be assigned with preferred and valid lifetimes // being 3000 and 4000, respectively. Client is told to start // renewing after 1000 seconds. If the server does not respond diff --git a/doc/examples/kea6/cassandra.json b/doc/examples/kea6/cassandra.json deleted file mode 100644 index 071b16583f..0000000000 --- a/doc/examples/kea6/cassandra.json +++ /dev/null @@ -1,122 +0,0 @@ -// This is an example configuration file for the DHCPv6 server in Kea. -// It is a basic scenario with one IPv6 subnet configured. It demonstrates -// how to configure Kea to use CQL (Cassandra) backend. - -{ "Dhcp6": - -{ -// Kea is told to listen on ethX interface only. - "interfaces-config": { - "interfaces": [ "ethX" ] - }, - -// CQL (Cassandra) backend. Leases will be stored in Cassandra database. Make -// sure it is up, running and properly initialized. See kea-admin documentation -// for details on how to initialize the database. The only strictly required -// parameters are type, keyspace and contact-points. At least one contact point -// must be specified, but more than one is required for redundancy. Make sure -// you specify the contact points without spaces. Kea must be compiled with -// --with-cql option to use this backend. - "lease-database": { - "type": "cql", - "keyspace": "keatest", - "contact-points": "192.0.2.1,192.0.2.2,192.0.2.3", - "port": 9042, - - // Cassandra supports many additonal parameters that are typically - // not needed, but may be used to tweak your deployment. - - // This parameter governs how long Kea waits before attempting - // to reconnect. Expressed in milliseconds. The default is 2000 [ms]. - "reconnect-wait-time": 2000, - - // This parameter sets the timeout for connecting to a node. Expressed - // in milliseconds. The default is 5000 [ms]. - "connect-timeout": 5000, - - // This parameter sets the timeout for waiting for a response - // from a node. Expressed in milliseconds. The default is 12000 [ms]. - "request-timeout": 12000, - - // This parameter governs the TCP keep-alive mechanism. Expressed - // in seconds of delay. The default is disabled. In this example it is - // set to 20 minutes. - "tcp-keepalive": 1200, - - // This parameter enables/disables Nagle's algorithm on connections. - // The default is true. - "tcp-nodelay": true, - - // This parameter configures consistency level. The default is "quorum". - // Supported values: - // - any - // - one - // - two - // - three - // - quorum - // - all - // - local-quorum - // - each-quorum - // - serial - // - local-serial - // - local-one - // See https://docs.datastax.com/en/cassandra/3.0/cassandra/dml/dmlConfigConsistency.html for more details. - "consistency": "quorum", - - // This parameter configures serial consistency level which manages - // lightweight transaction isolation. The default is "serial". - // Supported values: - // - any - // - one - // - two - // - three - // - quorum - // - all - // - local-quorum - // - each-quorum - // - serial - // - local-serial - // - local-one - // See https://docs.datastax.com/en/cassandra/3.0/cassandra/dml/dmlConfigSerialConsistency.html for more details. - "serial-consistency": "serial" - }, - -// Addresses will be assigned with preferred and valid lifetimes -// being 3000 and 4000, respectively. Client is told to start -// renewing after 1000 seconds. If the server does not respond -// after 2000 seconds since the lease was granted, client is supposed -// to start REBIND procedure (emergency renewal that allows switching -// to a different server). - "preferred-lifetime": 3000, - "valid-lifetime": 4000, - "renew-timer": 1000, - "rebind-timer": 2000, - -// The following list defines subnets. Each subnet consists of at -// least subnet and pool entries. - "subnet6": [ - { - "pools": [ { "pool": "2001:db8:1::/80" } ], - "subnet": "2001:db8:1::/64", - "interface": "ethX" - } - ], - -// The following configures logging. It assumes that messages with at -// least informational level (info, warn, error and fatal) should be -// logged to stdout. - "loggers": [ - { - "name": "kea-dhcp6", - "output_options": [ - { - "output": "stdout" - } - ], - "debuglevel": 0, - "severity": "INFO" - } - ] -} - -} diff --git a/doc/examples/kea6/duid.json b/doc/examples/kea6/duid.json index 5fb0641a51..44e8a9b009 100644 --- a/doc/examples/kea6/duid.json +++ b/doc/examples/kea6/duid.json @@ -32,7 +32,7 @@ // We need to specify the database used to store leases. As of // September 2016, four database backends are supported: MySQL, -// PostgreSQL, Cassandra, and the in-memory database, Memfile. +// PostgreSQL and the in-memory database, Memfile. // We'll use memfile because it doesn't require any prior set up. "lease-database": { "type": "memfile", diff --git a/doc/examples/kea6/global-reservations.json b/doc/examples/kea6/global-reservations.json index 34de838f44..986b4cb5a2 100644 --- a/doc/examples/kea6/global-reservations.json +++ b/doc/examples/kea6/global-reservations.json @@ -16,7 +16,7 @@ // We need to specify the database used to store leases. As of // September 2016, four database backends are supported: MySQL, -// PostgreSQL, Cassandra, and the in-memory database, Memfile. +// PostgreSQL and the in-memory database, Memfile. // We'll use memfile because it doesn't require any prior set up. "lease-database": { "type": "memfile", diff --git a/doc/examples/kea6/ha-hot-standby.json b/doc/examples/kea6/ha-hot-standby.json index a4c0207cf0..9675e6f7d5 100644 --- a/doc/examples/kea6/ha-hot-standby.json +++ b/doc/examples/kea6/ha-hot-standby.json @@ -26,8 +26,8 @@ // Use Memfile lease database backend to store leases in a CSV file. // Depending on how Kea was compiled, it may also support SQL databases - // (MySQL and/or PostgreSQL) and even Cassandra. Those database backends - // require more parameters, like name, host and possibly user and password. + // (MySQL and/or PostgreSQL). Those database backends require more + // parameters, like name, host and possibly user and password. // There are dedicated examples for each backend. See Section 7.2.2 "Lease // Storage" for details. "lease-database": { diff --git a/doc/examples/kea6/leases-expiration.json b/doc/examples/kea6/leases-expiration.json index 5ac98ed5d0..12f754e558 100644 --- a/doc/examples/kea6/leases-expiration.json +++ b/doc/examples/kea6/leases-expiration.json @@ -12,7 +12,7 @@ // We need to specify the database used to store leases. As of // September 2016, four database backends are supported: MySQL, -// PostgreSQL, Cassandra, and the in-memory database, Memfile. +// PostgreSQL and the in-memory database, Memfile. // We'll use memfile because it doesn't require any prior set up. // Note, we're setting the maximum number of row read errors to 100, // (defaults to 0, meaning unlimited). diff --git a/doc/examples/kea6/multiple-options.json b/doc/examples/kea6/multiple-options.json index a8d42eaef6..0abeba0227 100644 --- a/doc/examples/kea6/multiple-options.json +++ b/doc/examples/kea6/multiple-options.json @@ -11,7 +11,7 @@ // We need to specify the database used to store leases. As of // September 2016, four database backends are supported: MySQL, -// PostgreSQL, Cassandra, and the in-memory database, Memfile. +// PostgreSQL and the in-memory database, Memfile. // We'll use memfile because it doesn't require any prior set up. "lease-database": { "type": "memfile" diff --git a/doc/examples/kea6/mysql-reservations.json b/doc/examples/kea6/mysql-reservations.json index f8decf2711..1b4a9d8752 100644 --- a/doc/examples/kea6/mysql-reservations.json +++ b/doc/examples/kea6/mysql-reservations.json @@ -12,7 +12,7 @@ // We need to specify the database used to store leases. As of // September 2016, four database backends are supported: MySQL, -// PostgreSQL, Cassandra, and the in-memory database, Memfile. +// PostgreSQL and the in-memory database, Memfile. // We'll use memfile because it doesn't require any prior set up. "lease-database": { "type": "memfile", diff --git a/doc/examples/kea6/pgsql-reservations.json b/doc/examples/kea6/pgsql-reservations.json index 0c611469a0..4656541d42 100644 --- a/doc/examples/kea6/pgsql-reservations.json +++ b/doc/examples/kea6/pgsql-reservations.json @@ -12,7 +12,7 @@ // We need to specify the database used to store leases. As of // September 2016, four database backends are supported: MySQL, -// PostgreSQL, Cassandra, and the in-memory database, Memfile. +// PostgreSQL and the in-memory database, Memfile. // We'll use memfile because it doesn't require any prior set up. "lease-database": { "type": "memfile" diff --git a/doc/examples/kea6/reservations.json b/doc/examples/kea6/reservations.json index 96f28b8b19..2460deb1a1 100644 --- a/doc/examples/kea6/reservations.json +++ b/doc/examples/kea6/reservations.json @@ -14,7 +14,7 @@ // We need to specify the database used to store leases. As of // September 2016, four database backends are supported: MySQL, -// PostgreSQL, Cassandra, and the in-memory database, Memfile. +// PostgreSQL and the in-memory database, Memfile. // We'll use memfile because it doesn't require any prior set up. "lease-database": { "type": "memfile", diff --git a/doc/examples/kea6/several-subnets.json b/doc/examples/kea6/several-subnets.json index 226875997f..b3f0b1ead5 100644 --- a/doc/examples/kea6/several-subnets.json +++ b/doc/examples/kea6/several-subnets.json @@ -12,7 +12,7 @@ // We need to specify the database used to store leases. As of // September 2016, four database backends are supported: MySQL, -// PostgreSQL, Cassandra, and the in-memory database, Memfile. +// PostgreSQL and the in-memory database, Memfile. // We'll use memfile because it doesn't require any prior set up. "lease-database": { "type": "memfile" diff --git a/doc/examples/kea6/simple.json b/doc/examples/kea6/simple.json index e359df5eb3..8f1b7522ad 100644 --- a/doc/examples/kea6/simple.json +++ b/doc/examples/kea6/simple.json @@ -13,7 +13,7 @@ // We need to specify the database used to store leases. As of // September 2016, four database backends are supported: MySQL, -// PostgreSQL, Cassandra, and the in-memory database, Memfile. +// PostgreSQL and the in-memory database, Memfile. // We'll use memfile because it doesn't require any prior set up. "lease-database": { "type": "memfile", diff --git a/doc/examples/kea6/tee-times.json b/doc/examples/kea6/tee-times.json index 6b14649cab..d5f80f4c09 100644 --- a/doc/examples/kea6/tee-times.json +++ b/doc/examples/kea6/tee-times.json @@ -12,7 +12,7 @@ // We need to specify the database used to store leases. As of // September 2016, four database backends are supported: MySQL, -// PostgreSQL, Cassandra, and the in-memory database, Memfile. +// PostgreSQL and the in-memory database, Memfile. // We'll use memfile because it doesn't require any prior set up. "lease-database": { "type": "memfile" diff --git a/doc/examples/kea6/with-ddns.json b/doc/examples/kea6/with-ddns.json index afc823a373..3506483a08 100644 --- a/doc/examples/kea6/with-ddns.json +++ b/doc/examples/kea6/with-ddns.json @@ -13,7 +13,7 @@ // We need to specify the database used to store leases. As of // September 2016, four database backends are supported: MySQL, -// PostgreSQL, Cassandra, and the in-memory database, Memfile. +// PostgreSQL and the in-memory database, Memfile. // We'll use memfile because it doesn't require any prior set up. "lease-database": { "type": "memfile", diff --git a/doc/examples/template-power-user-home/kea-dhcp4-1.conf b/doc/examples/template-power-user-home/kea-dhcp4-1.conf index 9f6bc22ef3..673981227b 100644 --- a/doc/examples/template-power-user-home/kea-dhcp4-1.conf +++ b/doc/examples/template-power-user-home/kea-dhcp4-1.conf @@ -36,8 +36,8 @@ // Use Memfile lease database backend to store leases in a CSV file. // Depending on how Kea was compiled, it may also support SQL databases - // (MySQL and/or PostgreSQL) and even Cassandra. Those database backends - // require more parameters, like name, host and possibly user and password. + // (MySQL and/or PostgreSQL). Those database backends require more + // parameters, like name, host and possibly user and password. // There are dedicated examples for each backend. See Section 7.2.2 "Lease // Storage" for details. "lease-database": { diff --git a/doc/examples/template-power-user-home/kea-dhcp4-2.conf b/doc/examples/template-power-user-home/kea-dhcp4-2.conf index 23ff4264e2..059a895664 100644 --- a/doc/examples/template-power-user-home/kea-dhcp4-2.conf +++ b/doc/examples/template-power-user-home/kea-dhcp4-2.conf @@ -36,8 +36,8 @@ // Use Memfile lease database backend to store leases in a CSV file. // Depending on how Kea was compiled, it may also support SQL databases - // (MySQL and/or PostgreSQL) and even Cassandra. Those database backends - // require more parameters, like name, host and possibly user and password. + // (MySQL and/or PostgreSQL). Those database backends require more + // parameters, like name, host and possibly user and password. // There are dedicated examples for each backend. See Section 7.2.2 "Lease // Storage" for details. "lease-database": { diff --git a/doc/sphinx/arm/admin.rst b/doc/sphinx/arm/admin.rst index 1149d07222..e0d5f804d8 100644 --- a/doc/sphinx/arm/admin.rst +++ b/doc/sphinx/arm/admin.rst @@ -61,8 +61,8 @@ currently supported commands are: useful when upgrading Kea. - ``lease-dump`` — dumps the contents of the lease database (for MySQL or - PostgreSQL backends) to a CSV (comma-separated values) text file. (Support - for the Cassandra backend has been deprecated.) + PostgreSQL backends) to a CSV (comma-separated values) text file. + The first line of the file contains the column names. This can be used as a way to switch from a database backend to a memfile backend. Alternatively, it can be used as a diagnostic tool, so it provides a portable @@ -82,9 +82,6 @@ supported types are: - ``pgsql`` — information is stored in a PostgreSQL relational database. -- ``cql`` — information is stored in an Apache Cassandra database. - This backend is deprecated. - Additional parameters may be needed, depending on the setup and specific operation: username, password, and database name or the directory where specific files are located. See the appropriate manual @@ -102,32 +99,32 @@ backend is essential for the success of the deployment. .. table:: List of available backends - +---------------+----------------+----------------+---------------+--------------+ - | Feature | Memfile | MySQL | PostgreSQL | CQL | - | | | | | (Cassandra) | - +===============+================+================+===============+==============+ - | Status | Stable | Stable | Stable | Deprecated | - | | | | | | - +---------------+----------------+----------------+---------------+--------------+ - | Data format | CSV file | SQL RMDB | SQL RMDB | NoSQL | - | | | | | database | - | | | | | (Cassandra) | - +---------------+----------------+----------------+---------------+--------------+ - | Leases | yes | yes | yes | yes | - +---------------+----------------+----------------+---------------+--------------+ - | Host | no | yes | yes | yes | - | reservations | | | | | - | | | | | | - +---------------+----------------+----------------+---------------+--------------+ - | Options | no | yes | yes | yes | - | defined on | | | | | - | per host | | | | | - | basis | | | | | - +---------------+----------------+----------------+---------------+--------------+ - | Configuration | no | yes | no | no | - | backend | | | | | - | | | | | | - +---------------+----------------+----------------+---------------+--------------+ + +---------------+----------------+----------------+---------------+ + | Feature | Memfile | MySQL | PostgreSQL | + | | | | | + +===============+================+================+===============+ + | Status | Stable | Stable | Stable | + | | | | | + +---------------+----------------+----------------+---------------+ + | Data format | CSV file | SQL RMDB | SQL RMDB | + | | | | | + | | | | | + +---------------+----------------+----------------+---------------+ + | Leases | yes | yes | yes | + +---------------+----------------+----------------+---------------+ + | Host | no | yes | yes | + | reservations | | | | + | | | | | + +---------------+----------------+----------------+---------------+ + | Options | no | yes | yes | + | defined on | | | | + | per host | | | | + | basis | | | | + +---------------+----------------+----------------+---------------+ + | Configuration | no | yes | yes | + | backend | | | | + | | | | | + +---------------+----------------+----------------+---------------+ Memfile ------- @@ -602,106 +599,6 @@ supported: $ ./configure [other-options] --disable-pgsql-ssl -.. _cql-database: - -Cassandra ---------- - -Cassandra (sometimes referred to as CQL) is the newest backend added to Kea; initial -development was contributed by Deutsche Telekom. The Cassandra backend -is able to store leases, host reservations, and options defined on a -per-host basis. - -.. note:: - - The Cassandra backend was deprecated in Kea 1.9.9. New users are discouraged from - using Cassandra and existing users should consider a migration strategy. See - :ref:`deprecated` for details. - -.. _cql-database-create: - -First-Time Creation of the Cassandra Database -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -When setting up the Cassandra database for the first time, -the keyspace area within it must be created. This needs to be done -manually; it cannot be performed by ``kea-admin``. - -To create the database: - -1. Export ``CQLSH_HOST`` environment variable: - - .. code-block:: console - - $ export CQLSH_HOST=localhost - -2. Log into CQL: - - .. code-block:: console - - $ cqlsh - cql> - -3. Create the CQL keyspace: - - :: - - cql> CREATE KEYSPACE keyspace-name WITH replication = {'class' : 'SimpleStrategy','replication_factor' : 1}; - - (``keyspace-name`` is the name chosen for the keyspace.) - -4. At this point, the database tables can be created. - To do this: - - :: - - cqlsh -k keyspace-name -f path-to-kea/share/kea/scripts/cql/dhcpdb_create.cql - - (``path-to-kea`` is the location where Kea is installed.) - -It is also possible to exit Cassandra and create the tables using -the ``kea-admin`` tool. If the tables were not created in Step 4, do so now by -running the ``kea-admin`` tool: - -.. code-block:: console - - $ kea-admin db-init cql -n database-name - -Do not do this if the tables were created in Step 4. ``kea-admin`` -implements rudimentary checks; it will refuse to initialize a database -that contains any existing tables. To start from scratch, -all data must be removed manually. (This process is a manual operation -on purpose, to avoid accidentally irretrievable mistakes by ``kea-admin``.) - -.. _cql-upgrade: - -Upgrading a Cassandra Database From an Earlier Version of Kea -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Sometimes a new Kea version uses a newer database schema, so the -existing database needs to be upgraded. This can be done using the -``kea-admin db-upgrade`` command. - -To check the current version of the database, use the following command: - -.. code-block:: console - - $ kea-admin db-version cql -n database-name - -(See :ref:`kea-database-version` -for a discussion about versioning.) If the version does not match the -minimum required for the new version of Kea (as described in the release -notes), the database needs to be upgraded. - -Before upgrading, please make sure that the database is backed up. The -upgrade process does not discard any data, but depending on the nature -of the changes, it may be impossible to subsequently downgrade to an -earlier version. To perform an upgrade, issue the following command: - -.. code-block:: console - - $ kea-admin db-upgrade cql -n database-name - Using Read-Only Databases With Host Reservations ------------------------------------------------ diff --git a/doc/sphinx/arm/database-connectivity.rst b/doc/sphinx/arm/database-connectivity.rst index 186b55e8a7..6ece2686de 100644 --- a/doc/sphinx/arm/database-connectivity.rst +++ b/doc/sphinx/arm/database-connectivity.rst @@ -82,5 +82,3 @@ Currently the support for each database is: - PostgreSQL only uses the configuration to enable the SSL/TLS support in the client library (libpq). Anything else must be done in the PostgreSQL local configuration. - -- Cassandra/CQL does not support this. diff --git a/doc/sphinx/arm/dhcp4-srv.rst b/doc/sphinx/arm/dhcp4-srv.rst index 994cb8872a..8501d17706 100644 --- a/doc/sphinx/arm/dhcp4-srv.rst +++ b/doc/sphinx/arm/dhcp4-srv.rst @@ -288,7 +288,7 @@ Lease Storage All leases issued by the server are stored in the lease database. There are four database backends available: memfile -(the default), MySQL, PostgreSQL, and Cassandra (deprecated). +(the default), MySQL, PostgreSQL. Memfile - Basic Storage for Leases ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -425,7 +425,7 @@ Lease Database Configuration Lease database configuration is controlled through the ``Dhcp4``/``lease-database`` parameters. The database type must be set to -``memfile``, ``mysql``, ``postgresql``, or ``cql``, e.g.: +``memfile``, ``mysql``, or ``postgresql``, e.g.: :: @@ -433,8 +433,7 @@ Lease database configuration is controlled through the Next, the name of the database to hold the leases must be set; this is the name used when the database was created (see -:ref:`mysql-database-create`, :ref:`pgsql-database-create`, or -:ref:`cql-database-create`). +:ref:`mysql-database-create` or :ref:`pgsql-database-create`). For MySQL or PostgreSQL: @@ -442,12 +441,6 @@ For MySQL or PostgreSQL: "Dhcp4": { "lease-database": { "name": "database-name" , ... }, ... } -For Cassandra: - -:: - - "Dhcp4": { "lease-database": { "keyspace": "database-name" , ... }, ... } - If the database is located on a different system from the DHCPv4 server, the database host name must also be specified: @@ -455,12 +448,6 @@ the database host name must also be specified: "Dhcp4": { "lease-database": { "host": "remote-host-name", ... }, ... } -For Cassandra, multiple contact points can be provided: - -:: - - "Dhcp4": { "lease-database": { "contact-points": "remote-host-name[, ...]" , ... }, ... } - Normally, the database is on the same machine as the DHCPv4 server. In this case, set the value to the empty string: @@ -468,12 +455,6 @@ In this case, set the value to the empty string: "Dhcp4": { "lease-database": { "host" : "", ... }, ... } -For Cassandra: - -:: - - "Dhcp4": { "lease-database": { "contact-points": "", ... }, ... } - Should the database use a port other than the default, it may be specified as well: @@ -504,9 +485,7 @@ If the server is unable to reconnect to the database after making the maximum number of attempts, the server will exit. A value of 0 (the default) disables automatic recovery and the server will exit immediately upon detecting a loss of connectivity (MySQL and PostgreSQL -only). For Cassandra, Kea uses an interface that connects to -all nodes in a cluster at the same time. Any connectivity issues should -be handled by internal Cassandra mechanisms. +only). The number of milliseconds the server waits between attempts to reconnect to the lease database after connectivity has been lost may @@ -518,7 +497,7 @@ also be specified: The default value for MySQL and PostgreSQL is 0, which disables automatic recovery and causes the server to exit immediately upon detecting the -loss of connectivity. The default value for Cassandra is 2000 ms. +loss of connectivity. :: @@ -555,13 +534,6 @@ The possible values are: exclusively as a configuration tool. The host parameter is used by the MySQL and PostgreSQL backends. -Cassandra has a concept of contact points that can be used to -contact the cluster, instead of a single IP or hostname. It takes a -list of comma-separated IP addresses, which may be specified as: - -:: - - "Dhcp4": { "lease-database": { "contact-points" : "192.0.2.1,192.0.2.2", ... }, ... } Finally, the credentials of the account under which the server will access the database should be set: @@ -576,82 +548,6 @@ access the database should be set: If there is no password to the account, set the password to the empty string ``""``. (This is the default.) -.. _cassandra-database-configuration4: - -Cassandra-Specific Parameters -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The Cassandra backend is configured slightly differently. Cassandra has -a concept of contact points that can be used to contact the cluster, -instead of a single IP or hostname. It takes a list of comma-separated -IP addresses, which may be specified as: - -:: - - "Dhcp4": { - "lease-database": { - "type": "cql", - "contact-points": "ip-address1, ip-address2 [,...]", - ... - }, - ... - } - -Cassandra also supports a number of optional parameters: - -- ``reconnect-wait-time`` - governs how long Kea waits before - attempting to reconnect. Expressed in milliseconds. The default is - 2000 [ms]. - -- ``connect-timeout`` - sets the timeout for connecting to a node. - Expressed in milliseconds. The default is 5000 [ms]. - -- ``request-timeout`` - sets the timeout for waiting for a response - from a node. Expressed in milliseconds. The default is 12000 [ms]. - -- ``tcp-keepalive`` - governs the TCP keep-alive mechanism. Expressed - in seconds of delay. If the parameter is not present, the mechanism - is disabled. - -- ``tcp-nodelay`` - enables/disables Nagle's algorithm on connections. - The default is ``true``. - -- ``consistency`` - configures the consistency level. The default is - ``quorum``. Supported values are: ``any``, ``one``, ``two``, ``three``, ``quorum``, ``all``, - ``local-quorum``, ``each-quorum``, ``serial``, ``local-serial``, and ``local-one``. See - `Cassandra - consistency `__ - for more details. - -- ``serial-consistency`` - configures the serial consistency level, which - manages lightweight transaction isolation. The default is ``serial``. - Supported values are: ``any``, ``one``, ``two``, ``three``, ``quorum``, ``all``, ``local-quorum``, - ``each-quorum``, ``serial``, ``local-serial``, and ``local-one``. See `Cassandra serial - consistency `__ - for more details. - -For example, a complex Cassandra configuration with most parameters -specified could look as follows: - -:: - - "Dhcp4": { - "lease-database": { - "type": "cql", - "keyspace": "keatest", - "contact-points": "192.0.2.1, 192.0.2.2, 192.0.2.3", - "port": 9042, - "reconnect-wait-time": 2000, - "connect-timeout": 5000, - "request-timeout": 12000, - "tcp-keepalive": 1, - "tcp-nodelay": true - }, - ... - } - -Similar parameters can be specified for the hosts database. - .. _hosts4-storage: Hosts Storage @@ -663,8 +559,7 @@ lease database. In fact, the Kea server opens independent connections for each purpose, be it lease or hosts information, which gives the most flexibility. Kea can keep leases and host reservations separately, but can also point to the same database. Currently the -supported hosts database types are MySQL, PostgreSQL, and Cassandra, -although support for Cassandra has been deprecated. +supported hosts database types are MySQL and PostgreSQL. The following configuration can be used to configure a connection to MySQL: @@ -762,9 +657,7 @@ If the server is unable to reconnect to the database after making the maximum number of attempts, the server will exit. A value of 0 (the default) disables automatic recovery and the server will exit immediately upon detecting a loss of connectivity (MySQL and PostgreSQL -only). For Cassandra, Kea uses an interface that connects to -all nodes in a cluster at the same time. Any connectivity issues should -be handled by internal Cassandra mechanisms. +only). The number of milliseconds the server waits between attempts to reconnect to the host database after connectivity has been lost may also @@ -776,7 +669,7 @@ be specified: The default value for MySQL and PostgreSQL is 0, which disables automatic recovery and causes the server to exit immediately upon detecting the -loss of connectivity. The default value for Cassandra is 2000 ms. +loss of connectivity. :: @@ -828,8 +721,6 @@ entry, as in: "Dhcp4": { "hosts-databases": [ { "type": "mysql", ... }, ... ], ... } -For Cassandra-specific parameters, see :ref:`cassandra-database-configuration4`. - If the same host is configured both in-file and in-database, Kea does not issue a warning, as it would if both were specified in the same data source. Instead, the host configured in-file has priority over the one configured @@ -4653,15 +4544,15 @@ reserved class has been also assigned. :ref:`subnet-selection-with-class-reservations4` for specific use cases. -.. _reservations4-mysql-pgsql-cql: +.. _reservations4-mysql-pgsql: -Storing Host Reservations in MySQL, PostgreSQL, or Cassandra ------------------------------------------------------------- +Storing Host Reservations in MySQL or PostgreSQL +------------------------------------------------ -Kea can store host reservations in MySQL, PostgreSQL, or -Cassandra. See :ref:`hosts4-storage` for information on how to -configure Kea to use reservations stored in MySQL, PostgreSQL, or -Cassandra. Kea provides a dedicated hook for managing reservations in a +Kea can store host reservations in MySQL or PostgreSQL. +See :ref:`hosts4-storage` for information on how to +configure Kea to use reservations stored in MySQL or PostgreSQL. +Kea provides a dedicated hook for managing reservations in a database; section :ref:`host-cmds` provides detailed information. The `Kea wiki `__ @@ -5300,7 +5191,7 @@ for the same IP address within a given subnet. Setting this parameter to file and in the host database backend, via the ``host-cmds`` hook library. This setting is currently supported by the most popular host database -backends, i.e. MySQL and PostgreSQL. It is not supported for Cassandra, +backends, i.e. MySQL and PostgreSQL. Host Cache (see :ref:`hooks-host-cache`), or the RADIUS backend (see :ref:`hooks-radius`). An attempt to set ``ip-reservations-unique`` to ``false`` when any of these three backends is in use yields a diff --git a/doc/sphinx/arm/dhcp6-srv.rst b/doc/sphinx/arm/dhcp6-srv.rst index 239952b272..ab9891f301 100644 --- a/doc/sphinx/arm/dhcp6-srv.rst +++ b/doc/sphinx/arm/dhcp6-srv.rst @@ -245,7 +245,7 @@ Lease Storage All leases issued by the server are stored in the lease database. There are four database backends available: memfile -(the default), MySQL, PostgreSQL, and Cassandra (deprecated). +(the default), MySQL, PostgreSQL. Memfile - Basic Storage for Leases ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -382,7 +382,7 @@ Lease Database Configuration Lease database configuration is controlled through the ``Dhcp6``/``lease-database`` parameters. The database type must be set to -``memfile``, ``mysql``, or ``postgresql``, or ``cql``, e.g.: +``memfile``, ``mysql``, or ``postgresql``, e.g.: :: @@ -390,8 +390,7 @@ Lease database configuration is controlled through the Next, the name of the database to hold the leases must be set; this is the name used when the database was created (see -:ref:`mysql-database-create`, :ref:`pgsql-database-create`, or -:ref:`cql-database-create`). +:ref:`mysql-database-create` or :ref:`pgsql-database-create`). For MySQL or PostgreSQL: @@ -399,12 +398,6 @@ For MySQL or PostgreSQL: "Dhcp6": { "lease-database": { "name": "database-name" , ... }, ... } -For Cassandra: - -:: - - "Dhcp6": { "lease-database": { "keyspace": "database-name" , ... }, ... } - If the database is located on a different system from the DHCPv6 server, the database host name must also be specified: @@ -412,12 +405,6 @@ the database host name must also be specified: "Dhcp6": { "lease-database": { "host": "remote-host-name", ... }, ... } -For Cassandra, multiple contact points can be provided: - -:: - - "Dhcp6": { "lease-database": { "contact-points": "remote-host-name[, ...]" , ... }, ... } - Normally, the database is on the same machine as the DHCPv6 server. In this case, set the value to the empty string: @@ -425,12 +412,6 @@ In this case, set the value to the empty string: "Dhcp6": { "lease-database": { "host" : "", ... }, ... } -For Cassandra: - -:: - - "Dhcp6": { "lease-database": { "contact-points": "", ... }, ... } - Should the database use a port other than the default, it may be specified as well: @@ -461,9 +442,7 @@ If the server is unable to reconnect to the database after making the maximum number of attempts, the server will exit. A value of 0 (the default) disables automatic recovery and the server will exit immediately upon detecting a loss of connectivity (MySQL and PostgreSQL -only). For Cassandra, Kea uses an interface that connects to -all nodes in a cluster at the same time. Any connectivity issues should -be handled by internal Cassandra mechanisms. +only). The number of milliseconds the server waits between attempts to reconnect to the lease database after connectivity has been lost may @@ -475,7 +454,7 @@ also be specified: The default value for MySQL and PostgreSQL is 0, which disables automatic recovery and causes the server to exit immediately upon detecting the -loss of connectivity. The default value for Cassandra is 2000 ms. +loss of connectivity. :: @@ -512,13 +491,6 @@ The possible values are: exclusively as a configuration tool. The host parameter is used by the MySQL and PostgreSQL backends. -Cassandra has a concept of contact points that can be used to -contact the cluster, instead of a single IP or hostname. It takes a -list of comma-separated IP addresses, which may be specified as: - -:: - - "Dhcp6": { "lease-database": { "contact-points" : "192.0.2.1,192.0.2.2", ... }, ... } Finally, the credentials of the account under which the server will access the database should be set: @@ -533,14 +505,6 @@ access the database should be set: If there is no password to the account, set the password to the empty string ``""``. (This is the default.) -.. _cassandra-database-configuration6: - -Cassandra-Specific Parameters -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The parameters are the same for both DHCPv4 and DHCPv6. See -:ref:`cassandra-database-configuration4` for details. - .. _hosts6-storage: Hosts Storage @@ -552,7 +516,7 @@ lease database. In fact, the Kea server opens independent connections for each purpose, be it lease or hosts information, which gives the most flexibility. Kea can keep leases and host reservations separately, but can also point to the same database. Currently the -supported hosts database types are MySQL, PostgreSQL, and Cassandra. +supported hosts database types are MySQL and PostgreSQL. The following configuration can be used to configure a connection to MySQL: @@ -650,9 +614,7 @@ If the server is unable to reconnect to the database after making the maximum number of attempts, the server will exit. A value of 0 (the default) disables automatic recovery and the server will exit immediately upon detecting a loss of connectivity (MySQL and PostgreSQL -only). For Cassandra, Kea uses an interface that connects to -all nodes in a cluster at the same time. Any connectivity issues should -be handled by internal Cassandra mechanisms. +only). The number of milliseconds the server waits between attempts to reconnect to the host database after connectivity has been lost may also @@ -664,7 +626,7 @@ be specified: The default value for MySQL and PostgreSQL is 0, which disables automatic recovery and causes the server to exit immediately upon detecting the -loss of connectivity. The default value for Cassandra is 2000 ms. +loss of connectivity. :: @@ -716,8 +678,6 @@ entry, as in: "Dhcp6": { "hosts-databases": [ { "type": "mysql", ... }, ... ], ... } -For Cassandra-specific parameters, see :ref:`cassandra-database-configuration4`. - If the same host is configured both in-file and in-database, Kea does not issue a warning, as it would if both were specified in the same data source. Instead, the host configured in-file has priority over the one configured @@ -4032,15 +3992,15 @@ reserved class has been also assigned. :ref:`subnet-selection-with-class-reservations6` for specific use cases. -.. _reservations6-mysql-pgsql-cql: +.. _reservations6-mysql-pgsql: -Storing Host Reservations in MySQL, PostgreSQL, or Cassandra ------------------------------------------------------------- +Storing Host Reservations in MySQL or PostgreSQL +------------------------------------------------ -Kea can store host reservations in MySQL, PostgreSQL, or -Cassandra. See :ref:`hosts6-storage` for information on -how to configure Kea to use reservations stored in MySQL, PostgreSQL, or -Cassandra. Kea provides a dedicated hook for managing reservations in a +Kea can store host reservations in MySQL or PostgreSQL. +See :ref:`hosts6-storage` for information on how to +configure Kea to use reservations stored in MySQL or PostgreSQL. +Kea provides a dedicated hook for managing reservations in a database; section :ref:`host-cmds` provides detailed information. The `Kea wiki `__ @@ -4664,7 +4624,7 @@ allows such reservations to be created both in the Kea configuration file and in the host database backend, via the ``host-cmds`` hook library. This setting is currently supported by the most popular host database -backends, i.e. MySQL and PostgreSQL. It is not supported for Cassandra, +backends, i.e. MySQL and PostgreSQL. Host Cache (see :ref:`hooks-host-cache`), or the RADIUS backend (see :ref:`hooks-radius`). An attempt to set ``ip-reservations-unique`` to ``false`` when any of these three backends is in use yields a @@ -6562,7 +6522,7 @@ option is actually needed. An example configuration looks as follows: "comment": "Those v4-v6 migration technologies are tricky.", "experimental": true, "billing-department": 42, - "contact-points": [ "Alice", "Bob" ] + "contacts": [ "Alice", "Bob" ] } } ] } diff --git a/doc/sphinx/arm/hammer.rst b/doc/sphinx/arm/hammer.rst index a8831f3810..b8a5318d7c 100644 --- a/doc/sphinx/arm/hammer.rst +++ b/doc/sphinx/arm/hammer.rst @@ -83,7 +83,7 @@ To exclude the installation and generation of docs, type: $ ./hammer.py build -p local -x install docs -The basic scope can be extended by mysql, pgsql, cql, native-pkg, +The basic scope can be extended by mysql, pgsql, native-pkg, radius, shell, and forge. .. note:: diff --git a/doc/sphinx/arm/hooks-ha.rst b/doc/sphinx/arm/hooks-ha.rst index eab1d3d193..cb8111b08e 100644 --- a/doc/sphinx/arm/hooks-ha.rst +++ b/doc/sphinx/arm/hooks-ha.rst @@ -1107,9 +1107,9 @@ In some cases, though, it is desirable to disable lease updates and/or database synchronization between the active servers, if the exchange of information about the allocated leases is performed using some other mechanism. Kea supports various database types that can be used to store -leases, including MySQL and PostgreSQL; Cassandra support is deprecated as of Kea 1.9.9. Those databases -include built-in solutions for data replication which are often used by -Kea administrators to provide redundancy. +leases, including MySQL and PostgreSQL. Those databases include built-in +solutions for data replication which are often used by Kea administrators +to provide redundancy. The HA hook library supports such scenarios by disabling lease updates over the control channel and/or lease-database synchronization, leaving diff --git a/doc/sphinx/arm/hooks-host-cache.rst b/doc/sphinx/arm/hooks-host-cache.rst index 5ed37105a2..78c8b5b33a 100644 --- a/doc/sphinx/arm/hooks-host-cache.rst +++ b/doc/sphinx/arm/hooks-host-cache.rst @@ -17,9 +17,8 @@ information in the database. ``kea-dhcp6`` process. In principle, this hook library can be used with any backend that may -introduce performance degradation (MySQL, PostgreSQL, Cassandra, or -RADIUS). Host Cache must be loaded for the RADIUS accounting mechanism -to work. +introduce performance degradation (MySQL, PostgreSQL or RADIUS). Host Cache +must be loaded for the RADIUS accounting mechanism to work. The Host Cache hook library is very simple. It takes only one optional parameter (``maximum``), which defines the maximum number of hosts diff --git a/doc/sphinx/arm/hooks-lease-cmds.rst b/doc/sphinx/arm/hooks-lease-cmds.rst index a91be3f9b7..7ee11a3a02 100644 --- a/doc/sphinx/arm/hooks-lease-cmds.rst +++ b/doc/sphinx/arm/hooks-lease-cmds.rst @@ -4,8 +4,8 @@ ============================== Kea allows users to store lease information in several -backends (memfile, MySQL, PostgreSQL, and Cassandra), and this library -provides an interface that can manipulate leases in a unified, safe way. +backends (memfile, MySQL and PostgreSQL), and this library provides an +interface that can manipulate leases in a unified, safe way. In particular, it allows things that were previously impossible: lease manipulation in memfile while Kea is running, sanity check changes, lease existence checks, and removal of all leases belonging to a @@ -698,9 +698,7 @@ brevity. Generally, the returned list is not sorted in any particular order. Some lease database backends may sort leases in ascending order of addresses, -but the controlling client must not rely on this behavior. In cases of -highly distributed databases, such as Cassandra (now deprecated), ordering may be -inefficient or even impossible. +but the controlling client must not rely on this behavior. The ``count`` parameter contains the number of returned leases on the page. diff --git a/doc/sphinx/arm/hooks-radius.rst b/doc/sphinx/arm/hooks-radius.rst index 6883a0f3ce..825cddc941 100644 --- a/doc/sphinx/arm/hooks-radius.rst +++ b/doc/sphinx/arm/hooks-radius.rst @@ -261,8 +261,6 @@ the following: PostgreSQL: no - Cassandra CQL: - no Google Test: no Google Benchmark: diff --git a/doc/sphinx/arm/hooks.rst b/doc/sphinx/arm/hooks.rst index 7e131c173a..8c99bdfd39 100644 --- a/doc/sphinx/arm/hooks.rst +++ b/doc/sphinx/arm/hooks.rst @@ -357,20 +357,19 @@ loaded by the correct process per the table below. | | |this library do not affect other subnets or configuration | | | |parameters currently used by the server. | +-----------------+---------------+------------------------------------------------------------+ - | Lease Commands | Kea open |This hook library offers a number of | - | | source |commands used to manage leases. Kea can store | - | | |lease information in various backends: memfile, MySQL, | - | | |PostgreSQL, and Cassandra. This library provides a unified | - | | |interface to manipulate leases in an unified, safe | + | Lease Commands | Kea open |This hook library offers a number of commands used to | + | | |manage leases. Kea can store lease information in various | + | | |backends: memfile, MySQL, PostgreSQL. This library provides | + | | |a unified interface to manipulate leases in an unified, safe| | | |way. In particular, it allows manipulation of memfile leases| - | | |while Kea is running, sanity check changes, lease | - | | |existence checks, and removal of all leases belonging to a | - | | |specific subnet. It can also catch obscure errors, like | - | | |the addition of a lease with subnet-id that does not exist | - | | |in the configuration, or configuration of a lease to use an | - | | |address that is outside of the subnet to which it is | - | | |supposed to belong. This library allows easy management of | - | | |user contexts associated with leases. | + | | |while Kea is running, sanity check changes, lease existence | + | | |checks, and removal of all leases belonging to a specific | + | | |subnet. It can also catch obscure errors, like the addition | + | | |of a lease with subnet-id that does not exist in the | + | | |configuration, or configuration of a lease to use an address| + | | |that is outside of the subnet to which it is supposed to | + | | |belong. This library allows easy management of user contexts| + | | |associated with leases. | +-----------------+---------------+------------------------------------------------------------+ | High | Kea open |The risk of DHCP service unavailability can be minimized | | Availability | source |by setting up a pair of DHCP servers in a network. Two | @@ -1528,33 +1527,33 @@ Database Backend ~~~~~~~~~~~~~~~~ Log entries can be inserted into a database when Kea is configured with -database backend support. Kea uses a table named ``logs``, that includes a timestamp -(timeuuid for Cassandra) generated by the database software, and a -text log with the same format as files without the timestamp. +database backend support. Kea uses a table named ``logs``, that includes a +timestamp generated by the database software, and a text log with the same +format as files without the timestamp. Please refer to :ref:`mysql-database` for information on using a MySQL database; -to :ref:`pgsql-database` for PostgreSQL database information; or to -:ref:`cql-database` for information on using a Cassandra (CQL) database. The -``logs`` table is part of the Kea database schemas. +or to :ref:`pgsql-database` for PostgreSQL database information. The ``logs`` +table is part of the Kea database schemas. Configuration parameters are extended by standard lease database parameters as defined in :ref:`database-configuration4`. The ``type`` -parameter should be ``mysql``, ``postgresql``, ``cql``, or ``logfile``; when +parameter should be ``mysql``, ``postgresql``, or ``logfile``; when it is absent or set to ``logfile``, files are used. This database feature is experimental. No specific tools are provided to operate the database, but standard tools may be used, for example, -to dump the logs table from a CQL database: +to dump the logs table from a MYSQL database: :: - $ echo 'SELECT dateOf(timeuuid), log FROM logs;' | cqlsh -k database-name - - system.dateof(timeuuid) | log - ---------------------------------+--------------------------------------- - 2018-01-06 01:02:03.227000+0000 | Address: 192.2.1.100 has been renewed ... - ... - (12 rows) + $ mysql --user keatest --password keatest -e "select * from logs;" + +---------------------+--------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+----+ + | timestamp | address | log | id | + +---------------------+--------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+----+ + | 2022-03-30 17:38:41 | 192.168.50.1 | Address: 192.168.50.1 has been assigned for 0 hrs 10 mins 0 secs to a device with hardware address: hwtype=1 ff:01:02:03:ff:04, client-id: 00:01:02:03:04:05:06 | 31 | + | 2022-03-30 17:38:43 | 192.168.50.1 | Address: 192.168.50.1 has been assigned for 0 hrs 10 mins 0 secs to a device with hardware address: hwtype=1 ff:01:02:03:ff:04, client-id: 00:01:02:03:04:05:06 | 32 | + | 2022-03-30 17:38:45 | 192.168.50.1 | Address: 192.168.50.1 has been assigned for 0 hrs 10 mins 0 secs to a device with hardware address: hwtype=1 ff:01:02:03:ff:04, client-id: 00:01:02:03:04:05:06 | 33 | + +---------------------+--------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+----+ Like all the other database-centric features, forensic logging supports database connection recovery, which can be enabled by setting the ``on-fail`` parameter. @@ -2437,11 +2436,6 @@ users retrieve larger host reservations lists in smaller chunks. For small deployments with few reservations, it is easier to use ``reservation-get-all`` (see :ref:`command-reservation-get-all`). -.. note:: - - ``reservation-get-page`` is not supported by the Cassandra - host backend. - .. _command-reservation-get-by-hostname: The ``reservation-get-by-hostname`` Command diff --git a/doc/sphinx/arm/install.rst b/doc/sphinx/arm/install.rst index b688569816..fed371ba2e 100644 --- a/doc/sphinx/arm/install.rst +++ b/doc/sphinx/arm/install.rst @@ -95,12 +95,6 @@ the system: or on a machine reachable over a network is required. Note that running the unit tests requires a local PostgreSQL server. -- The cpp-driver from DataStax is needed when using the ``--with-cql`` - configuration flag to build Kea with the Cassandra database backend. - In this case, an instance of the Cassandra server running locally - or on a machine reachable over a network is required. Note that running - the unit tests requires a local Cassandra server. - - The FreeRADIUS client library is required to connect to a RADIUS server. This is specified using the ``--with-freeradius`` configuration switch. @@ -212,10 +206,6 @@ options. Some commonly used options are: Build Kea with code to allow it to store leases and host reservations in a PostgreSQL database. - - ``--with-cql`` - Build Kea with code to allow it to store leases and host reservations - in a Cassandra (CQL) database. Support for Cassandra is now deprecated. - - ``--with-log4cplus`` Define the path to find the Log4cplus headers and libraries. Normally this is not necessary. @@ -406,14 +396,12 @@ DHCP Database Installation and Configuration Kea stores its leases in a lease database. The software has been written in a way that makes it possible to choose which database product should be used to store the lease information. Kea supports four -database backends: MySQL, PostgreSQL, Cassandra[1], and memfile. To limit -external dependencies, MySQL, PostgreSQL, and Cassandra support are -disabled by default and only memfile is available. Support for the -optional external database backend must be explicitly included when Kea -is built. This section covers the building of Kea with one of the -optional backends and the creation of the lease database. - -[1] As of Kea 1.9.9, support for Cassandra is deprecated. +database backends: MySQL, PostgreSQL and memfile. To limit external +dependencies, MySQL and PostgreSQL support are disabled by default and only +memfile is available. Support for the optional external database backend must +be explicitly included when Kea is built. +This section covers the building of Kea with one of the optional backends and +the creation of the lease database. .. note:: @@ -476,63 +464,6 @@ the switch: See :ref:`pgsql-database-create` for details regarding PostgreSQL database configuration. -Building with CQL (Cassandra) Support -------------------------------------- - -As of Kea 1.9.9, support for Cassandra is deprecated. It is still -available in current versions, but the support will be removed in a future -version; new users are encouraged to choose an alternative. - -Install Cassandra according to the instructions for the system. The -Cassandra project website contains useful pointers: -https://cassandra.apache.org. - -If a cpp-driver package is available as binary or as source, -simply install or build and install the package. Then build and install -Kea as described in :ref:`installation`. To enable the -Cassandra (CQL) database code, at the "configure" step (see :ref:`configure`), enter: - -.. code-block:: console - - $ ./configure [other-options] --with-cql=path-to-pkg-config - -If ``pkg-config`` is at its standard location (and thus in the -shell path), the path does not need to be specified. If it does not work -(e.g. no pkg-config, package not available in pkg-config with the -cassandra name), the ``cql_config`` script in the tools/ directory -can still be used as described below. - -Download and compile cpp-driver from DataStax. For details regarding -dependencies for building cpp-driver, see the project homepage -https://github.com/datastax/cpp-driver. - -.. code-block:: console - - $ git clone https://github.com/datastax/cpp-driver.git - $ cd cpp-driver - $ mkdir build - $ cd build - $ cmake .. - $ make - -Kea's cpp-driver does not include the cql_config script. A -cql_config script is present in the tools/ directory of the Kea sources. -Before using it, please create a cql_config_defines.sh file in the same -directory (there is an example available in cql_config_define.sh.sample; -copy it over to cql_config_defines.sh and edit the path -specified in it) and change the environment variable CPP_DRIVER_PATH to -point to the directory where the cpp-driver sources are located. Make -sure that appropriate access rights are set on this file; it should be -executable by the system user building Kea. - -Build and install Kea as described in :ref:`installation`, -with the following modification. To enable the Cassandra (CQL) database -code, at the "configure" step (see :ref:`configure`), enter: - -.. code-block:: console - - $ ./configure [other-options] --with-cql=path-to-cql_config - .. include:: hammer.rst @@ -633,21 +564,6 @@ This section lists significant features that have been or will be removed. We tr deprecate features before removing them to signal to current users to plan a migration. New users should not rely on deprecated features. -Cassandra (CQL) Support ------------------------ - -Cassandra is a non-relational NoSQL database. This feature never gained much -traction with users, particularly compared to the level of interest in and deployments of -the alternatives, MySQL and PostgreSQL. - -The non-relational nature of Cassandra makes it exceedingly difficult to implement more complex -DHCP features, such as the configuration backend. Cassandra also introduces performance degradation, -is complicated to set up, and is an ongoing maintenance burden. - -Cassandra support is deprecated as of Kea 1.9.9. The feature will -function as before in the Kea 2.0.x and 2.1.x series, but will print a warning. The -feature will be removed entirely in a future release. - Sysrepo 0.x ----------- diff --git a/doc/sphinx/arm/logging.rst b/doc/sphinx/arm/logging.rst index 8f98dd533e..884754520c 100644 --- a/doc/sphinx/arm/logging.rst +++ b/doc/sphinx/arm/logging.rst @@ -211,8 +211,7 @@ libraries), or hook libraries (open source or premium). | ``kea-dhcp4.database``, | core | Used to log messages | | ``kea-dhcp6.database`` | | relating to general | | | | operations on the | - | | | relational databases | - | | | and Cassandra. | + | | | relational databases. | +----------------------------------+------------------------+--------------------------------+ | ``kea-dhcp4.ddns``, | core | Used by the DHCP | | ``kea-dhcp6.ddns`` | | server to log | diff --git a/doc/sphinx/arm/security.rst b/doc/sphinx/arm/security.rst index 1bdd6492d1..6bb03f596b 100644 --- a/doc/sphinx/arm/security.rst +++ b/doc/sphinx/arm/security.rst @@ -200,9 +200,9 @@ Securing Database Connections ----------------------------- Kea can use an external MySQL or PostgreSQL database to store configuration, -host reservations, or leases, or for forensic logging. (Support for Cassandra is deprecated.) The use -of databases is a popular feature, but it -is optional; it is also possible to store data in a flat file on disk. +host reservations, or leases, or for forensic logging. The use of databases is a +popular feature, but it is optional; it is also possible to store data in a flat +file on disk. When using a database, Kea stores and uses the following credentials to authenticate with the database: username, password, host, port, and database name. **These are stored in clear text @@ -211,11 +211,6 @@ in the configuration file.** Depending on the database configuration, it is also possible to verify whether the system user matches the database username. Consult the MySQL or PostgreSQL manual for details. -Kea does not currently support SSL/TLS connection to databases. There is a community-contributed patch -available for `SSL support for MySQL `_ and -`SSL support for Cassandra `_. If the communication -channel to the database is a concern, the database can be run locally on the Kea server. - Information Leakage Through Logging ----------------------------------- diff --git a/doc/sphinx/grammar/grammar-dhcp4-parser.rst b/doc/sphinx/grammar/grammar-dhcp4-parser.rst index 183dbfce88..c5623c8889 100644 --- a/doc/sphinx/grammar/grammar-dhcp4-parser.rst +++ b/doc/sphinx/grammar/grammar-dhcp4-parser.rst @@ -291,16 +291,9 @@ This grammar is generated from ``dhcp4_parser.yy``. See :ref:`dhcp4` for more de | lfc_interval | readonly | connect_timeout - | contact_points | max_reconnect_tries | reconnect_wait_time | on_fail - | request_timeout - | tcp_keepalive - | tcp_nodelay - | keyspace - | consistency - | serial_consistency | max_row_errors | trust_anchor | cert_file @@ -313,7 +306,6 @@ This grammar is generated from ``dhcp4_parser.yy``. See :ref:`dhcp4` for more de db_type ::= "memfile" | "mysql" | "postgresql" - | "cql" user ::= "user" ":" STRING @@ -333,20 +325,6 @@ This grammar is generated from ``dhcp4_parser.yy``. See :ref:`dhcp4` for more de connect_timeout ::= "connect-timeout" ":" INTEGER - request_timeout ::= "request-timeout" ":" INTEGER - - tcp_keepalive ::= "tcp-keepalive" ":" INTEGER - - tcp_nodelay ::= "tcp-nodelay" ":" BOOLEAN - - contact_points ::= "contact-points" ":" STRING - - keyspace ::= "keyspace" ":" STRING - - consistency ::= "consistency" ":" STRING - - serial_consistency ::= "serial-consistency" ":" STRING - max_reconnect_tries ::= "max-reconnect-tries" ":" INTEGER reconnect_wait_time ::= "reconnect-wait-time" ":" INTEGER diff --git a/doc/sphinx/grammar/grammar-dhcp6-parser.rst b/doc/sphinx/grammar/grammar-dhcp6-parser.rst index 8d56841b8e..d20d827f33 100644 --- a/doc/sphinx/grammar/grammar-dhcp6-parser.rst +++ b/doc/sphinx/grammar/grammar-dhcp6-parser.rst @@ -274,16 +274,9 @@ This grammar is generated from ``dhcp6_parser.yy``. See :ref:`dhcp6` for more de | lfc_interval | readonly | connect_timeout - | contact_points | max_reconnect_tries | reconnect_wait_time | on_fail - | request_timeout - | tcp_keepalive - | tcp_nodelay - | keyspace - | consistency - | serial_consistency | max_row_errors | trust_anchor | cert_file @@ -296,7 +289,6 @@ This grammar is generated from ``dhcp6_parser.yy``. See :ref:`dhcp6` for more de db_type ::= "memfile" | "mysql" | "postgresql" - | "cql" user ::= "user" ":" STRING @@ -326,22 +318,8 @@ This grammar is generated from ``dhcp6_parser.yy``. See :ref:`dhcp6` for more de max_row_errors ::= "max-row-errors" ":" INTEGER - request_timeout ::= "request-timeout" ":" INTEGER - - tcp_keepalive ::= "tcp-keepalive" ":" INTEGER - - tcp_nodelay ::= "tcp-nodelay" ":" BOOLEAN - - contact_points ::= "contact-points" ":" STRING - max_reconnect_tries ::= "max-reconnect-tries" ":" INTEGER - keyspace ::= "keyspace" ":" STRING - - consistency ::= "consistency" ":" STRING - - serial_consistency ::= "serial-consistency" ":" STRING - trust_anchor ::= "trust-anchor" ":" STRING cert_file ::= "cert-file" ":" STRING diff --git a/platforms.rst b/platforms.rst index 85387c96cb..d3511d4608 100644 --- a/platforms.rst +++ b/platforms.rst @@ -107,11 +107,6 @@ Some optional features of Kea have additional dependencies. requires PostgreSQL headers and libraries. This is an optional dependency; Kea can be built without PostgreSQL support. -- To store lease information in a Cassandra database (CQL), - Kea requires Cassandra headers and libraries. This is an optional - dependency; Kea can be built without Cassandra support. (Cassandra - support is deprecated.) - - Integration with RADIUS is provided in Kea via the hook library available to ISC's paid support customers. Use of this library requires the FreeRADIUS-client library to be present on the system where Kea diff --git a/src/bin/admin/admin-utils.sh b/src/bin/admin/admin-utils.sh index 7801eae2af..f0e86f26d6 100644 --- a/src/bin/admin/admin-utils.sh +++ b/src/bin/admin/admin-utils.sh @@ -191,66 +191,6 @@ checked_pgsql_version() { return "${EXIT_CODE}" } -cql_execute() { - query=$1 - shift - - if test -n "${db_port+x}"; then - export CQLSH_PORT="${db_port}" - fi - - if [ $# -gt 1 ]; then - run_command \ - cqlsh "$@" -e "$query" - else - run_command \ - cqlsh -u "${db_user}" -p "${db_password}" -k "${db_name}" \ - ${extra_arguments} -e "${query}" - fi - - if [ "${EXIT_CODE}" -ne 0 ]; then - printf "cqlsh returned with exit status %s\n" "${EXIT_CODE}" - fi - - printf '%s\n' "${OUTPUT}" - return "${EXIT_CODE}" -} - -cql_execute_script() { - file=$1 - shift - - if test -n "${db_port+x}"; then - export CQLSH_PORT="${db_port}" - fi - - if [ $# -gt 1 ]; then - run_command \ - cqlsh "$@" -e "$file" - else - run_command \ - cqlsh -u "${db_user}" -p "${db_password}" -k "${db_name}" \ - ${extra_arguments} -f "${file}" - fi - - if [ "${EXIT_CODE}" -ne 0 ]; then - printf "cqlsh returned with exit status %s\n" "${EXIT_CODE}" - fi - - printf '%s\n' "${OUTPUT}" - return "${EXIT_CODE}" -} - -cql_version() { - run_command \ - cql_execute "SELECT version, minor FROM schema_version" "$@" - version="${OUTPUT}" - select_exit_code="${EXIT_CODE}" - version=$(echo "$version" | grep -A 1 "+" | grep -v "+" | tr -d ' ' | cut -d "|" -f 1-2 | tr "|" ".") - echo "$version" - return "${select_exit_code}" -} - # recount IPv4 leases from scratch _RECOUNT4_QUERY=\ " diff --git a/src/bin/admin/kea-admin.in b/src/bin/admin/kea-admin.in index ce529e3da1..d374d699c6 100644 --- a/src/bin/admin/kea-admin.in +++ b/src/bin/admin/kea-admin.in @@ -72,7 +72,7 @@ COMMAND: Currently supported operations are: - lease-upload: Uploads leases from a CSV file to the database. - stats-recount: Recounts lease statistics. -BACKEND - one of the supported backends: memfile|mysql|pgsql|cql +BACKEND - one of the supported backends: memfile|mysql|pgsql PARAMETERS: Parameters are optional in general, but may be required for specific operations. @@ -307,30 +307,6 @@ pgsql_init() { exit 0 } -cql_init() { - printf 'Checking if there is a database initialized already...\n' - - run_command \ - cql_execute "DESCRIBE tables;" - - # Shellcheck complaints about missing quotes and word splitting here. There - # is no problem here as wc -w always returns a single number. - # shellcheck disable=SC2046 - if test "$(printf '%s' "${OUTPUT}" | grep -c '')" -gt 0; then - printf 'Creating and initializing tables using script %s...\n' "${scripts_dir}/cql/dhcpdb_create.cql" - cql_execute_script "${scripts_dir}/cql/dhcpdb_create.cql" - else - log_error "Expected empty database ${db_name}. Aborting, the following tables are present: - ${OUTPUT}" - exit 2 - fi - - version=$(cql_version) - printf "Database version reported after initialization: %s\n" "$version" - - exit 0 -} - ### Functions that implement database version checking commands memfile_version() { # @todo Implement this? @@ -421,41 +397,6 @@ pgsql_upgrade() { exit 0 } -cql_upgrade() { - version=$(cql_version) - printf "Database version reported before upgrade: %s\n" "$version" - - # Check if the scripts directory exists at all. - if [ ! -d ${scripts_dir}/cql ]; then - log_error "Invalid scripts directory: ${scripts_dir}/cql" - exit 1 - fi - - # Check if directory is readable. - if [ ! -r ${scripts_dir}/cql ]; then - log_error "Directory is not readable: ${scripts_dir}/cql" - exit 1 - fi - - # Check if there are upgrade scripts. - run_command \ - find "${scripts_dir}/cql" -name 'upgrade*.sh' -type f - if [ "${EXIT_CODE}" -eq 0 ]; then # Upgrade scripts are present. - for script in "${scripts_dir}"/cql/upgrade*.sh - do - echo "Processing $script file..." - "${script}" -u "${db_user}" -p "${db_password}" \ - -k "${db_name}" ${extra_arguments} - done - else - echo "No upgrade script available." - fi - - version=$(cql_version) - printf "Database version reported after upgrade: %s\n" "$version" - exit 0 -} - # Utility function which tests if the given file exists and # if so notifies the user and provides them the opportunity # to abort the current command. @@ -606,48 +547,6 @@ pgsql_dump() { exit 0 } -cql_dump() { - # Get the query appropriate to lease version. Explicitly specify all columns - # so that they are returned in expected order. - if [ ${dhcp_version} -eq 4 ]; then - dump_query="SELECT address,hwaddr,client_id,valid_lifetime,expire,subnet_id,fqdn_fwd,fqdn_rev,hostname,state,user_context FROM lease4" - elif [ ${dhcp_version} -eq 6 ]; then - dump_query="SELECT address,duid,valid_lifetime,expire,subnet_id,pref_lifetime,lease_type,iaid,prefix_len,fqdn_fwd,fqdn_rev,hostname,hwaddr,hwtype,hwaddr_source,state,user_context FROM lease6" - else - log_error "lease-dump: lease type ( -4 or -6 ) needs to be specified" - usage - exit 1 - fi - - # Check if file was specified. - if [ "$dump_file" = "" ]; then - log_error "lease-dump: output file needs to be specified with -o" - usage - exit 1 - fi - - # If output file exists, notify user, allow them a chance to bail. - check_file_overwrite "$dump_file" - - # Run query, check for failure. - run_command \ - cql_execute "${dump_query}" - if [ "${EXIT_CODE}" -ne 0 ]; then - log_error "lease-dump: cql_execute failed, exit code ${EXIT_CODE}" - exit 1 - fi - - # Parse and display header. - echo "${OUTPUT}" | head -n 2 | tail -n 1 | sed -e 's/[[:space:]]*//g' | sed -e 's/|/,/g' > "$dump_file" - - # Parse and display contents - done separately from header to allow sorting - # by address. awk script replaces head -n -2 which is not portable. - echo "${OUTPUT}" | tail -n +4 | awk 'n>=2 { print a[n%2] } { a[n%2]=$0; n=n+1 }' | sed -e 's/[[:space:]]*//g' | sed -e 's/|/,/g' | sort -r >> "$dump_file" - - echo "lease${dhcp_version} successfully dumped to ${dump_file}" - exit 0 -} - ######################## functions used in lease-upload ######################## # Finds the position of a column by name, starting with 1. @@ -863,7 +762,7 @@ if [ -z "${backend}" ]; then usage exit 1 fi -is_in_list "${backend}" "memfile mysql pgsql cql" +is_in_list "${backend}" "memfile mysql pgsql" if [ "${_inlist}" -eq 0 ]; then log_error "invalid backend: ${backend}" exit 1 @@ -1024,9 +923,6 @@ case ${command} in pgsql) pgsql_init ;; - cql) - cql_init - ;; esac ;; db-version) @@ -1041,9 +937,6 @@ case ${command} in pgsql) checked_pgsql_version ;; - cql) - cql_version - ;; esac ;; db-upgrade) @@ -1057,9 +950,6 @@ case ${command} in pgsql) pgsql_upgrade ;; - cql) - cql_upgrade - ;; esac ;; lease-dump) @@ -1073,9 +963,6 @@ case ${command} in pgsql) pgsql_dump ;; - cql) - cql_dump - ;; esac ;; lease-upload) @@ -1090,10 +977,6 @@ case ${command} in pgsql) lease_upload ;; - cql) - log_error 'lease-export cql is deprecated' - exit 1 - ;; esac ;; stats-recount) @@ -1107,9 +990,6 @@ case ${command} in pgsql) pgsql_recount ;; - cql) - log_info "cql does not keep lease statistics" - ;; esac ;; esac diff --git a/src/bin/admin/tests/.gitignore b/src/bin/admin/tests/.gitignore index e54c5c3aa7..db7b829283 100644 --- a/src/bin/admin/tests/.gitignore +++ b/src/bin/admin/tests/.gitignore @@ -2,4 +2,3 @@ /memfile_tests.sh /mysql_tests.sh /pgsql_tests.sh -/cql_tests.sh diff --git a/src/bin/admin/tests/Makefile.am b/src/bin/admin/tests/Makefile.am index 091151bc95..8377ddcdd5 100644 --- a/src/bin/admin/tests/Makefile.am +++ b/src/bin/admin/tests/Makefile.am @@ -4,7 +4,6 @@ SUBDIRS = data . EXTRA_DIST = EXTRA_DIST += dhcpdb_create_1.0.mysql EXTRA_DIST += dhcpdb_create_1.0.pgsql -EXTRA_DIST += dhcpdb_create_1.0.cql # Shell tests SHTESTS = @@ -16,9 +15,6 @@ endif if HAVE_PGSQL SHTESTS += pgsql_tests.sh endif -if HAVE_CQL -SHTESTS += cql_tests.sh -endif # Run tests on "make check". check_SCRIPTS = $(SHTESTS) diff --git a/src/bin/admin/tests/cql_tests.sh.in b/src/bin/admin/tests/cql_tests.sh.in deleted file mode 100644 index d1a8e3f7ef..0000000000 --- a/src/bin/admin/tests/cql_tests.sh.in +++ /dev/null @@ -1,507 +0,0 @@ -#!/bin/sh - -# Copyright (C) 2014-2021 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/. - -# shellcheck disable=SC1091 -# SC1091: Not following: ... was not specified as input (see shellcheck -x). - -# shellcheck disable=SC2154 -# SC2154: ... is referenced but not assigned. -# Reason: some variables are sourced. - -# Exit with error if commands exit with non-zero and if undefined variables are -# used. -set -eu - -# Include common test library. -. "@abs_top_builddir@/src/lib/testutils/dhcp_test_lib.sh" - -# Include admin utilities -. "@abs_top_srcdir@/src/bin/admin/admin-utils.sh" - -# Set path to the production schema scripts -db_scripts_dir="@abs_top_srcdir@/src/share/database/scripts" - -# Set location of the kea-admin. -kea_admin="@abs_top_builddir@/src/bin/admin/kea-admin" - -cql_wipe() { - # Wipe the database. - run_command \ - cql_execute_script $db_scripts_dir/cql/dhcpdb_drop.cql - assert_eq 0 "${EXIT_CODE}" "drop table query failed, expected %d, returned %d" -} - -cql_db_init_test() { - test_start "cql.init" - - # Wipe the database. - cql_wipe - - # Create the database - run_command \ - "${kea_admin}" db-init cql -u "${db_user}" -p "${db_password}" -n "${db_name}" -d "${db_scripts_dir}" - assert_eq 0 "${EXIT_CODE}" "kea-admin db-init cql failed, expected exit code: %d, actual: %d" - - # Verify that all the expected tables exist - - # Check schema_version table - run_command \ - cql_execute "SELECT version, minor FROM schema_version;" - assert_eq 0 "${EXIT_CODE}" "schema_version table check failed, expected exit code: %d, actual: %d" - - # Check lease4 table - run_command \ - cql_execute "SELECT address, hwaddr, client_id, valid_lifetime, expire, subnet_id, fqdn_fwd, fqdn_rev, hostname, state, user_context FROM lease4;" - assert_eq 0 "${EXIT_CODE}" "lease4 table check failed, expected exit code: %d, actual: %d" - - # Check lease6 table - run_command \ - cql_execute "SELECT address, duid, valid_lifetime, expire, subnet_id, pref_lifetime, lease_type, iaid, prefix_len, fqdn_fwd, fqdn_rev, hostname, state, user_context FROM lease6;" - assert_eq 0 "${EXIT_CODE}" "lease6 table check failed, expected exit code: %d, actual: %d" - - # Check lease6_types table - run_command \ - cql_execute "SELECT lease_type, name FROM lease6_types;" - assert_eq 0 "${EXIT_CODE}" "lease6_types table check failed, expected exit code: %d, actual: %d" - - # Check lease_state table - run_command \ - cql_execute "SELECT state, name FROM lease_state;" - assert_eq 0 "${EXIT_CODE}" "lease_state table check failed, expected exit code: %d, actual: %d" - - # Trying to create it again should fail. This verifies the db present - # check - echo "Making sure keyspace creation fails the second time..." - run_command \ - "${kea_admin}" db-init cql -u "${db_user}" -p "${db_password}" -n "${db_name}" -d "${db_scripts_dir}" - assert_eq 2 "${EXIT_CODE}" "kea-admin failed to deny db-init, expected exit code: %d, actual: %d" - - # Wipe the database. - cql_wipe - - test_finish 0 -} - -cql_db_version_test() { - test_start "cql.version" - - # Wipe the database. - cql_wipe - - # Create the database. - run_command \ - "${kea_admin}" db-init cql -u "${db_user}" -p "${db_password}" -n "${db_name}" -d "${db_scripts_dir}" - assert_eq 0 "${EXIT_CODE}" "kea-admin db-init cql failed, expected exit code: %d, actual: %d" - - # Verify that kea-admin db-version returns the correct version. - version=$("${kea_admin}" db-version cql -u "${db_user}" -p "${db_password}" -n "${db_name}") - assert_str_eq "5.0" "${version}" "Expected kea-admin to return %s, returned value was %s" - - # Wipe the database. - cql_wipe - - test_finish 0 -} - -cql_upgrade_test() { - test_start "cql.upgrade" - - # Wipe the database. - cql_wipe - - # Initialize database to schema 1.0. - run_command \ - cql_execute_script "@abs_top_srcdir@/src/bin/admin/tests/dhcpdb_create_1.0.cql" - assert_eq 0 "${EXIT_CODE}" "cannot initialize the database, expected exit code: %d, actual: %d" - - run_command \ - "${kea_admin}" db-upgrade cql -u "${db_user}" -p "${db_password}" -n "${db_name}" -d "${db_scripts_dir}" - assert_eq 0 "${EXIT_CODE}" "db-upgrade failed, expected exit code: %d, actual: %d" - - # Wipe the database. - cql_wipe - - test_finish 0 -} - -cql_lease4_dump_test() { - test_start "cql.lease4_dump_test" - - test_dir="@abs_top_srcdir@/src/bin/admin/tests" - output_dir="@abs_top_builddir@/src/bin/admin/tests" - - output_file="$output_dir/data/cql.lease4_dump_test.output.csv" - sorted_file="$output_dir/data/cql.lease4_dump_test.output.sorted.csv" - ref_file="$test_dir/data/cql.lease4_dump_test.reference.csv" - - # Wipe out any residuals from prior failed runs. - if [ -e $output_file ] - then - rm $output_file - fi - - if [ -e $sorted_file ] - then - rm $sorted_file - fi - - # Wipe the database. - cql_wipe - - # Create the database - run_command \ - "${kea_admin}" db-init cql -u "${db_user}" -p "${db_password}" -n "${db_name}" -d "${db_scripts_dir}" - assert_eq 0 "${EXIT_CODE}" "kea-admin db-init cql failed, expected exit code: %d, actual: %d" - - # Insert the reference record. - # -1073741302 corresponds to 192.0.2.10 - # -1073741301 corresponds to 192.0.2.11 - # -1073741300 corresponds to 192.0.2.12 - # 1430694930 corresponds to 2015-04-04 01:15:30 - # 1433464245 corresponds to 2015-05-05 02:30:45 - # 1436173267 corresponds to 2015-06-06 11:01:07 - insert_cql="\ - INSERT INTO lease4 (address, hwaddr, client_id, valid_lifetime, expire, subnet_id, \ - fqdn_fwd, fqdn_rev, hostname, state, user_context) \ - VALUES (-1073741302,textAsBlob('20'),textAsBlob('30'),40,1430694930,50,true,true,'one.example.com', 0, '');\ - INSERT INTO lease4 (address, hwaddr, client_id, valid_lifetime, expire, subnet_id, \ - fqdn_fwd, fqdn_rev, hostname, state, user_context) \ - VALUES (-1073741301,NULL,textAsBlob('123'),40,1433464245,50,true,true,'', 1, '');\ - INSERT INTO lease4 (address, hwaddr, client_id, valid_lifetime, expire, subnet_id, \ - fqdn_fwd, fqdn_rev, hostname, state, user_context) \ - VALUES (-1073741300,textAsBlob('22'),NULL,40,1436173267,50,true,true,'three.example.com', 2, '');" - - run_command \ - cql_execute "$insert_cql" - assert_eq 0 "${EXIT_CODE}" "insert into lease4 failed, expected exit code %d, actual %d" - - # Dump lease4 to output_file. - run_command \ - "${kea_admin}" lease-dump cql -4 -u "${db_user}" -p "${db_password}" -n "${db_name}" -d "${db_scripts_dir}" -o $output_file - assert_eq 0 "${EXIT_CODE}" "kea-admin lease-dump -4 failed, expected exit code %d, actual %d" - - # sort data so we can compare - sort -g "${output_file}" > "${sorted_file}" - - # Compare the dump output to reference file, they should be identical. - run_command \ - cmp -s $sorted_file $ref_file - assert_eq 0 "${EXIT_CODE}" "dump file does not match reference file, expected exit code %d, actual %d" - - # remove the output file. - rm $output_file - - # remove the sorted file. - rm $sorted_file - - # Wipe the database. - cql_wipe - - test_finish 0 -} - -cql_lease6_dump_test() { - test_start "cql.lease6_dump_test" - - test_dir="@abs_top_srcdir@/src/bin/admin/tests" - output_dir="@abs_top_builddir@/src/bin/admin/tests" - - output_file="$output_dir/data/cql.lease6_dump_test.output.csv" - sorted_file="$output_dir/data/cql.lease6_dump_test.output.sorted.csv" - ref_file="$test_dir/data/cql.lease6_dump_test.reference.csv" - - # Wipe out any residuals from prior failed runs. - if [ -e $output_file ] - then - rm $output_file - fi - - if [ -e $sorted_file ] - then - rm $sorted_file - fi - - # Wipe the database. - cql_wipe - - # Create the database. - run_command \ - "${kea_admin}" db-init cql -u "${db_user}" -p "${db_password}" -n "${db_name}" -d "${db_scripts_dir}" - assert_eq 0 "${EXIT_CODE}" "could not create database, expected exit code %d, actual %d" - - # Insert the reference record. - # 1430694930 corresponds to 2015-04-04 01:15:30 - # 1433464245 corresponds to 2015-05-05 02:30:45 - # 1436173267 corresponds to 2015-06-06 11:01:07 - insert_cql="\ - INSERT INTO lease6 (address, duid, valid_lifetime, expire, subnet_id, \ - pref_lifetime, lease_type, iaid, prefix_len, fqdn_fwd, fqdn_rev, hostname, \ - hwaddr, hwtype, hwaddr_source, state, user_context) \ - VALUES ('2001:db8::10',textAsBlob('20'),30,1430694930,40,50,1,60,70,true,true, \ - 'one.example.com',textAsBlob('80'),90,16,0,'');\ - INSERT INTO lease6 (address, duid, valid_lifetime, expire, subnet_id, \ - pref_lifetime, lease_type, iaid, prefix_len, fqdn_fwd, fqdn_rev, hostname, \ - hwaddr, hwtype, hwaddr_source, state, user_context) \ - VALUES ('2001:db8::11',NULL,30,1433464245,40,50,1,60,70,true,true, \ - '',textAsBlob('80'),90,1,1,'');\ - INSERT INTO lease6 (address, duid, valid_lifetime, expire, subnet_id, \ - pref_lifetime, lease_type, iaid, prefix_len, fqdn_fwd, fqdn_rev, hostname, \ - hwaddr, hwtype, hwaddr_source, state, user_context) \ - VALUES ('2001:db8::12',textAsBlob('21'),30,1436173267,40,50,1,60,70,true,true, \ - 'three.example.com',textAsBlob('80'),90,4,2,'');" - - run_command \ - cql_execute "$insert_cql" - assert_eq 0 "${EXIT_CODE}" "insert into lease6 failed, expected exit code %d, actual %d" - - # Dump lease4 to output_file. - run_command \ - "${kea_admin}" lease-dump cql -6 -u "${db_user}" -p "${db_password}" -n "${db_name}" -d "${db_scripts_dir}" -o $output_file - assert_eq 0 "${EXIT_CODE}" "kea-admin lease-dump -6 failed, status code %d" - - # sort data so we can compare - sort -g "${output_file}" > "${sorted_file}" - - # Compare the dump output to reference file, they should be identical. - run_command \ - cmp -s $sorted_file $ref_file - assert_eq 0 "${EXIT_CODE}" "dump file does not match reference file, expected exit code %d, actual %d" - - # remove the output file. - rm $output_file - - # remove the sorted file. - rm $sorted_file - - # Wipe the database. - cql_wipe - - test_finish 0 -} - -# Upgrades an existing schema to a target newer version -# param target_version - desired schema version as "major.minor" -cql_upgrade_schema_to_version() { - target_version=$1 - - # Check if the scripts directory exists at all. - if [ ! -d ${db_scripts_dir}/cql ]; then - log_error "Invalid scripts directory: ${db_scripts_dir}/cql" - exit 1 - fi - - # Check if there are any files in it - num_files=$(find ${db_scripts_dir}/cql/upgrade*.sh -type f | wc -l) - if [ "${num_files}" -eq 0 ]; then - log_error "No scripts in ${db_scripts_dir}/cql?" - exit 1 - fi - - version=$(cql_version) - for script in "${db_scripts_dir}"/cql/upgrade*.sh - do - if [ "${version}" = "${target_version}" ] - then - break - fi - - echo "Processing $script file..." - "${script}" -u "${db_user}" -p "${db_password}" -k "${db_name}" - version=$(cql_version) - done - - echo "Schema upgraded to $version" -} - -# Verifies that you can upgrade from an earlier version and -# that unused subnet ID values in hosts and options tables are -# converted to -1 -cql_unused_subnet_id_test() { - test_start "cql.unused_subnet_id_test" - - # Let's wipe the whole database - cql_wipe - - # We need to create an older database with lease data so we can - # verify the upgrade mechanisms which convert subnet id values - # - # Initialize database to schema 1.0. - cql_execute_script "@abs_top_srcdir@/src/bin/admin/tests/dhcpdb_create_1.0.cql" - - # Now upgrade to schema 2.0, the version just before global HRs - cql_upgrade_schema_to_version 2.0 - - # Now we need insert some hosts to "migrate" for both v4 and v6 - qry="\ - INSERT INTO host_reservations (id, host_identifier_type, host_identifier, host_ipv4_subnet_id, host_ipv6_subnet_id, hostname, option_subnet_id) \ - VALUES (1, 0, textAsBlob('0123456'), 0, 0, 'host0', 0);\ - INSERT INTO host_reservations (id, host_identifier_type, host_identifier, host_ipv4_subnet_id, host_ipv6_subnet_id, hostname, option_subnet_id) \ - VALUES (2, 0, textAsBlob('1123456'), 4, 0, 'Host1', 4);\ - INSERT INTO host_reservations (id, host_identifier_type, host_identifier, host_ipv4_subnet_id, host_ipv6_subnet_id, hostname, option_subnet_id) \ - VALUES (3, 0, textAsBlob('2123456'), 0, 6, 'host2', 6);\ - INSERT INTO host_reservations (id, host_identifier_type, host_identifier, host_ipv4_subnet_id, host_ipv6_subnet_id, hostname, option_subnet_id) \ - VALUES (4, 0, textAsBlob('3123456'), 4, 6, 'Host3', 0);\ - INSERT INTO host_reservations (id, host_identifier_type, host_identifier, host_ipv4_subnet_id, host_ipv6_subnet_id, hostname, option_subnet_id) \ - VALUES (5, 0, textAsBlob('3123456'), -1, 6, 'host3', 6);" - - run_command \ - cql_execute "$qry" - assert_eq 0 "${EXIT_CODE}" "insert hosts failed, expected exit code: %d, actual: %d" - - # Ok, we have a 2.0 database with hosts and options. Let's upgrade it. - run_command \ - "${kea_admin}" db-upgrade cql -u "${db_user}" -p "${db_password}" -n "${db_name}" -d "${db_scripts_dir}" - - # Upgrade should succeed - assert_eq 0 "${EXIT_CODE}" "upgrade failed" - - test_dir="@abs_top_srcdir@/src/bin/admin/tests" - ref_file="$test_dir/data/cql.subnet_id_test.reference.csv" - - output_dir="@abs_top_builddir@/src/bin/admin/tests" - export_file="$output_dir/data/cql.subnet_id_test.csv" - sorted_file="$output_dir/data/cql.subnet_id_test.sorted.csv" - - # Fetch host_reservation data for comparison - echo "Exporting host_reservation data to $export_file ..." - - qry="\ - SELECT id, host_ipv4_subnet_id, host_ipv6_subnet_id, hostname, lower_case_hostname, option_subnet_id\ - FROM hosts WHERE id IN (1,2,3,4,5) ALLOW FILTERING;" - - run_command \ - cql_execute "$qry" - printf '%s\n' "${OUTPUT}" > "${export_file}" - assert_eq 0 "${EXIT_CODE}" "insert hosts failed, expected exit code: %d, actual: %d" - - # sort data so we can compare - grep -F '|' "${export_file}" | sort -V | tr -d " " | sed 's/|/,/g' > $sorted_file - - # Compare the dump output to reference file, they should be identical. - run_command \ - cmp -s $sorted_file $ref_file - assert_eq 0 "${EXIT_CODE}" "export file does not match reference file, expected exit code %d, actual %d" - - # remove the output file. - rm $export_file - - # remove the sorted file. - rm $sorted_file - - # Wipe the database. - cql_wipe - - # Report test success. - test_finish 0 -} - -# Verifies that you can upgrade from an earlier version and -# that all hosts and options from old host_reservation table (version 3.0) are -# converted to new schema (version 4.0) with new key partition key and are -# moved to new hosts table -cql_upgrade_hosts_test() { - test_start "cql.update_hosts_test" - - # Let's wipe the whole database - cql_wipe - - # We need to create an older database with lease data so we can - # verify the upgrade mechanisms which convert subnet id values - # - # Initialize database to schema 1.0. - cql_execute_script "@abs_top_srcdir@/src/bin/admin/tests/dhcpdb_create_1.0.cql" - - # Now upgrade to schema 3.0, the version just before global HRs - cql_upgrade_schema_to_version 3.0 - - # Now we need insert some hosts to "migrate" for both v4 and v6 - test_dir="@abs_top_srcdir@/src/bin/admin/tests" - data_file="$test_dir/data/cql.hosts_data_test.csv" - ref_file="$test_dir/data/cql.hosts_data_test.reference.csv" - - output_dir="@abs_top_builddir@/src/bin/admin/tests" - export_file="$output_dir/data/cql.hosts_test.csv" - sorted_file="$output_dir/data/cql.hosts_test.sorted.csv" - - # Fetch host_reservation data for comparison - echo "Exporting host_reservation data to $export_file ..." - - qry="\ - COPY host_reservations \ - (id, host_identifier, host_identifier_type, host_ipv4_subnet_id, \ - host_ipv6_subnet_id, host_ipv4_address, host_ipv4_next_server, \ - host_ipv4_server_hostname, host_ipv4_boot_file_name, hostname, \ - auth_key, user_context, host_ipv4_client_classes, \ - host_ipv6_client_classes, reserved_ipv6_prefix_address, \ - reserved_ipv6_prefix_length, reserved_ipv6_prefix_address_type, \ - iaid, option_universe, option_code, option_value, \ - option_formatted_value, option_space, option_is_persistent, \ - option_client_class, option_subnet_id, option_user_context, \ - option_scope_id) \ - FROM '$data_file'" - - run_command \ - cql_execute "$qry" - assert_eq 0 "${EXIT_CODE}" "insert hosts failed, expected exit code: %d, actual: %d" - - # Ok, we have a 3.0 database with hosts and options. Let's upgrade it. - run_command \ - "${kea_admin}" db-upgrade cql -u "${db_user}" -p "${db_password}" -n "${db_name}" -d "${db_scripts_dir}" - - # Upgrade should succeed - assert_eq 0 "${EXIT_CODE}" "upgrade failed" - - qry="\ - COPY hosts \ - (id, key, host_identifier, host_identifier_type, host_ipv4_subnet_id, \ - host_ipv6_subnet_id, host_ipv4_address, host_ipv4_next_server, \ - host_ipv4_server_hostname, host_ipv4_boot_file_name, hostname, \ - lower_case_hostname, auth_key, user_context, \ - host_ipv4_client_classes, \ - host_ipv6_client_classes, reserved_ipv6_prefix_address, \ - reserved_ipv6_prefix_length, reserved_ipv6_prefix_address_type, \ - iaid, option_universe, option_code, option_value, \ - option_formatted_value, option_space, option_is_persistent, \ - option_client_class, option_subnet_id, option_user_context, \ - option_scope_id) \ - TO '$export_file'" - - run_command \ - cql_execute "$qry" - assert_eq 0 "${EXIT_CODE}" "insert hosts failed, expected exit code: %d, actual: %d" - - # sort data so we can compare - sort -V "${export_file}" > "${sorted_file}" - - # Compare the dump output to reference file, they should be identical. - run_command \ - cmp -s $sorted_file $ref_file - assert_eq 0 "${EXIT_CODE}" "export file does not match reference file, expected exit code %d, actual %d" - - # remove the output file. - rm $export_file - - # remove the sorted file. - rm $sorted_file - - # Wipe the database. - cql_wipe - - # Report test success. - test_finish 0 -} - - -# Run tests. -cql_db_init_test -cql_db_version_test -cql_upgrade_test -cql_lease4_dump_test -cql_lease6_dump_test -cql_unused_subnet_id_test -cql_upgrade_hosts_test diff --git a/src/bin/admin/tests/data/Makefile.am b/src/bin/admin/tests/data/Makefile.am index bf5af824bd..3e9f88dbbb 100644 --- a/src/bin/admin/tests/data/Makefile.am +++ b/src/bin/admin/tests/data/Makefile.am @@ -1,8 +1,3 @@ EXTRA_DIST = \ lease4_dump_test.reference.csv \ - lease6_dump_test.reference.csv \ - cql.lease4_dump_test.reference.csv \ - cql.lease6_dump_test.reference.csv \ - cql.subnet_id_test.reference.csv \ - cql.hosts_data_test.csv \ - cql.hosts_data_test.reference.csv + lease6_dump_test.reference.csv diff --git a/src/bin/admin/tests/data/cql.hosts_data_test.csv b/src/bin/admin/tests/data/cql.hosts_data_test.csv deleted file mode 100644 index ed73ffa3a3..0000000000 --- a/src/bin/admin/tests/data/cql.hosts_data_test.csv +++ /dev/null @@ -1,24 +0,0 @@ -1105657659805715115,0x4142434445464748494b,1,1,101,0,0,,,host60,,,,,2001:db8::1,128,0,0,1,17,0x,2495,dhcp6,False,,0,,3 -2129388898029710264,0x414243444548,0,2,102,0,0,,,Host61,,,,,2001:db8::1,128,0,0,0,1,0x,312131,vendor-encapsulated-options,False,,0,,3 -2370585748436022247,0x414243444548,0,2,102,0,0,,,host62,,,,,2001:db8::1,128,0,0,0,67,0x,my-boot-file,dhcp4,True,,0,,3 -2459636980433777721,0x4142434445464748494b,1,1,101,0,0,,,,,,,,2001:db8::1,128,0,0,1,59,0x,my-boot-file,dhcp6,True,,0,{ \"comment\": \"a host reservation\" },3 -5403514763123047131,0x414243444547,0,1,101,-1073741307,0,,,,,,,,::,0,-1,-1,0,254,0x,192.0.2.3,dhcp4,False,,0,,3 -5501234819855171334,0x414243444548,0,2,102,0,0,,,,,,,,2001:db8::1,128,0,0,1,17,0x,2495,dhcp6,False,,0,,3 -5747907930644082856,0x4142434445464748494b,1,1,101,0,0,,,,,,,,2001:db8::1,128,0,0,1,1,0x,,isc2,True,,0,,3 -5955003068494074400,0x414243444548,0,2,102,0,0,,,,,,,,2001:db8::1,128,0,0,1,59,0x,my-boot-file,dhcp6,True,,0,,3 -6399013866147252670,0x4142434445464748494b,1,1,101,0,0,,,,,,,,2001:db8::1,128,0,0,1,32,0x,3600,dhcp6,False,,0,,3 -6783601303445960591,0x414243444548,0,2,102,0,0,,,,,,,,2001:db8::1,128,0,0,1,32,0x,3600,dhcp6,False,,0,,3 -7821756928114620236,0x414243444547,0,1,101,-1073741307,0,,,,,,,,::,0,-1,-1,0,23,0x,64,dhcp4,False,,0,,3 -8973539074684426388,0x414243444548,0,2,102,0,0,,,,,,,,2001:db8::1,128,0,0,0,1,0x,,isc,True,,0,,3 -9211831388923168274,0x414243444547,0,1,101,-1073741307,0,,,,,,,,::,0,-1,-1,0,2,0x,"10.0.0.5,10.0.0.3,10.0.3.4",isc,False,,0,,3 --650687214220680074,0x4142434445464748494b,1,1,101,0,0,,,,,,,,2001:db8::1,128,0,0,1,1024,0x,2001:db8:1::1,dhcp6,False,,0,,3 --1123502337428230752,0x414243444548,0,2,102,0,0,,,,,,,,2001:db8::1,128,0,0,0,254,0x,192.0.2.3,dhcp4,False,,0,,3 --1210691761766369036,0x414243444547,0,1,101,-1073741307,0,,,,,,,,::,0,-1,-1,0,67,0x,my-boot-file,dhcp4,True,,0,{ \"comment\": \"a host reservation\" },3 --3907456719587717375,0x414243444548,0,2,102,0,0,,,,,,,,2001:db8::1,128,0,0,0,2,0x,"10.0.0.5,10.0.0.3,10.0.3.4",isc,False,,0,,3 --5169419091664697091,0x4142434445464748494b,1,1,101,0,0,,,,,,,,2001:db8::1,128,0,0,1,2,0x,"3000::1,3000::2,3000::3",isc2,False,,0,,3 --6372549629773775261,0x414243444547,0,1,101,-1073741307,0,,,,,,,,::,0,-1,-1,0,1,0x,312131,vendor-encapsulated-options,False,,0,,3 --6378104957663278797,0x414243444547,0,1,101,-1073741307,0,,,,,,,,::,0,-1,-1,0,1,0x,,isc,True,,0,,3 --7724068518921719729,0x414243444548,0,2,102,0,0,,,,,,,,2001:db8::1,128,0,0,1,1024,0x,2001:db8:1::1,dhcp6,False,,0,,3 --7804940982500935489,0x414243444548,0,2,102,0,0,,,,,,,,2001:db8::1,128,0,0,0,23,0x,64,dhcp4,False,,0,,3 --8100784457292204371,0x414243444548,0,2,102,0,0,,,,,,,,2001:db8::1,128,0,0,1,1,0x,,isc2,True,,0,,3 --8306770918748488616,0x414243444548,0,2,102,0,0,,,,,,,,2001:db8::1,128,0,0,1,2,0x,"3000::1,3000::2,3000::3",isc2,False,,0,,3 diff --git a/src/bin/admin/tests/data/cql.hosts_data_test.reference.csv b/src/bin/admin/tests/data/cql.hosts_data_test.reference.csv deleted file mode 100644 index 86ba92645f..0000000000 --- a/src/bin/admin/tests/data/cql.hosts_data_test.reference.csv +++ /dev/null @@ -1,24 +0,0 @@ -1105657659805715115,5367868710821401223,0x4142434445464748494b,1,1,101,0,0,,,host60,host60,,,,,2001:db8::1,128,0,0,1,17,0x,2495,dhcp6,False,,0,,3 -2129388898029710264,-4885955325122621964,0x414243444548,0,2,102,0,0,,,Host61,host61,,,,,2001:db8::1,128,0,0,0,1,0x,312131,vendor-encapsulated-options,False,,0,,3 -2370585748436022247,-4885955325122621964,0x414243444548,0,2,102,0,0,,,host62,host62,,,,,2001:db8::1,128,0,0,0,67,0x,my-boot-file,dhcp4,True,,0,,3 -2459636980433777721,5367868710821401223,0x4142434445464748494b,1,1,101,0,0,,,,,,,,,2001:db8::1,128,0,0,1,59,0x,my-boot-file,dhcp6,True,,0,{ \"comment\": \"a host reservation\" },3 -5403514763123047131,4012104063077014549,0x414243444547,0,1,101,-1073741307,0,,,,,,,,,::,0,-1,-1,0,254,0x,192.0.2.3,dhcp4,False,,0,,3 -5501234819855171334,-4885955325122621964,0x414243444548,0,2,102,0,0,,,,,,,,,2001:db8::1,128,0,0,1,17,0x,2495,dhcp6,False,,0,,3 -5747907930644082856,5367868710821401223,0x4142434445464748494b,1,1,101,0,0,,,,,,,,,2001:db8::1,128,0,0,1,1,0x,,isc2,True,,0,,3 -5955003068494074400,-4885955325122621964,0x414243444548,0,2,102,0,0,,,,,,,,,2001:db8::1,128,0,0,1,59,0x,my-boot-file,dhcp6,True,,0,,3 -6399013866147252670,5367868710821401223,0x4142434445464748494b,1,1,101,0,0,,,,,,,,,2001:db8::1,128,0,0,1,32,0x,3600,dhcp6,False,,0,,3 -6783601303445960591,-4885955325122621964,0x414243444548,0,2,102,0,0,,,,,,,,,2001:db8::1,128,0,0,1,32,0x,3600,dhcp6,False,,0,,3 -7821756928114620236,4012104063077014549,0x414243444547,0,1,101,-1073741307,0,,,,,,,,,::,0,-1,-1,0,23,0x,64,dhcp4,False,,0,,3 -8973539074684426388,-4885955325122621964,0x414243444548,0,2,102,0,0,,,,,,,,,2001:db8::1,128,0,0,0,1,0x,,isc,True,,0,,3 -9211831388923168274,4012104063077014549,0x414243444547,0,1,101,-1073741307,0,,,,,,,,,::,0,-1,-1,0,2,0x,"10.0.0.5,10.0.0.3,10.0.3.4",isc,False,,0,,3 --650687214220680074,5367868710821401223,0x4142434445464748494b,1,1,101,0,0,,,,,,,,,2001:db8::1,128,0,0,1,1024,0x,2001:db8:1::1,dhcp6,False,,0,,3 --1123502337428230752,-4885955325122621964,0x414243444548,0,2,102,0,0,,,,,,,,,2001:db8::1,128,0,0,0,254,0x,192.0.2.3,dhcp4,False,,0,,3 --1210691761766369036,4012104063077014549,0x414243444547,0,1,101,-1073741307,0,,,,,,,,,::,0,-1,-1,0,67,0x,my-boot-file,dhcp4,True,,0,{ \"comment\": \"a host reservation\" },3 --3907456719587717375,-4885955325122621964,0x414243444548,0,2,102,0,0,,,,,,,,,2001:db8::1,128,0,0,0,2,0x,"10.0.0.5,10.0.0.3,10.0.3.4",isc,False,,0,,3 --5169419091664697091,5367868710821401223,0x4142434445464748494b,1,1,101,0,0,,,,,,,,,2001:db8::1,128,0,0,1,2,0x,"3000::1,3000::2,3000::3",isc2,False,,0,,3 --6372549629773775261,4012104063077014549,0x414243444547,0,1,101,-1073741307,0,,,,,,,,,::,0,-1,-1,0,1,0x,312131,vendor-encapsulated-options,False,,0,,3 --6378104957663278797,4012104063077014549,0x414243444547,0,1,101,-1073741307,0,,,,,,,,,::,0,-1,-1,0,1,0x,,isc,True,,0,,3 --7724068518921719729,-4885955325122621964,0x414243444548,0,2,102,0,0,,,,,,,,,2001:db8::1,128,0,0,1,1024,0x,2001:db8:1::1,dhcp6,False,,0,,3 --7804940982500935489,-4885955325122621964,0x414243444548,0,2,102,0,0,,,,,,,,,2001:db8::1,128,0,0,0,23,0x,64,dhcp4,False,,0,,3 --8100784457292204371,-4885955325122621964,0x414243444548,0,2,102,0,0,,,,,,,,,2001:db8::1,128,0,0,1,1,0x,,isc2,True,,0,,3 --8306770918748488616,-4885955325122621964,0x414243444548,0,2,102,0,0,,,,,,,,,2001:db8::1,128,0,0,1,2,0x,"3000::1,3000::2,3000::3",isc2,False,,0,,3 diff --git a/src/bin/admin/tests/data/cql.lease4_dump_test.reference.csv b/src/bin/admin/tests/data/cql.lease4_dump_test.reference.csv deleted file mode 100644 index 8da31db3ea..0000000000 --- a/src/bin/admin/tests/data/cql.lease4_dump_test.reference.csv +++ /dev/null @@ -1,4 +0,0 @@ -address,hwaddr,client_id,valid_lifetime,expire,subnet_id,fqdn_fwd,fqdn_rev,hostname,state,user_context --1073741302,0x3230,0x3330,40,1430694930,50,True,True,one.example.com,0, --1073741301,null,0x313233,40,1433464245,50,True,True,,1, --1073741300,0x3232,null,40,1436173267,50,True,True,three.example.com,2, diff --git a/src/bin/admin/tests/data/cql.lease6_dump_test.reference.csv b/src/bin/admin/tests/data/cql.lease6_dump_test.reference.csv deleted file mode 100644 index 6e531db529..0000000000 --- a/src/bin/admin/tests/data/cql.lease6_dump_test.reference.csv +++ /dev/null @@ -1,4 +0,0 @@ -address,duid,valid_lifetime,expire,subnet_id,pref_lifetime,lease_type,iaid,prefix_len,fqdn_fwd,fqdn_rev,hostname,hwaddr,hwtype,hwaddr_source,state,user_context -2001:db8::10,0x3230,30,1430694930,40,50,1,60,70,True,True,one.example.com,0x3830,90,16,0, -2001:db8::11,null,30,1433464245,40,50,1,60,70,True,True,,0x3830,90,1,1, -2001:db8::12,0x3231,30,1436173267,40,50,1,60,70,True,True,three.example.com,0x3830,90,4,2, diff --git a/src/bin/admin/tests/data/cql.subnet_id_test.reference.csv b/src/bin/admin/tests/data/cql.subnet_id_test.reference.csv deleted file mode 100644 index 381c1811f4..0000000000 --- a/src/bin/admin/tests/data/cql.subnet_id_test.reference.csv +++ /dev/null @@ -1,6 +0,0 @@ -id,host_ipv4_subnet_id,host_ipv6_subnet_id,hostname,lower_case_hostname,option_subnet_id -1,-1,-1,host0,host0,-1 -2,4,-1,Host1,host1,4 -3,-1,6,host2,host2,6 -4,4,6,Host3,host3,-1 -5,-1,6,host3,host3,6 diff --git a/src/bin/admin/tests/dhcpdb_create_1.0.cql b/src/bin/admin/tests/dhcpdb_create_1.0.cql deleted file mode 100644 index f784517a8f..0000000000 --- a/src/bin/admin/tests/dhcpdb_create_1.0.cql +++ /dev/null @@ -1,193 +0,0 @@ --- Copyright (C) 2018-2021 Internet Systems Consortium, Inc. ("ISC") --- Copyright (C) 2015-2017 Deutsche Telekom AG. - --- Author: Razvan Becheriu - --- Licensed under the Apache License, Version 2.0 (the "License"); --- you may not use this file except in compliance with the License. --- You may obtain a copy of the License at - --- http://www.apache.org/licenses/LICENSE-2.0 - --- Unless required by applicable law or agreed to in writing, software --- distributed under the License is distributed on an "AS IS" BASIS, --- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. --- See the License for the specific language governing permissions and --- limitations under the License. - --- This is the Kea schema 1.0 specification for Cassandra CQL. --- Note: this is outdated version on purpose and it used to test upgrade --- process. Do not update this file to 2.0 or any later. - --- The schema is reasonably portable (with the exception of the engine --- specification, which is Cassandra CQL-specific). Minor changes might be needed for --- other databases. - --- To create the schema, either type the command: - --- cqlsh -u -p -k -f dhcpdb_create.cql - --- ... at the command prompt, or log in to the CQL database and at the "cqlsh>" --- prompt, issue the command: - --- SOURCE dhcpdb_create.cql - --- This script is also called from kea-admin, see kea-admin db-init cql - --- Over time, Kea database schema will evolve. Each version is marked with --- major.minor version. This file is organized sequentially, i.e. database --- is initialized to 1.0, then upgraded to 2.0 etc. This may be somewhat --- sub-optimal, but it ensues consistency with upgrade scripts. (It is much --- easier to maintain init and upgrade scripts if they look the same). --- Since initialization is done only once, its performance is not an issue. - --- This line starts database initialization to 1.0. - --- Holds the IPv4 leases. --- ----------------------------------------------------- --- Table `lease4` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS lease4 ( - address int, - hwaddr blob, - client_id blob, - valid_lifetime bigint, - expire bigint, - subnet_id int, - fqdn_fwd boolean, - fqdn_rev boolean, - hostname varchar, - state int, - PRIMARY KEY ((address)) -); - --- Create search indexes for lease4 table -CREATE INDEX IF NOT EXISTS lease4index1 ON lease4 (client_id); -CREATE INDEX IF NOT EXISTS lease4index2 ON lease4 (subnet_id); -CREATE INDEX IF NOT EXISTS lease4index3 ON lease4 (hwaddr); -CREATE INDEX IF NOT EXISTS lease4index4 ON lease4 (expire); -CREATE INDEX IF NOT EXISTS lease4index5 ON lease4 (state); - --- Holds the IPv6 leases. --- N.B. The use of a VARCHAR for the address is temporary for development: --- it will eventually be replaced by BINARY(16). --- ----------------------------------------------------- --- Table `lease6` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS lease6 ( - address varchar, - valid_lifetime bigint, - expire bigint, - subnet_id int, - pref_lifetime bigint, - duid blob, - iaid int, - lease_type int, - prefix_len int, - fqdn_fwd boolean, - fqdn_rev boolean, - hostname varchar, - hwaddr blob, - hwtype int, - hwaddr_source int, - state int, - PRIMARY KEY ((address)) -); - --- Create search indexes for lease6 table -CREATE INDEX IF NOT EXISTS lease6index1 ON lease6 (duid); -CREATE INDEX IF NOT EXISTS lease6index2 ON lease6 (iaid); -CREATE INDEX IF NOT EXISTS lease6index3 ON lease6 (lease_type); -CREATE INDEX IF NOT EXISTS lease6index4 ON lease6 (subnet_id); -CREATE INDEX IF NOT EXISTS lease6index5 ON lease6 (expire); -CREATE INDEX IF NOT EXISTS lease6index6 ON lease6 (state); - --- ... and a definition of lease6 types. This table is a convenience for --- users of the database - if they want to view the lease table and use the --- type names, they can join this table with the lease6 table. --- Make sure those values match Lease6::LeaseType enum (see src/bin/dhcpsrv/ --- lease_mgr.h) --- ----------------------------------------------------- --- Table `lease6_types` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS lease6_types ( - lease_type int, -- Lease type code. - name varchar, -- Name of the lease type - PRIMARY KEY ((lease_type)) -); -INSERT INTO lease6_types (lease_type, name) VALUES (0, 'IA_NA'); -- Non-temporary v6 addresses -INSERT INTO lease6_types (lease_type, name) VALUES (1, 'IA_TA'); -- Temporary v6 addresses -INSERT INTO lease6_types (lease_type, name) VALUES (2, 'IA_PD'); -- Prefix delegations - --- Kea keeps track of the hardware/MAC address source, i.e. how the address --- was obtained. Depending on the technique and your network topology, it may --- be more or less trustworthy. This table is a convenience for --- users of the database - if they want to view the lease table and use the --- type names, they can join this table with the lease6 table. For details, --- see constants defined in src/lib/dhcp/dhcp/pkt.h for detailed explanation. --- ----------------------------------------------------- --- Table `lease_hwaddr_source` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS lease_hwaddr_source ( - hwaddr_source int, - name varchar, - PRIMARY KEY ((hwaddr_source)) -); - --- Hardware address obtained from raw sockets -INSERT INTO lease_hwaddr_source (hwaddr_source, name) VALUES (1, 'HWADDR_SOURCE_RAW'); - --- Hardware address converted from IPv6 link-local address with EUI-64 -INSERT INTO lease_hwaddr_source (hwaddr_source, name) VALUES (2, 'HWADDR_SOURCE_IPV6_LINK_LOCAL'); - --- Hardware address extracted from client-id (duid) -INSERT INTO lease_hwaddr_source (hwaddr_source, name) VALUES (4, 'HWADDR_SOURCE_DUID'); - --- Hardware address extracted from client address relay option (RFC6939) -INSERT INTO lease_hwaddr_source (hwaddr_source, name) VALUES (8, 'HWADDR_SOURCE_CLIENT_ADDR_RELAY_OPTION'); - --- Hardware address extracted from remote-id option (RFC4649) -INSERT INTO lease_hwaddr_source (hwaddr_source, name) VALUES (16, 'HWADDR_SOURCE_REMOTE_ID'); - --- Hardware address extracted from subscriber-id option (RFC4580) -INSERT INTO lease_hwaddr_source (hwaddr_source, name) VALUES (32, 'HWADDR_SOURCE_SUBSCRIBER_ID'); - --- Hardware address extracted from docsis options -INSERT INTO lease_hwaddr_source (hwaddr_source, name) VALUES (64, 'HWADDR_SOURCE_DOCSIS_CMTS'); - --- Create table holding mapping of the lease states to their names. --- This is not used in queries from the DHCP server but rather in --- direct queries from the lease database management tools. --- ----------------------------------------------------- --- Table `lease_state` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS lease_state ( - state int, - name varchar, - PRIMARY KEY ((state)) -); - --- Insert currently defined state names. -INSERT INTO lease_state (state, name) VALUES (0, 'default'); -INSERT INTO lease_state (state, name) VALUES (1, 'declined'); -INSERT INTO lease_state (state, name) VALUES (2, 'expired-reclaimed'); - --- Finally, the version of the schema. We start at 1.0 during development. --- This table is only modified during schema upgrades. For historical reasons --- (related to the names of the columns in the BIND 10 DNS database file), the --- first column is called "version" and not "major". --- Note: This MUST be kept in step with src/share/database/scripts/cassandra/dhcpdb_create.cql, --- which defines the schema for the unit tests. --- ----------------------------------------------------- --- Table `schema_version` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS schema_version ( - version int, - minor int, - PRIMARY KEY ((version)) -); - -INSERT INTO schema_version (version, minor) VALUES (1, 0); - --- This line concludes database initialization to version 1.0. - diff --git a/src/bin/d2/tests/Makefile.am b/src/bin/d2/tests/Makefile.am index fe9d60f0f0..dc5b8f4641 100644 --- a/src/bin/d2/tests/Makefile.am +++ b/src/bin/d2/tests/Makefile.am @@ -68,9 +68,6 @@ endif if HAVE_PGSQL d2_unittests_LDFLAGS += $(PGSQL_LIBS) endif -if HAVE_CQL -d2_unittests_LDFLAGS += $(CQL_LIBS) -endif d2_unittests_LDFLAGS += $(GTEST_LDFLAGS) d2_unittests_LDADD = $(top_builddir)/src/bin/d2/libd2.la diff --git a/src/bin/dhcp4/Makefile.am b/src/bin/dhcp4/Makefile.am index 10a69c9ec2..f53e75c91b 100644 --- a/src/bin/dhcp4/Makefile.am +++ b/src/bin/dhcp4/Makefile.am @@ -10,9 +10,6 @@ endif if HAVE_PGSQL AM_CPPFLAGS += $(PGSQL_CPPFLAGS) endif -if HAVE_CQL -AM_CPPFLAGS += $(CQL_CPPFLAGS) -endif AM_CXXFLAGS = $(KEA_CXXFLAGS) @@ -63,9 +60,6 @@ endif if HAVE_PGSQL kea_dhcp4_LDADD += $(top_builddir)/src/lib/pgsql/libkea-pgsql.la endif -if HAVE_CQL -kea_dhcp4_LDADD += $(top_builddir)/src/lib/cql/libkea-cql.la -endif kea_dhcp4_LDADD += $(top_builddir)/src/lib/database/libkea-database.la kea_dhcp4_LDADD += $(top_builddir)/src/lib/asiolink/libkea-asiolink.la @@ -86,9 +80,6 @@ endif if HAVE_PGSQL kea_dhcp4_LDFLAGS += $(PGSQL_LIBS) endif -if HAVE_CQL -kea_dhcp4_LDFLAGS += $(CQL_LIBS) -endif kea_dhcp4dir = $(pkgdatadir) diff --git a/src/bin/dhcp4/dhcp4_lexer.cc b/src/bin/dhcp4/dhcp4_lexer.cc index f86b6edcec..86a330d645 100644 --- a/src/bin/dhcp4/dhcp4_lexer.cc +++ b/src/bin/dhcp4/dhcp4_lexer.cc @@ -1,6 +1,6 @@ -#line 1 "dhcp4_lexer.cc" +#line 2 "dhcp4_lexer.cc" -#line 3 "dhcp4_lexer.cc" +#line 4 "dhcp4_lexer.cc" #define YY_INT_ALIGNED short int @@ -691,8 +691,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); /* %% [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 219 -#define YY_END_OF_BUFFER 220 +#define YY_NUM_RULES 211 +#define YY_END_OF_BUFFER 212 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -700,237 +700,229 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[2089] = +static const flex_int16_t yy_accept[2011] = { 0, - 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, - 220, 218, 10, 11, 218, 1, 212, 209, 212, 212, - 218, 211, 210, 218, 218, 218, 218, 218, 205, 206, - 218, 218, 218, 207, 208, 5, 5, 5, 218, 218, - 218, 10, 11, 0, 0, 200, 0, 0, 0, 0, + 204, 204, 0, 0, 0, 0, 0, 0, 0, 0, + 212, 210, 10, 11, 210, 1, 204, 201, 204, 204, + 210, 203, 202, 210, 210, 210, 210, 210, 197, 198, + 210, 210, 210, 199, 200, 5, 5, 5, 210, 210, + 210, 10, 11, 0, 0, 192, 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, 212, 212, - 0, 211, 212, 3, 2, 6, 0, 212, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 9, 0, 201, + 0, 0, 0, 0, 0, 0, 0, 1, 204, 204, + 0, 203, 204, 3, 2, 6, 0, 204, 0, 0, + 0, 0, 0, 0, 4, 0, 0, 9, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, + 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 202, 204, 0, 0, 0, + 0, 0, 0, 194, 196, 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, 93, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 217, 215, 0, 214, 213, 0, 0, 0, - 0, 0, 0, 0, 178, 0, 177, 0, 0, 99, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 209, 207, + 0, 206, 205, 0, 0, 0, 0, 0, 0, 0, + 170, 0, 169, 0, 0, 91, 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, 96, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 88, 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, 0, 0, 0, 0, + 0, 0, 18, 0, 0, 0, 0, 208, 205, 0, + 0, 0, 0, 0, 0, 171, 0, 173, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 95, 0, 0, 0, 0, 0, 0, 77, 0, + 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 37, 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, 76, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, + 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, + 0, 0, 31, 0, 0, 35, 0, 0, 0, 0, + 0, 0, 12, 175, 174, 0, 0, 0, 127, 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, 216, 213, 0, 0, - 0, 0, 0, 0, 179, 0, 181, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 103, 0, 0, 0, 0, 0, 0, 0, 0, 85, - 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 88, 0, 39, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 106, 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, 122, 0, 0, 31, 0, - 0, 36, 0, 0, 0, 0, 0, 0, 12, 183, - 182, 0, 0, 0, 135, 0, 0, 0, 0, 0, + 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 0, 0, 176, 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, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, - 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 83, 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, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, + 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 133, 102, 0, 0, 0, 0, 0, 0, 107, 32, + 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, - 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 109, 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, 0, 0, 0, 91, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 152, 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, 90, 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, 129, 0, 0, 0, 0, + 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, + 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 141, 110, 0, 0, 0, 0, 0, - 0, 115, 32, 0, 0, 0, 0, 0, 47, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 40, 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, 79, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 160, 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, 95, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, - 0, 59, 43, 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, 37, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, + 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, + 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 153, 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, 0, 0, 0, 0, 0, - 58, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 158, 0, 0, 0, 156, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, + + 124, 0, 0, 0, 0, 0, 0, 0, 105, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 118, 22, 0, + 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, + 74, 0, 0, 0, 0, 0, 0, 132, 0, 34, + 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, + 0, 0, 0, 98, 99, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, + + 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, + 0, 75, 89, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, + 0, 159, 0, 0, 157, 0, 148, 147, 0, 0, + 0, 0, 0, 0, 21, 0, 0, 0, 0, 172, + 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 141, 0, 0, 0, 150, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, + 15, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, + 0, 0, 57, 0, 0, 125, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 166, 0, 0, - 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, - 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, - 22, 0, 137, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, - - 0, 0, 82, 0, 0, 0, 0, 0, 0, 140, - 0, 34, 0, 159, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 67, 0, 0, 0, 0, 0, 0, 106, 107, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 0, 0, 0, 0, 0, 60, 0, 0, 0, - 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, + 0, 49, 0, 81, 0, 178, 0, 0, 183, 0, + 101, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 192, 0, 83, - 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, - 167, 0, 0, 0, 165, 0, 156, 155, 0, 0, - 0, 0, 53, 0, 0, 0, 21, 0, 0, 0, - 0, 180, 0, 0, 0, 0, 0, 121, 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, 14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 186, 0, 0, 111, + 27, 0, 0, 0, 146, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 181, 0, 154, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, + 0, 0, 24, 0, 0, 160, 0, 0, 0, 48, + + 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 53, 0, 0, 100, 0, 0, 0, 41, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 131, 0, 0, 0, 26, + 0, 0, 0, 182, 0, 0, 0, 0, 0, 142, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 20, 0, 0, 185, + 73, 0, 44, 0, 0, 0, 179, 177, 0, 28, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 16, 0, 0, 0, 0, 166, 0, 0, 0, + 0, 0, 0, 0, 0, 139, 0, 0, 0, 115, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 86, 0, 0, 0, 0, 0, 45, 0, 0, 144, + 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 167, 13, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 145, 0, 155, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, - 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 138, 0, 15, 0, 0, 41, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, - 0, 0, 0, 0, 0, 65, 0, 0, 133, 0, - 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 57, 0, 89, - 0, 186, 0, 0, 191, 0, 109, 0, 0, 0, - 198, 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, 138, 0, 55, 54, + 19, 0, 163, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 137, 0, 0, 0, 0, 47, 0, 60, 0, 42, + 165, 0, 92, 0, 0, 0, 0, 0, 72, 0, + 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 46, 0, 0, 0, 67, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, - 52, 0, 0, 0, 0, 0, 194, 0, 0, 119, - 27, 0, 0, 0, 54, 154, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, - 162, 0, 0, 0, 0, 0, 0, 0, 0, 25, - 0, 0, 0, 24, 0, 0, 168, 0, 0, 0, - 56, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 29, 0, 0, 68, 0, 0, 0, 0, 143, 0, + 0, 0, 0, 188, 191, 164, 0, 112, 93, 0, + 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, + 0, 0, 0, 135, 0, 0, 0, 140, 0, 66, + 0, 58, 0, 0, 0, 0, 0, 0, 94, 0, + 0, 0, 0, 134, 0, 0, 168, 189, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, + 0, 0, 0, 0, 70, 0, 0, 96, 62, 0, - 0, 0, 0, 61, 0, 0, 108, 0, 0, 0, - 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, - 0, 0, 26, 0, 0, 0, 190, 0, 0, 0, - 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, - 20, 0, 0, 0, 193, 81, 0, 48, 0, 0, - 0, 187, 185, 0, 28, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, - 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, - - 147, 0, 0, 0, 123, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, - 0, 0, 49, 0, 0, 152, 0, 0, 0, 0, - 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 175, 13, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 153, 0, 163, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 146, 0, 63, 62, 19, 0, 171, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, - 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, - 0, 0, 0, 55, 0, 68, 0, 46, 173, 0, - 100, 0, 0, 0, 0, 0, 80, 0, 0, 0, - 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 50, 0, 0, 0, 75, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, - - 0, 76, 0, 0, 0, 0, 151, 0, 0, 0, - 0, 196, 199, 172, 0, 120, 101, 0, 0, 0, - 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, - 0, 143, 0, 0, 0, 148, 0, 74, 0, 66, - 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, - 0, 142, 0, 0, 176, 197, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, - 0, 0, 78, 0, 0, 104, 70, 0, 0, 0, - 0, 0, 0, 69, 0, 144, 195, 0 + 0, 0, 0, 0, 0, 61, 0, 136, 187, 0 } ; static const YY_CHAR yy_ec[256] = @@ -977,494 +969,476 @@ static const YY_CHAR yy_meta[74] = 1, 1, 1 } ; -static const flex_int16_t yy_base[2097] = +static const flex_int16_t yy_base[2019] = { 0, 0, 72, 21, 31, 43, 51, 54, 60, 91, 99, - 2477, 2478, 34, 2473, 145, 0, 207, 2478, 214, 221, - 13, 228, 2478, 2453, 118, 25, 2, 6, 2478, 2478, - 73, 11, 17, 2478, 2478, 2478, 104, 2461, 2414, 0, - 2451, 108, 2468, 24, 262, 2478, 2410, 67, 2416, 84, - 75, 88, 224, 91, 89, 290, 220, 2408, 206, 285, - 236, 204, 197, 60, 232, 2417, 247, 294, 315, 307, - 286, 2400, 212, 325, 354, 328, 2419, 0, 366, 382, - 397, 411, 404, 2478, 0, 2478, 419, 425, 249, 319, - 238, 331, 399, 329, 2478, 2416, 2457, 2478, 404, 2478, + 2397, 2398, 34, 2393, 145, 0, 207, 2398, 214, 221, + 13, 228, 2398, 2373, 118, 25, 2, 6, 2398, 2398, + 73, 11, 17, 2398, 2398, 2398, 104, 2381, 2334, 0, + 2371, 108, 2388, 24, 262, 2398, 2330, 67, 2336, 84, + 75, 88, 224, 91, 89, 290, 220, 2328, 206, 285, + 236, 204, 197, 60, 232, 2337, 247, 294, 315, 307, + 286, 2320, 212, 325, 354, 328, 2339, 0, 366, 382, + 397, 411, 404, 2398, 0, 2398, 419, 425, 249, 319, + 238, 331, 399, 329, 2398, 2336, 2377, 2398, 404, 2398, - 438, 2444, 405, 2413, 415, 10, 409, 311, 411, 418, - 428, 2454, 0, 499, 418, 2396, 2393, 2397, 402, 2393, - 80, 2401, 216, 2397, 2386, 2387, 2392, 78, 2402, 2385, - 2394, 2384, 2393, 221, 2384, 223, 2385, 2383, 400, 2431, - 2435, 2375, 2428, 2368, 174, 2389, 2389, 2383, 278, 2376, - 2374, 2375, 2367, 2372, 2366, 423, 2377, 346, 2362, 2361, - 2375, 405, 2361, 420, 355, 2355, 495, 407, 428, 2376, - 2373, 2374, 428, 2372, 2407, 2406, 433, 2352, 2352, 433, - 2353, 448, 2345, 2362, 2354, 0, 457, 471, 469, 471, - 477, 483, 2353, 2478, 2398, 507, 2347, 475, 499, 505, + 438, 2364, 405, 2333, 415, 10, 409, 311, 411, 418, + 428, 2374, 0, 499, 418, 2316, 2313, 2317, 402, 2313, + 80, 2321, 216, 2307, 2308, 2313, 78, 2323, 2306, 2315, + 2305, 2314, 221, 2305, 223, 2306, 2304, 400, 2352, 2356, + 2296, 2349, 2289, 174, 2310, 2310, 2304, 278, 2297, 2295, + 2296, 2288, 2293, 2287, 423, 2298, 346, 2283, 2282, 2296, + 405, 2282, 420, 355, 2276, 495, 407, 428, 2297, 2294, + 2295, 428, 2293, 2328, 2327, 2273, 2273, 433, 2274, 433, + 2266, 2283, 2275, 0, 446, 462, 471, 464, 476, 481, + 2274, 2398, 2319, 486, 2268, 466, 479, 485, 2322, 510, - 2401, 510, 2400, 504, 2399, 2478, 2478, 550, 2398, 515, - 2357, 2349, 2336, 2347, 2351, 2352, 2332, 2343, 2347, 2344, - 2343, 511, 520, 2386, 2380, 2344, 2325, 2322, 2330, 2325, - 2339, 2335, 2326, 2322, 2334, 2334, 2325, 2309, 2313, 2326, - 2328, 2325, 2317, 2307, 2325, 2478, 2320, 466, 487, 2305, - 2314, 2356, 2303, 2313, 2316, 551, 2312, 2351, 2296, 2298, - 2309, 2347, 2292, 2350, 2304, 2284, 2299, 533, 2289, 2295, - 535, 2286, 2284, 2284, 2290, 2281, 2280, 2287, 2277, 2336, - 2292, 2291, 2285, 526, 2292, 2287, 2279, 2269, 2284, 2283, - 2278, 2282, 528, 2280, 2266, 2272, 2279, 2261, 457, 2266, + 2321, 502, 2320, 2398, 2398, 548, 2319, 521, 2278, 2270, + 2257, 2268, 2272, 2273, 2253, 2264, 2268, 2265, 2264, 478, + 518, 2302, 2266, 2247, 2244, 2252, 2247, 2261, 2257, 2248, + 2244, 2256, 2256, 2247, 2231, 2235, 2248, 2250, 2247, 2239, + 2229, 2247, 2398, 2242, 505, 2280, 2226, 2235, 2277, 2224, + 2234, 2237, 518, 2233, 2272, 2217, 2219, 2230, 2268, 2213, + 2271, 2225, 2205, 2220, 542, 2210, 2216, 524, 2207, 2205, + 2205, 2211, 2202, 2201, 2208, 2198, 2257, 2213, 2212, 2206, + 498, 2213, 2208, 2200, 2190, 2205, 2204, 2199, 2203, 2184, + 2200, 2186, 2192, 2199, 2181, 457, 2186, 2183, 2182, 2177, - 2263, 2262, 581, 2257, 2271, 543, 2270, 2313, 2272, 577, - 2263, 562, 2478, 2478, 563, 2478, 2478, 2250, 550, 561, - 2298, 576, 2308, 570, 2478, 2307, 2478, 2301, 627, 2478, - 565, 2241, 2250, 2298, 2258, 2241, 2258, 2294, 2254, 2237, - 2243, 2295, 2250, 2253, 2244, 2247, 2242, 562, 2478, 2244, - 2288, 2282, 2240, 2237, 599, 2243, 2283, 2218, 2276, 2229, - 2224, 2221, 2272, 2229, 2218, 2234, 2268, 2214, 621, 2228, - 2213, 2226, 2224, 2222, 2211, 2221, 2220, 2215, 2222, 2217, - 2213, 557, 2211, 2214, 2209, 2195, 2207, 2203, 2253, 560, - 2247, 2478, 2211, 2245, 2195, 2194, 2193, 2186, 2188, 2200, + 2191, 551, 2190, 2233, 2192, 529, 2183, 552, 2398, 2398, + 554, 2398, 2398, 2170, 536, 543, 2218, 559, 2228, 553, + 2398, 2227, 2398, 2221, 603, 2398, 552, 2161, 2170, 2218, + 2178, 2161, 2178, 2214, 2174, 2157, 2163, 2215, 2170, 2173, + 2164, 2167, 2153, 2164, 2208, 2202, 2160, 2157, 594, 2163, + 2203, 2138, 2196, 2149, 2144, 2141, 2192, 2149, 2138, 2154, + 2188, 2134, 601, 2148, 2133, 2146, 2144, 2142, 2142, 2141, + 2136, 2143, 2138, 2134, 570, 2132, 2135, 2130, 2116, 2128, + 2124, 2174, 563, 2168, 2398, 2132, 2166, 2116, 2115, 2114, + 2107, 2109, 2121, 2112, 2119, 2100, 2117, 2112, 581, 2159, - 2191, 2198, 2179, 2196, 2191, 603, 2238, 2191, 2188, 2191, - 2478, 2190, 2179, 2179, 2191, 571, 2166, 2167, 2188, 606, - 2170, 2221, 2166, 2180, 2183, 2178, 2164, 2176, 2175, 2174, - 2169, 2211, 2171, 2170, 2169, 2168, 580, 2211, 2170, 2150, - 2208, 2478, 2150, 2149, 611, 2162, 2478, 2478, 2161, 2150, - 2142, 593, 2201, 2200, 2478, 2199, 2478, 627, 675, 601, - 2198, 2140, 2151, 2190, 2143, 2145, 2147, 2134, 2142, 2130, - 2478, 2135, 2128, 2140, 2143, 2126, 2141, 2128, 2127, 2478, - 606, 2129, 2126, 600, 2124, 2126, 2478, 2171, 2133, 2130, - 2115, 2128, 2123, 617, 2130, 2118, 2111, 2162, 2478, 2109, + 2112, 2109, 2112, 2398, 2111, 2100, 2100, 2112, 547, 2087, + 2088, 2109, 2100, 2090, 2141, 2086, 2100, 2099, 2085, 2097, + 2096, 2095, 2090, 2132, 2092, 2091, 2090, 2089, 2132, 2091, + 2071, 2129, 2398, 2071, 2070, 628, 2083, 2398, 2398, 2082, + 2071, 2063, 572, 2122, 2121, 2398, 2120, 2398, 608, 656, + 599, 2119, 2061, 2072, 2111, 2064, 2066, 2068, 2055, 2063, + 2051, 2398, 2056, 2049, 2061, 2064, 2051, 2050, 2398, 595, + 2052, 2049, 613, 2047, 2049, 2398, 2094, 2056, 2053, 2038, + 2051, 2046, 632, 2053, 2041, 2034, 2085, 2398, 2032, 2048, + 2082, 2043, 2040, 2041, 2025, 2034, 2076, 2027, 2026, 2021, - 2125, 2159, 2120, 2117, 2118, 2102, 2111, 2118, 2152, 2103, - 2102, 2097, 2096, 2147, 2091, 588, 2110, 2084, 2091, 2096, - 2106, 2140, 2144, 2478, 2089, 2085, 2083, 2092, 2091, 2085, - 2092, 2076, 2076, 2086, 2074, 2088, 2088, 2076, 2072, 2070, - 2478, 2127, 2478, 2069, 2080, 2119, 2064, 2069, 2078, 2072, - 2066, 2075, 2117, 2111, 2073, 2056, 2056, 2051, 2071, 2046, - 2052, 2057, 652, 2059, 2063, 2046, 2104, 2045, 2045, 2096, - 2041, 2042, 2041, 2053, 2042, 2478, 2052, 2089, 2478, 2040, - 2038, 2478, 2049, 2085, 2045, 2029, 2046, 2086, 2478, 2478, - 2478, 646, 646, 676, 2478, 2037, 2036, 294, 2043, 2023, + 2020, 2071, 2015, 596, 2034, 2008, 2015, 2020, 2030, 2064, + 2068, 2398, 2013, 2009, 2007, 2016, 2015, 2009, 2016, 2000, + 2000, 2010, 1998, 2012, 2012, 2000, 1996, 1994, 2398, 2051, + 2398, 1993, 2004, 2043, 1988, 1993, 2002, 1996, 1990, 1999, + 2041, 2035, 1997, 1981, 1976, 1996, 1971, 1977, 630, 1985, + 1989, 1972, 2030, 1971, 1971, 2022, 1967, 1968, 1967, 2398, + 1980, 2017, 2398, 1968, 1966, 2398, 1977, 2013, 1973, 1957, + 1974, 2014, 2398, 2398, 2398, 631, 613, 679, 2398, 1965, + 1964, 294, 1971, 1951, 1961, 2003, 1948, 2001, 1946, 1956, + 1998, 1943, 1950, 1943, 1955, 1937, 1937, 1952, 1951, 625, - 2033, 2075, 2020, 2073, 2018, 2028, 2070, 2015, 2014, 2013, - 2020, 2013, 2025, 2007, 2007, 2022, 2021, 633, 2020, 2019, - 2019, 2001, 2006, 2047, 2014, 2011, 2005, 2050, 1994, 2010, - 2009, 2478, 1994, 1991, 2049, 2004, 1996, 2002, 1993, 2001, - 1986, 2002, 1984, 1996, 1988, 1996, 598, 1978, 1977, 1971, - 1976, 1991, 1988, 1989, 1968, 1978, 1984, 2027, 1982, 1974, - 1965, 2478, 1966, 1968, 1977, 1969, 1974, 2013, 2012, 1963, - 16, 1972, 2009, 1954, 2007, 1954, 1957, 1950, 2478, 1964, - 1943, 1947, 1961, 1953, 1998, 1950, 1957, 1995, 2478, 1940, - 1954, 1938, 1952, 1955, 1936, 1988, 1987, 1986, 1933, 1984, + 1950, 1949, 1949, 1931, 1936, 1977, 1944, 1941, 1935, 1980, + 1924, 1940, 1939, 2398, 1924, 1921, 1979, 1934, 1926, 1932, + 1923, 1931, 1916, 1932, 1914, 1926, 1918, 639, 1909, 1908, + 1902, 1907, 1922, 1919, 1920, 1899, 1909, 1915, 1958, 1913, + 1905, 1896, 2398, 1897, 1899, 1908, 1900, 1905, 1944, 1943, + 1894, 16, 1903, 1940, 1885, 1938, 1885, 1888, 1881, 2398, + 1895, 1874, 1878, 1892, 1884, 1929, 1881, 1888, 1926, 2398, + 1871, 1885, 1884, 1887, 1868, 1920, 1919, 1866, 1917, 1862, + 1915, 1914, 2398, 1859, 1873, 1872, 691, 1873, 1872, 1908, + 1872, 1867, 1850, 1855, 1857, 2398, 1863, 1853, 2398, 629, - 1929, 1982, 1981, 2478, 1926, 1940, 1939, 678, 1940, 1939, - 1936, 1936, 1973, 1937, 1932, 1915, 1920, 1918, 2478, 203, - 441, 2478, 646, 669, 476, 606, 647, 659, 654, 643, - 640, 655, 656, 703, 679, 710, 670, 680, 707, 670, - 719, 721, 676, 676, 686, 691, 677, 680, 691, 691, - 675, 732, 685, 695, 698, 736, 699, 692, 696, 693, - 695, 742, 748, 706, 707, 2478, 710, 706, 697, 712, - 717, 714, 717, 716, 704, 718, 719, 717, 725, 761, - 723, 768, 769, 719, 711, 721, 768, 726, 776, 2478, - 777, 730, 732, 728, 722, 725, 783, 779, 742, 731, + 651, 1847, 1845, 1852, 1862, 1854, 1841, 1835, 1847, 1846, + 1891, 644, 1895, 1853, 661, 1884, 20, 195, 209, 446, + 545, 562, 566, 595, 618, 628, 685, 640, 650, 663, + 702, 665, 658, 662, 659, 661, 708, 714, 672, 673, + 2398, 676, 672, 663, 678, 683, 680, 683, 682, 670, + 684, 682, 690, 726, 688, 733, 734, 684, 676, 686, + 733, 691, 741, 2398, 742, 695, 697, 693, 687, 690, + 748, 744, 707, 696, 709, 2398, 699, 710, 699, 712, + 702, 715, 759, 760, 703, 714, 699, 722, 701, 707, + 762, 726, 710, 722, 766, 767, 714, 769, 733, 728, - 744, 2478, 734, 745, 734, 747, 737, 750, 794, 795, - 738, 749, 734, 757, 736, 742, 797, 761, 745, 757, - 801, 802, 803, 750, 805, 769, 764, 771, 770, 768, - 753, 765, 767, 773, 763, 761, 2478, 825, 784, 785, - 775, 787, 777, 780, 791, 776, 783, 789, 781, 795, - 835, 811, 798, 803, 800, 782, 789, 803, 848, 805, - 802, 803, 801, 810, 2478, 806, 801, 816, 813, 799, - 806, 805, 803, 822, 819, 807, 814, 815, 824, 828, - 865, 827, 817, 815, 814, 825, 821, 877, 824, 835, - 820, 821, 827, 843, 833, 2478, 843, 843, 836, 847, + 733, 731, 716, 728, 729, 736, 726, 724, 2398, 789, + 747, 748, 738, 741, 752, 737, 744, 750, 742, 756, + 796, 772, 759, 764, 761, 743, 750, 764, 809, 766, + 763, 764, 762, 771, 2398, 767, 762, 777, 774, 760, + 762, 781, 778, 766, 773, 774, 783, 787, 823, 785, + 776, 774, 773, 784, 780, 836, 783, 794, 779, 780, + 786, 802, 792, 2398, 802, 802, 795, 806, 804, 849, + 791, 793, 808, 795, 794, 856, 813, 799, 805, 803, + 2398, 2398, 813, 818, 823, 811, 821, 823, 2398, 2398, + 824, 811, 829, 816, 810, 2398, 815, 833, 820, 870, - 845, 890, 832, 834, 849, 836, 835, 897, 898, 855, - 841, 847, 845, 2478, 2478, 855, 860, 865, 853, 863, - 865, 2478, 2478, 866, 853, 871, 858, 852, 2478, 857, - 875, 862, 912, 863, 915, 861, 865, 883, 924, 2478, - 2478, 869, 873, 872, 869, 929, 882, 872, 873, 869, - 882, 893, 877, 895, 890, 891, 893, 886, 888, 889, - 885, 891, 891, 893, 908, 949, 906, 911, 888, 911, - 897, 896, 2478, 903, 904, 918, 908, 906, 919, 957, - 915, 905, 920, 921, 908, 940, 948, 917, 912, 967, - 968, 930, 970, 2478, 976, 919, 935, 939, 980, 930, + 821, 873, 819, 823, 841, 882, 2398, 2398, 827, 831, + 830, 827, 887, 840, 830, 831, 827, 840, 851, 852, + 847, 848, 850, 843, 845, 841, 847, 847, 849, 864, + 905, 862, 867, 844, 867, 853, 852, 2398, 859, 860, + 860, 873, 911, 869, 859, 874, 875, 862, 894, 902, + 871, 866, 921, 922, 884, 924, 2398, 930, 873, 889, + 893, 934, 884, 883, 878, 879, 891, 886, 882, 885, + 886, 896, 905, 942, 889, 908, 900, 895, 953, 910, + 911, 902, 2398, 916, 905, 908, 916, 918, 903, 919, + 913, 960, 926, 910, 911, 2398, 927, 930, 913, 972, - 929, 924, 925, 937, 944, 933, 934, 930, 933, 934, - 945, 954, 991, 938, 956, 948, 943, 1001, 958, 959, - 950, 2478, 964, 953, 956, 964, 966, 951, 967, 961, - 1008, 974, 958, 959, 2478, 975, 978, 961, 1020, 963, - 982, 2478, 2478, 981, 984, 970, 965, 983, 1023, 981, - 977, 974, 1027, 1028, 990, 976, 994, 993, 994, 980, - 995, 987, 994, 984, 1002, 1001, 988, 1005, 2478, 997, - 1003, 1006, 1051, 2478, 1000, 1005, 1049, 1001, 1013, 1007, - 1011, 1009, 1007, 1009, 1019, 1064, 1008, 1013, 1010, 1010, - 1069, 1013, 1025, 2478, 1013, 1021, 1019, 1070, 1012, 1033, + 915, 934, 2398, 933, 936, 922, 917, 935, 975, 933, + 929, 926, 979, 980, 942, 928, 946, 945, 946, 932, + 947, 939, 946, 936, 954, 953, 940, 957, 2398, 949, + 955, 958, 1003, 2398, 952, 957, 1001, 953, 965, 959, + 960, 958, 960, 970, 1015, 959, 960, 960, 1019, 963, + 975, 2398, 963, 971, 969, 1020, 962, 983, 969, 970, + 977, 985, 976, 981, 991, 992, 997, 1038, 1010, 1015, + 997, 994, 990, 1004, 987, 987, 2398, 988, 1048, 991, + 2398, 1002, 992, 1012, 1011, 1002, 1013, 1056, 1017, 1010, + 1014, 1018, 1001, 1018, 1009, 1064, 1011, 2398, 1061, 1010, - 1020, 1021, 1030, 1042, 1029, 1037, 1028, 1033, 1043, 1044, - 1049, 1090, 1062, 1067, 1049, 1046, 1042, 1056, 1039, 1039, - 2478, 1040, 1100, 1043, 2478, 1054, 1044, 1064, 1063, 1054, - 1043, 1060, 1067, 1110, 1071, 1064, 1068, 1072, 1055, 1072, - 1063, 1118, 1067, 2478, 1117, 1064, 1067, 1085, 1067, 1068, - 1068, 1089, 1086, 1091, 1092, 1078, 1086, 1095, 1075, 1090, - 1097, 1139, 2478, 1140, 1141, 1083, 1093, 1103, 1087, 1107, - 1095, 1091, 1098, 1107, 1095, 1102, 1103, 1115, 1156, 1103, - 1101, 1103, 1120, 1161, 1111, 1110, 1116, 1114, 1112, 1107, - 1168, 1119, 1170, 1166, 1172, 2478, 1129, 1122, 1113, 1132, + 1013, 1031, 1013, 1014, 1014, 1035, 1032, 1037, 1038, 1024, + 1032, 1041, 1021, 1036, 1043, 1085, 2398, 1086, 1087, 1029, + 1039, 1049, 1033, 1053, 1041, 1037, 1044, 1053, 1041, 1048, + 1049, 1061, 1102, 1049, 1047, 1049, 1066, 1107, 1057, 1056, + 1062, 1060, 1058, 1053, 1114, 1065, 1116, 1112, 1118, 2398, + 1075, 1068, 1059, 1078, 1066, 1076, 1077, 1073, 1086, 1086, + 2398, 1070, 1066, 1073, 2398, 1074, 1134, 1073, 1092, 1093, + 1095, 1134, 1087, 1141, 1142, 1092, 1090, 1101, 1100, 1084, + 1089, 1107, 2398, 1129, 1120, 1152, 1092, 1114, 1109, 1109, + 1113, 1158, 2398, 1101, 1101, 1104, 1121, 1116, 1120, 1115, - 1120, 1130, 1127, 1132, 1128, 1141, 1141, 2478, 1125, 1128, - 1123, 1129, 2478, 1130, 1190, 1129, 1148, 1149, 1151, 1190, - 1143, 1197, 1198, 1151, 1136, 1150, 1148, 1159, 1158, 1142, - 1147, 1165, 2478, 1187, 1178, 1210, 1150, 1172, 1167, 1167, - 1171, 1216, 2478, 1159, 1159, 1162, 1179, 1174, 1178, 1223, - 1171, 1175, 2478, 1167, 1184, 1164, 1185, 1175, 1227, 1180, - 2478, 1193, 1193, 1231, 1179, 1188, 1235, 1193, 1198, 1184, - 1244, 1187, 1198, 1190, 1196, 1192, 1210, 1211, 1212, 2478, - 2478, 1211, 2478, 1196, 1207, 1198, 1217, 1210, 1208, 1201, - 1213, 1257, 1221, 1210, 1217, 1218, 1224, 2478, 1217, 1269, + 2398, 1107, 1124, 1104, 1125, 1115, 1166, 1119, 2398, 1133, + 1133, 1171, 1118, 1127, 1175, 1133, 1138, 1124, 1184, 1127, + 1138, 1130, 1136, 1132, 1150, 1151, 1152, 2398, 2398, 1151, + 2398, 1136, 1147, 1138, 1157, 1150, 1148, 1141, 1153, 1197, + 1161, 1150, 1157, 1158, 1164, 2398, 1157, 1209, 1150, 1211, + 2398, 1212, 1154, 1160, 1167, 1211, 1173, 2398, 1174, 2398, + 1161, 2398, 1163, 1177, 1182, 1165, 1224, 1181, 1182, 1222, + 1174, 1179, 1230, 1226, 1179, 1233, 2398, 1180, 1235, 1236, + 1193, 1194, 1196, 2398, 2398, 1235, 1184, 1200, 1243, 1185, + 1197, 1202, 1217, 1248, 2398, 1205, 1198, 1207, 1198, 1209, - 1210, 1271, 2478, 1272, 1214, 1220, 1227, 1271, 1233, 2478, - 1234, 2478, 1221, 2478, 1223, 1237, 1242, 1225, 1284, 1241, - 1242, 1243, 1283, 1235, 1240, 1291, 1244, 1288, 1241, 1295, - 2478, 1242, 1297, 1298, 1255, 1256, 1258, 2478, 2478, 1241, - 1303, 1299, 1248, 1264, 1307, 1249, 1261, 1266, 1281, 1312, - 2478, 1269, 1262, 1271, 1262, 1273, 2478, 1318, 1255, 1266, - 1281, 1317, 1269, 2478, 1265, 1281, 1282, 1283, 1280, 1324, - 1287, 1277, 1287, 1293, 1280, 1276, 1336, 1332, 1290, 1335, - 1342, 1299, 2478, 1300, 1293, 1302, 1303, 1300, 1290, 1293, - 1293, 1298, 1353, 1300, 1355, 1298, 1303, 1358, 1354, 1295, + 2398, 1254, 1191, 1202, 1217, 1253, 1205, 1216, 1217, 1218, + 1215, 1259, 1222, 1212, 1222, 1228, 1215, 1211, 1271, 1267, + 1225, 1269, 1276, 1233, 2398, 1234, 1227, 1237, 1238, 1235, + 1225, 1228, 1228, 1233, 1288, 1235, 1290, 1233, 1238, 1293, + 1289, 1230, 1245, 1238, 1242, 1255, 1256, 1254, 1303, 2398, + 1257, 2398, 2398, 1262, 1254, 1264, 1249, 1305, 1252, 1252, + 1313, 1257, 1267, 1316, 2398, 1264, 1265, 1267, 1320, 1261, + 1264, 2398, 1282, 1283, 2398, 1270, 2398, 2398, 1283, 1266, + 1286, 1273, 1332, 1282, 2398, 1334, 1283, 1336, 1316, 2398, + 1338, 1295, 1340, 1291, 1338, 2398, 1286, 1345, 1295, 1289, - 1310, 1304, 1307, 1320, 1321, 1319, 1368, 2478, 1322, 2478, - 2478, 1327, 1319, 1329, 1314, 1370, 1317, 1317, 1378, 1322, - 1332, 1381, 2478, 1329, 1329, 1331, 1333, 1386, 1327, 1330, - 2478, 1331, 1348, 1353, 2478, 1337, 2478, 2478, 1350, 1333, - 1353, 1354, 2478, 1341, 1400, 1350, 2478, 1402, 1351, 1404, - 1384, 2478, 1406, 1363, 1408, 1359, 1406, 2478, 1354, 1413, - 1363, 1357, 1354, 1357, 1360, 1360, 1377, 1416, 1369, 1381, - 1384, 1372, 1375, 1368, 1376, 1366, 2478, 1374, 1389, 1374, - 2478, 1376, 1377, 1392, 1392, 1395, 1395, 1392, 1436, 1398, - 1390, 2478, 1391, 2478, 1401, 1393, 2478, 1399, 1404, 1405, + 1286, 1289, 1291, 1308, 1347, 1300, 1312, 1315, 1303, 1306, + 1299, 1306, 1297, 2398, 1305, 1320, 1305, 2398, 1307, 1308, + 1323, 1323, 1326, 1326, 1323, 1367, 1329, 1321, 2398, 1322, + 2398, 1332, 1324, 2398, 1330, 1335, 1336, 1333, 1377, 1325, + 1340, 1341, 1333, 2398, 1330, 1331, 1331, 1337, 1336, 1334, + 1388, 1349, 2398, 1390, 1337, 2398, 1338, 1339, 1345, 2398, + 1354, 1348, 1403, 1350, 1343, 1355, 1359, 1370, 1363, 1369, + 1365, 2398, 1374, 2398, 1371, 2398, 1368, 1391, 2398, 1418, + 2398, 1376, 1361, 1421, 2398, 1422, 1379, 1384, 1366, 1426, + 1422, 1386, 1383, 1379, 1372, 1427, 1385, 1386, 1376, 1381, - 1402, 1446, 1394, 1409, 1410, 1402, 2478, 1399, 1400, 1400, - 1406, 1405, 1403, 1457, 1418, 2478, 1459, 1406, 2478, 1407, - 1407, 1409, 1415, 2478, 1424, 1418, 1473, 1415, 1422, 1414, - 1427, 1430, 1441, 1434, 1440, 1484, 1437, 2478, 1446, 2478, - 1443, 2478, 1440, 1463, 2478, 1490, 2478, 1448, 1433, 1493, - 2478, 1494, 1451, 1456, 1438, 1498, 1499, 1495, 1459, 1456, - 1452, 1445, 1500, 1458, 1459, 1449, 1454, 1466, 1511, 1466, - 1514, 1510, 1474, 1470, 1514, 1462, 1467, 1465, 1524, 1480, - 1468, 1527, 1523, 1486, 1530, 1491, 1480, 1474, 1534, 1476, - 1477, 1491, 1494, 1494, 1540, 1482, 1499, 1495, 1493, 1500, + 1393, 1438, 1393, 1441, 1437, 1400, 1397, 1441, 1389, 1394, + 1392, 1451, 1407, 1395, 1454, 1450, 1413, 1457, 1418, 1407, + 1401, 1461, 1403, 1404, 1418, 1421, 1421, 1467, 1409, 1426, + 1422, 1420, 1427, 1411, 1469, 1470, 1471, 1434, 1427, 1426, + 1426, 1421, 1439, 2398, 1430, 1436, 1441, 1428, 1427, 1429, + 1484, 1425, 1443, 1492, 1450, 1463, 2398, 1495, 1448, 2398, + 2398, 1439, 1450, 1499, 2398, 1445, 1450, 1448, 1498, 1456, + 1461, 1449, 1465, 1454, 1453, 1467, 1454, 2398, 1456, 2398, + 1459, 1510, 1453, 1458, 1518, 1466, 1476, 1477, 2398, 1523, + 1476, 1520, 2398, 1471, 1527, 2398, 1470, 1485, 1473, 2398, - 1484, 1542, 1543, 1490, 1545, 1508, 1501, 1500, 1500, 1495, - 1513, 2478, 1513, 1505, 1511, 1516, 1503, 1502, 1504, 1559, - 2478, 1500, 1518, 1567, 1525, 1538, 2478, 1570, 1523, 2478, - 2478, 1514, 1525, 1574, 2478, 2478, 1520, 1525, 1523, 1573, - 1531, 1536, 1524, 1541, 1530, 1528, 1542, 1529, 2478, 1531, - 2478, 1534, 1585, 1528, 1533, 1593, 1541, 1551, 1552, 2478, - 1598, 1551, 1595, 2478, 1546, 1602, 2478, 1545, 1560, 1548, - 2478, 1558, 1559, 1608, 1566, 1570, 2478, 1606, 1572, 1548, - 1566, 1567, 1576, 1558, 1565, 1619, 1578, 1577, 1568, 1618, - 1570, 1566, 1626, 1574, 1569, 1570, 1630, 1631, 1581, 1633, + 1483, 1484, 1533, 1491, 1495, 2398, 1531, 1497, 1473, 1491, + 1492, 1501, 1483, 1490, 1502, 1501, 1492, 1542, 1494, 1490, + 1550, 1492, 1493, 1553, 1554, 1504, 1556, 1509, 1514, 1507, + 2398, 1560, 1561, 2398, 1510, 1563, 1505, 2398, 1508, 1518, + 1562, 1510, 1525, 1512, 1527, 1513, 1520, 1520, 1575, 1532, + 1533, 1521, 1520, 1580, 1533, 2398, 1577, 1528, 1525, 2398, + 1539, 1526, 1547, 2398, 1544, 1589, 1542, 1539, 1540, 2398, + 1593, 1552, 1535, 1537, 1553, 1546, 1536, 1552, 1553, 1562, + 1552, 1604, 1564, 1548, 1557, 1603, 2398, 1561, 1610, 2398, + 2398, 1552, 2398, 1559, 1613, 1609, 2398, 2398, 1571, 2398, - 1586, 1591, 1584, 2478, 1637, 1638, 2478, 1587, 1640, 1582, - 2478, 1585, 1595, 1639, 1587, 1602, 1589, 1604, 1590, 1597, - 1597, 1652, 1609, 1610, 1598, 1597, 1657, 1610, 2478, 1654, - 1605, 1602, 2478, 1616, 1603, 1624, 2478, 1621, 1666, 1619, - 1616, 1617, 2478, 1670, 1629, 1612, 1614, 1630, 1623, 1613, - 1629, 1630, 1639, 2478, 1629, 1681, 1641, 1625, 1634, 1680, - 2478, 1644, 1639, 1688, 2478, 2478, 1630, 2478, 1637, 1691, - 1687, 2478, 2478, 1649, 2478, 1689, 1651, 1652, 1637, 1638, - 1646, 1700, 1648, 1697, 1698, 1653, 2478, 1648, 1666, 1653, - 1660, 2478, 1657, 1662, 1660, 1712, 1713, 1661, 1658, 1658, + 1611, 1573, 1574, 1559, 1560, 1568, 1622, 1570, 1619, 1620, + 1575, 2398, 1570, 1588, 1575, 1582, 2398, 1579, 1584, 1582, + 1634, 1635, 1583, 1580, 1580, 2398, 1595, 1596, 1597, 2398, + 1598, 1588, 1600, 1645, 1598, 1647, 1589, 1597, 1598, 1611, + 2398, 1612, 1593, 1594, 1601, 1603, 2398, 1652, 1613, 2398, + 1617, 1602, 1602, 1617, 1610, 1609, 1620, 1607, 2398, 1623, + 1611, 1614, 1670, 1610, 1629, 1631, 1622, 1631, 1633, 1637, + 2398, 2398, 1630, 1621, 1680, 1623, 1682, 1683, 1684, 1642, + 1686, 2398, 1628, 2398, 1683, 1645, 1646, 1633, 1641, 1652, + 1639, 1650, 1636, 1639, 1644, 1635, 1700, 1653, 1654, 1644, - 2478, 1673, 1674, 1675, 2478, 1676, 1666, 1678, 1723, 1676, - 1725, 1667, 1675, 1676, 1689, 2478, 1690, 1671, 1672, 1679, - 1670, 1682, 2478, 1731, 1692, 2478, 1696, 1681, 1681, 1696, - 1689, 1688, 1699, 1686, 2478, 1702, 1690, 1693, 1749, 1689, - 1708, 1710, 1701, 1710, 1712, 1716, 2478, 2478, 1709, 1700, - 1759, 1702, 1761, 1762, 1763, 1721, 1765, 2478, 1707, 2478, - 1762, 1724, 1725, 1712, 1720, 1731, 1718, 1729, 1775, 1716, - 1719, 1724, 1715, 1780, 1733, 1734, 1724, 1741, 1740, 1781, - 1725, 1744, 1745, 2478, 1750, 1743, 1748, 1749, 1794, 1751, - 1754, 1741, 1750, 2478, 1799, 2478, 2478, 2478, 1760, 2478, + 1661, 1660, 1701, 1645, 1664, 1665, 2398, 1670, 1663, 1668, + 1669, 1714, 1671, 1674, 1661, 1670, 2398, 1719, 2398, 2398, + 2398, 1680, 2398, 1721, 1663, 1723, 1724, 1667, 1726, 1674, + 1723, 1724, 1686, 1691, 1732, 1691, 2398, 1682, 1672, 1731, + 1697, 1690, 1686, 1740, 1683, 1685, 1684, 1691, 1687, 1689, + 2398, 1694, 1704, 1689, 1697, 2398, 1692, 2398, 1704, 2398, + 2398, 1709, 2398, 1710, 1710, 1701, 1757, 1706, 2398, 1708, + 1716, 1761, 1702, 1704, 1701, 1725, 2398, 1712, 1719, 1720, + 1723, 1712, 1766, 1713, 1721, 1730, 1729, 1732, 1725, 1720, + 1720, 1732, 1727, 2398, 1727, 1739, 1784, 2398, 1730, 1742, - 1801, 1743, 1803, 1804, 1747, 1806, 1754, 1803, 1804, 2478, - 1766, 1771, 1812, 1771, 2478, 1762, 1752, 1811, 1777, 1770, - 1766, 1820, 1763, 1765, 1764, 1771, 1767, 1769, 2478, 1774, - 1784, 1769, 1777, 2478, 1772, 2478, 1784, 2478, 2478, 1789, - 2478, 1790, 1790, 1781, 1837, 1786, 2478, 1788, 1796, 1841, - 1782, 1784, 1781, 1805, 2478, 1792, 1799, 1800, 1803, 1792, - 1846, 1793, 1801, 1810, 1809, 1812, 1805, 1800, 1800, 1812, - 1807, 2478, 1807, 1819, 1864, 2478, 1810, 1822, 1867, 1816, - 1818, 1816, 1817, 1872, 1825, 1812, 1827, 1832, 1877, 1878, - 1879, 1836, 1881, 1882, 1826, 1830, 1834, 1828, 2478, 1844, - - 1888, 2478, 1845, 1830, 1848, 1839, 2478, 1840, 1854, 1850, - 1843, 2478, 2478, 2478, 1897, 2478, 2478, 1840, 1848, 1856, - 1901, 1862, 2478, 1903, 1845, 1905, 1848, 1861, 1860, 1861, - 1851, 2478, 1852, 1912, 1908, 2478, 1855, 2478, 1867, 2478, - 1911, 1917, 1859, 1875, 1920, 1921, 2478, 1882, 1879, 1871, - 1875, 2478, 1922, 1871, 2478, 2478, 1883, 1876, 1931, 1879, - 1879, 1875, 1877, 1892, 1877, 2478, 1938, 1885, 1892, 1941, - 1942, 1890, 2478, 1894, 1893, 2478, 2478, 1887, 1887, 1904, - 1949, 1895, 1951, 2478, 1952, 2478, 2478, 2478, 1958, 1961, - 1964, 1965, 1967, 1970, 1973, 1976 + 1787, 1736, 1738, 1736, 1737, 1792, 1745, 1732, 1747, 1752, + 1797, 1798, 1799, 1756, 1801, 1802, 1746, 1750, 1754, 1748, + 2398, 1764, 1808, 2398, 1765, 1750, 1768, 1759, 2398, 1760, + 1774, 1770, 1763, 2398, 2398, 2398, 1817, 2398, 2398, 1760, + 1768, 1776, 1821, 1782, 2398, 1823, 1765, 1825, 1768, 1781, + 1780, 1781, 1771, 2398, 1772, 1832, 1828, 2398, 1775, 2398, + 1787, 2398, 1831, 1837, 1779, 1795, 1840, 1841, 2398, 1802, + 1799, 1791, 1795, 2398, 1842, 1791, 2398, 2398, 1803, 1796, + 1851, 1799, 1799, 1795, 1797, 1812, 1797, 2398, 1858, 1805, + 1812, 1861, 1862, 1810, 2398, 1814, 1813, 2398, 2398, 1807, + 1807, 1824, 1869, 1815, 1871, 2398, 1872, 2398, 2398, 2398, + 1878, 1881, 1884, 1885, 1887, 1890, 1893, 1896 } ; -static const flex_int16_t yy_def[2097] = +static const flex_int16_t yy_def[2019] = { 0, - 2089, 2089, 2090, 2090, 2089, 2089, 2089, 2089, 2089, 2089, - 2088, 2088, 2088, 2088, 2088, 2091, 2088, 2088, 2088, 2088, - 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, - 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2092, - 2088, 2088, 2088, 2093, 15, 2088, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2094, 45, 45, 45, 45, + 2011, 2011, 2012, 2012, 2011, 2011, 2011, 2011, 2011, 2011, + 2010, 2010, 2010, 2010, 2010, 2013, 2010, 2010, 2010, 2010, + 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, + 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2014, + 2010, 2010, 2010, 2015, 15, 2010, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2016, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2091, 2088, 2088, - 2088, 2088, 2088, 2088, 2095, 2088, 2088, 2088, 2088, 2088, - 2088, 2088, 2088, 2088, 2088, 2088, 2092, 2088, 2093, 2088, + 45, 45, 45, 45, 45, 45, 45, 2013, 2010, 2010, + 2010, 2010, 2010, 2010, 2017, 2010, 2010, 2010, 2010, 2010, + 2010, 2010, 2010, 2010, 2010, 2010, 2014, 2010, 2015, 2010, - 2088, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2096, 45, 2094, 45, 45, 45, 45, 45, 45, + 2010, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2018, 45, 2016, 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, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2095, 2088, 2088, 2088, 2088, - 2088, 2088, 2088, 2088, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2017, 2010, 2010, 2010, 2010, 2010, 2010, + 2010, 2010, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2096, 2088, 2088, 114, 45, 45, + 45, 45, 2018, 2010, 2010, 114, 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, 2088, 45, 45, 45, 45, + 45, 45, 2010, 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, 45, 45, 45, 45, 45, 45, 45, - 45, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 45, 45, - 45, 45, 45, 45, 2088, 45, 2088, 45, 114, 2088, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2088, 45, + 45, 45, 45, 45, 45, 45, 45, 2010, 2010, 2010, + 2010, 2010, 2010, 2010, 45, 45, 45, 45, 45, 45, + 2010, 45, 2010, 45, 114, 2010, 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, 2088, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2088, 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, 2088, 45, 45, 45, 45, 2088, 2088, 2088, 45, - 45, 45, 45, 45, 2088, 45, 2088, 45, 114, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2088, 45, 45, 45, 45, 45, 45, 45, 45, 2088, - 45, 45, 45, 45, 45, 45, 2088, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2088, 45, - - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2088, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2088, 45, 2088, 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, 2088, 45, 45, 2088, 45, - 45, 2088, 45, 45, 2088, 45, 45, 45, 2088, 2088, - 2088, 45, 45, 45, 2088, 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, 2088, 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, 2088, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2088, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2088, 45, + 45, 45, 45, 45, 2010, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2088, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2088, 45, - 45, 2088, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2010, 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, 2010, 45, 45, 45, 45, 2010, 2010, 2010, + 45, 45, 45, 45, 45, 2010, 45, 2010, 45, 114, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2088, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 2088, + 45, 2010, 45, 45, 45, 45, 45, 45, 2010, 45, + 45, 45, 45, 45, 45, 2010, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2010, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2088, 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, 2088, 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, 2088, 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, 2088, 45, 45, 45, 45, - - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2088, 2088, 45, 45, 45, 45, 45, - 45, 2088, 2088, 45, 45, 45, 45, 45, 2088, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 2088, - 2088, 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, 2088, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2088, 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, 2088, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2088, 45, 45, 45, 45, 45, - 45, 2088, 2088, 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, 2088, 45, - 45, 45, 45, 2088, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2088, 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, - 2088, 45, 45, 45, 2088, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2088, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2088, 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, 2088, 45, 45, 45, 45, - - 45, 45, 45, 45, 45, 45, 45, 2088, 45, 45, - 45, 45, 2088, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2088, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2088, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2088, 45, 45, 45, 45, 45, 45, 45, - 2088, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 2088, - 2088, 45, 2088, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2088, 45, 45, - - 45, 45, 2088, 45, 45, 45, 45, 45, 45, 2088, - 45, 2088, 45, 2088, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2088, 45, 45, 45, 45, 45, 45, 2088, 2088, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2088, 45, 45, 45, 45, 45, 2088, 45, 45, 45, - 45, 45, 45, 2088, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2088, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - - 45, 45, 45, 45, 45, 45, 45, 2088, 45, 2088, - 2088, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2088, 45, 45, 45, 45, 45, 45, 45, - 2088, 45, 45, 45, 2088, 45, 2088, 2088, 45, 45, - 45, 45, 2088, 45, 45, 45, 2088, 45, 45, 45, - 45, 2088, 45, 45, 45, 45, 45, 2088, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2088, 45, 45, 45, - 2088, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2088, 45, 2088, 45, 45, 2088, 45, 45, 45, - - 45, 45, 45, 45, 45, 45, 2088, 45, 45, 45, - 45, 45, 45, 45, 45, 2088, 45, 45, 2088, 45, - 45, 45, 45, 2088, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2088, 45, 2088, - 45, 2088, 45, 45, 2088, 45, 2088, 45, 45, 45, - 2088, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2010, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2010, 45, + 2010, 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, 2010, + 45, 45, 2010, 45, 45, 2010, 45, 45, 2010, 45, + 45, 45, 2010, 2010, 2010, 45, 45, 45, 2010, 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, 2088, 45, 45, 45, 45, 45, 45, 45, 45, - 2088, 45, 45, 45, 45, 45, 2088, 45, 45, 2088, - 2088, 45, 45, 45, 2088, 2088, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2088, 45, - 2088, 45, 45, 45, 45, 45, 45, 45, 45, 2088, - 45, 45, 45, 2088, 45, 45, 2088, 45, 45, 45, - 2088, 45, 45, 45, 45, 45, 2088, 45, 45, 45, + 45, 45, 45, 2010, 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, 2010, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2010, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2010, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2010, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2010, 45, 45, 2010, 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, + 2010, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2010, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2010, 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, 2088, 45, 45, 2088, 45, 45, 45, - 2088, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2088, 45, - 45, 45, 2088, 45, 45, 45, 2088, 45, 45, 45, - 45, 45, 2088, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2088, 45, 45, 45, 45, 45, 45, - 2088, 45, 45, 45, 2088, 2088, 45, 2088, 45, 45, - 45, 2088, 2088, 45, 2088, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2088, 45, 45, 45, - 45, 2088, 45, 45, 45, 45, 45, 45, 45, 45, - - 2088, 45, 45, 45, 2088, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2088, 45, 45, 45, 45, - 45, 45, 2088, 45, 45, 2088, 45, 45, 45, 45, - 45, 45, 45, 45, 2088, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2088, 2088, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2088, 45, 2088, + 45, 45, 45, 45, 45, 45, 45, 45, 2010, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2088, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2088, 45, 2088, 2088, 2088, 45, 2088, - - 45, 45, 45, 45, 45, 45, 45, 45, 45, 2088, - 45, 45, 45, 45, 2088, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2088, 45, - 45, 45, 45, 2088, 45, 2088, 45, 2088, 2088, 45, - 2088, 45, 45, 45, 45, 45, 2088, 45, 45, 45, - 45, 45, 45, 45, 2088, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2010, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2088, 45, 45, 45, 2088, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2088, 45, + 45, 45, 45, 2010, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 2010, 2010, 45, 45, 45, 45, 45, 45, 2010, 2010, + 45, 45, 45, 45, 45, 2010, 45, 45, 45, 45, - 45, 2088, 45, 45, 45, 45, 2088, 45, 45, 45, - 45, 2088, 2088, 2088, 45, 2088, 2088, 45, 45, 45, - 45, 45, 2088, 45, 45, 45, 45, 45, 45, 45, - 45, 2088, 45, 45, 45, 2088, 45, 2088, 45, 2088, - 45, 45, 45, 45, 45, 45, 2088, 45, 45, 45, - 45, 2088, 45, 45, 2088, 2088, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2088, 45, 45, 45, 45, - 45, 45, 2088, 45, 45, 2088, 2088, 45, 45, 45, - 45, 45, 45, 2088, 45, 2088, 2088, 0, 2088, 2088, - 2088, 2088, 2088, 2088, 2088, 2088 + 45, 45, 45, 45, 45, 45, 2010, 2010, 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, 2010, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2010, 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, 2010, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2010, 45, 45, 45, 45, + 45, 45, 2010, 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, 2010, 45, + 45, 45, 45, 2010, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2010, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2010, 45, 45, 45, + 2010, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2010, 45, 45, + + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2010, 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, 2010, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 2010, 45, 45, 45, 2010, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2010, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2010, 45, 45, 45, 45, 45, 45, 45, + + 2010, 45, 45, 45, 45, 45, 45, 45, 2010, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2010, 2010, 45, + 2010, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2010, 45, 45, 45, 45, + 2010, 45, 45, 45, 45, 45, 45, 2010, 45, 2010, + 45, 2010, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2010, 45, 45, 45, + 45, 45, 45, 2010, 2010, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2010, 45, 45, 45, 45, 45, + + 2010, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2010, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2010, + 45, 2010, 2010, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2010, 45, 45, 45, 45, 45, + 45, 2010, 45, 45, 2010, 45, 2010, 2010, 45, 45, + 45, 45, 45, 45, 2010, 45, 45, 45, 45, 2010, + 45, 45, 45, 45, 45, 2010, 45, 45, 45, 45, + + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2010, 45, 45, 45, 2010, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2010, 45, + 2010, 45, 45, 2010, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2010, 45, 45, 45, 45, 45, 45, + 45, 45, 2010, 45, 45, 2010, 45, 45, 45, 2010, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2010, 45, 2010, 45, 2010, 45, 45, 2010, 45, + 2010, 45, 45, 45, 2010, 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, 2010, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2010, 45, 45, 2010, + 2010, 45, 45, 45, 2010, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2010, 45, 2010, + 45, 45, 45, 45, 45, 45, 45, 45, 2010, 45, + 45, 45, 2010, 45, 45, 2010, 45, 45, 45, 2010, + + 45, 45, 45, 45, 45, 2010, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 2010, 45, 45, 2010, 45, 45, 45, 2010, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2010, 45, 45, 45, 2010, + 45, 45, 45, 2010, 45, 45, 45, 45, 45, 2010, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2010, 45, 45, 2010, + 2010, 45, 2010, 45, 45, 45, 2010, 2010, 45, 2010, + + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2010, 45, 45, 45, 45, 2010, 45, 45, 45, + 45, 45, 45, 45, 45, 2010, 45, 45, 45, 2010, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 2010, 45, 45, 45, 45, 45, 2010, 45, 45, 2010, + 45, 45, 45, 45, 45, 45, 45, 45, 2010, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 2010, 2010, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2010, 45, 2010, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + + 45, 45, 45, 45, 45, 45, 2010, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2010, 45, 2010, 2010, + 2010, 45, 2010, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2010, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 2010, 45, 45, 45, 45, 2010, 45, 2010, 45, 2010, + 2010, 45, 2010, 45, 45, 45, 45, 45, 2010, 45, + 45, 45, 45, 45, 45, 45, 2010, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2010, 45, 45, 45, 2010, 45, 45, + + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 2010, 45, 45, 2010, 45, 45, 45, 45, 2010, 45, + 45, 45, 45, 2010, 2010, 2010, 45, 2010, 2010, 45, + 45, 45, 45, 45, 2010, 45, 45, 45, 45, 45, + 45, 45, 45, 2010, 45, 45, 45, 2010, 45, 2010, + 45, 2010, 45, 45, 45, 45, 45, 45, 2010, 45, + 45, 45, 45, 2010, 45, 45, 2010, 2010, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2010, 45, 45, + 45, 45, 45, 45, 2010, 45, 45, 2010, 2010, 45, + + 45, 45, 45, 45, 45, 2010, 45, 2010, 2010, 0, + 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010 } ; -static const flex_int16_t yy_nxt[2552] = +static const flex_int16_t yy_nxt[2472] = { 0, - 2088, 13, 14, 13, 2088, 15, 16, 2088, 17, 18, + 2010, 13, 14, 13, 2010, 15, 16, 2010, 17, 18, 19, 20, 21, 22, 22, 22, 22, 22, 23, 24, - 84, 802, 37, 14, 37, 85, 25, 26, 38, 100, - 2088, 27, 37, 14, 37, 42, 28, 42, 38, 90, - 91, 29, 199, 30, 13, 14, 13, 89, 90, 25, + 84, 776, 37, 14, 37, 85, 25, 26, 38, 100, + 841, 27, 37, 14, 37, 42, 28, 42, 38, 90, + 91, 29, 197, 30, 13, 14, 13, 89, 90, 25, 31, 91, 13, 14, 13, 13, 14, 13, 32, 40, - 803, 13, 14, 13, 33, 40, 101, 90, 91, 199, + 777, 13, 14, 13, 33, 40, 101, 90, 91, 197, 89, 34, 35, 13, 14, 13, 93, 15, 16, 94, 17, 18, 19, 20, 21, 22, 22, 22, 22, 22, 23, 24, 13, 14, 13, 89, 39, 103, 25, 26, 13, 14, 13, 27, 39, 42, 105, 42, 28, 42, - 106, 42, 41, 29, 107, 30, 110, 111, 92, 139, - 41, 25, 31, 103, 228, 229, 87, 140, 87, 105, + 106, 42, 41, 29, 107, 30, 110, 111, 92, 138, + 41, 25, 31, 103, 225, 226, 87, 139, 87, 105, 32, 88, 88, 88, 88, 88, 33, 107, 106, 110, - 218, 111, 219, 34, 35, 44, 44, 44, 45, 45, + 216, 111, 217, 34, 35, 44, 44, 44, 45, 45, 46, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 47, 45, 45, 45, 45, 45, 48, 45, 45, 49, 45, 50, 45, 51, 45, 52, 45, 45, 45, @@ -1472,282 +1446,273 @@ static const flex_int16_t yy_nxt[2552] = 57, 58, 59, 60, 61, 62, 63, 64, 65, 51, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 55, 45, 45, 45, 45, 45, 79, 250, + 76, 77, 55, 45, 45, 45, 45, 45, 79, 247, 80, 80, 80, 80, 80, 79, 105, 82, 82, 82, - 82, 82, 251, 81, 83, 83, 83, 83, 83, 79, - 81, 82, 82, 82, 82, 82, 137, 81, 108, 105, - 103, 119, 849, 138, 81, 120, 81, 166, 109, 121, - 136, 167, 122, 81, 221, 123, 235, 124, 236, 125, - 81, 108, 238, 222, 223, 189, 115, 81, 45, 187, - 141, 132, 116, 133, 45, 117, 109, 45, 239, 45, - 142, 45, 143, 45, 134, 113, 145, 146, 45, 45, + 82, 82, 248, 81, 83, 83, 83, 83, 83, 79, + 81, 82, 82, 82, 82, 82, 136, 81, 108, 105, + 103, 119, 842, 137, 81, 120, 81, 165, 109, 121, + 135, 166, 122, 81, 219, 123, 232, 843, 233, 124, + 81, 108, 235, 220, 221, 187, 115, 81, 45, 185, + 140, 131, 116, 132, 45, 117, 109, 45, 236, 45, + 141, 45, 142, 45, 133, 113, 144, 145, 45, 45, - 147, 45, 45, 189, 135, 187, 148, 45, 45, 45, + 146, 45, 45, 187, 134, 185, 147, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 126, 162, 45, 127, 128, 163, 45, 129, 130, 149, - 45, 107, 255, 150, 201, 164, 256, 151, 45, 188, - 131, 728, 45, 110, 45, 114, 265, 157, 729, 152, - 154, 187, 155, 153, 156, 158, 189, 159, 175, 176, - 168, 201, 160, 161, 169, 188, 182, 170, 108, 83, - 83, 83, 83, 83, 171, 172, 183, 190, 109, 173, - 174, 184, 81, 79, 192, 80, 80, 80, 80, 80, + 125, 161, 45, 126, 127, 162, 45, 128, 129, 148, + 45, 107, 252, 149, 199, 163, 253, 150, 45, 186, + 130, 705, 45, 110, 45, 114, 262, 156, 706, 151, + 153, 185, 154, 152, 155, 157, 187, 158, 174, 175, + 167, 199, 159, 160, 168, 186, 180, 169, 108, 83, + 83, 83, 83, 83, 170, 171, 181, 188, 109, 172, + 173, 182, 81, 79, 190, 80, 80, 80, 80, 80, - 278, 177, 266, 178, 279, 87, 179, 87, 81, 100, - 88, 88, 88, 88, 88, 81, 180, 83, 83, 83, - 83, 83, 79, 181, 82, 82, 82, 82, 82, 188, + 275, 108, 263, 176, 276, 87, 177, 87, 81, 100, + 88, 88, 88, 88, 88, 81, 178, 83, 83, 83, + 83, 83, 79, 179, 82, 82, 82, 82, 82, 186, 81, 81, 88, 88, 88, 88, 88, 81, 88, 88, - 88, 88, 88, 99, 196, 198, 101, 200, 202, 214, - 99, 203, 270, 81, 204, 191, 242, 196, 215, 243, - 81, 200, 216, 244, 290, 291, 201, 271, 272, 273, - 202, 198, 196, 298, 209, 200, 202, 204, 203, 275, - 99, 203, 276, 277, 99, 210, 292, 299, 99, 200, - 293, 263, 312, 303, 294, 314, 99, 374, 306, 850, + 88, 88, 88, 99, 194, 196, 101, 198, 200, 212, + 99, 201, 267, 81, 202, 189, 239, 194, 213, 240, + 81, 198, 214, 241, 287, 288, 201, 268, 269, 270, + 200, 196, 194, 295, 207, 198, 200, 202, 201, 272, + 99, 308, 273, 274, 99, 208, 289, 296, 99, 198, + 290, 260, 309, 304, 291, 844, 99, 310, 302, 308, - 99, 313, 99, 99, 207, 281, 312, 313, 308, 314, - 322, 372, 208, 208, 208, 208, 208, 432, 314, 433, - 312, 208, 208, 208, 208, 208, 208, 313, 373, 320, - 323, 324, 317, 316, 315, 328, 326, 320, 322, 853, - 282, 283, 284, 396, 208, 208, 208, 208, 208, 208, - 375, 285, 320, 286, 324, 287, 288, 323, 289, 326, - 331, 382, 328, 329, 329, 329, 329, 329, 343, 326, - 345, 344, 329, 329, 329, 329, 329, 329, 346, 397, - 401, 425, 415, 347, 348, 416, 325, 444, 447, 447, - 402, 437, 326, 398, 426, 329, 329, 329, 329, 329, + 99, 318, 99, 99, 205, 278, 309, 310, 316, 308, + 319, 320, 206, 206, 206, 206, 206, 424, 309, 425, + 310, 206, 206, 206, 206, 206, 206, 311, 375, 318, + 313, 316, 312, 324, 320, 339, 322, 319, 340, 435, + 279, 280, 281, 316, 206, 206, 206, 206, 206, 206, + 366, 282, 389, 283, 408, 284, 285, 409, 286, 322, + 324, 325, 325, 325, 325, 325, 327, 367, 341, 394, + 325, 325, 325, 325, 325, 325, 342, 322, 438, 395, + 438, 376, 343, 443, 377, 445, 529, 447, 390, 441, + 845, 436, 443, 325, 325, 325, 325, 325, 325, 442, - 329, 452, 454, 450, 456, 452, 440, 477, 541, 484, - 525, 447, 448, 451, 383, 485, 582, 384, 515, 516, - 526, 583, 632, 517, 478, 454, 499, 633, 588, 551, - 452, 500, 456, 552, 460, 574, 588, 654, 575, 445, - 459, 459, 459, 459, 459, 778, 779, 655, 621, 459, - 459, 459, 459, 459, 459, 556, 588, 613, 592, 557, - 593, 622, 699, 623, 594, 614, 542, 615, 616, 617, - 854, 618, 459, 459, 459, 459, 459, 459, 723, 501, - 724, 722, 851, 837, 502, 592, 725, 593, 45, 45, - 45, 45, 45, 749, 838, 852, 750, 45, 45, 45, + 322, 438, 391, 439, 473, 539, 488, 572, 445, 540, + 474, 489, 443, 513, 431, 447, 450, 450, 450, 450, + 450, 451, 846, 514, 847, 450, 450, 450, 450, 450, + 450, 503, 504, 566, 572, 572, 505, 614, 567, 576, + 678, 577, 615, 848, 530, 635, 595, 701, 450, 450, + 450, 450, 450, 450, 596, 636, 597, 598, 599, 490, + 600, 603, 578, 700, 491, 821, 576, 849, 577, 45, + 45, 45, 45, 45, 604, 701, 605, 822, 45, 45, + 45, 45, 45, 45, 699, 724, 752, 753, 725, 702, + 700, 833, 679, 821, 850, 851, 809, 834, 852, 853, - 45, 45, 45, 855, 856, 723, 857, 858, 724, 859, - 851, 860, 861, 862, 700, 865, 866, 870, 852, 871, - 45, 45, 45, 45, 45, 45, 863, 867, 868, 872, - 869, 873, 864, 874, 875, 876, 877, 878, 879, 880, - 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, - 891, 894, 895, 896, 892, 897, 898, 899, 893, 900, - 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, - 911, 912, 913, 914, 915, 916, 917, 918, 920, 921, - 919, 922, 923, 924, 925, 926, 927, 928, 929, 930, - 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 822, 45, 45, 45, 45, 45, 45, 810, 837, 838, + 854, 839, 855, 856, 857, 858, 859, 862, 863, 864, + 860, 865, 866, 867, 861, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 887, 888, 886, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, + 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, + 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, + 923, 924, 926, 927, 928, 931, 932, 933, 925, 935, + 936, 929, 937, 934, 938, 930, 939, 940, 941, 942, - 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, - 951, 952, 953, 954, 955, 956, 957, 958, 960, 961, - 962, 963, 966, 967, 959, 968, 970, 971, 964, 972, - 973, 969, 965, 974, 975, 976, 977, 978, 979, 980, - 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, - 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, - 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, - 1011, 1012, 1013, 1014, 987, 1015, 1016, 1017, 1018, 1019, - 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, - 1030, 1031, 1032, 1033, 1034, 1035, 1037, 1038, 1039, 1040, + 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, + 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, + 973, 974, 975, 976, 977, 950, 978, 979, 980, 981, + 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, + 992, 993, 994, 995, 996, 998, 999, 1000, 1001, 997, + 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, + 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1022, + 1023, 1024, 1021, 1025, 1026, 1027, 1028, 1029, 1030, 1031, + 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, - 1036, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, - 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, - 1060, 1062, 1063, 1064, 1061, 1065, 1066, 1067, 1068, 1069, - 1070, 1071, 1072, 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, + 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, 1069, 1070, 1071, + 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, + 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, + 1092, 1070, 1093, 1094, 1069, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, - 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, - 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, - 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1114, 1137, 1138, + 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1119, 1120, + 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, + 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, - 1113, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, - 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, - 1158, 1159, 1160, 1161, 1162, 1163, 1165, 1166, 1167, 1168, - 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, - 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, + 1141, 1142, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, + 1152, 1153, 1143, 1154, 1155, 1156, 1157, 1158, 1159, 1160, + 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, + 1171, 1172, 1173, 1174, 1175, 1118, 1176, 1177, 1178, 1179, + 1180, 1181, 1182, 1183, 1184, 1186, 1185, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, - 1189, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, - 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, - 1219, 1220, 1221, 1164, 1222, 1223, 1224, 1225, 1226, 1227, - 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1236, 1235, 1237, + 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, + 1210, 1211, 1184, 1185, 1212, 1213, 1214, 1215, 1216, 1217, + 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, + 1228, 1229, 1231, 1233, 1234, 1235, 1230, 1236, 1237, 1238, - 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, - 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, - 1258, 1259, 1260, 1261, 1234, 1235, 1262, 1263, 1264, 1265, - 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, - 1276, 1277, 1278, 1279, 1280, 1281, 1283, 1285, 1286, 1287, - 1282, 1288, 1289, 1290, 1291, 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, - 1284, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, + 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, 1232, 1275, 1276, 1277, + 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, + 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, + 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, + 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1293, 1316, + 1317, 1318, 1319, 1320, 1294, 1321, 1322, 1323, 1324, 1325, + 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 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, 1349, 1372, 1373, 1374, - 1375, 1376, 1350, 1377, 1378, 1379, 1380, 1381, 1382, 1383, - 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, - 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, - 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, - 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, - 1424, 1425, 1426, 1427, 1429, 1430, 1431, 1432, 1433, 1434, + 1366, 1367, 1368, 1370, 1371, 1372, 1373, 1374, 1375, 1376, + 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, + 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, + 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, + 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, + 1389, 1418, 1419, 1420, 1421, 1369, 1422, 1423, 1424, 1425, + 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, - 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, + 1436, 1437, 1439, 1397, 1440, 1441, 1442, 1443, 1444, 1438, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, - 1455, 1456, 1457, 1458, 1460, 1461, 1462, 1463, 1464, 1465, - 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, - 1476, 1477, 1478, 1479, 1451, 1480, 1428, 1481, 1482, 1483, - 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, - 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1459, 1502, 1503, - 1504, 1505, 1506, 1507, 1501, 1508, 1509, 1510, 1511, 1512, - 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, - 1523, 1524, 1526, 1527, 1528, 1529, 1525, 1530, 1531, 1532, + 1455, 1456, 1457, 1458, 1459, 1460, 1462, 1463, 1466, 1464, + 1461, 1465, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, + 1475, 1476, 1478, 1479, 1480, 1481, 1477, 1482, 1483, 1484, + 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, + 1495, 1496, 1497, 1498, 1499, 1478, 1500, 1501, 1502, 1503, + 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, + 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, + 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, - 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, - 1544, 1545, 1546, 1547, 1543, 1548, 1549, 1550, 1551, 1552, - 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, - 1563, 1564, 1565, 1544, 1566, 1567, 1568, 1569, 1570, 1571, - 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, - 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, - 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, - 1602, 1603, 1604, 1605, 1606, 1607, 1611, 1608, 1612, 1613, - 1609, 1614, 1615, 1610, 1616, 1617, 1618, 1619, 1620, 1621, - 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, + 1534, 1535, 1536, 1537, 1538, 1539, 1543, 1540, 1544, 1545, + 1541, 1546, 1547, 1542, 1548, 1549, 1550, 1551, 1552, 1553, + 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, + 1564, 1565, 1566, 1567, 1569, 1570, 1571, 1572, 1573, 1574, + 1575, 1576, 1577, 1578, 1568, 1579, 1580, 1581, 1582, 1556, + 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1591, 1592, 1593, + 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, + 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, + 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, + 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, - 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1640, 1641, 1642, - 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1639, 1650, 1651, - 1652, 1626, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, + 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, + 1644, 1645, 1646, 1647, 1590, 1648, 1649, 1650, 1651, 1652, + 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1633, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, - 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1661, 1719, 1720, - 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, + 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, + 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, - 1731, 1732, 1706, 1733, 1734, 1735, 1736, 1737, 1738, 1739, - 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, - 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, - 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, - 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, - 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, - 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, - 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, - 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, - 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, + 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, + 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, + 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, + 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, + 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, + 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, + 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, + 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, + 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, + 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, - 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, - 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, - 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, - 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, - 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, - 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, - 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, - 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, - 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, - 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, + 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, + 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, + 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, + 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, + 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, + 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, + 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, + 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, + 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, + 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, - 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, - 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, - 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, - 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, - 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, - 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, - 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, - 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, - 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, - 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, - - 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, - 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, - 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2059, 2058, - 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, - 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, - 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 12, 12, + 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, + 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, + 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, + 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, + 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1981, 1980, + 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, + 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, + 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 12, 12, 12, 36, 36, 36, 78, 97, 78, 99, 99, 99, - 112, 112, 112, 186, 848, 186, 205, 205, 205, 847, - 846, 845, 844, 843, 842, 841, 840, 839, 836, 835, - 834, 833, 832, 831, 830, 829, 828, 827, 826, 825, + 112, 112, 112, 184, 840, 184, 203, 203, 203, 836, - 824, 823, 822, 821, 820, 819, 818, 817, 816, 815, - 814, 813, 812, 811, 810, 809, 808, 807, 806, 805, - 804, 801, 800, 799, 798, 797, 796, 795, 794, 793, - 792, 791, 790, 789, 788, 787, 786, 785, 784, 783, - 782, 781, 780, 777, 776, 775, 774, 773, 772, 771, - 770, 769, 768, 767, 766, 765, 764, 763, 762, 761, - 760, 759, 758, 757, 756, 755, 754, 753, 752, 751, - 748, 747, 746, 745, 744, 743, 742, 741, 740, 739, - 738, 737, 736, 735, 734, 733, 732, 731, 730, 727, - 726, 722, 721, 720, 719, 718, 717, 716, 715, 714, + 835, 832, 831, 830, 829, 828, 827, 826, 825, 824, + 823, 820, 819, 818, 817, 816, 815, 814, 813, 812, + 811, 808, 807, 806, 805, 804, 803, 802, 801, 800, + 799, 798, 797, 796, 795, 794, 793, 792, 791, 790, + 789, 788, 787, 786, 785, 784, 783, 782, 781, 780, + 779, 778, 775, 774, 773, 772, 771, 770, 769, 768, + 767, 766, 765, 764, 763, 762, 761, 760, 759, 758, + 757, 756, 755, 754, 751, 750, 749, 748, 747, 746, + 745, 744, 743, 742, 741, 740, 739, 738, 737, 736, + 735, 734, 733, 732, 731, 730, 729, 728, 727, 726, - 713, 712, 711, 710, 709, 708, 707, 706, 705, 704, - 703, 702, 701, 698, 697, 696, 695, 694, 693, 692, - 691, 690, 689, 688, 687, 686, 685, 684, 683, 682, - 681, 680, 679, 678, 677, 676, 675, 674, 673, 672, - 671, 670, 669, 668, 667, 666, 665, 664, 663, 662, - 661, 660, 659, 658, 657, 656, 653, 652, 651, 650, - 649, 648, 647, 646, 645, 644, 643, 642, 641, 640, - 639, 638, 637, 636, 635, 634, 631, 630, 629, 628, - 627, 626, 625, 624, 620, 619, 612, 611, 610, 609, - 608, 607, 606, 605, 604, 603, 602, 601, 600, 599, + 723, 722, 721, 720, 719, 718, 717, 716, 715, 714, + 713, 712, 711, 710, 709, 708, 707, 704, 703, 699, + 698, 697, 696, 695, 694, 693, 692, 691, 690, 689, + 688, 687, 686, 685, 684, 683, 682, 681, 680, 677, + 676, 675, 674, 673, 672, 671, 670, 669, 668, 667, + 666, 665, 664, 663, 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, + 634, 633, 632, 631, 630, 629, 628, 627, 626, 625, + 624, 623, 622, 621, 620, 619, 618, 617, 616, 613, - 598, 597, 596, 595, 591, 590, 589, 587, 586, 585, - 584, 581, 580, 579, 578, 577, 576, 573, 572, 571, - 570, 569, 568, 567, 566, 565, 564, 563, 562, 561, - 560, 559, 558, 555, 554, 553, 550, 549, 548, 547, - 546, 545, 544, 543, 540, 539, 538, 537, 536, 535, - 534, 533, 532, 531, 530, 529, 528, 527, 524, 523, - 522, 521, 520, 519, 518, 514, 513, 512, 511, 510, - 509, 508, 507, 506, 505, 504, 503, 498, 497, 496, - 495, 494, 493, 492, 491, 490, 489, 488, 487, 486, - 483, 482, 481, 480, 479, 476, 475, 474, 473, 472, + 612, 611, 610, 609, 608, 607, 606, 602, 601, 594, + 593, 592, 591, 590, 589, 588, 587, 586, 585, 584, + 583, 582, 581, 580, 579, 575, 574, 573, 571, 570, + 569, 568, 565, 564, 563, 562, 561, 560, 559, 558, + 557, 556, 555, 554, 553, 552, 551, 550, 549, 548, + 547, 546, 545, 544, 543, 542, 541, 538, 537, 536, + 535, 534, 533, 532, 531, 528, 527, 526, 525, 524, + 523, 522, 521, 520, 519, 518, 517, 516, 515, 512, + 511, 510, 509, 508, 507, 506, 502, 501, 500, 499, + 498, 497, 496, 495, 494, 493, 492, 487, 486, 485, - 471, 470, 469, 468, 467, 466, 465, 464, 463, 462, - 461, 458, 457, 455, 453, 449, 446, 443, 442, 441, - 439, 438, 436, 435, 434, 431, 430, 429, 428, 427, - 424, 423, 422, 421, 420, 419, 418, 417, 414, 413, - 412, 411, 410, 409, 408, 407, 406, 405, 404, 403, - 400, 399, 395, 394, 393, 392, 391, 390, 389, 388, - 387, 386, 385, 381, 380, 379, 378, 377, 376, 371, - 370, 369, 368, 367, 366, 365, 364, 363, 362, 361, - 360, 359, 358, 357, 356, 355, 354, 353, 352, 351, - 350, 349, 342, 341, 340, 339, 338, 337, 336, 335, + 484, 483, 482, 481, 480, 479, 478, 477, 476, 475, + 472, 471, 470, 469, 468, 467, 466, 465, 464, 463, + 462, 461, 460, 459, 458, 457, 456, 455, 454, 453, + 452, 449, 448, 446, 444, 440, 437, 434, 433, 432, + 430, 429, 428, 427, 426, 423, 422, 421, 420, 419, + 418, 417, 416, 415, 414, 413, 412, 411, 410, 407, + 406, 405, 404, 403, 402, 401, 400, 399, 398, 397, + 396, 393, 392, 388, 387, 386, 385, 384, 383, 382, + 381, 380, 379, 378, 374, 373, 372, 371, 370, 369, + 368, 365, 364, 363, 362, 361, 360, 359, 358, 357, - 334, 333, 332, 330, 206, 327, 325, 321, 319, 318, - 311, 310, 309, 307, 305, 304, 302, 301, 300, 297, - 296, 295, 280, 274, 269, 268, 267, 264, 262, 261, - 260, 259, 258, 257, 254, 253, 252, 249, 248, 247, - 246, 245, 241, 240, 237, 234, 233, 232, 231, 230, - 227, 226, 225, 224, 220, 217, 213, 212, 211, 206, - 197, 195, 194, 193, 185, 165, 144, 118, 104, 102, - 43, 98, 96, 95, 86, 43, 2088, 11, 2088, 2088, - 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, - 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, + 356, 355, 354, 353, 352, 351, 350, 349, 348, 347, + 346, 345, 344, 338, 337, 336, 335, 334, 333, 332, + 331, 330, 329, 328, 326, 204, 323, 321, 317, 315, + 314, 307, 306, 305, 303, 301, 300, 299, 298, 297, + 294, 293, 292, 277, 271, 266, 265, 264, 261, 259, + 258, 257, 256, 255, 254, 251, 250, 249, 246, 245, + 244, 243, 242, 238, 237, 234, 231, 230, 229, 228, + 227, 224, 223, 222, 218, 215, 211, 210, 209, 204, + 195, 193, 192, 191, 183, 164, 143, 118, 104, 102, + 43, 98, 96, 95, 86, 43, 2010, 11, 2010, 2010, - 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, - 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, - 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, - 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, - 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, - 2088 + 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, + 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, + 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, + 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, + 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, + 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, + 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, + 2010 } ; -static const flex_int16_t yy_chk[2552] = +static const flex_int16_t yy_chk[2472] = { 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 21, 671, 3, 3, 3, 21, 1, 1, 3, 44, - 0, 1, 4, 4, 4, 13, 1, 13, 4, 27, + 21, 652, 3, 3, 3, 21, 1, 1, 3, 44, + 717, 1, 4, 4, 4, 13, 1, 13, 4, 27, 28, 1, 106, 1, 5, 5, 5, 26, 32, 1, 1, 33, 6, 6, 6, 7, 7, 7, 1, 7, - 671, 8, 8, 8, 1, 8, 44, 27, 28, 106, + 652, 8, 8, 8, 1, 8, 44, 27, 28, 106, 26, 1, 1, 2, 2, 2, 32, 2, 2, 33, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 9, 9, 31, 5, 48, 2, 2, 10, 10, 10, 2, 6, 37, 50, 37, 2, 42, 51, 42, 9, 2, 52, 2, 54, 55, 31, 64, - 10, 2, 2, 48, 128, 128, 25, 64, 25, 50, + 10, 2, 2, 48, 127, 127, 25, 64, 25, 50, 2, 25, 25, 25, 25, 25, 2, 52, 51, 54, 121, 55, 121, 2, 2, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, @@ -1757,264 +1722,255 @@ static const flex_int16_t yy_chk[2552] = 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 17, 145, + 15, 15, 15, 15, 15, 15, 15, 15, 17, 144, 17, 17, 17, 17, 17, 19, 62, 19, 19, 19, - 19, 19, 145, 17, 20, 20, 20, 20, 20, 22, + 19, 19, 144, 17, 20, 20, 20, 20, 20, 22, 19, 22, 22, 22, 22, 22, 63, 20, 53, 62, - 57, 59, 720, 63, 22, 59, 17, 73, 53, 59, - 62, 73, 59, 19, 123, 59, 134, 59, 134, 59, - 20, 53, 136, 123, 123, 91, 57, 22, 45, 89, - 65, 61, 57, 61, 45, 57, 53, 45, 136, 45, + 57, 59, 718, 63, 22, 59, 17, 73, 53, 59, + 62, 73, 59, 19, 123, 59, 133, 719, 133, 59, + 20, 53, 135, 123, 123, 91, 57, 22, 45, 89, + 65, 61, 57, 61, 45, 57, 53, 45, 135, 45, 65, 45, 65, 45, 61, 56, 67, 67, 45, 45, 67, 45, 56, 91, 61, 89, 67, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 60, 71, 56, 60, 60, 71, 56, 60, 60, 68, - 56, 69, 149, 68, 108, 71, 149, 68, 56, 90, - 60, 598, 56, 76, 56, 56, 158, 70, 598, 68, + 56, 69, 148, 68, 108, 71, 148, 68, 56, 90, + 60, 582, 56, 76, 56, 56, 157, 70, 582, 68, 69, 92, 69, 68, 69, 70, 94, 70, 75, 75, 74, 108, 70, 70, 74, 90, 76, 74, 75, 79, 79, 79, 79, 79, 74, 74, 76, 92, 75, 74, 74, 76, 79, 80, 94, 80, 80, 80, 80, 80, - 165, 75, 158, 75, 165, 81, 75, 81, 80, 99, + 164, 75, 157, 75, 164, 81, 75, 81, 80, 99, 81, 81, 81, 81, 81, 79, 75, 83, 83, 83, 83, 83, 82, 75, 82, 82, 82, 82, 82, 93, 83, 80, 87, 87, 87, 87, 87, 82, 88, 88, 88, 88, 88, 101, 103, 105, 99, 107, 109, 119, - 101, 110, 162, 83, 111, 93, 139, 115, 119, 139, - 82, 156, 119, 139, 168, 168, 177, 162, 162, 162, - 180, 105, 103, 173, 115, 107, 109, 111, 110, 164, - 101, 182, 164, 164, 101, 115, 169, 173, 101, 156, - 169, 156, 187, 177, 169, 189, 101, 249, 180, 721, + 101, 110, 161, 83, 111, 93, 138, 115, 119, 138, + 82, 155, 119, 138, 167, 167, 180, 161, 161, 161, + 178, 105, 103, 172, 115, 107, 109, 111, 110, 163, + 101, 185, 163, 163, 101, 115, 168, 172, 101, 155, + 168, 155, 186, 180, 168, 720, 101, 187, 178, 188, - 101, 188, 101, 101, 114, 167, 190, 191, 182, 192, - 198, 248, 114, 114, 114, 114, 114, 299, 189, 299, - 187, 114, 114, 114, 114, 114, 114, 188, 248, 196, - 199, 200, 192, 191, 190, 204, 202, 210, 198, 725, - 167, 167, 167, 268, 114, 114, 114, 114, 114, 114, - 249, 167, 196, 167, 200, 167, 167, 199, 167, 202, - 210, 256, 204, 208, 208, 208, 208, 208, 222, 306, - 223, 222, 208, 208, 208, 208, 208, 208, 223, 268, - 271, 293, 284, 223, 223, 284, 303, 310, 312, 315, - 271, 303, 306, 268, 293, 208, 208, 208, 208, 208, + 101, 196, 101, 101, 114, 166, 189, 190, 194, 185, + 197, 198, 114, 114, 114, 114, 114, 296, 186, 296, + 187, 114, 114, 114, 114, 114, 114, 188, 253, 196, + 190, 194, 189, 202, 198, 220, 200, 197, 220, 306, + 166, 166, 166, 208, 114, 114, 114, 114, 114, 114, + 245, 166, 265, 166, 281, 166, 166, 281, 166, 200, + 202, 206, 206, 206, 206, 206, 208, 245, 221, 268, + 206, 206, 206, 206, 206, 206, 221, 302, 308, 268, + 311, 253, 221, 316, 253, 318, 399, 320, 265, 315, + 721, 306, 327, 206, 206, 206, 206, 206, 206, 315, - 208, 320, 322, 319, 324, 331, 306, 348, 406, 355, - 390, 312, 315, 319, 256, 355, 445, 256, 382, 382, - 390, 445, 494, 382, 348, 322, 369, 494, 452, 416, - 320, 369, 324, 416, 331, 437, 460, 516, 437, 310, - 329, 329, 329, 329, 329, 647, 647, 516, 484, 329, - 329, 329, 329, 329, 329, 420, 452, 481, 458, 420, - 458, 484, 563, 484, 460, 481, 406, 481, 481, 481, - 726, 481, 329, 329, 329, 329, 329, 329, 592, 369, - 593, 594, 723, 708, 369, 458, 594, 458, 459, 459, - 459, 459, 459, 618, 708, 724, 618, 459, 459, 459, + 302, 308, 265, 311, 349, 409, 363, 443, 318, 409, + 349, 363, 316, 383, 302, 320, 325, 325, 325, 325, + 325, 327, 722, 383, 723, 325, 325, 325, 325, 325, + 325, 375, 375, 436, 451, 443, 375, 483, 436, 449, + 549, 449, 483, 724, 399, 504, 470, 577, 325, 325, + 325, 325, 325, 325, 470, 504, 470, 470, 470, 363, + 470, 473, 451, 576, 363, 700, 449, 725, 449, 450, + 450, 450, 450, 450, 473, 577, 473, 701, 450, 450, + 450, 450, 450, 450, 578, 600, 628, 628, 600, 578, + 576, 712, 549, 700, 726, 727, 687, 712, 728, 729, - 459, 459, 459, 727, 728, 592, 729, 730, 593, 731, - 723, 732, 733, 734, 563, 736, 737, 739, 724, 740, - 459, 459, 459, 459, 459, 459, 735, 738, 738, 741, - 738, 742, 735, 743, 744, 745, 746, 747, 748, 749, - 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, - 760, 761, 762, 763, 760, 764, 765, 767, 760, 768, - 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 701, 450, 450, 450, 450, 450, 450, 687, 715, 715, + 730, 715, 731, 732, 733, 734, 735, 736, 737, 738, + 735, 739, 740, 742, 735, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, + 758, 759, 760, 761, 762, 760, 763, 765, 766, 767, + 768, 769, 770, 771, 772, 773, 774, 775, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, - 786, 789, 791, 792, 793, 794, 795, 796, 797, 798, - 799, 800, 801, 803, 804, 805, 806, 807, 808, 809, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, + 799, 800, 801, 802, 802, 803, 804, 805, 800, 806, + 807, 802, 808, 805, 810, 802, 811, 812, 813, 814, - 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, - 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, - 830, 830, 831, 832, 827, 833, 834, 835, 830, 836, - 838, 833, 830, 839, 840, 841, 842, 843, 844, 845, - 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, - 856, 857, 858, 859, 860, 861, 862, 863, 864, 866, - 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, - 877, 878, 879, 880, 852, 881, 882, 883, 884, 885, - 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, - 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, + 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, + 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, + 846, 847, 848, 849, 850, 822, 851, 852, 853, 854, + 855, 856, 857, 858, 859, 860, 861, 862, 863, 865, + 866, 867, 868, 869, 870, 871, 872, 873, 874, 870, + 875, 876, 877, 878, 879, 880, 883, 884, 885, 886, + 887, 888, 891, 892, 893, 894, 895, 897, 898, 899, + 900, 901, 898, 902, 903, 904, 905, 906, 909, 910, + 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, - 902, 907, 908, 909, 910, 911, 912, 913, 916, 917, - 918, 919, 920, 921, 924, 925, 926, 927, 928, 930, - 931, 932, 933, 934, 931, 935, 936, 937, 938, 939, + 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, + 931, 932, 933, 934, 935, 936, 937, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, - 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, - 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, - 972, 974, 975, 976, 977, 978, 979, 980, 981, 982, - 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, - 993, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, - 1004, 1005, 1006, 1007, 1008, 1009, 1010, 987, 1011, 1012, + 952, 953, 954, 955, 956, 958, 959, 960, 961, 962, + 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, + 973, 950, 974, 975, 949, 976, 977, 978, 979, 980, + 981, 982, 984, 985, 986, 987, 988, 989, 990, 991, + 992, 993, 994, 995, 997, 998, 999, 1000, 1001, 1002, + 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, + 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, - 986, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, - 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, - 1033, 1034, 1036, 1037, 1038, 1039, 1040, 1041, 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, 1070, 1071, 1072, 1073, 1075, 1076, 1077, - 1065, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, - 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1095, 1096, 1097, - 1098, 1099, 1100, 1039, 1101, 1102, 1103, 1104, 1105, 1106, - 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1115, 1114, 1116, + 1024, 1025, 1026, 1027, 1028, 1030, 1031, 1032, 1033, 1035, + 1036, 1037, 1025, 1038, 1039, 1040, 1041, 1042, 1043, 1044, + 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1053, 1054, 1055, + 1056, 1057, 1058, 1059, 1060, 1000, 1061, 1062, 1063, 1064, + 1065, 1066, 1067, 1068, 1069, 1071, 1070, 1072, 1073, 1074, + 1075, 1076, 1078, 1079, 1080, 1082, 1083, 1084, 1085, 1086, + 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, + 1097, 1099, 1069, 1070, 1100, 1101, 1102, 1103, 1104, 1105, + 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, + 1116, 1118, 1119, 1120, 1121, 1122, 1118, 1123, 1124, 1125, - 1117, 1118, 1119, 1120, 1122, 1123, 1124, 1126, 1127, 1128, - 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, - 1139, 1140, 1141, 1142, 1113, 1114, 1143, 1145, 1146, 1147, - 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, - 1158, 1159, 1160, 1161, 1162, 1164, 1165, 1166, 1167, 1168, - 1164, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, - 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, - 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1197, 1198, - 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1209, - 1165, 1210, 1211, 1212, 1214, 1215, 1216, 1217, 1218, 1219, + 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, + 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, + 1146, 1147, 1148, 1149, 1151, 1152, 1153, 1154, 1155, 1156, + 1157, 1158, 1159, 1160, 1162, 1163, 1119, 1164, 1166, 1167, + 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, + 1178, 1179, 1180, 1181, 1182, 1184, 1185, 1186, 1187, 1188, + 1189, 1190, 1191, 1192, 1194, 1195, 1196, 1197, 1198, 1199, + 1200, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1184, 1210, + 1211, 1212, 1213, 1214, 1185, 1215, 1216, 1217, 1218, 1219, + 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1230, 1232, - 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, - 1230, 1231, 1232, 1234, 1235, 1236, 1237, 1238, 1239, 1240, - 1241, 1242, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, - 1252, 1254, 1255, 1256, 1257, 1258, 1234, 1259, 1260, 1262, - 1263, 1264, 1235, 1265, 1266, 1267, 1268, 1269, 1270, 1271, - 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1282, 1284, - 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, - 1295, 1296, 1297, 1299, 1300, 1301, 1302, 1304, 1305, 1306, - 1307, 1308, 1309, 1311, 1313, 1315, 1316, 1317, 1318, 1319, - 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, + 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, + 1243, 1244, 1245, 1247, 1248, 1249, 1250, 1252, 1253, 1254, + 1255, 1256, 1257, 1259, 1261, 1263, 1264, 1265, 1266, 1267, + 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1278, + 1279, 1280, 1281, 1282, 1283, 1286, 1287, 1288, 1289, 1290, + 1291, 1292, 1293, 1294, 1296, 1297, 1298, 1299, 1300, 1302, + 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, + 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, + 1293, 1323, 1324, 1326, 1327, 1270, 1328, 1329, 1330, 1331, + 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, - 1330, 1332, 1333, 1334, 1335, 1336, 1337, 1340, 1341, 1342, - 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1352, 1353, - 1354, 1355, 1356, 1358, 1359, 1360, 1361, 1362, 1363, 1365, - 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, - 1376, 1377, 1378, 1379, 1349, 1380, 1323, 1381, 1382, 1384, - 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, - 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1358, 1402, 1403, - 1404, 1405, 1406, 1407, 1401, 1409, 1412, 1413, 1414, 1415, - 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1424, 1425, 1426, - 1427, 1428, 1429, 1430, 1432, 1433, 1428, 1433, 1434, 1436, + 1342, 1343, 1344, 1302, 1345, 1346, 1347, 1348, 1349, 1343, + 1351, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, + 1363, 1364, 1366, 1367, 1368, 1369, 1370, 1371, 1374, 1373, + 1369, 1373, 1376, 1379, 1380, 1381, 1382, 1383, 1384, 1386, + 1387, 1388, 1389, 1391, 1392, 1393, 1388, 1394, 1395, 1397, + 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, + 1408, 1409, 1410, 1411, 1412, 1389, 1413, 1415, 1416, 1417, + 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, + 1430, 1432, 1433, 1435, 1436, 1437, 1438, 1439, 1440, 1441, + 1442, 1443, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, - 1439, 1440, 1441, 1442, 1444, 1445, 1446, 1448, 1449, 1450, - 1451, 1453, 1454, 1455, 1450, 1456, 1457, 1459, 1460, 1461, - 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, - 1472, 1473, 1474, 1451, 1475, 1476, 1478, 1479, 1480, 1482, - 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, - 1495, 1496, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, - 1506, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1517, - 1518, 1520, 1521, 1522, 1523, 1525, 1526, 1525, 1527, 1528, - 1525, 1529, 1530, 1525, 1531, 1532, 1533, 1534, 1535, 1536, - 1537, 1539, 1541, 1543, 1544, 1546, 1548, 1549, 1550, 1552, + 1454, 1455, 1457, 1458, 1459, 1461, 1462, 1461, 1463, 1464, + 1461, 1465, 1466, 1461, 1467, 1468, 1469, 1470, 1471, 1473, + 1475, 1477, 1478, 1480, 1482, 1483, 1484, 1486, 1487, 1488, + 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, + 1499, 1500, 1501, 1502, 1492, 1503, 1504, 1505, 1506, 1478, + 1507, 1508, 1509, 1510, 1511, 1511, 1512, 1513, 1514, 1515, + 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, + 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, + 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1545, 1546, + 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, - 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, - 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1559, 1570, 1571, - 1572, 1544, 1573, 1574, 1575, 1576, 1577, 1578, 1578, 1579, - 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, - 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, - 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, - 1610, 1611, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, - 1622, 1623, 1624, 1625, 1626, 1628, 1629, 1632, 1633, 1634, - 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1579, 1644, 1645, - 1646, 1647, 1648, 1650, 1652, 1653, 1654, 1655, 1656, 1657, + 1558, 1559, 1562, 1563, 1564, 1566, 1567, 1568, 1569, 1570, + 1571, 1572, 1573, 1574, 1512, 1575, 1576, 1577, 1579, 1581, + 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1556, 1590, 1591, + 1592, 1594, 1595, 1597, 1598, 1599, 1601, 1602, 1603, 1604, + 1605, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, + 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, + 1626, 1627, 1628, 1629, 1630, 1632, 1633, 1635, 1636, 1637, + 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, + 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1657, 1658, 1659, + 1661, 1662, 1663, 1665, 1666, 1667, 1668, 1669, 1671, 1672, - 1658, 1659, 1626, 1661, 1662, 1663, 1665, 1666, 1668, 1669, - 1670, 1672, 1673, 1674, 1675, 1676, 1678, 1679, 1680, 1681, - 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, - 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, - 1702, 1703, 1705, 1706, 1708, 1709, 1710, 1712, 1713, 1714, - 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, - 1725, 1726, 1727, 1728, 1730, 1731, 1732, 1734, 1735, 1736, - 1738, 1739, 1740, 1741, 1742, 1744, 1745, 1746, 1747, 1748, - 1749, 1750, 1751, 1752, 1753, 1755, 1756, 1757, 1758, 1759, - 1760, 1762, 1763, 1764, 1767, 1769, 1770, 1771, 1774, 1776, + 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, + 1683, 1684, 1685, 1686, 1688, 1689, 1692, 1694, 1695, 1696, + 1699, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, + 1710, 1711, 1713, 1714, 1715, 1716, 1718, 1719, 1720, 1721, + 1722, 1723, 1724, 1725, 1727, 1728, 1729, 1731, 1732, 1733, + 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1742, 1743, 1744, + 1745, 1746, 1748, 1749, 1751, 1752, 1753, 1754, 1755, 1756, + 1757, 1758, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, + 1768, 1769, 1770, 1773, 1774, 1775, 1776, 1777, 1778, 1779, + 1780, 1781, 1783, 1785, 1786, 1787, 1788, 1789, 1790, 1791, - 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, - 1788, 1789, 1790, 1791, 1793, 1794, 1795, 1796, 1797, 1798, - 1799, 1800, 1802, 1803, 1804, 1806, 1807, 1808, 1809, 1810, - 1811, 1812, 1813, 1814, 1815, 1817, 1818, 1819, 1820, 1821, - 1822, 1824, 1825, 1827, 1828, 1829, 1830, 1831, 1832, 1833, - 1834, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, - 1845, 1846, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, - 1857, 1859, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, - 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, - 1879, 1880, 1881, 1882, 1883, 1885, 1886, 1887, 1888, 1889, + 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, + 1802, 1803, 1804, 1805, 1806, 1808, 1809, 1810, 1811, 1812, + 1813, 1814, 1815, 1816, 1818, 1822, 1824, 1825, 1826, 1827, + 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1838, + 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, + 1849, 1850, 1852, 1853, 1854, 1855, 1857, 1859, 1862, 1864, + 1865, 1866, 1867, 1868, 1870, 1871, 1872, 1873, 1874, 1875, + 1876, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, + 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1895, 1896, 1897, + 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, - 1890, 1891, 1892, 1893, 1895, 1899, 1901, 1902, 1903, 1904, - 1905, 1906, 1907, 1908, 1909, 1911, 1912, 1913, 1914, 1916, - 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, - 1927, 1928, 1930, 1931, 1932, 1933, 1935, 1937, 1940, 1942, - 1943, 1944, 1945, 1946, 1948, 1949, 1950, 1951, 1952, 1953, - 1954, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, - 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1973, 1974, 1975, - 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, - 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, - 1997, 1998, 2000, 2001, 2003, 2004, 2005, 2006, 2008, 2009, + 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, + 1919, 1920, 1922, 1923, 1925, 1926, 1927, 1928, 1930, 1931, + 1932, 1933, 1937, 1940, 1941, 1942, 1943, 1944, 1946, 1947, + 1948, 1949, 1950, 1951, 1952, 1953, 1955, 1956, 1957, 1959, + 1961, 1963, 1964, 1965, 1966, 1967, 1968, 1970, 1971, 1970, + 1972, 1973, 1975, 1976, 1979, 1980, 1981, 1982, 1983, 1984, + 1985, 1986, 1987, 1989, 1990, 1991, 1992, 1993, 1994, 1996, + 1997, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2011, 2011, + 2011, 2012, 2012, 2012, 2013, 2014, 2013, 2015, 2015, 2015, + 2016, 2016, 2016, 2017, 716, 2017, 2018, 2018, 2018, 714, - 2010, 2011, 2015, 2018, 2019, 2020, 2021, 2022, 2024, 2025, - 2026, 2027, 2028, 2029, 2030, 2031, 2033, 2034, 2035, 2037, - 2039, 2041, 2042, 2043, 2044, 2045, 2046, 2048, 2049, 2048, - 2050, 2051, 2053, 2054, 2057, 2058, 2059, 2060, 2061, 2062, - 2063, 2064, 2065, 2067, 2068, 2069, 2070, 2071, 2072, 2074, - 2075, 2078, 2079, 2080, 2081, 2082, 2083, 2085, 2089, 2089, - 2089, 2090, 2090, 2090, 2091, 2092, 2091, 2093, 2093, 2093, - 2094, 2094, 2094, 2095, 718, 2095, 2096, 2096, 2096, 717, - 716, 715, 714, 713, 712, 711, 710, 709, 707, 706, - 705, 703, 702, 701, 700, 699, 698, 697, 696, 695, + 713, 711, 710, 709, 708, 707, 706, 705, 704, 703, + 702, 698, 697, 695, 694, 693, 692, 691, 690, 689, + 688, 686, 685, 684, 682, 681, 680, 679, 678, 677, + 676, 675, 674, 673, 672, 671, 669, 668, 667, 666, + 665, 664, 663, 662, 661, 659, 658, 657, 656, 655, + 654, 653, 651, 650, 649, 648, 647, 646, 645, 644, + 642, 641, 640, 639, 638, 637, 636, 635, 634, 633, + 632, 631, 630, 629, 627, 626, 625, 624, 623, 622, + 621, 620, 619, 618, 617, 616, 615, 613, 612, 611, + 610, 609, 608, 607, 606, 605, 604, 603, 602, 601, - 694, 693, 692, 691, 690, 688, 687, 686, 685, 684, - 683, 682, 681, 680, 678, 677, 676, 675, 674, 673, - 672, 670, 669, 668, 667, 666, 665, 664, 663, 661, - 660, 659, 658, 657, 656, 655, 654, 653, 652, 651, - 650, 649, 648, 646, 645, 644, 643, 642, 641, 640, - 639, 638, 637, 636, 635, 634, 633, 631, 630, 629, - 628, 627, 626, 625, 624, 623, 622, 621, 620, 619, - 617, 616, 615, 614, 613, 612, 611, 610, 609, 608, - 607, 606, 605, 604, 603, 602, 601, 600, 599, 597, - 596, 588, 587, 586, 585, 584, 583, 581, 580, 578, + 599, 598, 597, 596, 595, 594, 593, 592, 591, 590, + 589, 588, 587, 586, 585, 584, 583, 581, 580, 572, + 571, 570, 569, 568, 567, 565, 564, 562, 561, 559, + 558, 557, 556, 555, 554, 553, 552, 551, 550, 548, + 547, 546, 545, 544, 543, 542, 541, 540, 539, 538, + 537, 536, 535, 534, 533, 532, 530, 528, 527, 526, + 525, 524, 523, 522, 521, 520, 519, 518, 517, 516, + 515, 514, 513, 511, 510, 509, 508, 507, 506, 505, + 503, 502, 501, 500, 499, 498, 497, 496, 495, 494, + 493, 492, 491, 490, 489, 487, 486, 485, 484, 482, - 577, 575, 574, 573, 572, 571, 570, 569, 568, 567, - 566, 565, 564, 562, 561, 560, 559, 558, 557, 556, - 555, 554, 553, 552, 551, 550, 549, 548, 547, 546, - 545, 544, 542, 540, 539, 538, 537, 536, 535, 534, - 533, 532, 531, 530, 529, 528, 527, 526, 525, 523, - 522, 521, 520, 519, 518, 517, 515, 514, 513, 512, - 511, 510, 509, 508, 507, 506, 505, 504, 503, 502, - 501, 500, 498, 497, 496, 495, 493, 492, 491, 490, - 489, 488, 486, 485, 483, 482, 479, 478, 477, 476, - 475, 474, 473, 472, 470, 469, 468, 467, 466, 465, + 481, 480, 479, 478, 477, 475, 474, 472, 471, 468, + 467, 466, 465, 464, 463, 461, 460, 459, 458, 457, + 456, 455, 454, 453, 452, 447, 445, 444, 442, 441, + 440, 437, 435, 434, 432, 431, 430, 429, 428, 427, + 426, 425, 424, 423, 422, 421, 420, 419, 418, 417, + 416, 415, 414, 413, 412, 411, 410, 408, 407, 406, + 405, 403, 402, 401, 400, 398, 397, 396, 395, 394, + 393, 392, 391, 390, 389, 388, 387, 386, 384, 382, + 381, 380, 379, 378, 377, 376, 374, 373, 372, 371, + 370, 369, 368, 367, 366, 365, 364, 362, 361, 360, - 464, 463, 462, 461, 456, 454, 453, 451, 450, 449, - 446, 444, 443, 441, 440, 439, 438, 436, 435, 434, - 433, 432, 431, 430, 429, 428, 427, 426, 425, 424, - 423, 422, 421, 419, 418, 417, 415, 414, 413, 412, - 410, 409, 408, 407, 405, 404, 403, 402, 401, 400, - 399, 398, 397, 396, 395, 394, 393, 391, 389, 388, - 387, 386, 385, 384, 383, 381, 380, 379, 378, 377, - 376, 375, 374, 373, 372, 371, 370, 368, 367, 366, - 365, 364, 363, 362, 361, 360, 359, 358, 357, 356, - 354, 353, 352, 351, 350, 347, 346, 345, 344, 343, + 359, 358, 357, 356, 355, 354, 353, 352, 351, 350, + 348, 347, 346, 345, 344, 343, 342, 341, 340, 339, + 338, 337, 336, 335, 334, 333, 332, 331, 330, 329, + 328, 324, 322, 319, 317, 314, 307, 305, 304, 303, + 301, 300, 299, 298, 297, 295, 294, 293, 292, 291, + 290, 289, 288, 287, 286, 285, 284, 283, 282, 280, + 279, 278, 277, 276, 275, 274, 273, 272, 271, 270, + 269, 267, 266, 264, 263, 262, 261, 260, 259, 258, + 257, 256, 255, 254, 252, 251, 250, 249, 248, 247, + 246, 244, 242, 241, 240, 239, 238, 237, 236, 235, - 342, 341, 340, 339, 338, 337, 336, 335, 334, 333, - 332, 328, 326, 323, 321, 318, 311, 309, 308, 307, - 305, 304, 302, 301, 300, 298, 297, 296, 295, 294, - 292, 291, 290, 289, 288, 287, 286, 285, 283, 282, - 281, 280, 279, 278, 277, 276, 275, 274, 273, 272, - 270, 269, 267, 266, 265, 264, 263, 262, 261, 260, - 259, 258, 257, 255, 254, 253, 252, 251, 250, 247, - 245, 244, 243, 242, 241, 240, 239, 238, 237, 236, - 235, 234, 233, 232, 231, 230, 229, 228, 227, 226, - 225, 224, 221, 220, 219, 218, 217, 216, 215, 214, - - 213, 212, 211, 209, 205, 203, 201, 197, 195, 193, - 185, 184, 183, 181, 179, 178, 176, 175, 174, 172, - 171, 170, 166, 163, 161, 160, 159, 157, 155, 154, - 153, 152, 151, 150, 148, 147, 146, 144, 143, 142, - 141, 140, 138, 137, 135, 133, 132, 131, 130, 129, - 127, 126, 125, 124, 122, 120, 118, 117, 116, 112, + 234, 233, 232, 231, 230, 229, 228, 227, 226, 225, + 224, 223, 222, 219, 218, 217, 216, 215, 214, 213, + 212, 211, 210, 209, 207, 203, 201, 199, 195, 193, + 191, 183, 182, 181, 179, 177, 176, 175, 174, 173, + 171, 170, 169, 165, 162, 160, 159, 158, 156, 154, + 153, 152, 151, 150, 149, 147, 146, 145, 143, 142, + 141, 140, 139, 137, 136, 134, 132, 131, 130, 129, + 128, 126, 125, 124, 122, 120, 118, 117, 116, 112, 104, 102, 97, 96, 77, 72, 66, 58, 49, 47, - 43, 41, 39, 38, 24, 14, 11, 2088, 2088, 2088, - 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, - 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, + 43, 41, 39, 38, 24, 14, 11, 2010, 2010, 2010, - 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, - 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, - 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, - 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, - 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, - 2088 + 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, + 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, + 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, + 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, + 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, + 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, + 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, + 2010 } ; static yy_state_type yy_last_accepting_state; @@ -2023,32 +1979,31 @@ static char *yy_last_accepting_cpos; extern int yy_flex_debug; int yy_flex_debug = 1; -static const flex_int16_t yy_rule_linenum[219] = +static const flex_int16_t yy_rule_linenum[211] = { 0, 146, 148, 150, 155, 156, 161, 162, 163, 175, 178, 183, 190, 199, 208, 217, 226, 235, 244, 254, 263, 272, 281, 290, 299, 308, 317, 326, 335, 344, 353, - 362, 374, 383, 392, 401, 410, 421, 432, 443, 454, - 465, 476, 487, 498, 509, 520, 531, 542, 551, 560, - 569, 580, 591, 602, 613, 624, 633, 644, 655, 666, - 677, 689, 701, 713, 724, 735, 744, 753, 762, 771, - 780, 791, 802, 813, 824, 835, 846, 857, 868, 878, - 889, 898, 908, 922, 938, 947, 956, 965, 974, 996, - 1018, 1027, 1037, 1046, 1057, 1066, 1075, 1084, 1093, 1102, + 362, 374, 383, 392, 401, 412, 423, 434, 445, 456, + 467, 478, 489, 500, 509, 518, 527, 538, 547, 558, + 569, 580, 591, 603, 615, 627, 638, 649, 658, 667, + 676, 685, 694, 705, 716, 727, 738, 749, 760, 771, + 782, 792, 803, 812, 822, 836, 852, 861, 870, 879, + 888, 910, 932, 941, 951, 960, 971, 980, 989, 998, + 1007, 1016, 1027, 1038, 1049, 1059, 1068, 1079, 1090, 1101, - 1113, 1124, 1135, 1145, 1154, 1165, 1176, 1187, 1198, 1210, - 1219, 1228, 1237, 1246, 1255, 1264, 1273, 1282, 1291, 1301, - 1312, 1324, 1333, 1342, 1352, 1362, 1372, 1382, 1392, 1402, - 1411, 1421, 1430, 1439, 1448, 1457, 1467, 1477, 1486, 1496, - 1505, 1514, 1523, 1532, 1541, 1550, 1559, 1568, 1577, 1586, - 1595, 1604, 1613, 1622, 1631, 1640, 1649, 1658, 1667, 1676, - 1685, 1694, 1703, 1712, 1721, 1730, 1739, 1748, 1757, 1766, - 1775, 1784, 1793, 1802, 1811, 1823, 1835, 1845, 1855, 1865, - 1875, 1885, 1895, 1905, 1915, 1925, 1934, 1943, 1952, 1961, - 1972, 1983, 1996, 2009, 2022, 2031, 2040, 2049, 2058, 2067, + 1112, 1124, 1133, 1142, 1151, 1160, 1169, 1178, 1187, 1196, + 1205, 1215, 1226, 1238, 1247, 1256, 1266, 1276, 1286, 1296, + 1306, 1316, 1325, 1335, 1344, 1353, 1362, 1371, 1381, 1391, + 1400, 1410, 1419, 1428, 1437, 1446, 1455, 1464, 1473, 1482, + 1491, 1500, 1509, 1518, 1527, 1536, 1545, 1554, 1563, 1572, + 1581, 1590, 1599, 1608, 1617, 1626, 1635, 1644, 1653, 1662, + 1671, 1680, 1689, 1698, 1707, 1716, 1725, 1737, 1749, 1759, + 1769, 1779, 1789, 1799, 1809, 1819, 1829, 1839, 1848, 1857, + 1866, 1875, 1886, 1897, 1910, 1923, 1936, 1945, 1954, 1963, + 1972, 1981, 2082, 2098, 2147, 2155, 2170, 2171, 2172, 2173, - 2168, 2184, 2233, 2241, 2256, 2257, 2258, 2259, 2260, 2261, - 2263, 2281, 2294, 2299, 2303, 2305, 2307, 2309 + 2174, 2175, 2177, 2195, 2208, 2213, 2217, 2219, 2221, 2223 } ; /* The intent behind this definition is that it'll catch @@ -2102,7 +2057,7 @@ using namespace isc::dhcp; /* To avoid the call to exit... oops! */ #define YY_FATAL_ERROR(msg) isc::dhcp::Parser4Context::fatal(msg) -#line 2105 "dhcp4_lexer.cc" +#line 2061 "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 @@ -2128,8 +2083,8 @@ using namespace isc::dhcp; by moving it ahead by yyleng bytes. yyleng specifies the length of the currently matched token. */ #define YY_USER_ACTION driver.loc_.columns(yyleng); -#line 2131 "dhcp4_lexer.cc" -#line 2132 "dhcp4_lexer.cc" +#line 2087 "dhcp4_lexer.cc" +#line 2088 "dhcp4_lexer.cc" #define INITIAL 0 #define COMMENT 1 @@ -2457,7 +2412,7 @@ YY_DECL } -#line 2460 "dhcp4_lexer.cc" +#line 2416 "dhcp4_lexer.cc" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -2486,13 +2441,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2089 ) + if ( yy_current_state >= 2011 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_current_state != 2088 ); + while ( yy_current_state != 2010 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); @@ -2511,13 +2466,13 @@ do_action: /* This label is used only to access EOF actions. */ { if ( yy_act == 0 ) fprintf( stderr, "--scanner backing up\n" ); - else if ( yy_act < 219 ) + else if ( yy_act < 211 ) fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n", (long)yy_rule_linenum[yy_act], yytext ); - else if ( yy_act == 219 ) + else if ( yy_act == 211 ) fprintf( stderr, "--accepting default rule (\"%s\")\n", yytext ); - else if ( yy_act == 220 ) + else if ( yy_act == 212 ) fprintf( stderr, "--(end of buffer or a NUL)\n" ); else fprintf( stderr, "--EOF (start condition %d)\n", YY_START ); @@ -2904,18 +2859,6 @@ YY_RULE_SETUP case 35: YY_RULE_SETUP #line 401 "dhcp4_lexer.ll" -{ - switch(driver.ctx_) { - case isc::dhcp::Parser4Context::DATABASE_TYPE: - return isc::dhcp::Dhcp4Parser::make_CQL(driver.loc_); - default: - return isc::dhcp::Dhcp4Parser::make_STRING("cql", driver.loc_); - } -} - YY_BREAK -case 36: -YY_RULE_SETUP -#line 410 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -2927,9 +2870,9 @@ YY_RULE_SETUP } } YY_BREAK -case 37: +case 36: YY_RULE_SETUP -#line 421 "dhcp4_lexer.ll" +#line 412 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -2941,9 +2884,9 @@ YY_RULE_SETUP } } YY_BREAK -case 38: +case 37: YY_RULE_SETUP -#line 432 "dhcp4_lexer.ll" +#line 423 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -2955,9 +2898,9 @@ YY_RULE_SETUP } } YY_BREAK -case 39: +case 38: YY_RULE_SETUP -#line 443 "dhcp4_lexer.ll" +#line 434 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -2969,9 +2912,9 @@ YY_RULE_SETUP } } YY_BREAK -case 40: +case 39: YY_RULE_SETUP -#line 454 "dhcp4_lexer.ll" +#line 445 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -2983,9 +2926,9 @@ YY_RULE_SETUP } } YY_BREAK -case 41: +case 40: YY_RULE_SETUP -#line 465 "dhcp4_lexer.ll" +#line 456 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -2997,9 +2940,9 @@ YY_RULE_SETUP } } YY_BREAK -case 42: +case 41: YY_RULE_SETUP -#line 476 "dhcp4_lexer.ll" +#line 467 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -3011,51 +2954,9 @@ YY_RULE_SETUP } } YY_BREAK -case 43: +case 42: YY_RULE_SETUP -#line 487 "dhcp4_lexer.ll" -{ - switch(driver.ctx_) { - case isc::dhcp::Parser4Context::LEASE_DATABASE: - case isc::dhcp::Parser4Context::HOSTS_DATABASE: - case isc::dhcp::Parser4Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp4Parser::make_KEYSPACE(driver.loc_); - default: - return isc::dhcp::Dhcp4Parser::make_STRING("keyspace", driver.loc_); - } -} - YY_BREAK -case 44: -YY_RULE_SETUP -#line 498 "dhcp4_lexer.ll" -{ - switch(driver.ctx_) { - case isc::dhcp::Parser4Context::LEASE_DATABASE: - case isc::dhcp::Parser4Context::HOSTS_DATABASE: - case isc::dhcp::Parser4Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp4Parser::make_CONSISTENCY(driver.loc_); - default: - return isc::dhcp::Dhcp4Parser::make_STRING("consistency", driver.loc_); - } -} - YY_BREAK -case 45: -YY_RULE_SETUP -#line 509 "dhcp4_lexer.ll" -{ - switch(driver.ctx_) { - case isc::dhcp::Parser4Context::LEASE_DATABASE: - case isc::dhcp::Parser4Context::HOSTS_DATABASE: - case isc::dhcp::Parser4Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp4Parser::make_SERIAL_CONSISTENCY(driver.loc_); - default: - return isc::dhcp::Dhcp4Parser::make_STRING("serial-consistency", driver.loc_); - } -} - YY_BREAK -case 46: -YY_RULE_SETUP -#line 520 "dhcp4_lexer.ll" +#line 478 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -3067,9 +2968,9 @@ YY_RULE_SETUP } } YY_BREAK -case 47: +case 43: YY_RULE_SETUP -#line 531 "dhcp4_lexer.ll" +#line 489 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -3081,9 +2982,9 @@ YY_RULE_SETUP } } YY_BREAK -case 48: +case 44: YY_RULE_SETUP -#line 542 "dhcp4_lexer.ll" +#line 500 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DATABASE_ON_FAIL: @@ -3093,9 +2994,9 @@ YY_RULE_SETUP } } YY_BREAK -case 49: +case 45: YY_RULE_SETUP -#line 551 "dhcp4_lexer.ll" +#line 509 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DATABASE_ON_FAIL: @@ -3105,9 +3006,9 @@ YY_RULE_SETUP } } YY_BREAK -case 50: +case 46: YY_RULE_SETUP -#line 560 "dhcp4_lexer.ll" +#line 518 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DATABASE_ON_FAIL: @@ -3117,65 +3018,9 @@ YY_RULE_SETUP } } YY_BREAK -case 51: +case 47: YY_RULE_SETUP -#line 569 "dhcp4_lexer.ll" -{ - switch(driver.ctx_) { - case isc::dhcp::Parser4Context::LEASE_DATABASE: - case isc::dhcp::Parser4Context::HOSTS_DATABASE: - case isc::dhcp::Parser4Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp4Parser::make_REQUEST_TIMEOUT(driver.loc_); - default: - return isc::dhcp::Dhcp4Parser::make_STRING("request-timeout", driver.loc_); - } -} - YY_BREAK -case 52: -YY_RULE_SETUP -#line 580 "dhcp4_lexer.ll" -{ - switch(driver.ctx_) { - case isc::dhcp::Parser4Context::LEASE_DATABASE: - case isc::dhcp::Parser4Context::HOSTS_DATABASE: - case isc::dhcp::Parser4Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp4Parser::make_TCP_KEEPALIVE(driver.loc_); - default: - return isc::dhcp::Dhcp4Parser::make_STRING("tcp-keepalive", driver.loc_); - } -} - YY_BREAK -case 53: -YY_RULE_SETUP -#line 591 "dhcp4_lexer.ll" -{ - switch(driver.ctx_) { - case isc::dhcp::Parser4Context::LEASE_DATABASE: - case isc::dhcp::Parser4Context::HOSTS_DATABASE: - case isc::dhcp::Parser4Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp4Parser::make_TCP_NODELAY(driver.loc_); - default: - return isc::dhcp::Dhcp4Parser::make_STRING("tcp-nodelay", driver.loc_); - } -} - YY_BREAK -case 54: -YY_RULE_SETUP -#line 602 "dhcp4_lexer.ll" -{ - switch(driver.ctx_) { - case isc::dhcp::Parser4Context::LEASE_DATABASE: - case isc::dhcp::Parser4Context::HOSTS_DATABASE: - case isc::dhcp::Parser4Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp4Parser::make_CONTACT_POINTS(driver.loc_); - default: - return isc::dhcp::Dhcp4Parser::make_STRING("contact-points", driver.loc_); - } -} - YY_BREAK -case 55: -YY_RULE_SETUP -#line 613 "dhcp4_lexer.ll" +#line 527 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -3187,9 +3032,9 @@ YY_RULE_SETUP } } YY_BREAK -case 56: +case 48: YY_RULE_SETUP -#line 624 "dhcp4_lexer.ll" +#line 538 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -3199,9 +3044,9 @@ YY_RULE_SETUP } } YY_BREAK -case 57: +case 49: YY_RULE_SETUP -#line 633 "dhcp4_lexer.ll" +#line 547 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -3213,9 +3058,9 @@ YY_RULE_SETUP } } YY_BREAK -case 58: +case 50: YY_RULE_SETUP -#line 644 "dhcp4_lexer.ll" +#line 558 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -3227,9 +3072,9 @@ YY_RULE_SETUP } } YY_BREAK -case 59: +case 51: YY_RULE_SETUP -#line 655 "dhcp4_lexer.ll" +#line 569 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -3241,9 +3086,9 @@ YY_RULE_SETUP } } YY_BREAK -case 60: +case 52: YY_RULE_SETUP -#line 666 "dhcp4_lexer.ll" +#line 580 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -3255,9 +3100,9 @@ YY_RULE_SETUP } } YY_BREAK -case 61: +case 53: YY_RULE_SETUP -#line 677 "dhcp4_lexer.ll" +#line 591 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3270,9 +3115,9 @@ YY_RULE_SETUP } } YY_BREAK -case 62: +case 54: YY_RULE_SETUP -#line 689 "dhcp4_lexer.ll" +#line 603 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3285,9 +3130,9 @@ YY_RULE_SETUP } } YY_BREAK -case 63: +case 55: YY_RULE_SETUP -#line 701 "dhcp4_lexer.ll" +#line 615 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3300,9 +3145,9 @@ YY_RULE_SETUP } } YY_BREAK -case 64: +case 56: YY_RULE_SETUP -#line 713 "dhcp4_lexer.ll" +#line 627 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3314,9 +3159,9 @@ YY_RULE_SETUP } } YY_BREAK -case 65: +case 57: YY_RULE_SETUP -#line 724 "dhcp4_lexer.ll" +#line 638 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3328,9 +3173,9 @@ YY_RULE_SETUP } } YY_BREAK -case 66: +case 58: YY_RULE_SETUP -#line 735 "dhcp4_lexer.ll" +#line 649 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3340,9 +3185,9 @@ YY_RULE_SETUP } } YY_BREAK -case 67: +case 59: YY_RULE_SETUP -#line 744 "dhcp4_lexer.ll" +#line 658 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3352,9 +3197,9 @@ YY_RULE_SETUP } } YY_BREAK -case 68: +case 60: YY_RULE_SETUP -#line 753 "dhcp4_lexer.ll" +#line 667 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3364,9 +3209,9 @@ YY_RULE_SETUP } } YY_BREAK -case 69: +case 61: YY_RULE_SETUP -#line 762 "dhcp4_lexer.ll" +#line 676 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3376,9 +3221,9 @@ YY_RULE_SETUP } } YY_BREAK -case 70: +case 62: YY_RULE_SETUP -#line 771 "dhcp4_lexer.ll" +#line 685 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3388,9 +3233,9 @@ YY_RULE_SETUP } } YY_BREAK -case 71: +case 63: YY_RULE_SETUP -#line 780 "dhcp4_lexer.ll" +#line 694 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3402,9 +3247,9 @@ YY_RULE_SETUP } } YY_BREAK -case 72: +case 64: YY_RULE_SETUP -#line 791 "dhcp4_lexer.ll" +#line 705 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3416,9 +3261,9 @@ YY_RULE_SETUP } } YY_BREAK -case 73: +case 65: YY_RULE_SETUP -#line 802 "dhcp4_lexer.ll" +#line 716 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3430,9 +3275,9 @@ YY_RULE_SETUP } } YY_BREAK -case 74: +case 66: YY_RULE_SETUP -#line 813 "dhcp4_lexer.ll" +#line 727 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3444,9 +3289,9 @@ YY_RULE_SETUP } } YY_BREAK -case 75: +case 67: YY_RULE_SETUP -#line 824 "dhcp4_lexer.ll" +#line 738 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3458,9 +3303,9 @@ YY_RULE_SETUP } } YY_BREAK -case 76: +case 68: YY_RULE_SETUP -#line 835 "dhcp4_lexer.ll" +#line 749 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3472,9 +3317,9 @@ YY_RULE_SETUP } } YY_BREAK -case 77: +case 69: YY_RULE_SETUP -#line 846 "dhcp4_lexer.ll" +#line 760 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3486,9 +3331,9 @@ YY_RULE_SETUP } } YY_BREAK -case 78: +case 70: YY_RULE_SETUP -#line 857 "dhcp4_lexer.ll" +#line 771 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3500,9 +3345,9 @@ YY_RULE_SETUP } } YY_BREAK -case 79: +case 71: YY_RULE_SETUP -#line 868 "dhcp4_lexer.ll" +#line 782 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3513,9 +3358,9 @@ YY_RULE_SETUP } } YY_BREAK -case 80: +case 72: YY_RULE_SETUP -#line 878 "dhcp4_lexer.ll" +#line 792 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3527,9 +3372,9 @@ YY_RULE_SETUP } } YY_BREAK -case 81: +case 73: YY_RULE_SETUP -#line 889 "dhcp4_lexer.ll" +#line 803 "dhcp4_lexer.ll" { switch (driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3539,9 +3384,9 @@ YY_RULE_SETUP } } YY_BREAK -case 82: +case 74: YY_RULE_SETUP -#line 898 "dhcp4_lexer.ll" +#line 812 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3552,9 +3397,9 @@ YY_RULE_SETUP } } YY_BREAK -case 83: +case 75: YY_RULE_SETUP -#line 908 "dhcp4_lexer.ll" +#line 822 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3569,9 +3414,9 @@ YY_RULE_SETUP } } YY_BREAK -case 84: +case 76: YY_RULE_SETUP -#line 922 "dhcp4_lexer.ll" +#line 836 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -3588,9 +3433,9 @@ YY_RULE_SETUP } } YY_BREAK -case 85: +case 77: YY_RULE_SETUP -#line 938 "dhcp4_lexer.ll" +#line 852 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DATA: @@ -3600,9 +3445,9 @@ YY_RULE_SETUP } } YY_BREAK -case 86: +case 78: YY_RULE_SETUP -#line 947 "dhcp4_lexer.ll" +#line 861 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DATA: @@ -3612,9 +3457,9 @@ YY_RULE_SETUP } } YY_BREAK -case 87: +case 79: YY_RULE_SETUP -#line 956 "dhcp4_lexer.ll" +#line 870 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -3624,9 +3469,9 @@ YY_RULE_SETUP } } YY_BREAK -case 88: +case 80: YY_RULE_SETUP -#line 965 "dhcp4_lexer.ll" +#line 879 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::POOLS: @@ -3636,9 +3481,9 @@ YY_RULE_SETUP } } YY_BREAK -case 89: +case 81: YY_RULE_SETUP -#line 974 "dhcp4_lexer.ll" +#line 888 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3661,9 +3506,9 @@ YY_RULE_SETUP } } YY_BREAK -case 90: +case 82: YY_RULE_SETUP -#line 996 "dhcp4_lexer.ll" +#line 910 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3686,9 +3531,9 @@ YY_RULE_SETUP } } YY_BREAK -case 91: +case 83: YY_RULE_SETUP -#line 1018 "dhcp4_lexer.ll" +#line 932 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -3698,9 +3543,9 @@ YY_RULE_SETUP } } YY_BREAK -case 92: +case 84: YY_RULE_SETUP -#line 1027 "dhcp4_lexer.ll" +#line 941 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -3711,9 +3556,9 @@ YY_RULE_SETUP } } YY_BREAK -case 93: +case 85: YY_RULE_SETUP -#line 1037 "dhcp4_lexer.ll" +#line 951 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -3723,9 +3568,9 @@ YY_RULE_SETUP } } YY_BREAK -case 94: +case 86: YY_RULE_SETUP -#line 1046 "dhcp4_lexer.ll" +#line 960 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3737,9 +3582,9 @@ YY_RULE_SETUP } } YY_BREAK -case 95: +case 87: YY_RULE_SETUP -#line 1057 "dhcp4_lexer.ll" +#line 971 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::RESERVATION_MODE: @@ -3749,9 +3594,9 @@ YY_RULE_SETUP } } YY_BREAK -case 96: +case 88: YY_RULE_SETUP -#line 1066 "dhcp4_lexer.ll" +#line 980 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::RESERVATION_MODE: @@ -3761,9 +3606,9 @@ YY_RULE_SETUP } } YY_BREAK -case 97: +case 89: YY_RULE_SETUP -#line 1075 "dhcp4_lexer.ll" +#line 989 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::RESERVATION_MODE: @@ -3773,9 +3618,9 @@ YY_RULE_SETUP } } YY_BREAK -case 98: +case 90: YY_RULE_SETUP -#line 1084 "dhcp4_lexer.ll" +#line 998 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::RESERVATION_MODE: @@ -3785,9 +3630,9 @@ YY_RULE_SETUP } } YY_BREAK -case 99: +case 91: YY_RULE_SETUP -#line 1093 "dhcp4_lexer.ll" +#line 1007 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::RESERVATION_MODE: @@ -3797,9 +3642,9 @@ YY_RULE_SETUP } } YY_BREAK -case 100: +case 92: YY_RULE_SETUP -#line 1102 "dhcp4_lexer.ll" +#line 1016 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3811,9 +3656,9 @@ YY_RULE_SETUP } } YY_BREAK -case 101: +case 93: YY_RULE_SETUP -#line 1113 "dhcp4_lexer.ll" +#line 1027 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3825,9 +3670,9 @@ YY_RULE_SETUP } } YY_BREAK -case 102: +case 94: YY_RULE_SETUP -#line 1124 "dhcp4_lexer.ll" +#line 1038 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3839,9 +3684,9 @@ YY_RULE_SETUP } } YY_BREAK -case 103: +case 95: YY_RULE_SETUP -#line 1135 "dhcp4_lexer.ll" +#line 1049 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DEF: @@ -3852,9 +3697,9 @@ YY_RULE_SETUP } } YY_BREAK -case 104: +case 96: YY_RULE_SETUP -#line 1145 "dhcp4_lexer.ll" +#line 1059 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3864,9 +3709,9 @@ YY_RULE_SETUP } } YY_BREAK -case 105: +case 97: YY_RULE_SETUP -#line 1154 "dhcp4_lexer.ll" +#line 1068 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3878,9 +3723,9 @@ YY_RULE_SETUP } } YY_BREAK -case 106: +case 98: YY_RULE_SETUP -#line 1165 "dhcp4_lexer.ll" +#line 1079 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3892,9 +3737,9 @@ YY_RULE_SETUP } } YY_BREAK -case 107: +case 99: YY_RULE_SETUP -#line 1176 "dhcp4_lexer.ll" +#line 1090 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3906,9 +3751,9 @@ YY_RULE_SETUP } } YY_BREAK -case 108: +case 100: YY_RULE_SETUP -#line 1187 "dhcp4_lexer.ll" +#line 1101 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3920,9 +3765,9 @@ YY_RULE_SETUP } } YY_BREAK -case 109: +case 101: YY_RULE_SETUP -#line 1198 "dhcp4_lexer.ll" +#line 1112 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3934,9 +3779,9 @@ YY_RULE_SETUP } } YY_BREAK -case 110: +case 102: YY_RULE_SETUP -#line 1210 "dhcp4_lexer.ll" +#line 1124 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3946,9 +3791,9 @@ YY_RULE_SETUP } } YY_BREAK -case 111: +case 103: YY_RULE_SETUP -#line 1219 "dhcp4_lexer.ll" +#line 1133 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LOGGERS: @@ -3958,9 +3803,9 @@ YY_RULE_SETUP } } YY_BREAK -case 112: +case 104: YY_RULE_SETUP -#line 1228 "dhcp4_lexer.ll" +#line 1142 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OUTPUT_OPTIONS: @@ -3970,9 +3815,9 @@ YY_RULE_SETUP } } YY_BREAK -case 113: +case 105: YY_RULE_SETUP -#line 1237 "dhcp4_lexer.ll" +#line 1151 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LOGGERS: @@ -3982,9 +3827,9 @@ YY_RULE_SETUP } } YY_BREAK -case 114: +case 106: YY_RULE_SETUP -#line 1246 "dhcp4_lexer.ll" +#line 1160 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OUTPUT_OPTIONS: @@ -3994,9 +3839,9 @@ YY_RULE_SETUP } } YY_BREAK -case 115: +case 107: YY_RULE_SETUP -#line 1255 "dhcp4_lexer.ll" +#line 1169 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OUTPUT_OPTIONS: @@ -4006,9 +3851,9 @@ YY_RULE_SETUP } } YY_BREAK -case 116: +case 108: YY_RULE_SETUP -#line 1264 "dhcp4_lexer.ll" +#line 1178 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OUTPUT_OPTIONS: @@ -4018,9 +3863,9 @@ YY_RULE_SETUP } } YY_BREAK -case 117: +case 109: YY_RULE_SETUP -#line 1273 "dhcp4_lexer.ll" +#line 1187 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OUTPUT_OPTIONS: @@ -4030,9 +3875,9 @@ YY_RULE_SETUP } } YY_BREAK -case 118: +case 110: YY_RULE_SETUP -#line 1282 "dhcp4_lexer.ll" +#line 1196 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LOGGERS: @@ -4042,9 +3887,9 @@ YY_RULE_SETUP } } YY_BREAK -case 119: +case 111: YY_RULE_SETUP -#line 1291 "dhcp4_lexer.ll" +#line 1205 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4055,9 +3900,9 @@ YY_RULE_SETUP } } YY_BREAK -case 120: +case 112: YY_RULE_SETUP -#line 1301 "dhcp4_lexer.ll" +#line 1215 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -4069,9 +3914,9 @@ YY_RULE_SETUP } } YY_BREAK -case 121: +case 113: YY_RULE_SETUP -#line 1312 "dhcp4_lexer.ll" +#line 1226 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -4084,9 +3929,9 @@ YY_RULE_SETUP } } YY_BREAK -case 122: +case 114: YY_RULE_SETUP -#line 1324 "dhcp4_lexer.ll" +#line 1238 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CLIENT_CLASSES: @@ -4096,9 +3941,9 @@ YY_RULE_SETUP } } YY_BREAK -case 123: +case 115: YY_RULE_SETUP -#line 1333 "dhcp4_lexer.ll" +#line 1247 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CLIENT_CLASSES: @@ -4108,9 +3953,9 @@ YY_RULE_SETUP } } YY_BREAK -case 124: +case 116: YY_RULE_SETUP -#line 1342 "dhcp4_lexer.ll" +#line 1256 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4121,9 +3966,9 @@ YY_RULE_SETUP } } YY_BREAK -case 125: +case 117: YY_RULE_SETUP -#line 1352 "dhcp4_lexer.ll" +#line 1266 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS: @@ -4134,9 +3979,9 @@ YY_RULE_SETUP } } YY_BREAK -case 126: +case 118: YY_RULE_SETUP -#line 1362 "dhcp4_lexer.ll" +#line 1276 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS: @@ -4147,9 +3992,9 @@ YY_RULE_SETUP } } YY_BREAK -case 127: +case 119: YY_RULE_SETUP -#line 1372 "dhcp4_lexer.ll" +#line 1286 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS: @@ -4160,9 +4005,9 @@ YY_RULE_SETUP } } YY_BREAK -case 128: +case 120: YY_RULE_SETUP -#line 1382 "dhcp4_lexer.ll" +#line 1296 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS: @@ -4173,9 +4018,9 @@ YY_RULE_SETUP } } YY_BREAK -case 129: +case 121: YY_RULE_SETUP -#line 1392 "dhcp4_lexer.ll" +#line 1306 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS: @@ -4186,9 +4031,9 @@ YY_RULE_SETUP } } YY_BREAK -case 130: +case 122: YY_RULE_SETUP -#line 1402 "dhcp4_lexer.ll" +#line 1316 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::RESERVATIONS: @@ -4198,9 +4043,9 @@ YY_RULE_SETUP } } YY_BREAK -case 131: +case 123: YY_RULE_SETUP -#line 1411 "dhcp4_lexer.ll" +#line 1325 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DEF: @@ -4211,9 +4056,9 @@ YY_RULE_SETUP } } YY_BREAK -case 132: +case 124: YY_RULE_SETUP -#line 1421 "dhcp4_lexer.ll" +#line 1335 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DATA: @@ -4223,9 +4068,9 @@ YY_RULE_SETUP } } YY_BREAK -case 133: +case 125: YY_RULE_SETUP -#line 1430 "dhcp4_lexer.ll" +#line 1344 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DEF: @@ -4235,9 +4080,9 @@ YY_RULE_SETUP } } YY_BREAK -case 134: +case 126: YY_RULE_SETUP -#line 1439 "dhcp4_lexer.ll" +#line 1353 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DEF: @@ -4247,9 +4092,9 @@ YY_RULE_SETUP } } YY_BREAK -case 135: +case 127: YY_RULE_SETUP -#line 1448 "dhcp4_lexer.ll" +#line 1362 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DEF: @@ -4259,9 +4104,9 @@ YY_RULE_SETUP } } YY_BREAK -case 136: +case 128: YY_RULE_SETUP -#line 1457 "dhcp4_lexer.ll" +#line 1371 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -4272,9 +4117,9 @@ YY_RULE_SETUP } } YY_BREAK -case 137: +case 129: YY_RULE_SETUP -#line 1467 "dhcp4_lexer.ll" +#line 1381 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::RELAY: @@ -4285,9 +4130,9 @@ YY_RULE_SETUP } } YY_BREAK -case 138: +case 130: YY_RULE_SETUP -#line 1477 "dhcp4_lexer.ll" +#line 1391 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::RELAY: @@ -4297,9 +4142,9 @@ YY_RULE_SETUP } } YY_BREAK -case 139: +case 131: YY_RULE_SETUP -#line 1486 "dhcp4_lexer.ll" +#line 1400 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4309,9 +4154,9 @@ YY_RULE_SETUP } } YY_BREAK -case 140: +case 132: YY_RULE_SETUP -#line 1496 "dhcp4_lexer.ll" +#line 1410 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HOOKS_LIBRARIES: @@ -4321,9 +4166,9 @@ YY_RULE_SETUP } } YY_BREAK -case 141: +case 133: YY_RULE_SETUP -#line 1505 "dhcp4_lexer.ll" +#line 1419 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HOOKS_LIBRARIES: @@ -4333,9 +4178,9 @@ YY_RULE_SETUP } } YY_BREAK -case 142: +case 134: YY_RULE_SETUP -#line 1514 "dhcp4_lexer.ll" +#line 1428 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4345,9 +4190,9 @@ YY_RULE_SETUP } } YY_BREAK -case 143: +case 135: YY_RULE_SETUP -#line 1523 "dhcp4_lexer.ll" +#line 1437 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING: @@ -4357,9 +4202,9 @@ YY_RULE_SETUP } } YY_BREAK -case 144: +case 136: YY_RULE_SETUP -#line 1532 "dhcp4_lexer.ll" +#line 1446 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING: @@ -4369,9 +4214,9 @@ YY_RULE_SETUP } } YY_BREAK -case 145: +case 137: YY_RULE_SETUP -#line 1541 "dhcp4_lexer.ll" +#line 1455 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING: @@ -4381,9 +4226,9 @@ YY_RULE_SETUP } } YY_BREAK -case 146: +case 138: YY_RULE_SETUP -#line 1550 "dhcp4_lexer.ll" +#line 1464 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING: @@ -4393,9 +4238,9 @@ YY_RULE_SETUP } } YY_BREAK -case 147: +case 139: YY_RULE_SETUP -#line 1559 "dhcp4_lexer.ll" +#line 1473 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING: @@ -4405,9 +4250,9 @@ YY_RULE_SETUP } } YY_BREAK -case 148: +case 140: YY_RULE_SETUP -#line 1568 "dhcp4_lexer.ll" +#line 1482 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING: @@ -4417,9 +4262,9 @@ YY_RULE_SETUP } } YY_BREAK -case 149: +case 141: YY_RULE_SETUP -#line 1577 "dhcp4_lexer.ll" +#line 1491 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4429,9 +4274,9 @@ YY_RULE_SETUP } } YY_BREAK -case 150: +case 142: YY_RULE_SETUP -#line 1586 "dhcp4_lexer.ll" +#line 1500 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4441,9 +4286,9 @@ YY_RULE_SETUP } } YY_BREAK -case 151: +case 143: YY_RULE_SETUP -#line 1595 "dhcp4_lexer.ll" +#line 1509 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_MULTI_THREADING: @@ -4453,9 +4298,9 @@ YY_RULE_SETUP } } YY_BREAK -case 152: +case 144: YY_RULE_SETUP -#line 1604 "dhcp4_lexer.ll" +#line 1518 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_MULTI_THREADING: @@ -4465,9 +4310,9 @@ YY_RULE_SETUP } } YY_BREAK -case 153: +case 145: YY_RULE_SETUP -#line 1613 "dhcp4_lexer.ll" +#line 1527 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_MULTI_THREADING: @@ -4477,9 +4322,9 @@ YY_RULE_SETUP } } YY_BREAK -case 154: +case 146: YY_RULE_SETUP -#line 1622 "dhcp4_lexer.ll" +#line 1536 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4489,9 +4334,9 @@ YY_RULE_SETUP } } YY_BREAK -case 155: +case 147: YY_RULE_SETUP -#line 1631 "dhcp4_lexer.ll" +#line 1545 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CONTROL_SOCKET: @@ -4501,9 +4346,9 @@ YY_RULE_SETUP } } YY_BREAK -case 156: +case 148: YY_RULE_SETUP -#line 1640 "dhcp4_lexer.ll" +#line 1554 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CONTROL_SOCKET: @@ -4513,9 +4358,9 @@ YY_RULE_SETUP } } YY_BREAK -case 157: +case 149: YY_RULE_SETUP -#line 1649 "dhcp4_lexer.ll" +#line 1563 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4525,9 +4370,9 @@ YY_RULE_SETUP } } YY_BREAK -case 158: +case 150: YY_RULE_SETUP -#line 1658 "dhcp4_lexer.ll" +#line 1572 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_QUEUE_CONTROL: @@ -4537,9 +4382,9 @@ YY_RULE_SETUP } } YY_BREAK -case 159: +case 151: YY_RULE_SETUP -#line 1667 "dhcp4_lexer.ll" +#line 1581 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_QUEUE_CONTROL: @@ -4549,9 +4394,9 @@ YY_RULE_SETUP } } YY_BREAK -case 160: +case 152: YY_RULE_SETUP -#line 1676 "dhcp4_lexer.ll" +#line 1590 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_QUEUE_CONTROL: @@ -4561,9 +4406,9 @@ YY_RULE_SETUP } } YY_BREAK -case 161: +case 153: YY_RULE_SETUP -#line 1685 "dhcp4_lexer.ll" +#line 1599 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4573,9 +4418,9 @@ YY_RULE_SETUP } } YY_BREAK -case 162: +case 154: YY_RULE_SETUP -#line 1694 "dhcp4_lexer.ll" +#line 1608 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -4585,9 +4430,9 @@ YY_RULE_SETUP } } YY_BREAK -case 163: +case 155: YY_RULE_SETUP -#line 1703 "dhcp4_lexer.ll" +#line 1617 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -4597,9 +4442,9 @@ YY_RULE_SETUP } } YY_BREAK -case 164: +case 156: YY_RULE_SETUP -#line 1712 "dhcp4_lexer.ll" +#line 1626 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -4609,9 +4454,9 @@ YY_RULE_SETUP } } YY_BREAK -case 165: +case 157: YY_RULE_SETUP -#line 1721 "dhcp4_lexer.ll" +#line 1635 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -4621,9 +4466,9 @@ YY_RULE_SETUP } } YY_BREAK -case 166: +case 158: YY_RULE_SETUP -#line 1730 "dhcp4_lexer.ll" +#line 1644 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -4633,9 +4478,9 @@ YY_RULE_SETUP } } YY_BREAK -case 167: +case 159: YY_RULE_SETUP -#line 1739 "dhcp4_lexer.ll" +#line 1653 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -4645,9 +4490,9 @@ YY_RULE_SETUP } } YY_BREAK -case 168: +case 160: YY_RULE_SETUP -#line 1748 "dhcp4_lexer.ll" +#line 1662 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -4657,9 +4502,9 @@ YY_RULE_SETUP } } YY_BREAK -case 169: +case 161: YY_RULE_SETUP -#line 1757 "dhcp4_lexer.ll" +#line 1671 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -4669,9 +4514,9 @@ YY_RULE_SETUP } } YY_BREAK -case 170: +case 162: YY_RULE_SETUP -#line 1766 "dhcp4_lexer.ll" +#line 1680 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -4681,9 +4526,9 @@ YY_RULE_SETUP } } YY_BREAK -case 171: +case 163: YY_RULE_SETUP -#line 1775 "dhcp4_lexer.ll" +#line 1689 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -4693,9 +4538,9 @@ YY_RULE_SETUP } } YY_BREAK -case 172: +case 164: YY_RULE_SETUP -#line 1784 "dhcp4_lexer.ll" +#line 1698 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -4705,9 +4550,9 @@ YY_RULE_SETUP } } YY_BREAK -case 173: +case 165: YY_RULE_SETUP -#line 1793 "dhcp4_lexer.ll" +#line 1707 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -4717,9 +4562,9 @@ YY_RULE_SETUP } } YY_BREAK -case 174: +case 166: YY_RULE_SETUP -#line 1802 "dhcp4_lexer.ll" +#line 1716 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -4729,9 +4574,9 @@ YY_RULE_SETUP } } YY_BREAK -case 175: +case 167: YY_RULE_SETUP -#line 1811 "dhcp4_lexer.ll" +#line 1725 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4744,9 +4589,9 @@ YY_RULE_SETUP } } YY_BREAK -case 176: +case 168: YY_RULE_SETUP -#line 1823 "dhcp4_lexer.ll" +#line 1737 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4759,9 +4604,9 @@ YY_RULE_SETUP } } YY_BREAK -case 177: +case 169: YY_RULE_SETUP -#line 1835 "dhcp4_lexer.ll" +#line 1749 "dhcp4_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_PROTOCOL) { @@ -4772,9 +4617,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 178: +case 170: YY_RULE_SETUP -#line 1845 "dhcp4_lexer.ll" +#line 1759 "dhcp4_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_PROTOCOL) { @@ -4785,9 +4630,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 179: +case 171: YY_RULE_SETUP -#line 1855 "dhcp4_lexer.ll" +#line 1769 "dhcp4_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_FORMAT) { @@ -4798,9 +4643,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 180: +case 172: YY_RULE_SETUP -#line 1865 "dhcp4_lexer.ll" +#line 1779 "dhcp4_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) { @@ -4811,9 +4656,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 181: +case 173: YY_RULE_SETUP -#line 1875 "dhcp4_lexer.ll" +#line 1789 "dhcp4_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) { @@ -4824,9 +4669,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 182: +case 174: YY_RULE_SETUP -#line 1885 "dhcp4_lexer.ll" +#line 1799 "dhcp4_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) { @@ -4837,9 +4682,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 183: +case 175: YY_RULE_SETUP -#line 1895 "dhcp4_lexer.ll" +#line 1809 "dhcp4_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) { @@ -4850,9 +4695,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 184: +case 176: YY_RULE_SETUP -#line 1905 "dhcp4_lexer.ll" +#line 1819 "dhcp4_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) { @@ -4863,9 +4708,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 185: +case 177: YY_RULE_SETUP -#line 1915 "dhcp4_lexer.ll" +#line 1829 "dhcp4_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) { @@ -4876,9 +4721,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 186: +case 178: YY_RULE_SETUP -#line 1925 "dhcp4_lexer.ll" +#line 1839 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -4888,9 +4733,9 @@ YY_RULE_SETUP } } YY_BREAK -case 187: +case 179: YY_RULE_SETUP -#line 1934 "dhcp4_lexer.ll" +#line 1848 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -4900,9 +4745,9 @@ YY_RULE_SETUP } } YY_BREAK -case 188: +case 180: YY_RULE_SETUP -#line 1943 "dhcp4_lexer.ll" +#line 1857 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -4912,9 +4757,9 @@ YY_RULE_SETUP } } YY_BREAK -case 189: +case 181: YY_RULE_SETUP -#line 1952 "dhcp4_lexer.ll" +#line 1866 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4924,9 +4769,9 @@ YY_RULE_SETUP } } YY_BREAK -case 190: +case 182: YY_RULE_SETUP -#line 1961 "dhcp4_lexer.ll" +#line 1875 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4938,9 +4783,9 @@ YY_RULE_SETUP } } YY_BREAK -case 191: +case 183: YY_RULE_SETUP -#line 1972 "dhcp4_lexer.ll" +#line 1886 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4952,9 +4797,9 @@ YY_RULE_SETUP } } YY_BREAK -case 192: +case 184: YY_RULE_SETUP -#line 1983 "dhcp4_lexer.ll" +#line 1897 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4968,9 +4813,9 @@ YY_RULE_SETUP } } YY_BREAK -case 193: +case 185: YY_RULE_SETUP -#line 1996 "dhcp4_lexer.ll" +#line 1910 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4984,9 +4829,9 @@ YY_RULE_SETUP } } YY_BREAK -case 194: +case 186: YY_RULE_SETUP -#line 2009 "dhcp4_lexer.ll" +#line 1923 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -5000,9 +4845,9 @@ YY_RULE_SETUP } } YY_BREAK -case 195: +case 187: YY_RULE_SETUP -#line 2022 "dhcp4_lexer.ll" +#line 1936 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -5012,9 +4857,9 @@ YY_RULE_SETUP } } YY_BREAK -case 196: +case 188: YY_RULE_SETUP -#line 2031 "dhcp4_lexer.ll" +#line 1945 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -5024,9 +4869,9 @@ YY_RULE_SETUP } } YY_BREAK -case 197: +case 189: YY_RULE_SETUP -#line 2040 "dhcp4_lexer.ll" +#line 1954 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -5036,9 +4881,9 @@ YY_RULE_SETUP } } YY_BREAK -case 198: +case 190: YY_RULE_SETUP -#line 2049 "dhcp4_lexer.ll" +#line 1963 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -5048,9 +4893,9 @@ YY_RULE_SETUP } } YY_BREAK -case 199: +case 191: YY_RULE_SETUP -#line 2058 "dhcp4_lexer.ll" +#line 1972 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::COMPATIBILITY: @@ -5060,9 +4905,9 @@ YY_RULE_SETUP } } YY_BREAK -case 200: +case 192: YY_RULE_SETUP -#line 2067 "dhcp4_lexer.ll" +#line 1981 "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. @@ -5164,10 +5009,10 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_STRING(decoded, driver.loc_); } YY_BREAK -case 201: -/* rule 201 can match eol */ +case 193: +/* rule 193 can match eol */ YY_RULE_SETUP -#line 2168 "dhcp4_lexer.ll" +#line 2082 "dhcp4_lexer.ll" { /* Bad string with a forbidden control character inside */ std::string raw(yytext+1); @@ -5184,10 +5029,10 @@ YY_RULE_SETUP pos + 1); } YY_BREAK -case 202: -/* rule 202 can match eol */ +case 194: +/* rule 194 can match eol */ YY_RULE_SETUP -#line 2184 "dhcp4_lexer.ll" +#line 2098 "dhcp4_lexer.ll" { /* Bad string with a bad escape inside */ std::string raw(yytext+1); @@ -5237,9 +5082,9 @@ YY_RULE_SETUP pos); } YY_BREAK -case 203: +case 195: YY_RULE_SETUP -#line 2233 "dhcp4_lexer.ll" +#line 2147 "dhcp4_lexer.ll" { /* Bad string with an open escape at the end */ std::string raw(yytext+1); @@ -5248,9 +5093,9 @@ YY_RULE_SETUP raw.size() + 1); } YY_BREAK -case 204: +case 196: YY_RULE_SETUP -#line 2241 "dhcp4_lexer.ll" +#line 2155 "dhcp4_lexer.ll" { /* Bad string with an open unicode escape at the end */ std::string raw(yytext+1); @@ -5266,39 +5111,39 @@ YY_RULE_SETUP pos + 1); } YY_BREAK -case 205: +case 197: YY_RULE_SETUP -#line 2256 "dhcp4_lexer.ll" +#line 2170 "dhcp4_lexer.ll" { return isc::dhcp::Dhcp4Parser::make_LSQUARE_BRACKET(driver.loc_); } YY_BREAK -case 206: +case 198: YY_RULE_SETUP -#line 2257 "dhcp4_lexer.ll" +#line 2171 "dhcp4_lexer.ll" { return isc::dhcp::Dhcp4Parser::make_RSQUARE_BRACKET(driver.loc_); } YY_BREAK -case 207: +case 199: YY_RULE_SETUP -#line 2258 "dhcp4_lexer.ll" +#line 2172 "dhcp4_lexer.ll" { return isc::dhcp::Dhcp4Parser::make_LCURLY_BRACKET(driver.loc_); } YY_BREAK -case 208: +case 200: YY_RULE_SETUP -#line 2259 "dhcp4_lexer.ll" +#line 2173 "dhcp4_lexer.ll" { return isc::dhcp::Dhcp4Parser::make_RCURLY_BRACKET(driver.loc_); } YY_BREAK -case 209: +case 201: YY_RULE_SETUP -#line 2260 "dhcp4_lexer.ll" +#line 2174 "dhcp4_lexer.ll" { return isc::dhcp::Dhcp4Parser::make_COMMA(driver.loc_); } YY_BREAK -case 210: +case 202: YY_RULE_SETUP -#line 2261 "dhcp4_lexer.ll" +#line 2175 "dhcp4_lexer.ll" { return isc::dhcp::Dhcp4Parser::make_COLON(driver.loc_); } YY_BREAK -case 211: +case 203: YY_RULE_SETUP -#line 2263 "dhcp4_lexer.ll" +#line 2177 "dhcp4_lexer.ll" { /* An integer was found. */ std::string tmp(yytext); @@ -5317,9 +5162,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_INTEGER(integer, driver.loc_); } YY_BREAK -case 212: +case 204: YY_RULE_SETUP -#line 2281 "dhcp4_lexer.ll" +#line 2195 "dhcp4_lexer.ll" { /* A floating point was found. */ std::string tmp(yytext); @@ -5333,43 +5178,43 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_FLOAT(fp, driver.loc_); } YY_BREAK -case 213: +case 205: YY_RULE_SETUP -#line 2294 "dhcp4_lexer.ll" +#line 2208 "dhcp4_lexer.ll" { string tmp(yytext); return isc::dhcp::Dhcp4Parser::make_BOOLEAN(tmp == "true", driver.loc_); } YY_BREAK -case 214: +case 206: YY_RULE_SETUP -#line 2299 "dhcp4_lexer.ll" +#line 2213 "dhcp4_lexer.ll" { return isc::dhcp::Dhcp4Parser::make_NULL_TYPE(driver.loc_); } YY_BREAK -case 215: +case 207: YY_RULE_SETUP -#line 2303 "dhcp4_lexer.ll" +#line 2217 "dhcp4_lexer.ll" driver.error (driver.loc_, "JSON true reserved keyword is lower case only"); YY_BREAK -case 216: +case 208: YY_RULE_SETUP -#line 2305 "dhcp4_lexer.ll" +#line 2219 "dhcp4_lexer.ll" driver.error (driver.loc_, "JSON false reserved keyword is lower case only"); YY_BREAK -case 217: +case 209: YY_RULE_SETUP -#line 2307 "dhcp4_lexer.ll" +#line 2221 "dhcp4_lexer.ll" driver.error (driver.loc_, "JSON null reserved keyword is lower case only"); YY_BREAK -case 218: +case 210: YY_RULE_SETUP -#line 2309 "dhcp4_lexer.ll" +#line 2223 "dhcp4_lexer.ll" driver.error (driver.loc_, "Invalid character: " + std::string(yytext)); YY_BREAK case YY_STATE_EOF(INITIAL): -#line 2311 "dhcp4_lexer.ll" +#line 2225 "dhcp4_lexer.ll" { if (driver.states_.empty()) { return isc::dhcp::Dhcp4Parser::make_END(driver.loc_); @@ -5393,12 +5238,12 @@ case YY_STATE_EOF(INITIAL): BEGIN(DIR_EXIT); } YY_BREAK -case 219: +case 211: YY_RULE_SETUP -#line 2334 "dhcp4_lexer.ll" +#line 2248 "dhcp4_lexer.ll" ECHO; YY_BREAK -#line 5401 "dhcp4_lexer.cc" +#line 5247 "dhcp4_lexer.cc" case YY_END_OF_BUFFER: { @@ -5717,7 +5562,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2089 ) + if ( yy_current_state >= 2011 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -5750,11 +5595,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2089 ) + if ( yy_current_state >= 2011 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 2088); + yy_is_jam = (yy_current_state == 2010); return yy_is_jam ? 0 : yy_current_state; } @@ -6503,7 +6348,7 @@ void yyfree (void * ptr ) /* %ok-for-header */ -#line 2334 "dhcp4_lexer.ll" +#line 2248 "dhcp4_lexer.ll" using namespace isc::dhcp; diff --git a/src/bin/dhcp4/dhcp4_lexer.ll b/src/bin/dhcp4/dhcp4_lexer.ll index 8f9bd8f449..c4ca38f734 100644 --- a/src/bin/dhcp4/dhcp4_lexer.ll +++ b/src/bin/dhcp4/dhcp4_lexer.ll @@ -397,15 +397,6 @@ ControlCharacterFill [^"\\]|\\["\\/bfnrtu] } } -\"cql\" { - switch(driver.ctx_) { - case isc::dhcp::Parser4Context::DATABASE_TYPE: - return isc::dhcp::Dhcp4Parser::make_CQL(driver.loc_); - default: - return isc::dhcp::Dhcp4Parser::make_STRING("cql", driver.loc_); - } -} - \"user\" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -483,39 +474,6 @@ ControlCharacterFill [^"\\]|\\["\\/bfnrtu] } } -\"keyspace\" { - switch(driver.ctx_) { - case isc::dhcp::Parser4Context::LEASE_DATABASE: - case isc::dhcp::Parser4Context::HOSTS_DATABASE: - case isc::dhcp::Parser4Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp4Parser::make_KEYSPACE(driver.loc_); - default: - return isc::dhcp::Dhcp4Parser::make_STRING("keyspace", driver.loc_); - } -} - -\"consistency\" { - switch(driver.ctx_) { - case isc::dhcp::Parser4Context::LEASE_DATABASE: - case isc::dhcp::Parser4Context::HOSTS_DATABASE: - case isc::dhcp::Parser4Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp4Parser::make_CONSISTENCY(driver.loc_); - default: - return isc::dhcp::Dhcp4Parser::make_STRING("consistency", driver.loc_); - } -} - -\"serial-consistency\" { - switch(driver.ctx_) { - case isc::dhcp::Parser4Context::LEASE_DATABASE: - case isc::dhcp::Parser4Context::HOSTS_DATABASE: - case isc::dhcp::Parser4Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp4Parser::make_SERIAL_CONSISTENCY(driver.loc_); - default: - return isc::dhcp::Dhcp4Parser::make_STRING("serial-consistency", driver.loc_); - } -} - \"reconnect-wait-time\" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -565,50 +523,6 @@ ControlCharacterFill [^"\\]|\\["\\/bfnrtu] } } -\"request-timeout\" { - switch(driver.ctx_) { - case isc::dhcp::Parser4Context::LEASE_DATABASE: - case isc::dhcp::Parser4Context::HOSTS_DATABASE: - case isc::dhcp::Parser4Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp4Parser::make_REQUEST_TIMEOUT(driver.loc_); - default: - return isc::dhcp::Dhcp4Parser::make_STRING("request-timeout", driver.loc_); - } -} - -\"tcp-keepalive\" { - switch(driver.ctx_) { - case isc::dhcp::Parser4Context::LEASE_DATABASE: - case isc::dhcp::Parser4Context::HOSTS_DATABASE: - case isc::dhcp::Parser4Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp4Parser::make_TCP_KEEPALIVE(driver.loc_); - default: - return isc::dhcp::Dhcp4Parser::make_STRING("tcp-keepalive", driver.loc_); - } -} - -\"tcp-nodelay\" { - switch(driver.ctx_) { - case isc::dhcp::Parser4Context::LEASE_DATABASE: - case isc::dhcp::Parser4Context::HOSTS_DATABASE: - case isc::dhcp::Parser4Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp4Parser::make_TCP_NODELAY(driver.loc_); - default: - return isc::dhcp::Dhcp4Parser::make_STRING("tcp-nodelay", driver.loc_); - } -} - -\"contact-points\" { - switch(driver.ctx_) { - case isc::dhcp::Parser4Context::LEASE_DATABASE: - case isc::dhcp::Parser4Context::HOSTS_DATABASE: - case isc::dhcp::Parser4Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp4Parser::make_CONTACT_POINTS(driver.loc_); - default: - return isc::dhcp::Dhcp4Parser::make_STRING("contact-points", driver.loc_); - } -} - \"max-reconnect-tries\" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: diff --git a/src/bin/dhcp4/dhcp4_parser.cc b/src/bin/dhcp4/dhcp4_parser.cc index 10628cfca1..21c8174aad 100644 --- a/src/bin/dhcp4/dhcp4_parser.cc +++ b/src/bin/dhcp4/dhcp4_parser.cc @@ -1,8 +1,8 @@ -// A Bison parser, made by GNU Bison 3.8.2. +// A Bison parser, made by GNU Bison 3.5.1. // Skeleton implementation for Bison LALR(1) parsers in C++ -// Copyright (C) 2002-2015, 2018-2021 Free Software Foundation, Inc. +// Copyright (C) 2002-2015, 2018-2020 Free Software Foundation, Inc. // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ // GNU General Public License for more details. // You should have received a copy of the GNU General Public License -// along with this program. If not, see . +// along with this program. If not, see . // As a special exception, you may create a larger work that contains // part or all of the Bison parser skeleton and distribute that work @@ -30,9 +30,8 @@ // This special exception was added by the Free Software Foundation in // version 2.2 of Bison. -// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, -// especially those whose name start with YY_ or yy_. They are -// private implementation details that can be changed or removed. +// Undocumented macros, especially those whose name start with YY_, +// are private implementation details. Do not rely on them. // Take the name prefix into account. @@ -48,7 +47,7 @@ #include -#line 52 "dhcp4_parser.cc" +#line 51 "dhcp4_parser.cc" #ifndef YY_ @@ -63,7 +62,6 @@ # endif #endif - // Whether we are compiled with exception support. #ifndef YY_EXCEPTIONS # if defined __GNUC__ && !defined __EXCEPTIONS @@ -119,13 +117,13 @@ # define YY_STACK_PRINT() \ do { \ if (yydebug_) \ - yy_stack_print_ (); \ + yystack_print_ (); \ } while (false) #else // !PARSER4_DEBUG # define YYCDEBUG if (false) std::cerr -# define YY_SYMBOL_PRINT(Title, Symbol) YY_USE (Symbol) +# define YY_SYMBOL_PRINT(Title, Symbol) YYUSE (Symbol) # define YY_REDUCE_PRINT(Rule) static_cast (0) # define YY_STACK_PRINT() static_cast (0) @@ -141,7 +139,49 @@ #line 14 "dhcp4_parser.yy" namespace isc { namespace dhcp { -#line 145 "dhcp4_parser.cc" +#line 143 "dhcp4_parser.cc" + + + /* Return YYSTR after stripping away unnecessary quotes and + backslashes, so that it's suitable for yyerror. The heuristic is + that double-quoting is unnecessary unless the string contains an + apostrophe, a comma, or backslash (other than backslash-backslash). + YYSTR is taken from yytname. */ + std::string + Dhcp4Parser::yytnamerr_ (const char *yystr) + { + if (*yystr == '"') + { + std::string yyr; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + else + goto append; + + append: + default: + yyr += *yyp; + break; + + case '"': + return yyr; + } + do_not_strip_quotes: ; + } + + return yystr; + } + /// Build a parser object. Dhcp4Parser::Dhcp4Parser (isc::dhcp::Parser4Context& ctx_yyarg) @@ -160,9 +200,9 @@ namespace isc { namespace dhcp { Dhcp4Parser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW {} - /*---------. - | symbol. | - `---------*/ + /*---------------. + | Symbol types. | + `---------------*/ @@ -192,13 +232,13 @@ namespace isc { namespace dhcp { : state (s) {} - Dhcp4Parser::symbol_kind_type - Dhcp4Parser::by_state::kind () const YY_NOEXCEPT + Dhcp4Parser::symbol_number_type + Dhcp4Parser::by_state::type_get () const YY_NOEXCEPT { if (state == empty_state) - return symbol_kind::S_YYEMPTY; + return empty_symbol; else - return YY_CAST (symbol_kind_type, yystos_[+state]); + return yystos_[+state]; } Dhcp4Parser::stack_symbol_type::stack_symbol_type () @@ -207,33 +247,33 @@ namespace isc { namespace dhcp { Dhcp4Parser::stack_symbol_type::stack_symbol_type (YY_RVREF (stack_symbol_type) that) : super_type (YY_MOVE (that.state), YY_MOVE (that.location)) { - switch (that.kind ()) + switch (that.type_get ()) { - case symbol_kind::S_value: // value - case symbol_kind::S_map_value: // map_value - case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value - case symbol_kind::S_socket_type: // socket_type - case symbol_kind::S_outbound_interface_value: // outbound_interface_value - case symbol_kind::S_db_type: // db_type - case symbol_kind::S_on_fail_mode: // on_fail_mode - case symbol_kind::S_hr_mode: // hr_mode - case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value + case 218: // value + case 222: // map_value + case 265: // ddns_replace_client_name_value + case 292: // socket_type + case 295: // outbound_interface_value + case 317: // db_type + case 335: // on_fail_mode + case 414: // hr_mode + case 569: // ncr_protocol_value value.YY_MOVE_OR_COPY< ElementPtr > (YY_MOVE (that.value)); break; - case symbol_kind::S_BOOLEAN: // "boolean" + case 202: // "boolean" value.YY_MOVE_OR_COPY< bool > (YY_MOVE (that.value)); break; - case symbol_kind::S_FLOAT: // "floating point" + case 201: // "floating point" value.YY_MOVE_OR_COPY< double > (YY_MOVE (that.value)); break; - case symbol_kind::S_INTEGER: // "integer" + case 200: // "integer" value.YY_MOVE_OR_COPY< int64_t > (YY_MOVE (that.value)); break; - case symbol_kind::S_STRING: // "constant string" + case 199: // "constant string" value.YY_MOVE_OR_COPY< std::string > (YY_MOVE (that.value)); break; @@ -250,33 +290,33 @@ namespace isc { namespace dhcp { Dhcp4Parser::stack_symbol_type::stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) that) : super_type (s, YY_MOVE (that.location)) { - switch (that.kind ()) + switch (that.type_get ()) { - case symbol_kind::S_value: // value - case symbol_kind::S_map_value: // map_value - case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value - case symbol_kind::S_socket_type: // socket_type - case symbol_kind::S_outbound_interface_value: // outbound_interface_value - case symbol_kind::S_db_type: // db_type - case symbol_kind::S_on_fail_mode: // on_fail_mode - case symbol_kind::S_hr_mode: // hr_mode - case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value + case 218: // value + case 222: // map_value + case 265: // ddns_replace_client_name_value + case 292: // socket_type + case 295: // outbound_interface_value + case 317: // db_type + case 335: // on_fail_mode + case 414: // hr_mode + case 569: // ncr_protocol_value value.move< ElementPtr > (YY_MOVE (that.value)); break; - case symbol_kind::S_BOOLEAN: // "boolean" + case 202: // "boolean" value.move< bool > (YY_MOVE (that.value)); break; - case symbol_kind::S_FLOAT: // "floating point" + case 201: // "floating point" value.move< double > (YY_MOVE (that.value)); break; - case symbol_kind::S_INTEGER: // "integer" + case 200: // "integer" value.move< int64_t > (YY_MOVE (that.value)); break; - case symbol_kind::S_STRING: // "constant string" + case 199: // "constant string" value.move< std::string > (YY_MOVE (that.value)); break; @@ -285,7 +325,7 @@ namespace isc { namespace dhcp { } // that is emptied. - that.kind_ = symbol_kind::S_YYEMPTY; + that.type = empty_symbol; } #if YY_CPLUSPLUS < 201103L @@ -293,33 +333,33 @@ namespace isc { namespace dhcp { Dhcp4Parser::stack_symbol_type::operator= (const stack_symbol_type& that) { state = that.state; - switch (that.kind ()) + switch (that.type_get ()) { - case symbol_kind::S_value: // value - case symbol_kind::S_map_value: // map_value - case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value - case symbol_kind::S_socket_type: // socket_type - case symbol_kind::S_outbound_interface_value: // outbound_interface_value - case symbol_kind::S_db_type: // db_type - case symbol_kind::S_on_fail_mode: // on_fail_mode - case symbol_kind::S_hr_mode: // hr_mode - case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value + case 218: // value + case 222: // map_value + case 265: // ddns_replace_client_name_value + case 292: // socket_type + case 295: // outbound_interface_value + case 317: // db_type + case 335: // on_fail_mode + case 414: // hr_mode + case 569: // ncr_protocol_value value.copy< ElementPtr > (that.value); break; - case symbol_kind::S_BOOLEAN: // "boolean" + case 202: // "boolean" value.copy< bool > (that.value); break; - case symbol_kind::S_FLOAT: // "floating point" + case 201: // "floating point" value.copy< double > (that.value); break; - case symbol_kind::S_INTEGER: // "integer" + case 200: // "integer" value.copy< int64_t > (that.value); break; - case symbol_kind::S_STRING: // "constant string" + case 199: // "constant string" value.copy< std::string > (that.value); break; @@ -335,33 +375,33 @@ namespace isc { namespace dhcp { Dhcp4Parser::stack_symbol_type::operator= (stack_symbol_type& that) { state = that.state; - switch (that.kind ()) + switch (that.type_get ()) { - case symbol_kind::S_value: // value - case symbol_kind::S_map_value: // map_value - case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value - case symbol_kind::S_socket_type: // socket_type - case symbol_kind::S_outbound_interface_value: // outbound_interface_value - case symbol_kind::S_db_type: // db_type - case symbol_kind::S_on_fail_mode: // on_fail_mode - case symbol_kind::S_hr_mode: // hr_mode - case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value + case 218: // value + case 222: // map_value + case 265: // ddns_replace_client_name_value + case 292: // socket_type + case 295: // outbound_interface_value + case 317: // db_type + case 335: // on_fail_mode + case 414: // hr_mode + case 569: // ncr_protocol_value value.move< ElementPtr > (that.value); break; - case symbol_kind::S_BOOLEAN: // "boolean" + case 202: // "boolean" value.move< bool > (that.value); break; - case symbol_kind::S_FLOAT: // "floating point" + case 201: // "floating point" value.move< double > (that.value); break; - case symbol_kind::S_INTEGER: // "integer" + case 200: // "integer" value.move< int64_t > (that.value); break; - case symbol_kind::S_STRING: // "constant string" + case 199: // "constant string" value.move< std::string > (that.value); break; @@ -387,103 +427,105 @@ namespace isc { namespace dhcp { #if PARSER4_DEBUG template void - Dhcp4Parser::yy_print_ (std::ostream& yyo, const basic_symbol& yysym) const + Dhcp4Parser::yy_print_ (std::ostream& yyo, + const basic_symbol& yysym) const { std::ostream& yyoutput = yyo; - YY_USE (yyoutput); + YYUSE (yyoutput); + symbol_number_type yytype = yysym.type_get (); +#if defined __GNUC__ && ! defined __clang__ && ! defined __ICC && __GNUC__ * 100 + __GNUC_MINOR__ <= 408 + // Avoid a (spurious) G++ 4.8 warning about "array subscript is + // below array bounds". if (yysym.empty ()) - yyo << "empty symbol"; - else - { - symbol_kind_type yykind = yysym.kind (); - yyo << (yykind < YYNTOKENS ? "token" : "nterm") - << ' ' << yysym.name () << " (" - << yysym.location << ": "; - switch (yykind) + std::abort (); +#endif + yyo << (yytype < yyntokens_ ? "token" : "nterm") + << ' ' << yytname_[yytype] << " (" + << yysym.location << ": "; + switch (yytype) { - case symbol_kind::S_STRING: // "constant string" -#line 291 "dhcp4_parser.yy" + case 199: // "constant string" +#line 283 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < std::string > (); } -#line 408 "dhcp4_parser.cc" +#line 451 "dhcp4_parser.cc" break; - case symbol_kind::S_INTEGER: // "integer" -#line 291 "dhcp4_parser.yy" + case 200: // "integer" +#line 283 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < int64_t > (); } -#line 414 "dhcp4_parser.cc" +#line 457 "dhcp4_parser.cc" break; - case symbol_kind::S_FLOAT: // "floating point" -#line 291 "dhcp4_parser.yy" + case 201: // "floating point" +#line 283 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < double > (); } -#line 420 "dhcp4_parser.cc" +#line 463 "dhcp4_parser.cc" break; - case symbol_kind::S_BOOLEAN: // "boolean" -#line 291 "dhcp4_parser.yy" + case 202: // "boolean" +#line 283 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < bool > (); } -#line 426 "dhcp4_parser.cc" +#line 469 "dhcp4_parser.cc" break; - case symbol_kind::S_value: // value -#line 291 "dhcp4_parser.yy" + case 218: // value +#line 283 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } -#line 432 "dhcp4_parser.cc" +#line 475 "dhcp4_parser.cc" break; - case symbol_kind::S_map_value: // map_value -#line 291 "dhcp4_parser.yy" + case 222: // map_value +#line 283 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } -#line 438 "dhcp4_parser.cc" +#line 481 "dhcp4_parser.cc" break; - case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value -#line 291 "dhcp4_parser.yy" + case 265: // ddns_replace_client_name_value +#line 283 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } -#line 444 "dhcp4_parser.cc" +#line 487 "dhcp4_parser.cc" break; - case symbol_kind::S_socket_type: // socket_type -#line 291 "dhcp4_parser.yy" + case 292: // socket_type +#line 283 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } -#line 450 "dhcp4_parser.cc" +#line 493 "dhcp4_parser.cc" break; - case symbol_kind::S_outbound_interface_value: // outbound_interface_value -#line 291 "dhcp4_parser.yy" + case 295: // outbound_interface_value +#line 283 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } -#line 456 "dhcp4_parser.cc" +#line 499 "dhcp4_parser.cc" break; - case symbol_kind::S_db_type: // db_type -#line 291 "dhcp4_parser.yy" + case 317: // db_type +#line 283 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } -#line 462 "dhcp4_parser.cc" +#line 505 "dhcp4_parser.cc" break; - case symbol_kind::S_on_fail_mode: // on_fail_mode -#line 291 "dhcp4_parser.yy" + case 335: // on_fail_mode +#line 283 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } -#line 468 "dhcp4_parser.cc" +#line 511 "dhcp4_parser.cc" break; - case symbol_kind::S_hr_mode: // hr_mode -#line 291 "dhcp4_parser.yy" + case 414: // hr_mode +#line 283 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } -#line 474 "dhcp4_parser.cc" +#line 517 "dhcp4_parser.cc" break; - case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value -#line 291 "dhcp4_parser.yy" + case 569: // ncr_protocol_value +#line 283 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } -#line 480 "dhcp4_parser.cc" +#line 523 "dhcp4_parser.cc" break; default: break; } - yyo << ')'; - } + yyo << ')'; } #endif @@ -507,7 +549,7 @@ namespace isc { namespace dhcp { } void - Dhcp4Parser::yypop_ (int n) YY_NOEXCEPT + Dhcp4Parser::yypop_ (int n) { yystack_.pop (n); } @@ -542,21 +584,21 @@ namespace isc { namespace dhcp { Dhcp4Parser::state_type Dhcp4Parser::yy_lr_goto_state_ (state_type yystate, int yysym) { - int yyr = yypgoto_[yysym - YYNTOKENS] + yystate; + int yyr = yypgoto_[yysym - yyntokens_] + yystate; if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate) return yytable_[yyr]; else - return yydefgoto_[yysym - YYNTOKENS]; + return yydefgoto_[yysym - yyntokens_]; } bool - Dhcp4Parser::yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT + Dhcp4Parser::yy_pact_value_is_default_ (int yyvalue) { return yyvalue == yypact_ninf_; } bool - Dhcp4Parser::yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT + Dhcp4Parser::yy_table_value_is_error_ (int yyvalue) { return yyvalue == yytable_ninf_; } @@ -606,7 +648,6 @@ namespace isc { namespace dhcp { `-----------------------------------------------*/ yynewstate: YYCDEBUG << "Entering state " << int (yystack_[0].state) << '\n'; - YY_STACK_PRINT (); // Accept? if (yystack_[0].state == yyfinal_) @@ -627,7 +668,7 @@ namespace isc { namespace dhcp { // Read a lookahead token. if (yyla.empty ()) { - YYCDEBUG << "Reading a token\n"; + YYCDEBUG << "Reading a token: "; #if YY_EXCEPTIONS try #endif // YY_EXCEPTIONS @@ -646,20 +687,10 @@ namespace isc { namespace dhcp { } YY_SYMBOL_PRINT ("Next token is", yyla); - if (yyla.kind () == symbol_kind::S_YYerror) - { - // The scanner already issued an error message, process directly - // to error recovery. But do not keep the error token as - // lookahead, it is too special and may lead us to an endless - // loop in error recovery. */ - yyla.kind_ = symbol_kind::S_YYUNDEF; - goto yyerrlab1; - } - /* If the proper action on seeing token YYLA.TYPE is to reduce or to detect an error, take that action. */ - yyn += yyla.kind (); - if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.kind ()) + yyn += yyla.type_get (); + if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.type_get ()) { goto yydefault; } @@ -706,31 +737,31 @@ namespace isc { namespace dhcp { when using variants. */ switch (yyr1_[yyn]) { - case symbol_kind::S_value: // value - case symbol_kind::S_map_value: // map_value - case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value - case symbol_kind::S_socket_type: // socket_type - case symbol_kind::S_outbound_interface_value: // outbound_interface_value - case symbol_kind::S_db_type: // db_type - case symbol_kind::S_on_fail_mode: // on_fail_mode - case symbol_kind::S_hr_mode: // hr_mode - case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value + case 218: // value + case 222: // map_value + case 265: // ddns_replace_client_name_value + case 292: // socket_type + case 295: // outbound_interface_value + case 317: // db_type + case 335: // on_fail_mode + case 414: // hr_mode + case 569: // ncr_protocol_value yylhs.value.emplace< ElementPtr > (); break; - case symbol_kind::S_BOOLEAN: // "boolean" + case 202: // "boolean" yylhs.value.emplace< bool > (); break; - case symbol_kind::S_FLOAT: // "floating point" + case 201: // "floating point" yylhs.value.emplace< double > (); break; - case symbol_kind::S_INTEGER: // "integer" + case 200: // "integer" yylhs.value.emplace< int64_t > (); break; - case symbol_kind::S_STRING: // "constant string" + case 199: // "constant string" yylhs.value.emplace< std::string > (); break; @@ -754,301 +785,301 @@ namespace isc { namespace dhcp { { switch (yyn) { - case 2: // $@1: %empty -#line 300 "dhcp4_parser.yy" + case 2: +#line 292 "dhcp4_parser.yy" { ctx.ctx_ = ctx.NO_KEYWORD; } -#line 761 "dhcp4_parser.cc" +#line 792 "dhcp4_parser.cc" break; - case 4: // $@2: %empty -#line 301 "dhcp4_parser.yy" + case 4: +#line 293 "dhcp4_parser.yy" { ctx.ctx_ = ctx.CONFIG; } -#line 767 "dhcp4_parser.cc" +#line 798 "dhcp4_parser.cc" break; - case 6: // $@3: %empty -#line 302 "dhcp4_parser.yy" + case 6: +#line 294 "dhcp4_parser.yy" { ctx.ctx_ = ctx.DHCP4; } -#line 773 "dhcp4_parser.cc" +#line 804 "dhcp4_parser.cc" break; - case 8: // $@4: %empty -#line 303 "dhcp4_parser.yy" + case 8: +#line 295 "dhcp4_parser.yy" { ctx.ctx_ = ctx.INTERFACES_CONFIG; } -#line 779 "dhcp4_parser.cc" +#line 810 "dhcp4_parser.cc" break; - case 10: // $@5: %empty -#line 304 "dhcp4_parser.yy" + case 10: +#line 296 "dhcp4_parser.yy" { ctx.ctx_ = ctx.SUBNET4; } -#line 785 "dhcp4_parser.cc" +#line 816 "dhcp4_parser.cc" break; - case 12: // $@6: %empty -#line 305 "dhcp4_parser.yy" + case 12: +#line 297 "dhcp4_parser.yy" { ctx.ctx_ = ctx.POOLS; } -#line 791 "dhcp4_parser.cc" +#line 822 "dhcp4_parser.cc" break; - case 14: // $@7: %empty -#line 306 "dhcp4_parser.yy" + case 14: +#line 298 "dhcp4_parser.yy" { ctx.ctx_ = ctx.RESERVATIONS; } -#line 797 "dhcp4_parser.cc" +#line 828 "dhcp4_parser.cc" break; - case 16: // $@8: %empty -#line 307 "dhcp4_parser.yy" + case 16: +#line 299 "dhcp4_parser.yy" { ctx.ctx_ = ctx.DHCP4; } -#line 803 "dhcp4_parser.cc" +#line 834 "dhcp4_parser.cc" break; - case 18: // $@9: %empty -#line 308 "dhcp4_parser.yy" + case 18: +#line 300 "dhcp4_parser.yy" { ctx.ctx_ = ctx.OPTION_DEF; } -#line 809 "dhcp4_parser.cc" +#line 840 "dhcp4_parser.cc" break; - case 20: // $@10: %empty -#line 309 "dhcp4_parser.yy" + case 20: +#line 301 "dhcp4_parser.yy" { ctx.ctx_ = ctx.OPTION_DATA; } -#line 815 "dhcp4_parser.cc" +#line 846 "dhcp4_parser.cc" break; - case 22: // $@11: %empty -#line 310 "dhcp4_parser.yy" + case 22: +#line 302 "dhcp4_parser.yy" { ctx.ctx_ = ctx.HOOKS_LIBRARIES; } -#line 821 "dhcp4_parser.cc" +#line 852 "dhcp4_parser.cc" break; - case 24: // $@12: %empty -#line 311 "dhcp4_parser.yy" + case 24: +#line 303 "dhcp4_parser.yy" { ctx.ctx_ = ctx.DHCP_DDNS; } -#line 827 "dhcp4_parser.cc" +#line 858 "dhcp4_parser.cc" break; - case 26: // $@13: %empty -#line 312 "dhcp4_parser.yy" + case 26: +#line 304 "dhcp4_parser.yy" { ctx.ctx_ = ctx.CONFIG_CONTROL; } -#line 833 "dhcp4_parser.cc" +#line 864 "dhcp4_parser.cc" break; - case 28: // value: "integer" -#line 320 "dhcp4_parser.yy" + case 28: +#line 312 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); } -#line 839 "dhcp4_parser.cc" +#line 870 "dhcp4_parser.cc" break; - case 29: // value: "floating point" -#line 321 "dhcp4_parser.yy" + case 29: +#line 313 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); } -#line 845 "dhcp4_parser.cc" +#line 876 "dhcp4_parser.cc" break; - case 30: // value: "boolean" -#line 322 "dhcp4_parser.yy" + case 30: +#line 314 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); } -#line 851 "dhcp4_parser.cc" +#line 882 "dhcp4_parser.cc" break; - case 31: // value: "constant string" -#line 323 "dhcp4_parser.yy" + case 31: +#line 315 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); } -#line 857 "dhcp4_parser.cc" +#line 888 "dhcp4_parser.cc" break; - case 32: // value: "null" -#line 324 "dhcp4_parser.yy" + case 32: +#line 316 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); } -#line 863 "dhcp4_parser.cc" +#line 894 "dhcp4_parser.cc" break; - case 33: // value: map2 -#line 325 "dhcp4_parser.yy" + case 33: +#line 317 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } -#line 869 "dhcp4_parser.cc" +#line 900 "dhcp4_parser.cc" break; - case 34: // value: list_generic -#line 326 "dhcp4_parser.yy" + case 34: +#line 318 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } -#line 875 "dhcp4_parser.cc" +#line 906 "dhcp4_parser.cc" break; - case 35: // sub_json: value -#line 329 "dhcp4_parser.yy" + case 35: +#line 321 "dhcp4_parser.yy" { // Push back the JSON value on the stack ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ()); } -#line 884 "dhcp4_parser.cc" +#line 915 "dhcp4_parser.cc" break; - case 36: // $@14: %empty -#line 334 "dhcp4_parser.yy" + case 36: +#line 326 "dhcp4_parser.yy" { // This code is executed when we're about to start parsing // the content of the map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 895 "dhcp4_parser.cc" +#line 926 "dhcp4_parser.cc" break; - case 37: // map2: "{" $@14 map_content "}" -#line 339 "dhcp4_parser.yy" + case 37: +#line 331 "dhcp4_parser.yy" { // map parsing completed. If we ever want to do any wrap up // (maybe some sanity checking), this would be the best place // for it. } -#line 905 "dhcp4_parser.cc" +#line 936 "dhcp4_parser.cc" break; - case 38: // map_value: map2 -#line 345 "dhcp4_parser.yy" + case 38: +#line 337 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } -#line 911 "dhcp4_parser.cc" +#line 942 "dhcp4_parser.cc" break; - case 41: // not_empty_map: "constant string" ":" value -#line 352 "dhcp4_parser.yy" + case 41: +#line 344 "dhcp4_parser.yy" { // map containing a single entry ctx.unique(yystack_[2].value.as < std::string > (), ctx.loc2pos(yystack_[2].location)); ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ()); } -#line 921 "dhcp4_parser.cc" +#line 952 "dhcp4_parser.cc" break; - case 42: // not_empty_map: not_empty_map "," "constant string" ":" value -#line 357 "dhcp4_parser.yy" + case 42: +#line 349 "dhcp4_parser.yy" { // map consisting of a shorter map followed by // comma and string:value ctx.unique(yystack_[2].value.as < std::string > (), ctx.loc2pos(yystack_[2].location)); ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ()); } -#line 932 "dhcp4_parser.cc" +#line 963 "dhcp4_parser.cc" break; - case 43: // not_empty_map: not_empty_map "," -#line 363 "dhcp4_parser.yy" + case 43: +#line 355 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 940 "dhcp4_parser.cc" +#line 971 "dhcp4_parser.cc" break; - case 44: // $@15: %empty -#line 368 "dhcp4_parser.yy" + case 44: +#line 360 "dhcp4_parser.yy" { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(l); } -#line 949 "dhcp4_parser.cc" +#line 980 "dhcp4_parser.cc" break; - case 45: // list_generic: "[" $@15 list_content "]" -#line 371 "dhcp4_parser.yy" + case 45: +#line 363 "dhcp4_parser.yy" { // list parsing complete. Put any sanity checking here } -#line 957 "dhcp4_parser.cc" +#line 988 "dhcp4_parser.cc" break; - case 48: // not_empty_list: value -#line 379 "dhcp4_parser.yy" + case 48: +#line 371 "dhcp4_parser.yy" { // List consisting of a single element. ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ()); } -#line 966 "dhcp4_parser.cc" +#line 997 "dhcp4_parser.cc" break; - case 49: // not_empty_list: not_empty_list "," value -#line 383 "dhcp4_parser.yy" + case 49: +#line 375 "dhcp4_parser.yy" { // List ending with , and a value. ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ()); } -#line 975 "dhcp4_parser.cc" +#line 1006 "dhcp4_parser.cc" break; - case 50: // not_empty_list: not_empty_list "," -#line 387 "dhcp4_parser.yy" + case 50: +#line 379 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 983 "dhcp4_parser.cc" +#line 1014 "dhcp4_parser.cc" break; - case 51: // $@16: %empty -#line 393 "dhcp4_parser.yy" + case 51: +#line 385 "dhcp4_parser.yy" { // List parsing about to start } -#line 991 "dhcp4_parser.cc" +#line 1022 "dhcp4_parser.cc" break; - case 52: // list_strings: "[" $@16 list_strings_content "]" -#line 395 "dhcp4_parser.yy" + case 52: +#line 387 "dhcp4_parser.yy" { // list parsing complete. Put any sanity checking here //ctx.stack_.pop_back(); } -#line 1000 "dhcp4_parser.cc" +#line 1031 "dhcp4_parser.cc" break; - case 55: // not_empty_list_strings: "constant string" -#line 404 "dhcp4_parser.yy" + case 55: +#line 396 "dhcp4_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(s); } -#line 1009 "dhcp4_parser.cc" +#line 1040 "dhcp4_parser.cc" break; - case 56: // not_empty_list_strings: not_empty_list_strings "," "constant string" -#line 408 "dhcp4_parser.yy" + case 56: +#line 400 "dhcp4_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(s); } -#line 1018 "dhcp4_parser.cc" +#line 1049 "dhcp4_parser.cc" break; - case 57: // not_empty_list_strings: not_empty_list_strings "," -#line 412 "dhcp4_parser.yy" + case 57: +#line 404 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 1026 "dhcp4_parser.cc" +#line 1057 "dhcp4_parser.cc" break; - case 58: // unknown_map_entry: "constant string" ":" -#line 422 "dhcp4_parser.yy" + case 58: +#line 414 "dhcp4_parser.yy" { const std::string& where = ctx.contextName(); const std::string& keyword = yystack_[1].value.as < std::string > (); error(yystack_[1].location, "got unexpected keyword \"" + keyword + "\" in " + where + " map."); } -#line 1037 "dhcp4_parser.cc" +#line 1068 "dhcp4_parser.cc" break; - case 59: // $@17: %empty -#line 431 "dhcp4_parser.yy" + case 59: +#line 423 "dhcp4_parser.yy" { // This code is executed when we're about to start parsing // the content of the map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 1048 "dhcp4_parser.cc" +#line 1079 "dhcp4_parser.cc" break; - case 60: // syntax_map: "{" $@17 global_object "}" -#line 436 "dhcp4_parser.yy" + case 60: +#line 428 "dhcp4_parser.yy" { // map parsing completed. If we ever want to do any wrap up // (maybe some sanity checking), this would be the best place @@ -1057,11 +1088,11 @@ namespace isc { namespace dhcp { // Dhcp4 is required ctx.require("Dhcp4", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); } -#line 1061 "dhcp4_parser.cc" +#line 1092 "dhcp4_parser.cc" break; - case 61: // $@18: %empty -#line 446 "dhcp4_parser.yy" + case 61: +#line 438 "dhcp4_parser.yy" { // This code is executed when we're about to start parsing // the content of the map @@ -1072,470 +1103,470 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.DHCP4); } -#line 1076 "dhcp4_parser.cc" +#line 1107 "dhcp4_parser.cc" break; - case 62: // global_object: "Dhcp4" $@18 ":" "{" global_params "}" -#line 455 "dhcp4_parser.yy" + case 62: +#line 447 "dhcp4_parser.yy" { // No global parameter is required ctx.stack_.pop_back(); ctx.leave(); } -#line 1086 "dhcp4_parser.cc" +#line 1117 "dhcp4_parser.cc" break; - case 64: // global_object_comma: global_object "," -#line 463 "dhcp4_parser.yy" + case 64: +#line 455 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 1094 "dhcp4_parser.cc" +#line 1125 "dhcp4_parser.cc" break; - case 65: // $@19: %empty -#line 469 "dhcp4_parser.yy" + case 65: +#line 461 "dhcp4_parser.yy" { // Parse the Dhcp4 map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 1104 "dhcp4_parser.cc" +#line 1135 "dhcp4_parser.cc" break; - case 66: // sub_dhcp4: "{" $@19 global_params "}" -#line 473 "dhcp4_parser.yy" + case 66: +#line 465 "dhcp4_parser.yy" { // No global parameter is required // parsing completed } -#line 1113 "dhcp4_parser.cc" +#line 1144 "dhcp4_parser.cc" break; - case 69: // global_params: global_params "," -#line 480 "dhcp4_parser.yy" + case 69: +#line 472 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 1121 "dhcp4_parser.cc" +#line 1152 "dhcp4_parser.cc" break; - case 134: // valid_lifetime: "valid-lifetime" ":" "integer" -#line 553 "dhcp4_parser.yy" + case 134: +#line 545 "dhcp4_parser.yy" { ctx.unique("valid-lifetime", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("valid-lifetime", prf); } -#line 1131 "dhcp4_parser.cc" +#line 1162 "dhcp4_parser.cc" break; - case 135: // min_valid_lifetime: "min-valid-lifetime" ":" "integer" -#line 559 "dhcp4_parser.yy" + case 135: +#line 551 "dhcp4_parser.yy" { ctx.unique("min-valid-lifetime", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("min-valid-lifetime", prf); } -#line 1141 "dhcp4_parser.cc" +#line 1172 "dhcp4_parser.cc" break; - case 136: // max_valid_lifetime: "max-valid-lifetime" ":" "integer" -#line 565 "dhcp4_parser.yy" + case 136: +#line 557 "dhcp4_parser.yy" { ctx.unique("max-valid-lifetime", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-valid-lifetime", prf); } -#line 1151 "dhcp4_parser.cc" +#line 1182 "dhcp4_parser.cc" break; - case 137: // renew_timer: "renew-timer" ":" "integer" -#line 571 "dhcp4_parser.yy" + case 137: +#line 563 "dhcp4_parser.yy" { ctx.unique("renew-timer", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("renew-timer", prf); } -#line 1161 "dhcp4_parser.cc" +#line 1192 "dhcp4_parser.cc" break; - case 138: // rebind_timer: "rebind-timer" ":" "integer" -#line 577 "dhcp4_parser.yy" + case 138: +#line 569 "dhcp4_parser.yy" { ctx.unique("rebind-timer", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("rebind-timer", prf); } -#line 1171 "dhcp4_parser.cc" +#line 1202 "dhcp4_parser.cc" break; - case 139: // calculate_tee_times: "calculate-tee-times" ":" "boolean" -#line 583 "dhcp4_parser.yy" + case 139: +#line 575 "dhcp4_parser.yy" { ctx.unique("calculate-tee-times", ctx.loc2pos(yystack_[2].location)); ElementPtr ctt(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("calculate-tee-times", ctt); } -#line 1181 "dhcp4_parser.cc" +#line 1212 "dhcp4_parser.cc" break; - case 140: // t1_percent: "t1-percent" ":" "floating point" -#line 589 "dhcp4_parser.yy" + case 140: +#line 581 "dhcp4_parser.yy" { ctx.unique("t1-percent", ctx.loc2pos(yystack_[2].location)); ElementPtr t1(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("t1-percent", t1); } -#line 1191 "dhcp4_parser.cc" +#line 1222 "dhcp4_parser.cc" break; - case 141: // t2_percent: "t2-percent" ":" "floating point" -#line 595 "dhcp4_parser.yy" + case 141: +#line 587 "dhcp4_parser.yy" { ctx.unique("t2-percent", ctx.loc2pos(yystack_[2].location)); ElementPtr t2(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("t2-percent", t2); } -#line 1201 "dhcp4_parser.cc" +#line 1232 "dhcp4_parser.cc" break; - case 142: // cache_threshold: "cache-threshold" ":" "floating point" -#line 601 "dhcp4_parser.yy" + case 142: +#line 593 "dhcp4_parser.yy" { ctx.unique("cache-threshold", ctx.loc2pos(yystack_[2].location)); ElementPtr ct(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("cache-threshold", ct); } -#line 1211 "dhcp4_parser.cc" +#line 1242 "dhcp4_parser.cc" break; - case 143: // cache_max_age: "cache-max-age" ":" "integer" -#line 607 "dhcp4_parser.yy" + case 143: +#line 599 "dhcp4_parser.yy" { ctx.unique("cache-max-age", ctx.loc2pos(yystack_[2].location)); ElementPtr cm(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("cache-max-age", cm); } -#line 1221 "dhcp4_parser.cc" +#line 1252 "dhcp4_parser.cc" break; - case 144: // decline_probation_period: "decline-probation-period" ":" "integer" -#line 613 "dhcp4_parser.yy" + case 144: +#line 605 "dhcp4_parser.yy" { ctx.unique("decline-probation-period", ctx.loc2pos(yystack_[2].location)); ElementPtr dpp(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("decline-probation-period", dpp); } -#line 1231 "dhcp4_parser.cc" +#line 1262 "dhcp4_parser.cc" break; - case 145: // $@20: %empty -#line 619 "dhcp4_parser.yy" + case 145: +#line 611 "dhcp4_parser.yy" { ctx.unique("server-tag", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 1240 "dhcp4_parser.cc" +#line 1271 "dhcp4_parser.cc" break; - case 146: // server_tag: "server-tag" $@20 ":" "constant string" -#line 622 "dhcp4_parser.yy" + case 146: +#line 614 "dhcp4_parser.yy" { ElementPtr stag(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-tag", stag); ctx.leave(); } -#line 1250 "dhcp4_parser.cc" +#line 1281 "dhcp4_parser.cc" break; - case 147: // parked_packet_limit: "parked-packet-limit" ":" "integer" -#line 628 "dhcp4_parser.yy" + case 147: +#line 620 "dhcp4_parser.yy" { ctx.unique("parked-packet-limit", ctx.loc2pos(yystack_[2].location)); ElementPtr ppl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("parked-packet-limit", ppl); } -#line 1260 "dhcp4_parser.cc" +#line 1291 "dhcp4_parser.cc" break; - case 148: // echo_client_id: "echo-client-id" ":" "boolean" -#line 634 "dhcp4_parser.yy" + case 148: +#line 626 "dhcp4_parser.yy" { ctx.unique("echo-client-id", ctx.loc2pos(yystack_[2].location)); ElementPtr echo(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("echo-client-id", echo); } -#line 1270 "dhcp4_parser.cc" +#line 1301 "dhcp4_parser.cc" break; - case 149: // match_client_id: "match-client-id" ":" "boolean" -#line 640 "dhcp4_parser.yy" + case 149: +#line 632 "dhcp4_parser.yy" { ctx.unique("match-client-id", ctx.loc2pos(yystack_[2].location)); ElementPtr match(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("match-client-id", match); } -#line 1280 "dhcp4_parser.cc" +#line 1311 "dhcp4_parser.cc" break; - case 150: // authoritative: "authoritative" ":" "boolean" -#line 646 "dhcp4_parser.yy" + case 150: +#line 638 "dhcp4_parser.yy" { ctx.unique("authoritative", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("authoritative", prf); } -#line 1290 "dhcp4_parser.cc" +#line 1321 "dhcp4_parser.cc" break; - case 151: // ddns_send_updates: "ddns-send-updates" ":" "boolean" -#line 652 "dhcp4_parser.yy" + case 151: +#line 644 "dhcp4_parser.yy" { ctx.unique("ddns-send-updates", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ddns-send-updates", b); } -#line 1300 "dhcp4_parser.cc" +#line 1331 "dhcp4_parser.cc" break; - case 152: // ddns_override_no_update: "ddns-override-no-update" ":" "boolean" -#line 658 "dhcp4_parser.yy" + case 152: +#line 650 "dhcp4_parser.yy" { ctx.unique("ddns-override-no-update", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ddns-override-no-update", b); } -#line 1310 "dhcp4_parser.cc" +#line 1341 "dhcp4_parser.cc" break; - case 153: // ddns_override_client_update: "ddns-override-client-update" ":" "boolean" -#line 664 "dhcp4_parser.yy" + case 153: +#line 656 "dhcp4_parser.yy" { ctx.unique("ddns-override-client-update", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ddns-override-client-update", b); } -#line 1320 "dhcp4_parser.cc" +#line 1351 "dhcp4_parser.cc" break; - case 154: // $@21: %empty -#line 670 "dhcp4_parser.yy" + case 154: +#line 662 "dhcp4_parser.yy" { ctx.enter(ctx.REPLACE_CLIENT_NAME); ctx.unique("ddns-replace-client-name", ctx.loc2pos(yystack_[0].location)); } -#line 1329 "dhcp4_parser.cc" +#line 1360 "dhcp4_parser.cc" break; - case 155: // ddns_replace_client_name: "ddns-replace-client-name" $@21 ":" ddns_replace_client_name_value -#line 673 "dhcp4_parser.yy" + case 155: +#line 665 "dhcp4_parser.yy" { ctx.stack_.back()->set("ddns-replace-client-name", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 1338 "dhcp4_parser.cc" +#line 1369 "dhcp4_parser.cc" break; - case 156: // ddns_replace_client_name_value: "when-present" -#line 679 "dhcp4_parser.yy" + case 156: +#line 671 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location))); } -#line 1346 "dhcp4_parser.cc" +#line 1377 "dhcp4_parser.cc" break; - case 157: // ddns_replace_client_name_value: "never" -#line 682 "dhcp4_parser.yy" + case 157: +#line 674 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location))); } -#line 1354 "dhcp4_parser.cc" +#line 1385 "dhcp4_parser.cc" break; - case 158: // ddns_replace_client_name_value: "always" -#line 685 "dhcp4_parser.yy" + case 158: +#line 677 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location))); } -#line 1362 "dhcp4_parser.cc" +#line 1393 "dhcp4_parser.cc" break; - case 159: // ddns_replace_client_name_value: "when-not-present" -#line 688 "dhcp4_parser.yy" + case 159: +#line 680 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location))); } -#line 1370 "dhcp4_parser.cc" +#line 1401 "dhcp4_parser.cc" break; - case 160: // ddns_replace_client_name_value: "boolean" -#line 691 "dhcp4_parser.yy" + case 160: +#line 683 "dhcp4_parser.yy" { error(yystack_[0].location, "boolean values for the replace-client-name are " "no longer supported"); } -#line 1379 "dhcp4_parser.cc" +#line 1410 "dhcp4_parser.cc" break; - case 161: // $@22: %empty -#line 697 "dhcp4_parser.yy" + case 161: +#line 689 "dhcp4_parser.yy" { ctx.unique("ddns-generated-prefix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 1388 "dhcp4_parser.cc" +#line 1419 "dhcp4_parser.cc" break; - case 162: // ddns_generated_prefix: "ddns-generated-prefix" $@22 ":" "constant string" -#line 700 "dhcp4_parser.yy" + case 162: +#line 692 "dhcp4_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ddns-generated-prefix", s); ctx.leave(); } -#line 1398 "dhcp4_parser.cc" +#line 1429 "dhcp4_parser.cc" break; - case 163: // $@23: %empty -#line 706 "dhcp4_parser.yy" + case 163: +#line 698 "dhcp4_parser.yy" { ctx.unique("ddns-qualifying-suffix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 1407 "dhcp4_parser.cc" +#line 1438 "dhcp4_parser.cc" break; - case 164: // ddns_qualifying_suffix: "ddns-qualifying-suffix" $@23 ":" "constant string" -#line 709 "dhcp4_parser.yy" + case 164: +#line 701 "dhcp4_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ddns-qualifying-suffix", s); ctx.leave(); } -#line 1417 "dhcp4_parser.cc" +#line 1448 "dhcp4_parser.cc" break; - case 165: // ddns_update_on_renew: "ddns-update-on-renew" ":" "boolean" -#line 715 "dhcp4_parser.yy" + case 165: +#line 707 "dhcp4_parser.yy" { ctx.unique("ddns-update-on-renew", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ddns-update-on-renew", b); } -#line 1427 "dhcp4_parser.cc" +#line 1458 "dhcp4_parser.cc" break; - case 166: // ddns_use_conflict_resolution: "ddns-use-conflict-resolution" ":" "boolean" -#line 721 "dhcp4_parser.yy" + case 166: +#line 713 "dhcp4_parser.yy" { ctx.unique("ddns-use-conflict-resolution", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ddns-use-conflict-resolution", b); } -#line 1437 "dhcp4_parser.cc" +#line 1468 "dhcp4_parser.cc" break; - case 167: // $@24: %empty -#line 727 "dhcp4_parser.yy" + case 167: +#line 719 "dhcp4_parser.yy" { ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 1446 "dhcp4_parser.cc" +#line 1477 "dhcp4_parser.cc" break; - case 168: // hostname_char_set: "hostname-char-set" $@24 ":" "constant string" -#line 730 "dhcp4_parser.yy" + case 168: +#line 722 "dhcp4_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname-char-set", s); ctx.leave(); } -#line 1456 "dhcp4_parser.cc" +#line 1487 "dhcp4_parser.cc" break; - case 169: // $@25: %empty -#line 736 "dhcp4_parser.yy" + case 169: +#line 728 "dhcp4_parser.yy" { ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 1465 "dhcp4_parser.cc" +#line 1496 "dhcp4_parser.cc" break; - case 170: // hostname_char_replacement: "hostname-char-replacement" $@25 ":" "constant string" -#line 739 "dhcp4_parser.yy" + case 170: +#line 731 "dhcp4_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname-char-replacement", s); ctx.leave(); } -#line 1475 "dhcp4_parser.cc" +#line 1506 "dhcp4_parser.cc" break; - case 171: // store_extended_info: "store-extended-info" ":" "boolean" -#line 745 "dhcp4_parser.yy" + case 171: +#line 737 "dhcp4_parser.yy" { ctx.unique("store-extended-info", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("store-extended-info", b); } -#line 1485 "dhcp4_parser.cc" +#line 1516 "dhcp4_parser.cc" break; - case 172: // statistic_default_sample_count: "statistic-default-sample-count" ":" "integer" -#line 751 "dhcp4_parser.yy" + case 172: +#line 743 "dhcp4_parser.yy" { ctx.unique("statistic-default-sample-count", ctx.loc2pos(yystack_[2].location)); ElementPtr count(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("statistic-default-sample-count", count); } -#line 1495 "dhcp4_parser.cc" +#line 1526 "dhcp4_parser.cc" break; - case 173: // statistic_default_sample_age: "statistic-default-sample-age" ":" "integer" -#line 757 "dhcp4_parser.yy" + case 173: +#line 749 "dhcp4_parser.yy" { ctx.unique("statistic-default-sample-age", ctx.loc2pos(yystack_[2].location)); ElementPtr age(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("statistic-default-sample-age", age); } -#line 1505 "dhcp4_parser.cc" +#line 1536 "dhcp4_parser.cc" break; - case 174: // early_global_reservations_lookup: "early-global-reservations-lookup" ":" "boolean" -#line 763 "dhcp4_parser.yy" + case 174: +#line 755 "dhcp4_parser.yy" { ctx.unique("early-global-reservations-lookup", ctx.loc2pos(yystack_[2].location)); ElementPtr early(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("early-global-reservations-lookup", early); } -#line 1515 "dhcp4_parser.cc" +#line 1546 "dhcp4_parser.cc" break; - case 175: // ip_reservations_unique: "ip-reservations-unique" ":" "boolean" -#line 769 "dhcp4_parser.yy" + case 175: +#line 761 "dhcp4_parser.yy" { ctx.unique("ip-reservations-unique", ctx.loc2pos(yystack_[2].location)); ElementPtr unique(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ip-reservations-unique", unique); } -#line 1525 "dhcp4_parser.cc" +#line 1556 "dhcp4_parser.cc" break; - case 176: // reservations_lookup_first: "reservations-lookup-first" ":" "boolean" -#line 775 "dhcp4_parser.yy" + case 176: +#line 767 "dhcp4_parser.yy" { ctx.unique("reservations-lookup-first", ctx.loc2pos(yystack_[2].location)); ElementPtr first(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reservations-lookup-first", first); } -#line 1535 "dhcp4_parser.cc" +#line 1566 "dhcp4_parser.cc" break; - case 177: // $@26: %empty -#line 781 "dhcp4_parser.yy" + case 177: +#line 773 "dhcp4_parser.yy" { ctx.unique("interfaces-config", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1543,48 +1574,48 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(i); ctx.enter(ctx.INTERFACES_CONFIG); } -#line 1547 "dhcp4_parser.cc" +#line 1578 "dhcp4_parser.cc" break; - case 178: // interfaces_config: "interfaces-config" $@26 ":" "{" interfaces_config_params "}" -#line 787 "dhcp4_parser.yy" + case 178: +#line 779 "dhcp4_parser.yy" { // No interfaces config param is required ctx.stack_.pop_back(); ctx.leave(); } -#line 1557 "dhcp4_parser.cc" +#line 1588 "dhcp4_parser.cc" break; - case 181: // interfaces_config_params: interfaces_config_params "," -#line 795 "dhcp4_parser.yy" + case 181: +#line 787 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 1565 "dhcp4_parser.cc" +#line 1596 "dhcp4_parser.cc" break; - case 189: // $@27: %empty -#line 809 "dhcp4_parser.yy" + case 189: +#line 801 "dhcp4_parser.yy" { // Parse the interfaces-config map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 1575 "dhcp4_parser.cc" +#line 1606 "dhcp4_parser.cc" break; - case 190: // sub_interfaces4: "{" $@27 interfaces_config_params "}" -#line 813 "dhcp4_parser.yy" + case 190: +#line 805 "dhcp4_parser.yy" { // No interfaces config param is required // parsing completed } -#line 1584 "dhcp4_parser.cc" +#line 1615 "dhcp4_parser.cc" break; - case 191: // $@28: %empty -#line 818 "dhcp4_parser.yy" + case 191: +#line 810 "dhcp4_parser.yy" { ctx.unique("interfaces", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -1592,94 +1623,94 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.NO_KEYWORD); } -#line 1596 "dhcp4_parser.cc" +#line 1627 "dhcp4_parser.cc" break; - case 192: // interfaces_list: "interfaces" $@28 ":" list_strings -#line 824 "dhcp4_parser.yy" + case 192: +#line 816 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 1605 "dhcp4_parser.cc" +#line 1636 "dhcp4_parser.cc" break; - case 193: // $@29: %empty -#line 829 "dhcp4_parser.yy" + case 193: +#line 821 "dhcp4_parser.yy" { ctx.unique("dhcp-socket-type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.DHCP_SOCKET_TYPE); } -#line 1614 "dhcp4_parser.cc" +#line 1645 "dhcp4_parser.cc" break; - case 194: // dhcp_socket_type: "dhcp-socket-type" $@29 ":" socket_type -#line 832 "dhcp4_parser.yy" + case 194: +#line 824 "dhcp4_parser.yy" { ctx.stack_.back()->set("dhcp-socket-type", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 1623 "dhcp4_parser.cc" +#line 1654 "dhcp4_parser.cc" break; - case 195: // socket_type: "raw" -#line 837 "dhcp4_parser.yy" + case 195: +#line 829 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("raw", ctx.loc2pos(yystack_[0].location))); } -#line 1629 "dhcp4_parser.cc" +#line 1660 "dhcp4_parser.cc" break; - case 196: // socket_type: "udp" -#line 838 "dhcp4_parser.yy" + case 196: +#line 830 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("udp", ctx.loc2pos(yystack_[0].location))); } -#line 1635 "dhcp4_parser.cc" +#line 1666 "dhcp4_parser.cc" break; - case 197: // $@30: %empty -#line 841 "dhcp4_parser.yy" + case 197: +#line 833 "dhcp4_parser.yy" { ctx.unique("outbound-interface", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.OUTBOUND_INTERFACE); } -#line 1644 "dhcp4_parser.cc" +#line 1675 "dhcp4_parser.cc" break; - case 198: // outbound_interface: "outbound-interface" $@30 ":" outbound_interface_value -#line 844 "dhcp4_parser.yy" + case 198: +#line 836 "dhcp4_parser.yy" { ctx.stack_.back()->set("outbound-interface", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 1653 "dhcp4_parser.cc" +#line 1684 "dhcp4_parser.cc" break; - case 199: // outbound_interface_value: "same-as-inbound" -#line 849 "dhcp4_parser.yy" + case 199: +#line 841 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("same-as-inbound", ctx.loc2pos(yystack_[0].location))); } -#line 1661 "dhcp4_parser.cc" +#line 1692 "dhcp4_parser.cc" break; - case 200: // outbound_interface_value: "use-routing" -#line 851 "dhcp4_parser.yy" + case 200: +#line 843 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("use-routing", ctx.loc2pos(yystack_[0].location))); } -#line 1669 "dhcp4_parser.cc" +#line 1700 "dhcp4_parser.cc" break; - case 201: // re_detect: "re-detect" ":" "boolean" -#line 855 "dhcp4_parser.yy" + case 201: +#line 847 "dhcp4_parser.yy" { ctx.unique("re-detect", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("re-detect", b); } -#line 1679 "dhcp4_parser.cc" +#line 1710 "dhcp4_parser.cc" break; - case 202: // $@31: %empty -#line 862 "dhcp4_parser.yy" + case 202: +#line 854 "dhcp4_parser.yy" { ctx.unique("lease-database", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1687,22 +1718,22 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(i); ctx.enter(ctx.LEASE_DATABASE); } -#line 1691 "dhcp4_parser.cc" +#line 1722 "dhcp4_parser.cc" break; - case 203: // lease_database: "lease-database" $@31 ":" "{" database_map_params "}" -#line 868 "dhcp4_parser.yy" + case 203: +#line 860 "dhcp4_parser.yy" { // The type parameter is required ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } -#line 1702 "dhcp4_parser.cc" +#line 1733 "dhcp4_parser.cc" break; - case 204: // $@32: %empty -#line 875 "dhcp4_parser.yy" + case 204: +#line 867 "dhcp4_parser.yy" { ctx.unique("sanity-checks", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1710,37 +1741,37 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.SANITY_CHECKS); } -#line 1714 "dhcp4_parser.cc" +#line 1745 "dhcp4_parser.cc" break; - case 205: // sanity_checks: "sanity-checks" $@32 ":" "{" sanity_checks_params "}" -#line 881 "dhcp4_parser.yy" + case 205: +#line 873 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 1723 "dhcp4_parser.cc" +#line 1754 "dhcp4_parser.cc" break; - case 208: // sanity_checks_params: sanity_checks_params "," -#line 888 "dhcp4_parser.yy" + case 208: +#line 880 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 1731 "dhcp4_parser.cc" +#line 1762 "dhcp4_parser.cc" break; - case 210: // $@33: %empty -#line 895 "dhcp4_parser.yy" + case 210: +#line 887 "dhcp4_parser.yy" { ctx.unique("lease-checks", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 1740 "dhcp4_parser.cc" +#line 1771 "dhcp4_parser.cc" break; - case 211: // lease_checks: "lease-checks" $@33 ":" "constant string" -#line 898 "dhcp4_parser.yy" + case 211: +#line 890 "dhcp4_parser.yy" { if ( (string(yystack_[0].value.as < std::string > ()) == "none") || @@ -1756,11 +1787,11 @@ namespace isc { namespace dhcp { ", supported values are: none, warn, fix, fix-del, del"); } } -#line 1760 "dhcp4_parser.cc" +#line 1791 "dhcp4_parser.cc" break; - case 212: // $@34: %empty -#line 914 "dhcp4_parser.yy" + case 212: +#line 906 "dhcp4_parser.yy" { ctx.unique("hosts-database", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1768,22 +1799,22 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(i); ctx.enter(ctx.HOSTS_DATABASE); } -#line 1772 "dhcp4_parser.cc" +#line 1803 "dhcp4_parser.cc" break; - case 213: // hosts_database: "hosts-database" $@34 ":" "{" database_map_params "}" -#line 920 "dhcp4_parser.yy" + case 213: +#line 912 "dhcp4_parser.yy" { // The type parameter is required ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } -#line 1783 "dhcp4_parser.cc" +#line 1814 "dhcp4_parser.cc" break; - case 214: // $@35: %empty -#line 927 "dhcp4_parser.yy" + case 214: +#line 919 "dhcp4_parser.yy" { ctx.unique("hosts-databases", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -1791,472 +1822,360 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.HOSTS_DATABASE); } -#line 1795 "dhcp4_parser.cc" +#line 1826 "dhcp4_parser.cc" break; - case 215: // hosts_databases: "hosts-databases" $@35 ":" "[" database_list "]" -#line 933 "dhcp4_parser.yy" + case 215: +#line 925 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 1804 "dhcp4_parser.cc" +#line 1835 "dhcp4_parser.cc" break; - case 220: // not_empty_database_list: not_empty_database_list "," -#line 944 "dhcp4_parser.yy" + case 220: +#line 936 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 1812 "dhcp4_parser.cc" +#line 1843 "dhcp4_parser.cc" break; - case 221: // $@36: %empty -#line 949 "dhcp4_parser.yy" + case 221: +#line 941 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 1822 "dhcp4_parser.cc" +#line 1853 "dhcp4_parser.cc" break; - case 222: // database: "{" $@36 database_map_params "}" -#line 953 "dhcp4_parser.yy" + case 222: +#line 945 "dhcp4_parser.yy" { // The type parameter is required ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 1832 "dhcp4_parser.cc" +#line 1863 "dhcp4_parser.cc" break; - case 225: // database_map_params: database_map_params "," -#line 961 "dhcp4_parser.yy" + case 225: +#line 953 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 1840 "dhcp4_parser.cc" +#line 1871 "dhcp4_parser.cc" break; - case 252: // $@37: %empty -#line 994 "dhcp4_parser.yy" + case 245: +#line 979 "dhcp4_parser.yy" { ctx.unique("type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.DATABASE_TYPE); } -#line 1849 "dhcp4_parser.cc" +#line 1880 "dhcp4_parser.cc" break; - case 253: // database_type: "type" $@37 ":" db_type -#line 997 "dhcp4_parser.yy" + case 246: +#line 982 "dhcp4_parser.yy" { ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 1858 "dhcp4_parser.cc" +#line 1889 "dhcp4_parser.cc" break; - case 254: // db_type: "memfile" -#line 1002 "dhcp4_parser.yy" + case 247: +#line 987 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); } -#line 1864 "dhcp4_parser.cc" +#line 1895 "dhcp4_parser.cc" break; - case 255: // db_type: "mysql" -#line 1003 "dhcp4_parser.yy" + case 248: +#line 988 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); } -#line 1870 "dhcp4_parser.cc" +#line 1901 "dhcp4_parser.cc" break; - case 256: // db_type: "postgresql" -#line 1004 "dhcp4_parser.yy" + case 249: +#line 989 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); } -#line 1876 "dhcp4_parser.cc" +#line 1907 "dhcp4_parser.cc" break; - case 257: // db_type: "cql" -#line 1005 "dhcp4_parser.yy" - { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("cql", ctx.loc2pos(yystack_[0].location))); } -#line 1882 "dhcp4_parser.cc" - break; - - case 258: // $@38: %empty -#line 1008 "dhcp4_parser.yy" + case 250: +#line 992 "dhcp4_parser.yy" { ctx.unique("user", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 1891 "dhcp4_parser.cc" +#line 1916 "dhcp4_parser.cc" break; - case 259: // user: "user" $@38 ":" "constant string" -#line 1011 "dhcp4_parser.yy" + case 251: +#line 995 "dhcp4_parser.yy" { ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("user", user); ctx.leave(); } -#line 1901 "dhcp4_parser.cc" +#line 1926 "dhcp4_parser.cc" break; - case 260: // $@39: %empty -#line 1017 "dhcp4_parser.yy" + case 252: +#line 1001 "dhcp4_parser.yy" { ctx.unique("password", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 1910 "dhcp4_parser.cc" +#line 1935 "dhcp4_parser.cc" break; - case 261: // password: "password" $@39 ":" "constant string" -#line 1020 "dhcp4_parser.yy" + case 253: +#line 1004 "dhcp4_parser.yy" { ElementPtr pwd(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("password", pwd); ctx.leave(); } -#line 1920 "dhcp4_parser.cc" +#line 1945 "dhcp4_parser.cc" break; - case 262: // $@40: %empty -#line 1026 "dhcp4_parser.yy" + case 254: +#line 1010 "dhcp4_parser.yy" { ctx.unique("host", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 1929 "dhcp4_parser.cc" +#line 1954 "dhcp4_parser.cc" break; - case 263: // host: "host" $@40 ":" "constant string" -#line 1029 "dhcp4_parser.yy" + case 255: +#line 1013 "dhcp4_parser.yy" { ElementPtr h(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("host", h); ctx.leave(); } -#line 1939 "dhcp4_parser.cc" +#line 1964 "dhcp4_parser.cc" break; - case 264: // port: "port" ":" "integer" -#line 1035 "dhcp4_parser.yy" + case 256: +#line 1019 "dhcp4_parser.yy" { ctx.unique("port", ctx.loc2pos(yystack_[2].location)); ElementPtr p(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("port", p); } -#line 1949 "dhcp4_parser.cc" +#line 1974 "dhcp4_parser.cc" break; - case 265: // $@41: %empty -#line 1041 "dhcp4_parser.yy" + case 257: +#line 1025 "dhcp4_parser.yy" { ctx.unique("name", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 1958 "dhcp4_parser.cc" +#line 1983 "dhcp4_parser.cc" break; - case 266: // name: "name" $@41 ":" "constant string" -#line 1044 "dhcp4_parser.yy" + case 258: +#line 1028 "dhcp4_parser.yy" { ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("name", name); ctx.leave(); } -#line 1968 "dhcp4_parser.cc" +#line 1993 "dhcp4_parser.cc" break; - case 267: // persist: "persist" ":" "boolean" -#line 1050 "dhcp4_parser.yy" + case 259: +#line 1034 "dhcp4_parser.yy" { ctx.unique("persist", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("persist", n); } -#line 1978 "dhcp4_parser.cc" +#line 2003 "dhcp4_parser.cc" break; - case 268: // lfc_interval: "lfc-interval" ":" "integer" -#line 1056 "dhcp4_parser.yy" + case 260: +#line 1040 "dhcp4_parser.yy" { ctx.unique("lfc-interval", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("lfc-interval", n); } -#line 1988 "dhcp4_parser.cc" +#line 2013 "dhcp4_parser.cc" break; - case 269: // readonly: "readonly" ":" "boolean" -#line 1062 "dhcp4_parser.yy" + case 261: +#line 1046 "dhcp4_parser.yy" { ctx.unique("readonly", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("readonly", n); } -#line 1998 "dhcp4_parser.cc" +#line 2023 "dhcp4_parser.cc" break; - case 270: // connect_timeout: "connect-timeout" ":" "integer" -#line 1068 "dhcp4_parser.yy" + case 262: +#line 1052 "dhcp4_parser.yy" { ctx.unique("connect-timeout", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("connect-timeout", n); } -#line 2008 "dhcp4_parser.cc" +#line 2033 "dhcp4_parser.cc" break; - case 271: // request_timeout: "request-timeout" ":" "integer" -#line 1074 "dhcp4_parser.yy" - { - ctx.unique("request-timeout", ctx.loc2pos(yystack_[2].location)); - ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->set("request-timeout", n); -} -#line 2018 "dhcp4_parser.cc" - break; - - case 272: // tcp_keepalive: "tcp-keepalive" ":" "integer" -#line 1080 "dhcp4_parser.yy" - { - ctx.unique("tcp-keepalive", ctx.loc2pos(yystack_[2].location)); - ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->set("tcp-keepalive", n); -} -#line 2028 "dhcp4_parser.cc" - break; - - case 273: // tcp_nodelay: "tcp-nodelay" ":" "boolean" -#line 1086 "dhcp4_parser.yy" - { - ctx.unique("tcp-nodelay", ctx.loc2pos(yystack_[2].location)); - ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->set("tcp-nodelay", n); -} -#line 2038 "dhcp4_parser.cc" - break; - - case 274: // $@42: %empty -#line 1092 "dhcp4_parser.yy" - { - ctx.unique("contact-points", ctx.loc2pos(yystack_[0].location)); - ctx.enter(ctx.NO_KEYWORD); -} -#line 2047 "dhcp4_parser.cc" - break; - - case 275: // contact_points: "contact-points" $@42 ":" "constant string" -#line 1095 "dhcp4_parser.yy" - { - ElementPtr cp(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->set("contact-points", cp); - ctx.leave(); -} -#line 2057 "dhcp4_parser.cc" - break; - - case 276: // $@43: %empty -#line 1101 "dhcp4_parser.yy" - { - ctx.unique("keyspace", ctx.loc2pos(yystack_[0].location)); - ctx.enter(ctx.NO_KEYWORD); -} -#line 2066 "dhcp4_parser.cc" - break; - - case 277: // keyspace: "keyspace" $@43 ":" "constant string" -#line 1104 "dhcp4_parser.yy" - { - ElementPtr ks(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->set("keyspace", ks); - ctx.leave(); -} -#line 2076 "dhcp4_parser.cc" - break; - - case 278: // $@44: %empty -#line 1110 "dhcp4_parser.yy" - { - ctx.unique("consistency", ctx.loc2pos(yystack_[0].location)); - ctx.enter(ctx.NO_KEYWORD); -} -#line 2085 "dhcp4_parser.cc" - break; - - case 279: // consistency: "consistency" $@44 ":" "constant string" -#line 1113 "dhcp4_parser.yy" - { - ElementPtr c(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->set("consistency", c); - ctx.leave(); -} -#line 2095 "dhcp4_parser.cc" - break; - - case 280: // $@45: %empty -#line 1119 "dhcp4_parser.yy" - { - ctx.unique("serial-consistency", ctx.loc2pos(yystack_[0].location)); - ctx.enter(ctx.NO_KEYWORD); -} -#line 2104 "dhcp4_parser.cc" - break; - - case 281: // serial_consistency: "serial-consistency" $@45 ":" "constant string" -#line 1122 "dhcp4_parser.yy" - { - ElementPtr c(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->set("serial-consistency", c); - ctx.leave(); -} -#line 2114 "dhcp4_parser.cc" - break; - - case 282: // max_reconnect_tries: "max-reconnect-tries" ":" "integer" -#line 1128 "dhcp4_parser.yy" + case 263: +#line 1058 "dhcp4_parser.yy" { ctx.unique("max-reconnect-tries", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-reconnect-tries", n); } -#line 2124 "dhcp4_parser.cc" +#line 2043 "dhcp4_parser.cc" break; - case 283: // reconnect_wait_time: "reconnect-wait-time" ":" "integer" -#line 1134 "dhcp4_parser.yy" + case 264: +#line 1064 "dhcp4_parser.yy" { ctx.unique("reconnect-wait-time", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reconnect-wait-time", n); } -#line 2134 "dhcp4_parser.cc" +#line 2053 "dhcp4_parser.cc" break; - case 284: // $@46: %empty -#line 1140 "dhcp4_parser.yy" + case 265: +#line 1070 "dhcp4_parser.yy" { ctx.unique("on-fail", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.DATABASE_ON_FAIL); } -#line 2143 "dhcp4_parser.cc" +#line 2062 "dhcp4_parser.cc" break; - case 285: // on_fail: "on-fail" $@46 ":" on_fail_mode -#line 1143 "dhcp4_parser.yy" + case 266: +#line 1073 "dhcp4_parser.yy" { ctx.stack_.back()->set("on-fail", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 2152 "dhcp4_parser.cc" +#line 2071 "dhcp4_parser.cc" break; - case 286: // on_fail_mode: "stop-retry-exit" -#line 1148 "dhcp4_parser.yy" + case 267: +#line 1078 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("stop-retry-exit", ctx.loc2pos(yystack_[0].location))); } -#line 2158 "dhcp4_parser.cc" +#line 2077 "dhcp4_parser.cc" break; - case 287: // on_fail_mode: "serve-retry-exit" -#line 1149 "dhcp4_parser.yy" + case 268: +#line 1079 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-exit", ctx.loc2pos(yystack_[0].location))); } -#line 2164 "dhcp4_parser.cc" +#line 2083 "dhcp4_parser.cc" break; - case 288: // on_fail_mode: "serve-retry-continue" -#line 1150 "dhcp4_parser.yy" + case 269: +#line 1080 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-continue", ctx.loc2pos(yystack_[0].location))); } -#line 2170 "dhcp4_parser.cc" +#line 2089 "dhcp4_parser.cc" break; - case 289: // max_row_errors: "max-row-errors" ":" "integer" -#line 1153 "dhcp4_parser.yy" + case 270: +#line 1083 "dhcp4_parser.yy" { ctx.unique("max-row-errors", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-row-errors", n); } -#line 2180 "dhcp4_parser.cc" +#line 2099 "dhcp4_parser.cc" break; - case 290: // $@47: %empty -#line 1159 "dhcp4_parser.yy" + case 271: +#line 1089 "dhcp4_parser.yy" { ctx.unique("trust-anchor", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2189 "dhcp4_parser.cc" +#line 2108 "dhcp4_parser.cc" break; - case 291: // trust_anchor: "trust-anchor" $@47 ":" "constant string" -#line 1162 "dhcp4_parser.yy" + case 272: +#line 1092 "dhcp4_parser.yy" { ElementPtr ca(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("trust-anchor", ca); ctx.leave(); } -#line 2199 "dhcp4_parser.cc" +#line 2118 "dhcp4_parser.cc" break; - case 292: // $@48: %empty -#line 1168 "dhcp4_parser.yy" + case 273: +#line 1098 "dhcp4_parser.yy" { ctx.unique("cert-file", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2208 "dhcp4_parser.cc" +#line 2127 "dhcp4_parser.cc" break; - case 293: // cert_file: "cert-file" $@48 ":" "constant string" -#line 1171 "dhcp4_parser.yy" + case 274: +#line 1101 "dhcp4_parser.yy" { ElementPtr cert(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("cert-file", cert); ctx.leave(); } -#line 2218 "dhcp4_parser.cc" +#line 2137 "dhcp4_parser.cc" break; - case 294: // $@49: %empty -#line 1177 "dhcp4_parser.yy" + case 275: +#line 1107 "dhcp4_parser.yy" { ctx.unique("key-file", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2227 "dhcp4_parser.cc" +#line 2146 "dhcp4_parser.cc" break; - case 295: // key_file: "key-file" $@49 ":" "constant string" -#line 1180 "dhcp4_parser.yy" + case 276: +#line 1110 "dhcp4_parser.yy" { ElementPtr key(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("key-file", key); ctx.leave(); } -#line 2237 "dhcp4_parser.cc" +#line 2156 "dhcp4_parser.cc" break; - case 296: // $@50: %empty -#line 1186 "dhcp4_parser.yy" + case 277: +#line 1116 "dhcp4_parser.yy" { ctx.unique("cipher-list", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2246 "dhcp4_parser.cc" +#line 2165 "dhcp4_parser.cc" break; - case 297: // cipher_list: "cipher-list" $@50 ":" "constant string" -#line 1189 "dhcp4_parser.yy" + case 278: +#line 1119 "dhcp4_parser.yy" { ElementPtr cl(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("cipher-list", cl); ctx.leave(); } -#line 2256 "dhcp4_parser.cc" +#line 2175 "dhcp4_parser.cc" break; - case 298: // $@51: %empty -#line 1195 "dhcp4_parser.yy" + case 279: +#line 1125 "dhcp4_parser.yy" { ctx.unique("host-reservation-identifiers", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2264,73 +2183,73 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS); } -#line 2268 "dhcp4_parser.cc" +#line 2187 "dhcp4_parser.cc" break; - case 299: // host_reservation_identifiers: "host-reservation-identifiers" $@51 ":" "[" host_reservation_identifiers_list "]" -#line 1201 "dhcp4_parser.yy" + case 280: +#line 1131 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2277 "dhcp4_parser.cc" +#line 2196 "dhcp4_parser.cc" break; - case 302: // host_reservation_identifiers_list: host_reservation_identifiers_list "," -#line 1208 "dhcp4_parser.yy" + case 283: +#line 1138 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2285 "dhcp4_parser.cc" +#line 2204 "dhcp4_parser.cc" break; - case 308: // duid_id: "duid" -#line 1220 "dhcp4_parser.yy" + case 289: +#line 1150 "dhcp4_parser.yy" { ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(duid); } -#line 2294 "dhcp4_parser.cc" +#line 2213 "dhcp4_parser.cc" break; - case 309: // hw_address_id: "hw-address" -#line 1225 "dhcp4_parser.yy" + case 290: +#line 1155 "dhcp4_parser.yy" { ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(hwaddr); } -#line 2303 "dhcp4_parser.cc" +#line 2222 "dhcp4_parser.cc" break; - case 310: // circuit_id: "circuit-id" -#line 1230 "dhcp4_parser.yy" + case 291: +#line 1160 "dhcp4_parser.yy" { ElementPtr circuit(new StringElement("circuit-id", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(circuit); } -#line 2312 "dhcp4_parser.cc" +#line 2231 "dhcp4_parser.cc" break; - case 311: // client_id: "client-id" -#line 1235 "dhcp4_parser.yy" + case 292: +#line 1165 "dhcp4_parser.yy" { ElementPtr client(new StringElement("client-id", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(client); } -#line 2321 "dhcp4_parser.cc" +#line 2240 "dhcp4_parser.cc" break; - case 312: // flex_id: "flex-id" -#line 1240 "dhcp4_parser.yy" + case 293: +#line 1170 "dhcp4_parser.yy" { ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(flex_id); } -#line 2330 "dhcp4_parser.cc" +#line 2249 "dhcp4_parser.cc" break; - case 313: // $@52: %empty -#line 1247 "dhcp4_parser.yy" + case 294: +#line 1177 "dhcp4_parser.yy" { ctx.unique("multi-threading", ctx.loc2pos(yystack_[0].location)); ElementPtr mt(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -2338,60 +2257,60 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(mt); ctx.enter(ctx.DHCP_MULTI_THREADING); } -#line 2342 "dhcp4_parser.cc" +#line 2261 "dhcp4_parser.cc" break; - case 314: // dhcp_multi_threading: "multi-threading" $@52 ":" "{" multi_threading_params "}" -#line 1253 "dhcp4_parser.yy" + case 295: +#line 1183 "dhcp4_parser.yy" { // The enable parameter is required. ctx.require("enable-multi-threading", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } -#line 2353 "dhcp4_parser.cc" +#line 2272 "dhcp4_parser.cc" break; - case 317: // multi_threading_params: multi_threading_params "," -#line 1262 "dhcp4_parser.yy" + case 298: +#line 1192 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2361 "dhcp4_parser.cc" +#line 2280 "dhcp4_parser.cc" break; - case 324: // enable_multi_threading: "enable-multi-threading" ":" "boolean" -#line 1275 "dhcp4_parser.yy" + case 305: +#line 1205 "dhcp4_parser.yy" { ctx.unique("enable-multi-threading", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enable-multi-threading", b); } -#line 2371 "dhcp4_parser.cc" +#line 2290 "dhcp4_parser.cc" break; - case 325: // thread_pool_size: "thread-pool-size" ":" "integer" -#line 1281 "dhcp4_parser.yy" + case 306: +#line 1211 "dhcp4_parser.yy" { ctx.unique("thread-pool-size", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("thread-pool-size", prf); } -#line 2381 "dhcp4_parser.cc" +#line 2300 "dhcp4_parser.cc" break; - case 326: // packet_queue_size: "packet-queue-size" ":" "integer" -#line 1287 "dhcp4_parser.yy" + case 307: +#line 1217 "dhcp4_parser.yy" { ctx.unique("packet-queue-size", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("packet-queue-size", prf); } -#line 2391 "dhcp4_parser.cc" +#line 2310 "dhcp4_parser.cc" break; - case 327: // $@53: %empty -#line 1293 "dhcp4_parser.yy" + case 308: +#line 1223 "dhcp4_parser.yy" { ctx.unique("hooks-libraries", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2399,113 +2318,113 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.HOOKS_LIBRARIES); } -#line 2403 "dhcp4_parser.cc" +#line 2322 "dhcp4_parser.cc" break; - case 328: // hooks_libraries: "hooks-libraries" $@53 ":" "[" hooks_libraries_list "]" -#line 1299 "dhcp4_parser.yy" + case 309: +#line 1229 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2412 "dhcp4_parser.cc" +#line 2331 "dhcp4_parser.cc" break; - case 333: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list "," -#line 1310 "dhcp4_parser.yy" + case 314: +#line 1240 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2420 "dhcp4_parser.cc" +#line 2339 "dhcp4_parser.cc" break; - case 334: // $@54: %empty -#line 1315 "dhcp4_parser.yy" + case 315: +#line 1245 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2430 "dhcp4_parser.cc" +#line 2349 "dhcp4_parser.cc" break; - case 335: // hooks_library: "{" $@54 hooks_params "}" -#line 1319 "dhcp4_parser.yy" + case 316: +#line 1249 "dhcp4_parser.yy" { // The library hooks parameter is required ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 2440 "dhcp4_parser.cc" +#line 2359 "dhcp4_parser.cc" break; - case 336: // $@55: %empty -#line 1325 "dhcp4_parser.yy" + case 317: +#line 1255 "dhcp4_parser.yy" { // Parse the hooks-libraries list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2450 "dhcp4_parser.cc" +#line 2369 "dhcp4_parser.cc" break; - case 337: // sub_hooks_library: "{" $@55 hooks_params "}" -#line 1329 "dhcp4_parser.yy" + case 318: +#line 1259 "dhcp4_parser.yy" { // The library hooks parameter is required ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 2460 "dhcp4_parser.cc" +#line 2379 "dhcp4_parser.cc" break; - case 340: // hooks_params: hooks_params "," -#line 1337 "dhcp4_parser.yy" + case 321: +#line 1267 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2468 "dhcp4_parser.cc" +#line 2387 "dhcp4_parser.cc" break; - case 344: // $@56: %empty -#line 1347 "dhcp4_parser.yy" + case 325: +#line 1277 "dhcp4_parser.yy" { ctx.unique("library", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2477 "dhcp4_parser.cc" +#line 2396 "dhcp4_parser.cc" break; - case 345: // library: "library" $@56 ":" "constant string" -#line 1350 "dhcp4_parser.yy" + case 326: +#line 1280 "dhcp4_parser.yy" { ElementPtr lib(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("library", lib); ctx.leave(); } -#line 2487 "dhcp4_parser.cc" +#line 2406 "dhcp4_parser.cc" break; - case 346: // $@57: %empty -#line 1356 "dhcp4_parser.yy" + case 327: +#line 1286 "dhcp4_parser.yy" { ctx.unique("parameters", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2496 "dhcp4_parser.cc" +#line 2415 "dhcp4_parser.cc" break; - case 347: // parameters: "parameters" $@57 ":" map_value -#line 1359 "dhcp4_parser.yy" + case 328: +#line 1289 "dhcp4_parser.yy" { ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 2505 "dhcp4_parser.cc" +#line 2424 "dhcp4_parser.cc" break; - case 348: // $@58: %empty -#line 1365 "dhcp4_parser.yy" + case 329: +#line 1295 "dhcp4_parser.yy" { ctx.unique("expired-leases-processing", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -2513,89 +2432,89 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.EXPIRED_LEASES_PROCESSING); } -#line 2517 "dhcp4_parser.cc" +#line 2436 "dhcp4_parser.cc" break; - case 349: // expired_leases_processing: "expired-leases-processing" $@58 ":" "{" expired_leases_params "}" -#line 1371 "dhcp4_parser.yy" + case 330: +#line 1301 "dhcp4_parser.yy" { // No expired lease parameter is required ctx.stack_.pop_back(); ctx.leave(); } -#line 2527 "dhcp4_parser.cc" +#line 2446 "dhcp4_parser.cc" break; - case 352: // expired_leases_params: expired_leases_params "," -#line 1379 "dhcp4_parser.yy" + case 333: +#line 1309 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2535 "dhcp4_parser.cc" +#line 2454 "dhcp4_parser.cc" break; - case 359: // reclaim_timer_wait_time: "reclaim-timer-wait-time" ":" "integer" -#line 1392 "dhcp4_parser.yy" + case 340: +#line 1322 "dhcp4_parser.yy" { ctx.unique("reclaim-timer-wait-time", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reclaim-timer-wait-time", value); } -#line 2545 "dhcp4_parser.cc" +#line 2464 "dhcp4_parser.cc" break; - case 360: // flush_reclaimed_timer_wait_time: "flush-reclaimed-timer-wait-time" ":" "integer" -#line 1398 "dhcp4_parser.yy" + case 341: +#line 1328 "dhcp4_parser.yy" { ctx.unique("flush-reclaimed-timer-wait-time", ctx.loc2pos(yystack_[2].location)); 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); } -#line 2555 "dhcp4_parser.cc" +#line 2474 "dhcp4_parser.cc" break; - case 361: // hold_reclaimed_time: "hold-reclaimed-time" ":" "integer" -#line 1404 "dhcp4_parser.yy" + case 342: +#line 1334 "dhcp4_parser.yy" { ctx.unique("hold-reclaimed-time", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hold-reclaimed-time", value); } -#line 2565 "dhcp4_parser.cc" +#line 2484 "dhcp4_parser.cc" break; - case 362: // max_reclaim_leases: "max-reclaim-leases" ":" "integer" -#line 1410 "dhcp4_parser.yy" + case 343: +#line 1340 "dhcp4_parser.yy" { ctx.unique("max-reclaim-leases", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-reclaim-leases", value); } -#line 2575 "dhcp4_parser.cc" +#line 2494 "dhcp4_parser.cc" break; - case 363: // max_reclaim_time: "max-reclaim-time" ":" "integer" -#line 1416 "dhcp4_parser.yy" + case 344: +#line 1346 "dhcp4_parser.yy" { ctx.unique("max-reclaim-time", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-reclaim-time", value); } -#line 2585 "dhcp4_parser.cc" +#line 2504 "dhcp4_parser.cc" break; - case 364: // unwarned_reclaim_cycles: "unwarned-reclaim-cycles" ":" "integer" -#line 1422 "dhcp4_parser.yy" + case 345: +#line 1352 "dhcp4_parser.yy" { ctx.unique("unwarned-reclaim-cycles", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("unwarned-reclaim-cycles", value); } -#line 2595 "dhcp4_parser.cc" +#line 2514 "dhcp4_parser.cc" break; - case 365: // $@59: %empty -#line 1431 "dhcp4_parser.yy" + case 346: +#line 1361 "dhcp4_parser.yy" { ctx.unique("subnet4", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2603,38 +2522,38 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.SUBNET4); } -#line 2607 "dhcp4_parser.cc" +#line 2526 "dhcp4_parser.cc" break; - case 366: // subnet4_list: "subnet4" $@59 ":" "[" subnet4_list_content "]" -#line 1437 "dhcp4_parser.yy" + case 347: +#line 1367 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2616 "dhcp4_parser.cc" +#line 2535 "dhcp4_parser.cc" break; - case 371: // not_empty_subnet4_list: not_empty_subnet4_list "," -#line 1451 "dhcp4_parser.yy" + case 352: +#line 1381 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2624 "dhcp4_parser.cc" +#line 2543 "dhcp4_parser.cc" break; - case 372: // $@60: %empty -#line 1460 "dhcp4_parser.yy" + case 353: +#line 1390 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2634 "dhcp4_parser.cc" +#line 2553 "dhcp4_parser.cc" break; - case 373: // subnet4: "{" $@60 subnet4_params "}" -#line 1464 "dhcp4_parser.yy" + case 354: +#line 1394 "dhcp4_parser.yy" { // Once we reached this place, the subnet parsing is now complete. // If we want to, we can implement default values here. @@ -2656,153 +2575,153 @@ namespace isc { namespace dhcp { ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 2660 "dhcp4_parser.cc" +#line 2579 "dhcp4_parser.cc" break; - case 374: // $@61: %empty -#line 1486 "dhcp4_parser.yy" + case 355: +#line 1416 "dhcp4_parser.yy" { // Parse the subnet4 list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2670 "dhcp4_parser.cc" +#line 2589 "dhcp4_parser.cc" break; - case 375: // sub_subnet4: "{" $@61 subnet4_params "}" -#line 1490 "dhcp4_parser.yy" + case 356: +#line 1420 "dhcp4_parser.yy" { // The subnet subnet4 parameter is required ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 2680 "dhcp4_parser.cc" +#line 2599 "dhcp4_parser.cc" break; - case 378: // subnet4_params: subnet4_params "," -#line 1499 "dhcp4_parser.yy" + case 359: +#line 1429 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2688 "dhcp4_parser.cc" +#line 2607 "dhcp4_parser.cc" break; - case 424: // $@62: %empty -#line 1552 "dhcp4_parser.yy" + case 405: +#line 1482 "dhcp4_parser.yy" { ctx.unique("subnet", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2697 "dhcp4_parser.cc" +#line 2616 "dhcp4_parser.cc" break; - case 425: // subnet: "subnet" $@62 ":" "constant string" -#line 1555 "dhcp4_parser.yy" + case 406: +#line 1485 "dhcp4_parser.yy" { ElementPtr subnet(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("subnet", subnet); ctx.leave(); } -#line 2707 "dhcp4_parser.cc" +#line 2626 "dhcp4_parser.cc" break; - case 426: // $@63: %empty -#line 1561 "dhcp4_parser.yy" + case 407: +#line 1491 "dhcp4_parser.yy" { ctx.unique("4o6-interface", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2716 "dhcp4_parser.cc" +#line 2635 "dhcp4_parser.cc" break; - case 427: // subnet_4o6_interface: "4o6-interface" $@63 ":" "constant string" -#line 1564 "dhcp4_parser.yy" + case 408: +#line 1494 "dhcp4_parser.yy" { ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("4o6-interface", iface); ctx.leave(); } -#line 2726 "dhcp4_parser.cc" +#line 2645 "dhcp4_parser.cc" break; - case 428: // $@64: %empty -#line 1570 "dhcp4_parser.yy" + case 409: +#line 1500 "dhcp4_parser.yy" { ctx.unique("4o6-interface-id", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2735 "dhcp4_parser.cc" +#line 2654 "dhcp4_parser.cc" break; - case 429: // subnet_4o6_interface_id: "4o6-interface-id" $@64 ":" "constant string" -#line 1573 "dhcp4_parser.yy" + case 410: +#line 1503 "dhcp4_parser.yy" { ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("4o6-interface-id", iface); ctx.leave(); } -#line 2745 "dhcp4_parser.cc" +#line 2664 "dhcp4_parser.cc" break; - case 430: // $@65: %empty -#line 1579 "dhcp4_parser.yy" + case 411: +#line 1509 "dhcp4_parser.yy" { ctx.unique("4o6-subnet", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2754 "dhcp4_parser.cc" +#line 2673 "dhcp4_parser.cc" break; - case 431: // subnet_4o6_subnet: "4o6-subnet" $@65 ":" "constant string" -#line 1582 "dhcp4_parser.yy" + case 412: +#line 1512 "dhcp4_parser.yy" { ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("4o6-subnet", iface); ctx.leave(); } -#line 2764 "dhcp4_parser.cc" +#line 2683 "dhcp4_parser.cc" break; - case 432: // $@66: %empty -#line 1588 "dhcp4_parser.yy" + case 413: +#line 1518 "dhcp4_parser.yy" { ctx.unique("interface", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2773 "dhcp4_parser.cc" +#line 2692 "dhcp4_parser.cc" break; - case 433: // interface: "interface" $@66 ":" "constant string" -#line 1591 "dhcp4_parser.yy" + case 414: +#line 1521 "dhcp4_parser.yy" { ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("interface", iface); ctx.leave(); } -#line 2783 "dhcp4_parser.cc" +#line 2702 "dhcp4_parser.cc" break; - case 434: // $@67: %empty -#line 1597 "dhcp4_parser.yy" + case 415: +#line 1527 "dhcp4_parser.yy" { ctx.unique("client-class", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2792 "dhcp4_parser.cc" +#line 2711 "dhcp4_parser.cc" break; - case 435: // client_class: "client-class" $@67 ":" "constant string" -#line 1600 "dhcp4_parser.yy" + case 416: +#line 1530 "dhcp4_parser.yy" { ElementPtr cls(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("client-class", cls); ctx.leave(); } -#line 2802 "dhcp4_parser.cc" +#line 2721 "dhcp4_parser.cc" break; - case 436: // $@68: %empty -#line 1606 "dhcp4_parser.yy" + case 417: +#line 1536 "dhcp4_parser.yy" { ctx.unique("require-client-classes", ctx.loc2pos(yystack_[0].location)); ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2810,102 +2729,102 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(c); ctx.enter(ctx.NO_KEYWORD); } -#line 2814 "dhcp4_parser.cc" +#line 2733 "dhcp4_parser.cc" break; - case 437: // require_client_classes: "require-client-classes" $@68 ":" list_strings -#line 1612 "dhcp4_parser.yy" + case 418: +#line 1542 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2823 "dhcp4_parser.cc" +#line 2742 "dhcp4_parser.cc" break; - case 438: // reservations_global: "reservations-global" ":" "boolean" -#line 1617 "dhcp4_parser.yy" + case 419: +#line 1547 "dhcp4_parser.yy" { ctx.unique("reservations-global", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reservations-global", b); } -#line 2833 "dhcp4_parser.cc" +#line 2752 "dhcp4_parser.cc" break; - case 439: // reservations_in_subnet: "reservations-in-subnet" ":" "boolean" -#line 1623 "dhcp4_parser.yy" + case 420: +#line 1553 "dhcp4_parser.yy" { ctx.unique("reservations-in-subnet", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reservations-in-subnet", b); } -#line 2843 "dhcp4_parser.cc" +#line 2762 "dhcp4_parser.cc" break; - case 440: // reservations_out_of_pool: "reservations-out-of-pool" ":" "boolean" -#line 1629 "dhcp4_parser.yy" + case 421: +#line 1559 "dhcp4_parser.yy" { ctx.unique("reservations-out-of-pool", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reservations-out-of-pool", b); } -#line 2853 "dhcp4_parser.cc" +#line 2772 "dhcp4_parser.cc" break; - case 441: // $@69: %empty -#line 1635 "dhcp4_parser.yy" + case 422: +#line 1565 "dhcp4_parser.yy" { ctx.unique("reservation-mode", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.RESERVATION_MODE); } -#line 2862 "dhcp4_parser.cc" +#line 2781 "dhcp4_parser.cc" break; - case 442: // reservation_mode: "reservation-mode" $@69 ":" hr_mode -#line 1638 "dhcp4_parser.yy" + case 423: +#line 1568 "dhcp4_parser.yy" { ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 2871 "dhcp4_parser.cc" +#line 2790 "dhcp4_parser.cc" break; - case 443: // hr_mode: "disabled" -#line 1643 "dhcp4_parser.yy" + case 424: +#line 1573 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); } -#line 2877 "dhcp4_parser.cc" +#line 2796 "dhcp4_parser.cc" break; - case 444: // hr_mode: "out-of-pool" -#line 1644 "dhcp4_parser.yy" + case 425: +#line 1574 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); } -#line 2883 "dhcp4_parser.cc" +#line 2802 "dhcp4_parser.cc" break; - case 445: // hr_mode: "global" -#line 1645 "dhcp4_parser.yy" + case 426: +#line 1575 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("global", ctx.loc2pos(yystack_[0].location))); } -#line 2889 "dhcp4_parser.cc" +#line 2808 "dhcp4_parser.cc" break; - case 446: // hr_mode: "all" -#line 1646 "dhcp4_parser.yy" + case 427: +#line 1576 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); } -#line 2895 "dhcp4_parser.cc" +#line 2814 "dhcp4_parser.cc" break; - case 447: // id: "id" ":" "integer" -#line 1649 "dhcp4_parser.yy" + case 428: +#line 1579 "dhcp4_parser.yy" { ctx.unique("id", ctx.loc2pos(yystack_[2].location)); ElementPtr id(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("id", id); } -#line 2905 "dhcp4_parser.cc" +#line 2824 "dhcp4_parser.cc" break; - case 448: // $@70: %empty -#line 1657 "dhcp4_parser.yy" + case 429: +#line 1587 "dhcp4_parser.yy" { ctx.unique("shared-networks", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2913,54 +2832,54 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.SHARED_NETWORK); } -#line 2917 "dhcp4_parser.cc" +#line 2836 "dhcp4_parser.cc" break; - case 449: // shared_networks: "shared-networks" $@70 ":" "[" shared_networks_content "]" -#line 1663 "dhcp4_parser.yy" + case 430: +#line 1593 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2926 "dhcp4_parser.cc" +#line 2845 "dhcp4_parser.cc" break; - case 454: // shared_networks_list: shared_networks_list "," -#line 1676 "dhcp4_parser.yy" + case 435: +#line 1606 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2934 "dhcp4_parser.cc" +#line 2853 "dhcp4_parser.cc" break; - case 455: // $@71: %empty -#line 1681 "dhcp4_parser.yy" + case 436: +#line 1611 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2944 "dhcp4_parser.cc" +#line 2863 "dhcp4_parser.cc" break; - case 456: // shared_network: "{" $@71 shared_network_params "}" -#line 1685 "dhcp4_parser.yy" + case 437: +#line 1615 "dhcp4_parser.yy" { ctx.stack_.pop_back(); } -#line 2952 "dhcp4_parser.cc" +#line 2871 "dhcp4_parser.cc" break; - case 459: // shared_network_params: shared_network_params "," -#line 1691 "dhcp4_parser.yy" + case 440: +#line 1621 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2960 "dhcp4_parser.cc" +#line 2879 "dhcp4_parser.cc" break; - case 500: // $@72: %empty -#line 1742 "dhcp4_parser.yy" + case 481: +#line 1672 "dhcp4_parser.yy" { ctx.unique("option-def", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2968,55 +2887,55 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.OPTION_DEF); } -#line 2972 "dhcp4_parser.cc" +#line 2891 "dhcp4_parser.cc" break; - case 501: // option_def_list: "option-def" $@72 ":" "[" option_def_list_content "]" -#line 1748 "dhcp4_parser.yy" + case 482: +#line 1678 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2981 "dhcp4_parser.cc" +#line 2900 "dhcp4_parser.cc" break; - case 502: // $@73: %empty -#line 1756 "dhcp4_parser.yy" + case 483: +#line 1686 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2990 "dhcp4_parser.cc" +#line 2909 "dhcp4_parser.cc" break; - case 503: // sub_option_def_list: "{" $@73 option_def_list "}" -#line 1759 "dhcp4_parser.yy" + case 484: +#line 1689 "dhcp4_parser.yy" { // parsing completed } -#line 2998 "dhcp4_parser.cc" +#line 2917 "dhcp4_parser.cc" break; - case 508: // not_empty_option_def_list: not_empty_option_def_list "," -#line 1771 "dhcp4_parser.yy" + case 489: +#line 1701 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3006 "dhcp4_parser.cc" +#line 2925 "dhcp4_parser.cc" break; - case 509: // $@74: %empty -#line 1778 "dhcp4_parser.yy" + case 490: +#line 1708 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3016 "dhcp4_parser.cc" +#line 2935 "dhcp4_parser.cc" break; - case 510: // option_def_entry: "{" $@74 option_def_params "}" -#line 1782 "dhcp4_parser.yy" + case 491: +#line 1712 "dhcp4_parser.yy" { // The name, code and type option def parameters are required. ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -3024,21 +2943,21 @@ namespace isc { namespace dhcp { ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 3028 "dhcp4_parser.cc" +#line 2947 "dhcp4_parser.cc" break; - case 511: // $@75: %empty -#line 1793 "dhcp4_parser.yy" + case 492: +#line 1723 "dhcp4_parser.yy" { // Parse the option-def list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3038 "dhcp4_parser.cc" +#line 2957 "dhcp4_parser.cc" break; - case 512: // sub_option_def: "{" $@75 option_def_params "}" -#line 1797 "dhcp4_parser.yy" + case 493: +#line 1727 "dhcp4_parser.yy" { // The name, code and type option def parameters are required. ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -3046,115 +2965,115 @@ namespace isc { namespace dhcp { ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 3050 "dhcp4_parser.cc" +#line 2969 "dhcp4_parser.cc" break; - case 517: // not_empty_option_def_params: not_empty_option_def_params "," -#line 1813 "dhcp4_parser.yy" + case 498: +#line 1743 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3058 "dhcp4_parser.cc" +#line 2977 "dhcp4_parser.cc" break; - case 529: // code: "code" ":" "integer" -#line 1832 "dhcp4_parser.yy" + case 510: +#line 1762 "dhcp4_parser.yy" { ctx.unique("code", ctx.loc2pos(yystack_[2].location)); ElementPtr code(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("code", code); } -#line 3068 "dhcp4_parser.cc" +#line 2987 "dhcp4_parser.cc" break; - case 531: // $@76: %empty -#line 1840 "dhcp4_parser.yy" + case 512: +#line 1770 "dhcp4_parser.yy" { ctx.unique("type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3077 "dhcp4_parser.cc" +#line 2996 "dhcp4_parser.cc" break; - case 532: // option_def_type: "type" $@76 ":" "constant string" -#line 1843 "dhcp4_parser.yy" + case 513: +#line 1773 "dhcp4_parser.yy" { ElementPtr prf(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("type", prf); ctx.leave(); } -#line 3087 "dhcp4_parser.cc" +#line 3006 "dhcp4_parser.cc" break; - case 533: // $@77: %empty -#line 1849 "dhcp4_parser.yy" + case 514: +#line 1779 "dhcp4_parser.yy" { ctx.unique("record-types", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3096 "dhcp4_parser.cc" +#line 3015 "dhcp4_parser.cc" break; - case 534: // option_def_record_types: "record-types" $@77 ":" "constant string" -#line 1852 "dhcp4_parser.yy" + case 515: +#line 1782 "dhcp4_parser.yy" { ElementPtr rtypes(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("record-types", rtypes); ctx.leave(); } -#line 3106 "dhcp4_parser.cc" +#line 3025 "dhcp4_parser.cc" break; - case 535: // $@78: %empty -#line 1858 "dhcp4_parser.yy" + case 516: +#line 1788 "dhcp4_parser.yy" { ctx.unique("space", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3115 "dhcp4_parser.cc" +#line 3034 "dhcp4_parser.cc" break; - case 536: // space: "space" $@78 ":" "constant string" -#line 1861 "dhcp4_parser.yy" + case 517: +#line 1791 "dhcp4_parser.yy" { ElementPtr space(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("space", space); ctx.leave(); } -#line 3125 "dhcp4_parser.cc" +#line 3044 "dhcp4_parser.cc" break; - case 538: // $@79: %empty -#line 1869 "dhcp4_parser.yy" + case 519: +#line 1799 "dhcp4_parser.yy" { ctx.unique("encapsulate", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3134 "dhcp4_parser.cc" +#line 3053 "dhcp4_parser.cc" break; - case 539: // option_def_encapsulate: "encapsulate" $@79 ":" "constant string" -#line 1872 "dhcp4_parser.yy" + case 520: +#line 1802 "dhcp4_parser.yy" { ElementPtr encap(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("encapsulate", encap); ctx.leave(); } -#line 3144 "dhcp4_parser.cc" +#line 3063 "dhcp4_parser.cc" break; - case 540: // option_def_array: "array" ":" "boolean" -#line 1878 "dhcp4_parser.yy" + case 521: +#line 1808 "dhcp4_parser.yy" { ctx.unique("array", ctx.loc2pos(yystack_[2].location)); ElementPtr array(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("array", array); } -#line 3154 "dhcp4_parser.cc" +#line 3073 "dhcp4_parser.cc" break; - case 541: // $@80: %empty -#line 1888 "dhcp4_parser.yy" + case 522: +#line 1818 "dhcp4_parser.yy" { ctx.unique("option-data", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3162,113 +3081,113 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.OPTION_DATA); } -#line 3166 "dhcp4_parser.cc" +#line 3085 "dhcp4_parser.cc" break; - case 542: // option_data_list: "option-data" $@80 ":" "[" option_data_list_content "]" -#line 1894 "dhcp4_parser.yy" + case 523: +#line 1824 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3175 "dhcp4_parser.cc" +#line 3094 "dhcp4_parser.cc" break; - case 547: // not_empty_option_data_list: not_empty_option_data_list "," -#line 1909 "dhcp4_parser.yy" + case 528: +#line 1839 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3183 "dhcp4_parser.cc" +#line 3102 "dhcp4_parser.cc" break; - case 548: // $@81: %empty -#line 1916 "dhcp4_parser.yy" + case 529: +#line 1846 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3193 "dhcp4_parser.cc" +#line 3112 "dhcp4_parser.cc" break; - case 549: // option_data_entry: "{" $@81 option_data_params "}" -#line 1920 "dhcp4_parser.yy" + case 530: +#line 1850 "dhcp4_parser.yy" { /// @todo: the code or name parameters are required. ctx.stack_.pop_back(); } -#line 3202 "dhcp4_parser.cc" +#line 3121 "dhcp4_parser.cc" break; - case 550: // $@82: %empty -#line 1928 "dhcp4_parser.yy" + case 531: +#line 1858 "dhcp4_parser.yy" { // Parse the option-data list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3212 "dhcp4_parser.cc" +#line 3131 "dhcp4_parser.cc" break; - case 551: // sub_option_data: "{" $@82 option_data_params "}" -#line 1932 "dhcp4_parser.yy" + case 532: +#line 1862 "dhcp4_parser.yy" { /// @todo: the code or name parameters are required. // parsing completed } -#line 3221 "dhcp4_parser.cc" +#line 3140 "dhcp4_parser.cc" break; - case 556: // not_empty_option_data_params: not_empty_option_data_params "," -#line 1948 "dhcp4_parser.yy" + case 537: +#line 1878 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3229 "dhcp4_parser.cc" +#line 3148 "dhcp4_parser.cc" break; - case 567: // $@83: %empty -#line 1968 "dhcp4_parser.yy" + case 548: +#line 1898 "dhcp4_parser.yy" { ctx.unique("data", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3238 "dhcp4_parser.cc" +#line 3157 "dhcp4_parser.cc" break; - case 568: // option_data_data: "data" $@83 ":" "constant string" -#line 1971 "dhcp4_parser.yy" + case 549: +#line 1901 "dhcp4_parser.yy" { ElementPtr data(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("data", data); ctx.leave(); } -#line 3248 "dhcp4_parser.cc" +#line 3167 "dhcp4_parser.cc" break; - case 571: // option_data_csv_format: "csv-format" ":" "boolean" -#line 1981 "dhcp4_parser.yy" + case 552: +#line 1911 "dhcp4_parser.yy" { ctx.unique("csv-format", ctx.loc2pos(yystack_[2].location)); ElementPtr space(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("csv-format", space); } -#line 3258 "dhcp4_parser.cc" +#line 3177 "dhcp4_parser.cc" break; - case 572: // option_data_always_send: "always-send" ":" "boolean" -#line 1987 "dhcp4_parser.yy" + case 553: +#line 1917 "dhcp4_parser.yy" { ctx.unique("always-send", ctx.loc2pos(yystack_[2].location)); ElementPtr persist(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("always-send", persist); } -#line 3268 "dhcp4_parser.cc" +#line 3187 "dhcp4_parser.cc" break; - case 573: // $@84: %empty -#line 1996 "dhcp4_parser.yy" + case 554: +#line 1926 "dhcp4_parser.yy" { ctx.unique("pools", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3276,103 +3195,103 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.POOLS); } -#line 3280 "dhcp4_parser.cc" +#line 3199 "dhcp4_parser.cc" break; - case 574: // pools_list: "pools" $@84 ":" "[" pools_list_content "]" -#line 2002 "dhcp4_parser.yy" + case 555: +#line 1932 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3289 "dhcp4_parser.cc" +#line 3208 "dhcp4_parser.cc" break; - case 579: // not_empty_pools_list: not_empty_pools_list "," -#line 2015 "dhcp4_parser.yy" + case 560: +#line 1945 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3297 "dhcp4_parser.cc" +#line 3216 "dhcp4_parser.cc" break; - case 580: // $@85: %empty -#line 2020 "dhcp4_parser.yy" + case 561: +#line 1950 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3307 "dhcp4_parser.cc" +#line 3226 "dhcp4_parser.cc" break; - case 581: // pool_list_entry: "{" $@85 pool_params "}" -#line 2024 "dhcp4_parser.yy" + case 562: +#line 1954 "dhcp4_parser.yy" { // The pool parameter is required. ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 3317 "dhcp4_parser.cc" +#line 3236 "dhcp4_parser.cc" break; - case 582: // $@86: %empty -#line 2030 "dhcp4_parser.yy" + case 563: +#line 1960 "dhcp4_parser.yy" { // Parse the pool list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3327 "dhcp4_parser.cc" +#line 3246 "dhcp4_parser.cc" break; - case 583: // sub_pool4: "{" $@86 pool_params "}" -#line 2034 "dhcp4_parser.yy" + case 564: +#line 1964 "dhcp4_parser.yy" { // The pool parameter is required. ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 3337 "dhcp4_parser.cc" +#line 3256 "dhcp4_parser.cc" break; - case 586: // pool_params: pool_params "," -#line 2042 "dhcp4_parser.yy" + case 567: +#line 1972 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3345 "dhcp4_parser.cc" +#line 3264 "dhcp4_parser.cc" break; - case 594: // $@87: %empty -#line 2056 "dhcp4_parser.yy" + case 575: +#line 1986 "dhcp4_parser.yy" { ctx.unique("pool", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3354 "dhcp4_parser.cc" +#line 3273 "dhcp4_parser.cc" break; - case 595: // pool_entry: "pool" $@87 ":" "constant string" -#line 2059 "dhcp4_parser.yy" + case 576: +#line 1989 "dhcp4_parser.yy" { ElementPtr pool(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pool", pool); ctx.leave(); } -#line 3364 "dhcp4_parser.cc" +#line 3283 "dhcp4_parser.cc" break; - case 596: // $@88: %empty -#line 2065 "dhcp4_parser.yy" + case 577: +#line 1995 "dhcp4_parser.yy" { ctx.enter(ctx.NO_KEYWORD); } -#line 3372 "dhcp4_parser.cc" +#line 3291 "dhcp4_parser.cc" break; - case 597: // user_context: "user-context" $@88 ":" map_value -#line 2067 "dhcp4_parser.yy" + case 578: +#line 1997 "dhcp4_parser.yy" { ElementPtr parent = ctx.stack_.back(); ElementPtr user_context = yystack_[0].value.as < ElementPtr > (); @@ -3395,19 +3314,19 @@ namespace isc { namespace dhcp { parent->set("user-context", user_context); ctx.leave(); } -#line 3399 "dhcp4_parser.cc" +#line 3318 "dhcp4_parser.cc" break; - case 598: // $@89: %empty -#line 2090 "dhcp4_parser.yy" + case 579: +#line 2020 "dhcp4_parser.yy" { ctx.enter(ctx.NO_KEYWORD); } -#line 3407 "dhcp4_parser.cc" +#line 3326 "dhcp4_parser.cc" break; - case 599: // comment: "comment" $@89 ":" "constant string" -#line 2092 "dhcp4_parser.yy" + case 580: +#line 2022 "dhcp4_parser.yy" { ElementPtr parent = ctx.stack_.back(); ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location))); @@ -3432,11 +3351,11 @@ namespace isc { namespace dhcp { parent->set("user-context", user_context); ctx.leave(); } -#line 3436 "dhcp4_parser.cc" +#line 3355 "dhcp4_parser.cc" break; - case 600: // $@90: %empty -#line 2120 "dhcp4_parser.yy" + case 581: +#line 2050 "dhcp4_parser.yy" { ctx.unique("reservations", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3444,150 +3363,150 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.RESERVATIONS); } -#line 3448 "dhcp4_parser.cc" +#line 3367 "dhcp4_parser.cc" break; - case 601: // reservations: "reservations" $@90 ":" "[" reservations_list "]" -#line 2126 "dhcp4_parser.yy" + case 582: +#line 2056 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3457 "dhcp4_parser.cc" +#line 3376 "dhcp4_parser.cc" break; - case 606: // not_empty_reservations_list: not_empty_reservations_list "," -#line 2137 "dhcp4_parser.yy" + case 587: +#line 2067 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3465 "dhcp4_parser.cc" +#line 3384 "dhcp4_parser.cc" break; - case 607: // $@91: %empty -#line 2142 "dhcp4_parser.yy" + case 588: +#line 2072 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3475 "dhcp4_parser.cc" +#line 3394 "dhcp4_parser.cc" break; - case 608: // reservation: "{" $@91 reservation_params "}" -#line 2146 "dhcp4_parser.yy" + case 589: +#line 2076 "dhcp4_parser.yy" { /// @todo: an identifier parameter is required. ctx.stack_.pop_back(); } -#line 3484 "dhcp4_parser.cc" +#line 3403 "dhcp4_parser.cc" break; - case 609: // $@92: %empty -#line 2151 "dhcp4_parser.yy" + case 590: +#line 2081 "dhcp4_parser.yy" { // Parse the reservations list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3494 "dhcp4_parser.cc" +#line 3413 "dhcp4_parser.cc" break; - case 610: // sub_reservation: "{" $@92 reservation_params "}" -#line 2155 "dhcp4_parser.yy" + case 591: +#line 2085 "dhcp4_parser.yy" { /// @todo: an identifier parameter is required. // parsing completed } -#line 3503 "dhcp4_parser.cc" +#line 3422 "dhcp4_parser.cc" break; - case 615: // not_empty_reservation_params: not_empty_reservation_params "," -#line 2166 "dhcp4_parser.yy" + case 596: +#line 2096 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3511 "dhcp4_parser.cc" +#line 3430 "dhcp4_parser.cc" break; - case 631: // $@93: %empty -#line 2189 "dhcp4_parser.yy" + case 612: +#line 2119 "dhcp4_parser.yy" { ctx.unique("next-server", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3520 "dhcp4_parser.cc" +#line 3439 "dhcp4_parser.cc" break; - case 632: // next_server: "next-server" $@93 ":" "constant string" -#line 2192 "dhcp4_parser.yy" + case 613: +#line 2122 "dhcp4_parser.yy" { ElementPtr next_server(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("next-server", next_server); ctx.leave(); } -#line 3530 "dhcp4_parser.cc" +#line 3449 "dhcp4_parser.cc" break; - case 633: // $@94: %empty -#line 2198 "dhcp4_parser.yy" + case 614: +#line 2128 "dhcp4_parser.yy" { ctx.unique("server-hostname", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3539 "dhcp4_parser.cc" +#line 3458 "dhcp4_parser.cc" break; - case 634: // server_hostname: "server-hostname" $@94 ":" "constant string" -#line 2201 "dhcp4_parser.yy" + case 615: +#line 2131 "dhcp4_parser.yy" { ElementPtr srv(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-hostname", srv); ctx.leave(); } -#line 3549 "dhcp4_parser.cc" +#line 3468 "dhcp4_parser.cc" break; - case 635: // $@95: %empty -#line 2207 "dhcp4_parser.yy" + case 616: +#line 2137 "dhcp4_parser.yy" { ctx.unique("boot-file-name", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3558 "dhcp4_parser.cc" +#line 3477 "dhcp4_parser.cc" break; - case 636: // boot_file_name: "boot-file-name" $@95 ":" "constant string" -#line 2210 "dhcp4_parser.yy" + case 617: +#line 2140 "dhcp4_parser.yy" { ElementPtr bootfile(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("boot-file-name", bootfile); ctx.leave(); } -#line 3568 "dhcp4_parser.cc" +#line 3487 "dhcp4_parser.cc" break; - case 637: // $@96: %empty -#line 2216 "dhcp4_parser.yy" + case 618: +#line 2146 "dhcp4_parser.yy" { ctx.unique("ip-address", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3577 "dhcp4_parser.cc" +#line 3496 "dhcp4_parser.cc" break; - case 638: // ip_address: "ip-address" $@96 ":" "constant string" -#line 2219 "dhcp4_parser.yy" + case 619: +#line 2149 "dhcp4_parser.yy" { ElementPtr addr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ip-address", addr); ctx.leave(); } -#line 3587 "dhcp4_parser.cc" +#line 3506 "dhcp4_parser.cc" break; - case 639: // $@97: %empty -#line 2225 "dhcp4_parser.yy" + case 620: +#line 2155 "dhcp4_parser.yy" { ctx.unique("ip-addresses", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3595,134 +3514,134 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.NO_KEYWORD); } -#line 3599 "dhcp4_parser.cc" +#line 3518 "dhcp4_parser.cc" break; - case 640: // ip_addresses: "ip-addresses" $@97 ":" list_strings -#line 2231 "dhcp4_parser.yy" + case 621: +#line 2161 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3608 "dhcp4_parser.cc" +#line 3527 "dhcp4_parser.cc" break; - case 641: // $@98: %empty -#line 2236 "dhcp4_parser.yy" + case 622: +#line 2166 "dhcp4_parser.yy" { ctx.unique("duid", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3617 "dhcp4_parser.cc" +#line 3536 "dhcp4_parser.cc" break; - case 642: // duid: "duid" $@98 ":" "constant string" -#line 2239 "dhcp4_parser.yy" + case 623: +#line 2169 "dhcp4_parser.yy" { ElementPtr d(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("duid", d); ctx.leave(); } -#line 3627 "dhcp4_parser.cc" +#line 3546 "dhcp4_parser.cc" break; - case 643: // $@99: %empty -#line 2245 "dhcp4_parser.yy" + case 624: +#line 2175 "dhcp4_parser.yy" { ctx.unique("hw-address", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3636 "dhcp4_parser.cc" +#line 3555 "dhcp4_parser.cc" break; - case 644: // hw_address: "hw-address" $@99 ":" "constant string" -#line 2248 "dhcp4_parser.yy" + case 625: +#line 2178 "dhcp4_parser.yy" { ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hw-address", hw); ctx.leave(); } -#line 3646 "dhcp4_parser.cc" +#line 3565 "dhcp4_parser.cc" break; - case 645: // $@100: %empty -#line 2254 "dhcp4_parser.yy" + case 626: +#line 2184 "dhcp4_parser.yy" { ctx.unique("client-id", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3655 "dhcp4_parser.cc" +#line 3574 "dhcp4_parser.cc" break; - case 646: // client_id_value: "client-id" $@100 ":" "constant string" -#line 2257 "dhcp4_parser.yy" + case 627: +#line 2187 "dhcp4_parser.yy" { ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("client-id", hw); ctx.leave(); } -#line 3665 "dhcp4_parser.cc" +#line 3584 "dhcp4_parser.cc" break; - case 647: // $@101: %empty -#line 2263 "dhcp4_parser.yy" + case 628: +#line 2193 "dhcp4_parser.yy" { ctx.unique("circuit-id", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3674 "dhcp4_parser.cc" +#line 3593 "dhcp4_parser.cc" break; - case 648: // circuit_id_value: "circuit-id" $@101 ":" "constant string" -#line 2266 "dhcp4_parser.yy" + case 629: +#line 2196 "dhcp4_parser.yy" { ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("circuit-id", hw); ctx.leave(); } -#line 3684 "dhcp4_parser.cc" +#line 3603 "dhcp4_parser.cc" break; - case 649: // $@102: %empty -#line 2272 "dhcp4_parser.yy" + case 630: +#line 2202 "dhcp4_parser.yy" { ctx.unique("flex-id", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3693 "dhcp4_parser.cc" +#line 3612 "dhcp4_parser.cc" break; - case 650: // flex_id_value: "flex-id" $@102 ":" "constant string" -#line 2275 "dhcp4_parser.yy" + case 631: +#line 2205 "dhcp4_parser.yy" { ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("flex-id", hw); ctx.leave(); } -#line 3703 "dhcp4_parser.cc" +#line 3622 "dhcp4_parser.cc" break; - case 651: // $@103: %empty -#line 2281 "dhcp4_parser.yy" + case 632: +#line 2211 "dhcp4_parser.yy" { ctx.unique("hostname", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3712 "dhcp4_parser.cc" +#line 3631 "dhcp4_parser.cc" break; - case 652: // hostname: "hostname" $@103 ":" "constant string" -#line 2284 "dhcp4_parser.yy" + case 633: +#line 2214 "dhcp4_parser.yy" { ElementPtr host(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname", host); ctx.leave(); } -#line 3722 "dhcp4_parser.cc" +#line 3641 "dhcp4_parser.cc" break; - case 653: // $@104: %empty -#line 2290 "dhcp4_parser.yy" + case 634: +#line 2220 "dhcp4_parser.yy" { ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location)); ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3730,20 +3649,20 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(c); ctx.enter(ctx.NO_KEYWORD); } -#line 3734 "dhcp4_parser.cc" +#line 3653 "dhcp4_parser.cc" break; - case 654: // reservation_client_classes: "client-classes" $@104 ":" list_strings -#line 2296 "dhcp4_parser.yy" + case 635: +#line 2226 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3743 "dhcp4_parser.cc" +#line 3662 "dhcp4_parser.cc" break; - case 655: // $@105: %empty -#line 2304 "dhcp4_parser.yy" + case 636: +#line 2234 "dhcp4_parser.yy" { ctx.unique("relay", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -3751,20 +3670,20 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.RELAY); } -#line 3755 "dhcp4_parser.cc" +#line 3674 "dhcp4_parser.cc" break; - case 656: // relay: "relay" $@105 ":" "{" relay_map "}" -#line 2310 "dhcp4_parser.yy" + case 637: +#line 2240 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3764 "dhcp4_parser.cc" +#line 3683 "dhcp4_parser.cc" break; - case 659: // $@106: %empty -#line 2322 "dhcp4_parser.yy" + case 640: +#line 2252 "dhcp4_parser.yy" { ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3772,95 +3691,95 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.CLIENT_CLASSES); } -#line 3776 "dhcp4_parser.cc" +#line 3695 "dhcp4_parser.cc" break; - case 660: // client_classes: "client-classes" $@106 ":" "[" client_classes_list "]" -#line 2328 "dhcp4_parser.yy" + case 641: +#line 2258 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3785 "dhcp4_parser.cc" +#line 3704 "dhcp4_parser.cc" break; - case 663: // client_classes_list: client_classes_list "," -#line 2335 "dhcp4_parser.yy" + case 644: +#line 2265 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3793 "dhcp4_parser.cc" +#line 3712 "dhcp4_parser.cc" break; - case 664: // $@107: %empty -#line 2340 "dhcp4_parser.yy" + case 645: +#line 2270 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3803 "dhcp4_parser.cc" +#line 3722 "dhcp4_parser.cc" break; - case 665: // client_class_entry: "{" $@107 client_class_params "}" -#line 2344 "dhcp4_parser.yy" + case 646: +#line 2274 "dhcp4_parser.yy" { // The name client class parameter is required. ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 3813 "dhcp4_parser.cc" +#line 3732 "dhcp4_parser.cc" break; - case 670: // not_empty_client_class_params: not_empty_client_class_params "," -#line 2356 "dhcp4_parser.yy" + case 651: +#line 2286 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3821 "dhcp4_parser.cc" +#line 3740 "dhcp4_parser.cc" break; - case 686: // $@108: %empty -#line 2379 "dhcp4_parser.yy" + case 667: +#line 2309 "dhcp4_parser.yy" { ctx.unique("test", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3830 "dhcp4_parser.cc" +#line 3749 "dhcp4_parser.cc" break; - case 687: // client_class_test: "test" $@108 ":" "constant string" -#line 2382 "dhcp4_parser.yy" + case 668: +#line 2312 "dhcp4_parser.yy" { ElementPtr test(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("test", test); ctx.leave(); } -#line 3840 "dhcp4_parser.cc" +#line 3759 "dhcp4_parser.cc" break; - case 688: // only_if_required: "only-if-required" ":" "boolean" -#line 2388 "dhcp4_parser.yy" + case 669: +#line 2318 "dhcp4_parser.yy" { ctx.unique("only-if-required", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("only-if-required", b); } -#line 3850 "dhcp4_parser.cc" +#line 3769 "dhcp4_parser.cc" break; - case 689: // dhcp4o6_port: "dhcp4o6-port" ":" "integer" -#line 2396 "dhcp4_parser.yy" + case 670: +#line 2326 "dhcp4_parser.yy" { ctx.unique("dhcp4o6-port", ctx.loc2pos(yystack_[2].location)); ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("dhcp4o6-port", time); } -#line 3860 "dhcp4_parser.cc" +#line 3779 "dhcp4_parser.cc" break; - case 690: // $@109: %empty -#line 2404 "dhcp4_parser.yy" + case 671: +#line 2334 "dhcp4_parser.yy" { ctx.unique("control-socket", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -3868,66 +3787,66 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.CONTROL_SOCKET); } -#line 3872 "dhcp4_parser.cc" +#line 3791 "dhcp4_parser.cc" break; - case 691: // control_socket: "control-socket" $@109 ":" "{" control_socket_params "}" -#line 2410 "dhcp4_parser.yy" + case 672: +#line 2340 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3881 "dhcp4_parser.cc" +#line 3800 "dhcp4_parser.cc" break; - case 694: // control_socket_params: control_socket_params "," -#line 2417 "dhcp4_parser.yy" + case 675: +#line 2347 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3889 "dhcp4_parser.cc" +#line 3808 "dhcp4_parser.cc" break; - case 700: // $@110: %empty -#line 2429 "dhcp4_parser.yy" + case 681: +#line 2359 "dhcp4_parser.yy" { ctx.unique("socket-type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3898 "dhcp4_parser.cc" +#line 3817 "dhcp4_parser.cc" break; - case 701: // control_socket_type: "socket-type" $@110 ":" "constant string" -#line 2432 "dhcp4_parser.yy" + case 682: +#line 2362 "dhcp4_parser.yy" { ElementPtr stype(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("socket-type", stype); ctx.leave(); } -#line 3908 "dhcp4_parser.cc" +#line 3827 "dhcp4_parser.cc" break; - case 702: // $@111: %empty -#line 2438 "dhcp4_parser.yy" + case 683: +#line 2368 "dhcp4_parser.yy" { ctx.unique("socket-name", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3917 "dhcp4_parser.cc" +#line 3836 "dhcp4_parser.cc" break; - case 703: // control_socket_name: "socket-name" $@111 ":" "constant string" -#line 2441 "dhcp4_parser.yy" + case 684: +#line 2371 "dhcp4_parser.yy" { ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("socket-name", name); ctx.leave(); } -#line 3927 "dhcp4_parser.cc" +#line 3846 "dhcp4_parser.cc" break; - case 704: // $@112: %empty -#line 2450 "dhcp4_parser.yy" + case 685: +#line 2380 "dhcp4_parser.yy" { ctx.unique("dhcp-queue-control", ctx.loc2pos(yystack_[0].location)); ElementPtr qc(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -3935,87 +3854,87 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(qc); ctx.enter(ctx.DHCP_QUEUE_CONTROL); } -#line 3939 "dhcp4_parser.cc" +#line 3858 "dhcp4_parser.cc" break; - case 705: // dhcp_queue_control: "dhcp-queue-control" $@112 ":" "{" queue_control_params "}" -#line 2456 "dhcp4_parser.yy" + case 686: +#line 2386 "dhcp4_parser.yy" { // The enable queue parameter is required. ctx.require("enable-queue", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } -#line 3950 "dhcp4_parser.cc" +#line 3869 "dhcp4_parser.cc" break; - case 708: // queue_control_params: queue_control_params "," -#line 2465 "dhcp4_parser.yy" + case 689: +#line 2395 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3958 "dhcp4_parser.cc" +#line 3877 "dhcp4_parser.cc" break; - case 715: // enable_queue: "enable-queue" ":" "boolean" -#line 2478 "dhcp4_parser.yy" + case 696: +#line 2408 "dhcp4_parser.yy" { ctx.unique("enable-queue", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enable-queue", b); } -#line 3968 "dhcp4_parser.cc" +#line 3887 "dhcp4_parser.cc" break; - case 716: // $@113: %empty -#line 2484 "dhcp4_parser.yy" + case 697: +#line 2414 "dhcp4_parser.yy" { ctx.unique("queue-type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3977 "dhcp4_parser.cc" +#line 3896 "dhcp4_parser.cc" break; - case 717: // queue_type: "queue-type" $@113 ":" "constant string" -#line 2487 "dhcp4_parser.yy" + case 698: +#line 2417 "dhcp4_parser.yy" { ElementPtr qt(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("queue-type", qt); ctx.leave(); } -#line 3987 "dhcp4_parser.cc" +#line 3906 "dhcp4_parser.cc" break; - case 718: // capacity: "capacity" ":" "integer" -#line 2493 "dhcp4_parser.yy" + case 699: +#line 2423 "dhcp4_parser.yy" { ctx.unique("capacity", ctx.loc2pos(yystack_[2].location)); ElementPtr c(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("capacity", c); } -#line 3997 "dhcp4_parser.cc" +#line 3916 "dhcp4_parser.cc" break; - case 719: // $@114: %empty -#line 2499 "dhcp4_parser.yy" + case 700: +#line 2429 "dhcp4_parser.yy" { ctx.unique(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4006 "dhcp4_parser.cc" +#line 3925 "dhcp4_parser.cc" break; - case 720: // arbitrary_map_entry: "constant string" $@114 ":" value -#line 2502 "dhcp4_parser.yy" + case 701: +#line 2432 "dhcp4_parser.yy" { ctx.stack_.back()->set(yystack_[3].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 4015 "dhcp4_parser.cc" +#line 3934 "dhcp4_parser.cc" break; - case 721: // $@115: %empty -#line 2509 "dhcp4_parser.yy" + case 702: +#line 2439 "dhcp4_parser.yy" { ctx.unique("dhcp-ddns", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -4023,291 +3942,291 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.DHCP_DDNS); } -#line 4027 "dhcp4_parser.cc" +#line 3946 "dhcp4_parser.cc" break; - case 722: // dhcp_ddns: "dhcp-ddns" $@115 ":" "{" dhcp_ddns_params "}" -#line 2515 "dhcp4_parser.yy" + case 703: +#line 2445 "dhcp4_parser.yy" { // 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 4038 "dhcp4_parser.cc" +#line 3957 "dhcp4_parser.cc" break; - case 723: // $@116: %empty -#line 2522 "dhcp4_parser.yy" + case 704: +#line 2452 "dhcp4_parser.yy" { // Parse the dhcp-ddns map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 4048 "dhcp4_parser.cc" +#line 3967 "dhcp4_parser.cc" break; - case 724: // sub_dhcp_ddns: "{" $@116 dhcp_ddns_params "}" -#line 2526 "dhcp4_parser.yy" + case 705: +#line 2456 "dhcp4_parser.yy" { // 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 4058 "dhcp4_parser.cc" +#line 3977 "dhcp4_parser.cc" break; - case 727: // dhcp_ddns_params: dhcp_ddns_params "," -#line 2534 "dhcp4_parser.yy" + case 708: +#line 2464 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4066 "dhcp4_parser.cc" +#line 3985 "dhcp4_parser.cc" break; - case 746: // enable_updates: "enable-updates" ":" "boolean" -#line 2559 "dhcp4_parser.yy" + case 727: +#line 2489 "dhcp4_parser.yy" { ctx.unique("enable-updates", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enable-updates", b); } -#line 4076 "dhcp4_parser.cc" +#line 3995 "dhcp4_parser.cc" break; - case 747: // $@117: %empty -#line 2565 "dhcp4_parser.yy" + case 728: +#line 2495 "dhcp4_parser.yy" { ctx.unique("server-ip", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4085 "dhcp4_parser.cc" +#line 4004 "dhcp4_parser.cc" break; - case 748: // server_ip: "server-ip" $@117 ":" "constant string" -#line 2568 "dhcp4_parser.yy" + case 729: +#line 2498 "dhcp4_parser.yy" { 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 4095 "dhcp4_parser.cc" +#line 4014 "dhcp4_parser.cc" break; - case 749: // server_port: "server-port" ":" "integer" -#line 2574 "dhcp4_parser.yy" + case 730: +#line 2504 "dhcp4_parser.yy" { ctx.unique("server-port", ctx.loc2pos(yystack_[2].location)); ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-port", i); } -#line 4105 "dhcp4_parser.cc" +#line 4024 "dhcp4_parser.cc" break; - case 750: // $@118: %empty -#line 2580 "dhcp4_parser.yy" + case 731: +#line 2510 "dhcp4_parser.yy" { ctx.unique("sender-ip", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4114 "dhcp4_parser.cc" +#line 4033 "dhcp4_parser.cc" break; - case 751: // sender_ip: "sender-ip" $@118 ":" "constant string" -#line 2583 "dhcp4_parser.yy" + case 732: +#line 2513 "dhcp4_parser.yy" { 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 4124 "dhcp4_parser.cc" +#line 4043 "dhcp4_parser.cc" break; - case 752: // sender_port: "sender-port" ":" "integer" -#line 2589 "dhcp4_parser.yy" + case 733: +#line 2519 "dhcp4_parser.yy" { ctx.unique("sender-port", ctx.loc2pos(yystack_[2].location)); ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("sender-port", i); } -#line 4134 "dhcp4_parser.cc" +#line 4053 "dhcp4_parser.cc" break; - case 753: // max_queue_size: "max-queue-size" ":" "integer" -#line 2595 "dhcp4_parser.yy" + case 734: +#line 2525 "dhcp4_parser.yy" { ctx.unique("max-queue-size", ctx.loc2pos(yystack_[2].location)); ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-queue-size", i); } -#line 4144 "dhcp4_parser.cc" +#line 4063 "dhcp4_parser.cc" break; - case 754: // $@119: %empty -#line 2601 "dhcp4_parser.yy" + case 735: +#line 2531 "dhcp4_parser.yy" { ctx.unique("ncr-protocol", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NCR_PROTOCOL); } -#line 4153 "dhcp4_parser.cc" +#line 4072 "dhcp4_parser.cc" break; - case 755: // ncr_protocol: "ncr-protocol" $@119 ":" ncr_protocol_value -#line 2604 "dhcp4_parser.yy" + case 736: +#line 2534 "dhcp4_parser.yy" { ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 4162 "dhcp4_parser.cc" +#line 4081 "dhcp4_parser.cc" break; - case 756: // ncr_protocol_value: "udp" -#line 2610 "dhcp4_parser.yy" + case 737: +#line 2540 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); } -#line 4168 "dhcp4_parser.cc" +#line 4087 "dhcp4_parser.cc" break; - case 757: // ncr_protocol_value: "tcp" -#line 2611 "dhcp4_parser.yy" + case 738: +#line 2541 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); } -#line 4174 "dhcp4_parser.cc" +#line 4093 "dhcp4_parser.cc" break; - case 758: // $@120: %empty -#line 2614 "dhcp4_parser.yy" + case 739: +#line 2544 "dhcp4_parser.yy" { ctx.unique("ncr-format", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NCR_FORMAT); } -#line 4183 "dhcp4_parser.cc" +#line 4102 "dhcp4_parser.cc" break; - case 759: // ncr_format: "ncr-format" $@120 ":" "JSON" -#line 2617 "dhcp4_parser.yy" + case 740: +#line 2547 "dhcp4_parser.yy" { ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ncr-format", json); ctx.leave(); } -#line 4193 "dhcp4_parser.cc" +#line 4112 "dhcp4_parser.cc" break; - case 760: // $@121: %empty -#line 2624 "dhcp4_parser.yy" + case 741: +#line 2554 "dhcp4_parser.yy" { ctx.unique("qualifying-suffix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4202 "dhcp4_parser.cc" +#line 4121 "dhcp4_parser.cc" break; - case 761: // dep_qualifying_suffix: "qualifying-suffix" $@121 ":" "constant string" -#line 2627 "dhcp4_parser.yy" + case 742: +#line 2557 "dhcp4_parser.yy" { 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 4212 "dhcp4_parser.cc" +#line 4131 "dhcp4_parser.cc" break; - case 762: // dep_override_no_update: "override-no-update" ":" "boolean" -#line 2634 "dhcp4_parser.yy" + case 743: +#line 2564 "dhcp4_parser.yy" { ctx.unique("override-no-update", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("override-no-update", b); } -#line 4222 "dhcp4_parser.cc" +#line 4141 "dhcp4_parser.cc" break; - case 763: // dep_override_client_update: "override-client-update" ":" "boolean" -#line 2641 "dhcp4_parser.yy" + case 744: +#line 2571 "dhcp4_parser.yy" { ctx.unique("override-client-update", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("override-client-update", b); } -#line 4232 "dhcp4_parser.cc" +#line 4151 "dhcp4_parser.cc" break; - case 764: // $@122: %empty -#line 2648 "dhcp4_parser.yy" + case 745: +#line 2578 "dhcp4_parser.yy" { ctx.unique("replace-client-name", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.REPLACE_CLIENT_NAME); } -#line 4241 "dhcp4_parser.cc" +#line 4160 "dhcp4_parser.cc" break; - case 765: // dep_replace_client_name: "replace-client-name" $@122 ":" ddns_replace_client_name_value -#line 2651 "dhcp4_parser.yy" + case 746: +#line 2581 "dhcp4_parser.yy" { ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 4250 "dhcp4_parser.cc" +#line 4169 "dhcp4_parser.cc" break; - case 766: // $@123: %empty -#line 2657 "dhcp4_parser.yy" + case 747: +#line 2587 "dhcp4_parser.yy" { ctx.unique("generated-prefix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4259 "dhcp4_parser.cc" +#line 4178 "dhcp4_parser.cc" break; - case 767: // dep_generated_prefix: "generated-prefix" $@123 ":" "constant string" -#line 2660 "dhcp4_parser.yy" + case 748: +#line 2590 "dhcp4_parser.yy" { 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 4269 "dhcp4_parser.cc" +#line 4188 "dhcp4_parser.cc" break; - case 768: // $@124: %empty -#line 2667 "dhcp4_parser.yy" + case 749: +#line 2597 "dhcp4_parser.yy" { ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4278 "dhcp4_parser.cc" +#line 4197 "dhcp4_parser.cc" break; - case 769: // dep_hostname_char_set: "hostname-char-set" $@124 ":" "constant string" -#line 2670 "dhcp4_parser.yy" + case 750: +#line 2600 "dhcp4_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname-char-set", s); ctx.leave(); } -#line 4288 "dhcp4_parser.cc" +#line 4207 "dhcp4_parser.cc" break; - case 770: // $@125: %empty -#line 2677 "dhcp4_parser.yy" + case 751: +#line 2607 "dhcp4_parser.yy" { ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4297 "dhcp4_parser.cc" +#line 4216 "dhcp4_parser.cc" break; - case 771: // dep_hostname_char_replacement: "hostname-char-replacement" $@125 ":" "constant string" -#line 2680 "dhcp4_parser.yy" + case 752: +#line 2610 "dhcp4_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname-char-replacement", s); ctx.leave(); } -#line 4307 "dhcp4_parser.cc" +#line 4226 "dhcp4_parser.cc" break; - case 772: // $@126: %empty -#line 2689 "dhcp4_parser.yy" + case 753: +#line 2619 "dhcp4_parser.yy" { ctx.unique("config-control", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -4315,48 +4234,48 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(i); ctx.enter(ctx.CONFIG_CONTROL); } -#line 4319 "dhcp4_parser.cc" +#line 4238 "dhcp4_parser.cc" break; - case 773: // config_control: "config-control" $@126 ":" "{" config_control_params "}" -#line 2695 "dhcp4_parser.yy" + case 754: +#line 2625 "dhcp4_parser.yy" { // No config control params are required ctx.stack_.pop_back(); ctx.leave(); } -#line 4329 "dhcp4_parser.cc" +#line 4248 "dhcp4_parser.cc" break; - case 774: // $@127: %empty -#line 2701 "dhcp4_parser.yy" + case 755: +#line 2631 "dhcp4_parser.yy" { // Parse the config-control map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 4339 "dhcp4_parser.cc" +#line 4258 "dhcp4_parser.cc" break; - case 775: // sub_config_control: "{" $@127 config_control_params "}" -#line 2705 "dhcp4_parser.yy" + case 756: +#line 2635 "dhcp4_parser.yy" { // No config_control params are required // parsing completed } -#line 4348 "dhcp4_parser.cc" +#line 4267 "dhcp4_parser.cc" break; - case 778: // config_control_params: config_control_params "," -#line 2713 "dhcp4_parser.yy" + case 759: +#line 2643 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4356 "dhcp4_parser.cc" +#line 4275 "dhcp4_parser.cc" break; - case 781: // $@128: %empty -#line 2723 "dhcp4_parser.yy" + case 762: +#line 2653 "dhcp4_parser.yy" { ctx.unique("config-databases", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -4364,30 +4283,30 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.CONFIG_DATABASE); } -#line 4368 "dhcp4_parser.cc" +#line 4287 "dhcp4_parser.cc" break; - case 782: // config_databases: "config-databases" $@128 ":" "[" database_list "]" -#line 2729 "dhcp4_parser.yy" + case 763: +#line 2659 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4377 "dhcp4_parser.cc" +#line 4296 "dhcp4_parser.cc" break; - case 783: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer" -#line 2734 "dhcp4_parser.yy" + case 764: +#line 2664 "dhcp4_parser.yy" { ctx.unique("config-fetch-wait-time", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("config-fetch-wait-time", value); } -#line 4387 "dhcp4_parser.cc" +#line 4306 "dhcp4_parser.cc" break; - case 784: // $@129: %empty -#line 2742 "dhcp4_parser.yy" + case 765: +#line 2672 "dhcp4_parser.yy" { ctx.unique("loggers", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -4395,83 +4314,83 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.LOGGERS); } -#line 4399 "dhcp4_parser.cc" +#line 4318 "dhcp4_parser.cc" break; - case 785: // loggers: "loggers" $@129 ":" "[" loggers_entries "]" -#line 2748 "dhcp4_parser.yy" + case 766: +#line 2678 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4408 "dhcp4_parser.cc" +#line 4327 "dhcp4_parser.cc" break; - case 788: // loggers_entries: loggers_entries "," -#line 2757 "dhcp4_parser.yy" + case 769: +#line 2687 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4416 "dhcp4_parser.cc" +#line 4335 "dhcp4_parser.cc" break; - case 789: // $@130: %empty -#line 2763 "dhcp4_parser.yy" + case 770: +#line 2693 "dhcp4_parser.yy" { ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(l); ctx.stack_.push_back(l); } -#line 4426 "dhcp4_parser.cc" +#line 4345 "dhcp4_parser.cc" break; - case 790: // logger_entry: "{" $@130 logger_params "}" -#line 2767 "dhcp4_parser.yy" + case 771: +#line 2697 "dhcp4_parser.yy" { ctx.stack_.pop_back(); } -#line 4434 "dhcp4_parser.cc" +#line 4353 "dhcp4_parser.cc" break; - case 793: // logger_params: logger_params "," -#line 2773 "dhcp4_parser.yy" + case 774: +#line 2703 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4442 "dhcp4_parser.cc" +#line 4361 "dhcp4_parser.cc" break; - case 801: // debuglevel: "debuglevel" ":" "integer" -#line 2787 "dhcp4_parser.yy" + case 782: +#line 2717 "dhcp4_parser.yy" { ctx.unique("debuglevel", ctx.loc2pos(yystack_[2].location)); ElementPtr dl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("debuglevel", dl); } -#line 4452 "dhcp4_parser.cc" +#line 4371 "dhcp4_parser.cc" break; - case 802: // $@131: %empty -#line 2793 "dhcp4_parser.yy" + case 783: +#line 2723 "dhcp4_parser.yy" { ctx.unique("severity", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4461 "dhcp4_parser.cc" +#line 4380 "dhcp4_parser.cc" break; - case 803: // severity: "severity" $@131 ":" "constant string" -#line 2796 "dhcp4_parser.yy" + case 784: +#line 2726 "dhcp4_parser.yy" { ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("severity", sev); ctx.leave(); } -#line 4471 "dhcp4_parser.cc" +#line 4390 "dhcp4_parser.cc" break; - case 804: // $@132: %empty -#line 2802 "dhcp4_parser.yy" + case 785: +#line 2732 "dhcp4_parser.yy" { ctx.unique("output_options", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -4479,122 +4398,122 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.OUTPUT_OPTIONS); } -#line 4483 "dhcp4_parser.cc" +#line 4402 "dhcp4_parser.cc" break; - case 805: // output_options_list: "output_options" $@132 ":" "[" output_options_list_content "]" -#line 2808 "dhcp4_parser.yy" + case 786: +#line 2738 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4492 "dhcp4_parser.cc" +#line 4411 "dhcp4_parser.cc" break; - case 808: // output_options_list_content: output_options_list_content "," -#line 2815 "dhcp4_parser.yy" + case 789: +#line 2745 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4500 "dhcp4_parser.cc" +#line 4419 "dhcp4_parser.cc" break; - case 809: // $@133: %empty -#line 2820 "dhcp4_parser.yy" + case 790: +#line 2750 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 4510 "dhcp4_parser.cc" +#line 4429 "dhcp4_parser.cc" break; - case 810: // output_entry: "{" $@133 output_params_list "}" -#line 2824 "dhcp4_parser.yy" + case 791: +#line 2754 "dhcp4_parser.yy" { ctx.stack_.pop_back(); } -#line 4518 "dhcp4_parser.cc" +#line 4437 "dhcp4_parser.cc" break; - case 813: // output_params_list: output_params_list "," -#line 2830 "dhcp4_parser.yy" + case 794: +#line 2760 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4526 "dhcp4_parser.cc" +#line 4445 "dhcp4_parser.cc" break; - case 819: // $@134: %empty -#line 2842 "dhcp4_parser.yy" + case 800: +#line 2772 "dhcp4_parser.yy" { ctx.unique("output", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4535 "dhcp4_parser.cc" +#line 4454 "dhcp4_parser.cc" break; - case 820: // output: "output" $@134 ":" "constant string" -#line 2845 "dhcp4_parser.yy" + case 801: +#line 2775 "dhcp4_parser.yy" { ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("output", sev); ctx.leave(); } -#line 4545 "dhcp4_parser.cc" +#line 4464 "dhcp4_parser.cc" break; - case 821: // flush: "flush" ":" "boolean" -#line 2851 "dhcp4_parser.yy" + case 802: +#line 2781 "dhcp4_parser.yy" { ctx.unique("flush", ctx.loc2pos(yystack_[2].location)); ElementPtr flush(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("flush", flush); } -#line 4555 "dhcp4_parser.cc" +#line 4474 "dhcp4_parser.cc" break; - case 822: // maxsize: "maxsize" ":" "integer" -#line 2857 "dhcp4_parser.yy" + case 803: +#line 2787 "dhcp4_parser.yy" { ctx.unique("maxsize", ctx.loc2pos(yystack_[2].location)); ElementPtr maxsize(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("maxsize", maxsize); } -#line 4565 "dhcp4_parser.cc" +#line 4484 "dhcp4_parser.cc" break; - case 823: // maxver: "maxver" ":" "integer" -#line 2863 "dhcp4_parser.yy" + case 804: +#line 2793 "dhcp4_parser.yy" { ctx.unique("maxver", ctx.loc2pos(yystack_[2].location)); ElementPtr maxver(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("maxver", maxver); } -#line 4575 "dhcp4_parser.cc" +#line 4494 "dhcp4_parser.cc" break; - case 824: // $@135: %empty -#line 2869 "dhcp4_parser.yy" + case 805: +#line 2799 "dhcp4_parser.yy" { ctx.unique("pattern", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4584 "dhcp4_parser.cc" +#line 4503 "dhcp4_parser.cc" break; - case 825: // pattern: "pattern" $@135 ":" "constant string" -#line 2872 "dhcp4_parser.yy" + case 806: +#line 2802 "dhcp4_parser.yy" { ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pattern", sev); ctx.leave(); } -#line 4594 "dhcp4_parser.cc" +#line 4513 "dhcp4_parser.cc" break; - case 826: // $@136: %empty -#line 2878 "dhcp4_parser.yy" + case 807: +#line 2808 "dhcp4_parser.yy" { ctx.unique("compatibility", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -4602,38 +4521,38 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(i); ctx.enter(ctx.COMPATIBILITY); } -#line 4606 "dhcp4_parser.cc" +#line 4525 "dhcp4_parser.cc" break; - case 827: // compatibility: "compatibility" $@136 ":" "{" compatibility_params "}" -#line 2884 "dhcp4_parser.yy" + case 808: +#line 2814 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4615 "dhcp4_parser.cc" +#line 4534 "dhcp4_parser.cc" break; - case 830: // compatibility_params: compatibility_params "," -#line 2891 "dhcp4_parser.yy" + case 811: +#line 2821 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4623 "dhcp4_parser.cc" +#line 4542 "dhcp4_parser.cc" break; - case 833: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean" -#line 2900 "dhcp4_parser.yy" + case 814: +#line 2830 "dhcp4_parser.yy" { ctx.unique("lenient-option-parsing", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("lenient-option-parsing", b); } -#line 4633 "dhcp4_parser.cc" +#line 4552 "dhcp4_parser.cc" break; -#line 4637 "dhcp4_parser.cc" +#line 4556 "dhcp4_parser.cc" default: break; @@ -4650,6 +4569,7 @@ namespace isc { namespace dhcp { YY_SYMBOL_PRINT ("-> $$ =", yylhs); yypop_ (yylen); yylen = 0; + YY_STACK_PRINT (); // Shift the result of the reduction. yypush_ (YY_NULLPTR, YY_MOVE (yylhs)); @@ -4665,9 +4585,7 @@ namespace isc { namespace dhcp { if (!yyerrstatus_) { ++yynerrs_; - context yyctx (*this, yyla); - std::string msg = yysyntax_error_ (yyctx); - error (yyla.location, YY_MOVE (msg)); + error (yyla.location, yysyntax_error_ (yystack_[0].state, yyla)); } @@ -4678,7 +4596,7 @@ namespace isc { namespace dhcp { error, discard it. */ // Return failure if at end of input. - if (yyla.kind () == symbol_kind::S_YYEOF) + if (yyla.type_get () == yyeof_) YYABORT; else if (!yyla.empty ()) { @@ -4704,7 +4622,6 @@ namespace isc { namespace dhcp { this YYERROR. */ yypop_ (yylen); yylen = 0; - YY_STACK_PRINT (); goto yyerrlab1; @@ -4713,33 +4630,31 @@ namespace isc { namespace dhcp { `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus_ = 3; // Each real token shifted decrements this. - // Pop stack until we find a state that shifts the error token. - for (;;) - { - yyn = yypact_[+yystack_[0].state]; - if (!yy_pact_value_is_default_ (yyn)) - { - yyn += symbol_kind::S_YYerror; - if (0 <= yyn && yyn <= yylast_ - && yycheck_[yyn] == symbol_kind::S_YYerror) - { - yyn = yytable_[yyn]; - if (0 < yyn) - break; - } - } - - // Pop the current state because it cannot handle the error token. - if (yystack_.size () == 1) - YYABORT; - - yyerror_range[1].location = yystack_[0].location; - yy_destroy_ ("Error: popping", yystack_[0]); - yypop_ (); - YY_STACK_PRINT (); - } { stack_symbol_type error_token; + for (;;) + { + yyn = yypact_[+yystack_[0].state]; + if (!yy_pact_value_is_default_ (yyn)) + { + yyn += yy_error_token_; + if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yy_error_token_) + { + yyn = yytable_[yyn]; + if (0 < yyn) + break; + } + } + + // Pop the current state because it cannot handle the error token. + if (yystack_.size () == 1) + YYABORT; + + yyerror_range[1].location = yystack_[0].location; + yy_destroy_ ("Error: popping", yystack_[0]); + yypop_ (); + YY_STACK_PRINT (); + } yyerror_range[2].location = yyla.location; YYLLOC_DEFAULT (error_token.location, yyerror_range, 2); @@ -4777,7 +4692,6 @@ namespace isc { namespace dhcp { /* Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT. */ yypop_ (yylen); - YY_STACK_PRINT (); while (1 < yystack_.size ()) { yy_destroy_ ("Cleanup: popping", yystack_[0]); @@ -4811,103 +4725,18 @@ namespace isc { namespace dhcp { error (yyexc.location, yyexc.what ()); } - /* Return YYSTR after stripping away unnecessary quotes and - backslashes, so that it's suitable for yyerror. The heuristic is - that double-quoting is unnecessary unless the string contains an - apostrophe, a comma, or backslash (other than backslash-backslash). - YYSTR is taken from yytname. */ + // Generate an error message. std::string - Dhcp4Parser::yytnamerr_ (const char *yystr) + Dhcp4Parser::yysyntax_error_ (state_type yystate, const symbol_type& yyla) const { - if (*yystr == '"') - { - std::string yyr; - char const *yyp = yystr; + // Number of reported tokens (one for the "unexpected", one per + // "expected"). + std::ptrdiff_t yycount = 0; + // Its maximum. + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + // Arguments of yyformat. + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - else - goto append; - - append: - default: - yyr += *yyp; - break; - - case '"': - return yyr; - } - do_not_strip_quotes: ; - } - - return yystr; - } - - std::string - Dhcp4Parser::symbol_name (symbol_kind_type yysymbol) - { - return yytnamerr_ (yytname_[yysymbol]); - } - - - - // Dhcp4Parser::context. - Dhcp4Parser::context::context (const Dhcp4Parser& yyparser, const symbol_type& yyla) - : yyparser_ (yyparser) - , yyla_ (yyla) - {} - - int - Dhcp4Parser::context::expected_tokens (symbol_kind_type yyarg[], int yyargn) const - { - // Actual number of expected tokens - int yycount = 0; - - const int yyn = yypact_[+yyparser_.yystack_[0].state]; - if (!yy_pact_value_is_default_ (yyn)) - { - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. In other words, skip the first -YYN actions for - this state because they are default actions. */ - const int yyxbegin = yyn < 0 ? -yyn : 0; - // Stay within bounds of both yycheck and yytname. - const int yychecklim = yylast_ - yyn + 1; - const int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - for (int yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::S_YYerror - && !yy_table_value_is_error_ (yytable_[yyx + yyn])) - { - if (!yyarg) - ++yycount; - else if (yycount == yyargn) - return 0; - else - yyarg[yycount++] = YY_CAST (symbol_kind_type, yyx); - } - } - - if (yyarg && yycount == 0 && 0 < yyargn) - yyarg[0] = symbol_kind::S_YYEMPTY; - return yycount; - } - - - - - - - int - Dhcp4Parser::yy_syntax_error_arguments_ (const context& yyctx, - symbol_kind_type yyarg[], int yyargn) const - { /* There are many possibilities here to consider: - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action @@ -4932,26 +4761,35 @@ namespace isc { namespace dhcp { one exception: it will still contain any token that will not be accepted due to an error action in a later state. */ - - if (!yyctx.lookahead ().empty ()) + if (!yyla.empty ()) { - if (yyarg) - yyarg[0] = yyctx.token (); - int yyn = yyctx.expected_tokens (yyarg ? yyarg + 1 : yyarg, yyargn - 1); - return yyn + 1; - } - return 0; - } + symbol_number_type yytoken = yyla.type_get (); + yyarg[yycount++] = yytname_[yytoken]; - // Generate an error message. - std::string - Dhcp4Parser::yysyntax_error_ (const context& yyctx) const - { - // Its maximum. - enum { YYARGS_MAX = 5 }; - // Arguments of yyformat. - symbol_kind_type yyarg[YYARGS_MAX]; - int yycount = yy_syntax_error_arguments_ (yyctx, yyarg, YYARGS_MAX); + int yyn = yypact_[+yystate]; + if (!yy_pact_value_is_default_ (yyn)) + { + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. In other words, skip the first -YYN actions for + this state because they are default actions. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + // Stay within bounds of both yycheck and yytname. + int yychecklim = yylast_ - yyn + 1; + int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_; + for (int yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck_[yyx + yyn] == yyx && yyx != yy_error_token_ + && !yy_table_value_is_error_ (yytable_[yyx + yyn])) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + break; + } + else + yyarg[yycount++] = yytname_[yyx]; + } + } + } char const* yyformat = YY_NULLPTR; switch (yycount) @@ -4976,7 +4814,7 @@ namespace isc { namespace dhcp { for (char const* yyp = yyformat; *yyp; ++yyp) if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount) { - yyres += symbol_name (yyarg[yyi++]); + yyres += yytnamerr_ (yyarg[yyi++]); ++yyp; } else @@ -4985,141 +4823,138 @@ namespace isc { namespace dhcp { } - const short Dhcp4Parser::yypact_ninf_ = -980; + const short Dhcp4Parser::yypact_ninf_ = -959; const signed char Dhcp4Parser::yytable_ninf_ = -1; const short Dhcp4Parser::yypact_[] = { - 408, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, 28, 42, 26, 41, 60, 62, - 80, 86, 99, 104, 110, 132, 142, 153, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, 42, -154, 125, 136, 66, 618, - 219, 170, -21, 315, 81, -100, 422, 129, -980, 119, - 73, 139, 162, 181, -980, 67, -980, -980, -980, -980, - 223, 237, 243, -980, -980, -980, -980, -980, -980, 254, - 263, 288, 289, 291, 305, 306, 307, 309, 342, 352, - -980, 371, 372, 374, 390, 391, -980, -980, -980, 392, - 406, 409, -980, -980, -980, 410, -980, -980, -980, -980, - 415, 416, 417, -980, -980, -980, -980, -980, 421, -980, - -980, -980, -980, -980, -980, 423, 424, 425, -980, -980, - 426, -980, 87, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - 427, -980, 102, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, 428, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, 105, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, 115, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, 183, - 235, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, 323, -980, -980, 429, -980, -980, -980, - 431, -980, -980, 350, 366, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, 433, 434, - -980, -980, -980, -980, 435, 439, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, 128, -980, - -980, -980, 440, -980, -980, 441, -980, 442, 445, -980, - -980, 447, 449, -980, -980, -980, -980, -980, -980, -980, - 178, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, 450, 179, - -980, -980, -980, -980, 42, 42, -980, 249, 453, -980, - -980, 454, 455, 457, 257, 260, 262, 469, 470, 471, - 473, 474, 475, 276, 279, 284, 285, 292, 286, 280, - 294, 295, 297, 302, 482, 303, 304, 287, 298, 308, - 510, 511, 512, 311, 313, 317, 513, 527, 529, 326, - 531, 533, 535, 536, 331, 332, 335, 547, 548, 551, - 553, 554, 351, 558, 559, 561, 565, 569, 570, 367, - 368, 369, 571, 576, -980, 136, -980, 590, 591, 592, - 387, 66, -980, 594, 595, 611, 612, 613, 614, 411, - 616, 620, 621, 618, -980, 622, 219, -980, 623, 624, - 626, 627, 628, 630, 631, 632, -980, 170, -980, 633, - 634, 414, 636, 637, 638, 443, -980, 315, 639, 444, - 446, -980, 81, 645, 646, 34, -980, 451, 647, 648, - 458, 651, 459, 460, 655, 658, 461, 462, 659, 661, - 665, 666, 422, -980, 673, 472, 129, -980, -980, -980, - 674, 672, 686, 687, 688, -980, -980, -980, 489, 499, - 503, 705, 706, 676, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, 507, -980, -980, -980, -980, - -980, -132, 508, 514, -980, -980, -980, 715, 717, 719, - -980, 726, 725, 526, 207, -980, -980, -980, 729, 734, - 736, 737, 731, -980, 738, 739, 740, 741, 542, 543, - -980, -980, -980, 747, 746, -980, 749, 176, 205, -980, - -980, 549, 550, 557, 750, 560, 562, -980, 749, 563, - 751, -980, 564, -980, 749, 566, 567, 568, 572, 573, - 574, 575, -980, 577, 578, -980, 579, 580, 581, -980, - -980, 582, -980, -980, -980, 583, 725, -980, -980, 584, - 585, -980, 586, -980, -980, 13, 593, -980, -980, -132, - 587, 588, 601, -980, 760, -980, -980, 42, 136, 129, - 66, 744, -980, -980, -980, 340, 340, 765, -980, -980, - -980, -980, -980, -980, -980, -980, -980, 769, 770, 771, - 776, -980, -980, -980, -980, -980, -980, -980, -980, 103, - 802, 803, 804, 210, -49, -24, -11, 422, -980, -980, - 815, -143, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, 816, -980, -980, -980, -980, 130, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, 765, -980, 187, - 189, 234, -980, 258, -980, -980, -980, -980, -980, -980, - 820, 824, 825, 826, 827, -980, -980, -980, -980, 828, - 829, -980, 830, 831, 832, 833, -980, -980, -980, -980, - -980, 268, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, 271, -980, - 836, 835, -980, -980, 838, 843, -980, -980, 841, 845, - -980, -980, 847, 846, -980, -980, 848, 853, -980, -980, - -980, -980, -980, -980, 49, -980, -980, -980, -980, -980, - -980, -980, 74, -980, -980, 851, 856, -980, -980, 854, - 858, -980, 859, 860, 861, 863, 864, 865, 277, -980, - -980, -980, -980, -980, -980, -980, 866, 867, 868, -980, - 278, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, 281, -980, -980, -980, 869, -980, 870, -980, - -980, -980, 300, -980, -980, -980, -980, -980, 321, -980, - 83, -980, 871, -980, 327, -980, -980, 669, -980, 872, - 874, -980, -980, -980, -980, 873, 876, -980, -980, -980, - 875, 744, -980, 879, 880, 881, 882, 654, 629, 679, - 670, 680, 885, 886, 887, 888, 685, 689, 890, 690, - 691, 692, 693, 891, 892, 896, 899, 340, -980, -980, - 340, -980, 765, 618, -980, 769, 315, -980, 770, 81, - -980, 771, 733, -980, 776, 103, -980, 240, 802, -980, - 170, -980, 803, -100, -980, 804, 696, 697, 698, 699, - 700, 701, 210, -980, 703, 702, 707, -49, -980, 910, - 913, -24, -980, 708, 916, 713, 919, -11, -980, -980, - 152, 815, -980, 714, -143, -980, -980, 923, 928, 219, - -980, 816, 930, -980, -980, 732, -980, 370, 748, 754, - 766, -980, -980, -980, -980, -980, 783, 784, 787, 791, - -980, -980, 101, -980, -980, -980, -980, 792, 817, 852, - 857, -980, 334, -980, 337, -980, 950, -980, 975, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, 354, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, 1006, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, 1003, 1051, - -980, -980, -980, -980, -980, 1050, -980, 362, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - 862, 877, -980, -980, 878, -980, 42, -980, -980, 1059, - -980, -980, -980, -980, -980, 363, -980, -980, -980, -980, - -980, -980, -980, -980, 883, 364, -980, 749, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, 733, -980, 1061, 884, -980, 240, -980, - -980, -980, -980, -980, -980, 1062, 889, 1063, 152, -980, - -980, -980, -980, -980, 893, -980, -980, 1065, -980, 894, - -980, -980, 1064, -980, -980, 118, -980, -37, 1064, -980, - -980, 1068, 1069, 1070, -980, 365, -980, -980, -980, -980, - -980, -980, -980, 1071, 895, 898, 900, 1072, -37, -980, - 897, -980, -980, -980, 903, -980, -980, -980 + 391, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, 28, 38, 26, 82, 92, 94, + 110, 122, 161, 187, 201, 214, 225, 266, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, 38, -151, 186, 184, 36, 626, + -14, 67, -34, 252, 285, -92, 250, 171, -959, 275, + 282, 288, 59, 286, -959, 41, -959, -959, -959, -959, + 307, 313, 335, -959, -959, -959, -959, -959, -959, 338, + 339, 343, 344, 349, 361, 362, 385, 387, 388, 413, + -959, 415, 418, 419, 421, 422, -959, -959, -959, 423, + 424, 425, -959, -959, -959, 426, -959, -959, -959, -959, + 427, 428, 429, -959, -959, -959, -959, -959, 430, -959, + -959, -959, -959, -959, -959, 431, 433, 434, -959, -959, + 438, -959, 56, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + 439, -959, 85, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, 440, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, 102, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, 105, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, 293, + 326, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, 302, -959, -959, 441, -959, -959, -959, + 442, -959, -959, 445, 444, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, 450, 452, + -959, -959, -959, -959, 449, 455, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, 138, -959, + -959, -959, 457, -959, -959, 463, -959, 466, 468, -959, + -959, 469, 470, -959, -959, -959, -959, -959, -959, -959, + 145, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, 471, 146, + -959, -959, -959, -959, 38, 38, -959, 260, 474, -959, + -959, 475, 482, 483, 287, 290, 291, 492, 493, 496, + 499, 500, 501, 308, 311, 312, 314, 315, 319, 309, + 321, 322, 327, 329, 512, 330, 331, 332, 333, 337, + 513, 514, 529, 345, 350, 353, 533, 536, 537, 357, + 541, 547, 554, 555, 360, 363, 367, 559, 566, 569, + 570, 571, 390, 587, 588, 589, 590, 591, 592, 395, + 396, 397, 596, 597, -959, 184, -959, 598, 599, 600, + 403, 36, -959, 602, 603, 604, 605, 606, 607, 412, + 609, 610, 611, 626, -959, 612, -14, -959, 613, 614, + 615, 616, 618, 620, 621, 622, -959, 67, -959, 623, + 624, 432, 625, 627, 630, 435, -959, 252, 631, 436, + 443, -959, 285, 632, 636, -60, -959, 446, 637, 638, + 447, 639, 451, 459, 640, 642, 448, 460, 645, 657, + 659, 661, 250, -959, 662, 467, 171, -959, -959, -959, + 664, 663, 665, 670, 671, -959, -959, -959, 472, 480, + 481, 674, 686, 689, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, 497, -959, -959, -959, -959, + -959, -91, 507, 511, -959, -959, -959, 690, 707, 708, + -959, 709, 713, 516, 274, -959, -959, -959, 716, 717, + 719, 726, 725, -959, 727, 731, 732, 734, 534, 543, + -959, -959, -959, 740, 739, -959, 742, 188, 60, -959, + -959, 549, 550, 551, 747, 556, 557, -959, 742, 558, + 746, -959, 560, -959, 742, 561, 562, 563, 564, 565, + 567, 568, -959, 572, 573, -959, 574, 575, 576, -959, + -959, 577, -959, -959, -959, 578, 713, -959, -959, 579, + 580, -959, 581, -959, -959, 13, 465, -959, -959, -91, + 582, 583, 584, -959, 749, -959, -959, 38, 184, 171, + 36, 741, -959, -959, -959, 117, 117, 751, -959, -959, + -959, -959, -959, -959, -959, -959, -959, 761, 762, 763, + 777, -959, -959, -959, -959, -959, -959, -959, -959, 80, + 778, 779, 780, 263, -17, 75, 79, 250, -959, -959, + 781, -146, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, 782, -959, -959, -959, -959, 205, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, 751, -959, 173, + 189, 215, -959, 222, -959, -959, -959, -959, -959, -959, + 786, 787, 788, 789, 790, 791, 794, -959, 795, -959, + -959, -959, -959, -959, 226, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, 228, -959, 796, 666, -959, -959, + 797, 798, -959, -959, 799, 801, -959, -959, 800, 804, + -959, -959, 802, 806, -959, -959, -959, -959, -959, -959, + 84, -959, -959, -959, -959, -959, -959, -959, 115, -959, + -959, 805, 807, -959, -959, 808, 809, -959, 811, 812, + 813, 814, 815, 816, 262, -959, -959, -959, -959, -959, + -959, -959, 817, 818, 819, -959, 264, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, 268, -959, + -959, -959, 820, -959, 822, -959, -959, -959, 279, -959, + -959, -959, -959, -959, 295, -959, 125, -959, 823, -959, + 296, -959, -959, 601, -959, 824, 810, -959, -959, -959, + -959, 821, 825, -959, -959, -959, 828, 741, -959, 829, + 830, 831, 832, 628, 635, 641, 643, 644, 646, 647, + 834, 648, 835, 836, 838, 839, 117, -959, -959, 117, + -959, 751, 626, -959, 761, 252, -959, 762, 285, -959, + 763, 1225, -959, 777, 80, -959, 278, 778, -959, 67, + -959, 779, -92, -959, 780, 649, 650, 651, 652, 653, + 654, 263, -959, 655, 656, 658, -17, -959, 851, 855, + 75, -959, 660, 856, 667, 857, 79, -959, -959, 191, + 781, -959, 668, -146, -959, -959, 858, 860, -14, -959, + 782, 861, -959, -959, 669, -959, 351, 672, 673, 675, + -959, -959, -959, -959, -959, -959, -959, 365, -959, 676, + 677, 678, 679, -959, 297, -959, 306, -959, 865, -959, + 871, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, 310, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, 862, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + 872, 866, -959, -959, -959, -959, -959, 873, -959, 316, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, 683, 684, -959, -959, 685, -959, 38, -959, + -959, 881, -959, -959, -959, -959, -959, 317, -959, -959, + -959, -959, -959, -959, -959, -959, 687, 318, -959, 742, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + 1225, -959, 883, 688, -959, 278, -959, -959, -959, -959, + -959, -959, 884, 691, 885, 191, -959, -959, -959, -959, + -959, 693, -959, -959, 888, -959, 695, -959, -959, 889, + -959, -959, 144, -959, -38, 889, -959, -959, 893, 895, + 896, -959, 325, -959, -959, -959, -959, -959, -959, -959, + 898, 701, 710, 718, 904, -38, -959, 714, -959, -959, + -959, 720, -959, -959, -959 }; const short @@ -5129,17 +4964,17 @@ namespace isc { namespace dhcp { 20, 22, 24, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 44, 36, 32, 31, 28, 29, 30, 35, 3, 33, 34, - 59, 5, 65, 7, 189, 9, 374, 11, 582, 13, - 609, 15, 502, 17, 511, 19, 550, 21, 336, 23, - 723, 25, 774, 27, 46, 39, 0, 0, 0, 0, - 0, 611, 0, 513, 552, 0, 0, 0, 48, 0, - 47, 0, 0, 40, 61, 0, 63, 772, 177, 204, - 0, 0, 0, 631, 633, 635, 202, 212, 214, 0, + 59, 5, 65, 7, 189, 9, 355, 11, 563, 13, + 590, 15, 483, 17, 492, 19, 531, 21, 317, 23, + 704, 25, 755, 27, 46, 39, 0, 0, 0, 0, + 0, 592, 0, 494, 533, 0, 0, 0, 48, 0, + 47, 0, 0, 40, 61, 0, 63, 753, 177, 204, + 0, 0, 0, 612, 614, 616, 202, 212, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 154, 161, 163, 0, - 0, 0, 365, 500, 541, 0, 448, 596, 598, 441, - 0, 0, 0, 298, 659, 600, 327, 348, 0, 313, - 690, 704, 721, 167, 169, 0, 0, 0, 784, 826, + 0, 0, 346, 481, 522, 0, 429, 577, 579, 422, + 0, 0, 0, 279, 640, 581, 308, 329, 0, 294, + 671, 685, 702, 167, 169, 0, 0, 0, 765, 807, 0, 133, 0, 67, 70, 71, 72, 73, 74, 108, 109, 110, 111, 112, 75, 103, 132, 92, 93, 94, 116, 117, 118, 119, 120, 121, 122, 123, 114, 115, @@ -5148,25 +4983,25 @@ namespace isc { namespace dhcp { 77, 84, 85, 98, 99, 101, 95, 96, 97, 83, 88, 89, 90, 91, 102, 113, 131, 191, 193, 197, 0, 188, 0, 179, 182, 183, 184, 185, 186, 187, - 426, 428, 430, 573, 424, 432, 0, 436, 434, 655, - 423, 379, 380, 381, 382, 383, 407, 408, 409, 410, - 411, 397, 398, 412, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 0, 376, 386, 402, 403, 404, - 387, 389, 390, 393, 394, 395, 392, 388, 384, 385, - 405, 406, 391, 399, 400, 401, 396, 594, 593, 589, - 590, 588, 0, 584, 587, 591, 592, 653, 641, 643, - 647, 645, 651, 649, 637, 630, 624, 628, 629, 0, - 612, 613, 625, 626, 627, 621, 616, 622, 618, 619, - 620, 623, 617, 0, 531, 265, 0, 535, 533, 538, - 0, 527, 528, 0, 514, 515, 518, 530, 519, 520, - 521, 537, 522, 523, 524, 525, 526, 567, 0, 0, - 565, 566, 569, 570, 0, 553, 554, 557, 558, 559, - 560, 561, 562, 563, 564, 344, 346, 341, 0, 338, - 342, 343, 0, 760, 747, 0, 750, 0, 0, 754, - 758, 0, 0, 764, 766, 768, 770, 745, 743, 744, - 0, 725, 728, 729, 730, 731, 732, 733, 734, 735, - 740, 736, 737, 738, 739, 741, 742, 781, 0, 0, - 776, 779, 780, 45, 50, 0, 37, 43, 0, 64, + 407, 409, 411, 554, 405, 413, 0, 417, 415, 636, + 404, 360, 361, 362, 363, 364, 388, 389, 390, 391, + 392, 378, 379, 393, 394, 395, 396, 397, 398, 399, + 400, 401, 402, 403, 0, 357, 367, 383, 384, 385, + 368, 370, 371, 374, 375, 376, 373, 369, 365, 366, + 386, 387, 372, 380, 381, 382, 377, 575, 574, 570, + 571, 569, 0, 565, 568, 572, 573, 634, 622, 624, + 628, 626, 632, 630, 618, 611, 605, 609, 610, 0, + 593, 594, 606, 607, 608, 602, 597, 603, 599, 600, + 601, 604, 598, 0, 512, 257, 0, 516, 514, 519, + 0, 508, 509, 0, 495, 496, 499, 511, 500, 501, + 502, 518, 503, 504, 505, 506, 507, 548, 0, 0, + 546, 547, 550, 551, 0, 534, 535, 538, 539, 540, + 541, 542, 543, 544, 545, 325, 327, 322, 0, 319, + 323, 324, 0, 741, 728, 0, 731, 0, 0, 735, + 739, 0, 0, 745, 747, 749, 751, 726, 724, 725, + 0, 706, 709, 710, 711, 712, 713, 714, 715, 716, + 721, 717, 718, 719, 720, 722, 723, 762, 0, 0, + 757, 760, 761, 45, 50, 0, 37, 43, 0, 64, 60, 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, @@ -5175,670 +5010,688 @@ namespace isc { namespace dhcp { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 69, 66, 0, 0, 0, 0, 181, 190, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 378, 375, 0, 586, 583, 0, 0, - 0, 0, 0, 0, 0, 0, 610, 615, 503, 0, - 0, 0, 0, 0, 0, 0, 512, 517, 0, 0, - 0, 551, 556, 0, 0, 340, 337, 0, 0, 0, + 0, 0, 0, 359, 356, 0, 567, 564, 0, 0, + 0, 0, 0, 0, 0, 0, 591, 596, 484, 0, + 0, 0, 0, 0, 0, 0, 493, 498, 0, 0, + 0, 532, 537, 0, 0, 321, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 727, 724, 0, 0, 778, 775, 49, 41, + 0, 0, 708, 705, 0, 0, 759, 756, 49, 41, 0, 0, 0, 0, 0, 148, 149, 150, 0, 0, 0, 0, 0, 0, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 0, 172, 173, 151, 152, 153, 0, 0, 0, 165, 166, 171, 0, 0, 0, - 147, 0, 0, 0, 0, 438, 439, 440, 0, 0, - 0, 0, 0, 689, 0, 0, 0, 0, 0, 0, + 147, 0, 0, 0, 0, 419, 420, 421, 0, 0, + 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 174, 175, 176, 0, 0, 68, 0, 0, 0, 201, - 180, 0, 0, 0, 0, 0, 0, 447, 0, 0, - 0, 377, 0, 585, 0, 0, 0, 0, 0, 0, - 0, 0, 614, 0, 0, 529, 0, 0, 0, 540, - 516, 0, 571, 572, 555, 0, 0, 339, 746, 0, - 0, 749, 0, 752, 753, 0, 0, 762, 763, 0, - 0, 0, 0, 726, 0, 783, 777, 0, 0, 0, - 0, 0, 632, 634, 636, 0, 0, 216, 146, 156, - 157, 158, 159, 160, 155, 162, 164, 367, 504, 543, - 450, 38, 597, 599, 443, 444, 445, 446, 442, 0, - 0, 602, 329, 0, 0, 0, 0, 0, 168, 170, + 180, 0, 0, 0, 0, 0, 0, 428, 0, 0, + 0, 358, 0, 566, 0, 0, 0, 0, 0, 0, + 0, 0, 595, 0, 0, 510, 0, 0, 0, 521, + 497, 0, 552, 553, 536, 0, 0, 320, 727, 0, + 0, 730, 0, 733, 734, 0, 0, 743, 744, 0, + 0, 0, 0, 707, 0, 764, 758, 0, 0, 0, + 0, 0, 613, 615, 617, 0, 0, 216, 146, 156, + 157, 158, 159, 160, 155, 162, 164, 348, 485, 524, + 431, 38, 578, 580, 424, 425, 426, 427, 423, 0, + 0, 583, 310, 0, 0, 0, 0, 0, 168, 170, 0, 0, 51, 192, 195, 196, 194, 199, 200, 198, - 427, 429, 431, 575, 425, 433, 437, 435, 0, 595, - 654, 642, 644, 648, 646, 652, 650, 638, 532, 266, - 536, 534, 539, 568, 345, 347, 761, 748, 751, 756, - 757, 755, 759, 765, 767, 769, 771, 216, 42, 0, - 0, 0, 210, 0, 206, 209, 252, 258, 260, 262, - 0, 0, 0, 0, 0, 274, 276, 278, 280, 0, - 0, 284, 0, 0, 0, 0, 290, 292, 294, 296, - 251, 0, 223, 226, 227, 228, 229, 230, 231, 232, - 233, 234, 235, 240, 241, 242, 236, 243, 244, 245, - 237, 238, 239, 246, 247, 248, 249, 250, 0, 221, - 0, 217, 218, 372, 0, 368, 369, 509, 0, 505, - 506, 548, 0, 544, 545, 455, 0, 451, 452, 308, - 309, 310, 311, 312, 0, 300, 303, 304, 305, 306, - 307, 664, 0, 661, 607, 0, 603, 604, 334, 0, - 330, 331, 0, 0, 0, 0, 0, 0, 0, 350, - 353, 354, 355, 356, 357, 358, 0, 0, 0, 323, - 0, 315, 318, 319, 320, 321, 322, 700, 702, 699, - 697, 698, 0, 692, 695, 696, 0, 716, 0, 719, - 712, 713, 0, 706, 709, 710, 711, 714, 0, 789, - 0, 786, 0, 832, 0, 828, 831, 53, 580, 0, - 576, 577, 639, 657, 658, 0, 0, 62, 773, 178, - 0, 208, 205, 0, 0, 0, 0, 0, 0, 0, + 408, 410, 412, 556, 406, 414, 418, 416, 0, 576, + 635, 623, 625, 629, 627, 633, 631, 619, 513, 258, + 517, 515, 520, 549, 326, 328, 742, 729, 732, 737, + 738, 736, 740, 746, 748, 750, 752, 216, 42, 0, + 0, 0, 210, 0, 206, 209, 245, 250, 252, 254, + 0, 0, 0, 0, 0, 0, 0, 265, 0, 271, + 273, 275, 277, 244, 0, 223, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 0, 221, 0, 217, 218, 353, + 0, 349, 350, 490, 0, 486, 487, 529, 0, 525, + 526, 436, 0, 432, 433, 289, 290, 291, 292, 293, + 0, 281, 284, 285, 286, 287, 288, 645, 0, 642, + 588, 0, 584, 585, 315, 0, 311, 312, 0, 0, + 0, 0, 0, 0, 0, 331, 334, 335, 336, 337, + 338, 339, 0, 0, 0, 304, 0, 296, 299, 300, + 301, 302, 303, 681, 683, 680, 678, 679, 0, 673, + 676, 677, 0, 697, 0, 700, 693, 694, 0, 687, + 690, 691, 692, 695, 0, 770, 0, 767, 0, 813, + 0, 809, 812, 53, 561, 0, 557, 558, 620, 638, + 639, 0, 0, 62, 754, 178, 0, 208, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 225, 203, 213, - 0, 215, 220, 0, 366, 371, 513, 501, 508, 552, - 542, 547, 0, 449, 454, 302, 299, 666, 663, 660, - 611, 601, 606, 0, 328, 333, 0, 0, 0, 0, - 0, 0, 352, 349, 0, 0, 0, 317, 314, 0, - 0, 694, 691, 0, 0, 0, 0, 708, 705, 722, - 0, 788, 785, 0, 830, 827, 55, 0, 54, 0, - 574, 579, 0, 656, 782, 0, 207, 0, 0, 0, - 0, 264, 267, 268, 269, 270, 0, 0, 0, 0, - 282, 283, 0, 271, 272, 273, 289, 0, 0, 0, - 0, 224, 0, 219, 0, 370, 0, 507, 0, 546, - 499, 478, 479, 480, 463, 464, 483, 484, 485, 486, - 487, 466, 467, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, 498, 460, 461, 462, 476, 477, 473, - 474, 475, 472, 0, 457, 465, 481, 482, 468, 469, - 470, 471, 453, 301, 686, 0, 681, 682, 683, 684, - 685, 674, 675, 679, 680, 676, 677, 678, 0, 667, - 668, 671, 672, 673, 662, 0, 605, 0, 332, 359, - 360, 361, 362, 363, 364, 351, 324, 325, 326, 316, - 0, 0, 693, 715, 0, 718, 0, 707, 804, 0, - 802, 800, 794, 798, 799, 0, 791, 796, 797, 795, - 787, 833, 829, 52, 57, 0, 578, 0, 211, 254, - 255, 256, 257, 253, 259, 261, 263, 275, 277, 279, - 281, 286, 287, 288, 285, 291, 293, 295, 297, 222, - 373, 510, 549, 459, 456, 0, 0, 665, 670, 608, - 335, 701, 703, 717, 720, 0, 0, 0, 793, 790, - 56, 581, 640, 458, 0, 688, 669, 0, 801, 0, - 792, 687, 0, 803, 809, 0, 806, 0, 808, 805, - 819, 0, 0, 0, 824, 0, 811, 814, 815, 816, - 817, 818, 807, 0, 0, 0, 0, 0, 813, 810, - 0, 821, 822, 823, 0, 812, 820, 825 + 0, 0, 0, 0, 0, 0, 225, 203, 213, 0, + 215, 220, 0, 347, 352, 494, 482, 489, 533, 523, + 528, 0, 430, 435, 283, 280, 647, 644, 641, 592, + 582, 587, 0, 309, 314, 0, 0, 0, 0, 0, + 0, 333, 330, 0, 0, 0, 298, 295, 0, 0, + 675, 672, 0, 0, 0, 0, 689, 686, 703, 0, + 769, 766, 0, 811, 808, 55, 0, 54, 0, 555, + 560, 0, 637, 763, 0, 207, 0, 0, 0, 0, + 256, 259, 260, 261, 262, 263, 264, 0, 270, 0, + 0, 0, 0, 224, 0, 219, 0, 351, 0, 488, + 0, 527, 480, 459, 460, 461, 444, 445, 464, 465, + 466, 467, 468, 447, 448, 469, 470, 471, 472, 473, + 474, 475, 476, 477, 478, 479, 441, 442, 443, 457, + 458, 454, 455, 456, 453, 0, 438, 446, 462, 463, + 449, 450, 451, 452, 434, 282, 667, 0, 662, 663, + 664, 665, 666, 655, 656, 660, 661, 657, 658, 659, + 0, 648, 649, 652, 653, 654, 643, 0, 586, 0, + 313, 340, 341, 342, 343, 344, 345, 332, 305, 306, + 307, 297, 0, 0, 674, 696, 0, 699, 0, 688, + 785, 0, 783, 781, 775, 779, 780, 0, 772, 777, + 778, 776, 768, 814, 810, 52, 57, 0, 559, 0, + 211, 247, 248, 249, 246, 251, 253, 255, 267, 268, + 269, 266, 272, 274, 276, 278, 222, 354, 491, 530, + 440, 437, 0, 0, 646, 651, 589, 316, 682, 684, + 698, 701, 0, 0, 0, 774, 771, 56, 562, 621, + 439, 0, 669, 650, 0, 782, 0, 773, 668, 0, + 784, 790, 0, 787, 0, 789, 786, 800, 0, 0, + 0, 805, 0, 792, 795, 796, 797, 798, 799, 788, + 0, 0, 0, 0, 0, 794, 791, 0, 802, 803, + 804, 0, 793, 801, 806 }; const short Dhcp4Parser::yypgoto_[] = { - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -54, -980, -563, -980, 402, - -980, -980, -980, -980, -980, -980, -617, -980, -980, -980, - -67, -980, -980, -980, -980, -980, -980, -980, 389, 596, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -54, -959, -560, -959, 271, + -959, -959, -959, -959, -959, -959, -617, -959, -959, -959, + -67, -959, -959, -959, -959, -959, -959, -959, 246, 477, 4, 10, 23, -40, -23, -12, 22, 25, 29, 33, - -980, -980, -980, -980, -980, 35, 40, 43, 45, 46, - 47, -980, 399, 50, -980, 51, -980, 53, 57, 58, - -980, 61, -980, 63, -980, -980, -980, -980, -980, -980, - -980, 393, 589, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, 131, - -980, -980, -980, -980, -980, -980, 310, -980, 97, -980, - -684, 109, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -33, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, 93, -980, -980, -980, - -980, -980, -980, -980, -980, 72, -980, -980, -980, -980, - -980, -980, -980, 88, -980, -980, -980, 89, 556, -980, - -980, -980, -980, -980, -980, -980, 84, -980, -980, -980, - -980, -980, -980, -979, -980, -980, -980, 113, -980, -980, - -980, 112, 599, -980, -980, -980, -980, -980, -980, -980, - -980, -977, -980, -65, -980, 70, -980, 64, 65, 68, - 69, -980, -980, -980, -980, -980, -980, -980, 117, -980, - -980, -114, -46, -980, -980, -980, -980, -980, 126, -980, - -980, -980, 121, -980, 597, -980, -63, -980, -980, -980, - -980, -980, -42, -980, -980, -980, -980, -980, -35, -980, - -980, -980, 122, -980, -980, -980, 114, -980, 598, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - 75, -980, -980, -980, 76, 615, -980, -980, -51, -980, - -8, -980, -39, -980, -980, -980, 116, -980, -980, -980, - 120, -980, 600, -55, -980, -15, -980, 3, -980, 375, - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -968, -980, -980, - -980, -980, -980, 124, -980, -980, -980, -99, -980, -980, - -980, -980, -980, -980, -980, -980, 106, -980, -980, -980, - -980, -980, -980, -980, 98, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, 401, 602, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, - -980, -980, -980, -980, -980, -980, 437, 603, -980, -980, - -980, -980, -980, -980, 100, -980, -980, -96, -980, -980, - -980, -980, -980, -980, -119, -980, -980, -135, -980, -980, - -980, -980, -980, -980, -980, -980, -980, -980, 107, -980 + -959, -959, -959, -959, -959, 35, 40, 43, 45, 46, + 47, -959, 261, 50, -959, 51, -959, 53, 57, 58, + -959, 61, -959, 63, -959, -959, -959, -959, -959, -959, + -959, 280, 461, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, 32, + -959, -959, -959, -959, -959, -959, 196, -959, 16, -959, + -684, 34, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -33, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, 15, -959, -959, -959, -959, + -959, -959, -959, -959, -18, -959, -959, -959, -959, -959, + -959, -959, 19, -959, -959, -959, 55, 498, -959, -959, + -959, -959, -959, -959, -959, 52, -959, -959, -959, -959, + -959, -959, -958, -959, -959, -959, 74, -959, -959, -959, + 83, 539, -959, -959, -959, -959, -959, -959, -959, -959, + -956, -959, -65, -959, 70, -959, 64, 65, 68, 69, + -959, -959, -959, -959, -959, -959, -959, 71, -959, -959, + -134, -46, -959, -959, -959, -959, -959, 81, -959, -959, + -959, 86, -959, 520, -959, -63, -959, -959, -959, -959, + -959, -42, -959, -959, -959, -959, -959, -35, -959, -959, + -959, 87, -959, -959, -959, 88, -959, 517, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, 30, + -959, -959, -959, 37, 546, -959, -959, -51, -959, -8, + -959, -39, -959, -959, -959, 72, -959, -959, -959, 89, + -959, 542, -55, -959, -15, -959, 3, -959, 323, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -947, -959, -959, -959, + -959, -959, 77, -959, -959, -959, -127, -959, -959, -959, + -959, -959, -959, -959, -959, 62, -959, -959, -959, -959, + -959, -959, -959, 54, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, 334, 515, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, 374, 508, -959, -959, -959, + -959, -959, -959, 66, -959, -959, -130, -959, -959, -959, + -959, -959, -959, -149, -959, -959, -166, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, 73, -959 }; const short Dhcp4Parser::yydefgoto_[] = { - 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, + -1, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 36, 37, 38, 65, 712, - 82, 83, 39, 64, 79, 80, 733, 937, 1037, 1038, - 810, 41, 66, 85, 418, 86, 43, 67, 152, 153, + 82, 83, 39, 64, 79, 80, 733, 923, 1016, 1017, + 803, 41, 66, 85, 418, 86, 43, 67, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 444, 166, 167, 168, 169, 170, 171, 172, 173, 450, 704, 174, 451, 175, 452, 176, 177, 178, 477, 179, 478, 180, 181, 182, 183, 184, 185, 186, 422, 222, 223, 45, 68, 224, 487, 225, 488, 736, 226, 489, 739, 227, 187, 430, 188, 423, 783, 784, - 785, 950, 189, 431, 190, 432, 840, 841, 842, 980, - 811, 812, 813, 953, 1193, 814, 954, 815, 955, 816, - 956, 817, 818, 520, 819, 820, 821, 822, 823, 824, - 825, 826, 962, 827, 963, 828, 964, 829, 965, 830, - 831, 832, 968, 1204, 833, 834, 973, 835, 974, 836, - 975, 837, 976, 191, 467, 864, 865, 866, 867, 868, - 869, 870, 192, 473, 900, 901, 902, 903, 904, 193, - 470, 879, 880, 881, 1003, 59, 75, 368, 369, 370, - 533, 371, 534, 194, 471, 888, 889, 890, 891, 892, - 893, 894, 895, 195, 456, 844, 845, 846, 983, 47, - 69, 264, 265, 266, 497, 267, 493, 268, 494, 269, - 495, 270, 498, 271, 501, 272, 500, 196, 197, 198, - 199, 463, 718, 277, 200, 460, 856, 857, 858, 992, - 1113, 1114, 201, 457, 53, 72, 848, 849, 850, 986, - 55, 73, 333, 334, 335, 336, 337, 338, 339, 519, - 340, 523, 341, 522, 342, 343, 524, 344, 202, 458, - 852, 853, 854, 989, 57, 74, 354, 355, 356, 357, - 358, 528, 359, 360, 361, 362, 279, 496, 939, 940, - 941, 1039, 49, 70, 292, 293, 294, 505, 203, 461, - 204, 462, 205, 469, 875, 876, 877, 1000, 51, 71, - 309, 310, 311, 206, 427, 207, 428, 208, 429, 315, - 515, 944, 1042, 316, 509, 317, 510, 318, 512, 319, - 511, 320, 514, 321, 513, 322, 508, 286, 502, 945, - 209, 468, 872, 873, 997, 1138, 1139, 1140, 1141, 1142, - 1215, 1143, 210, 211, 474, 912, 913, 914, 1019, 915, - 1020, 212, 475, 922, 923, 924, 925, 1024, 926, 927, - 1026, 213, 476, 61, 76, 390, 391, 392, 393, 539, - 394, 395, 541, 396, 397, 398, 544, 771, 399, 545, - 400, 538, 401, 402, 403, 548, 404, 549, 405, 550, - 406, 551, 214, 421, 63, 77, 409, 410, 411, 554, - 412, 215, 482, 930, 931, 1030, 1175, 1176, 1177, 1178, - 1227, 1179, 1225, 1245, 1246, 1247, 1255, 1256, 1257, 1263, - 1258, 1259, 1260, 1261, 1267, 216, 483, 934, 935, 936 + 785, 936, 189, 431, 190, 432, 826, 827, 828, 959, + 804, 805, 806, 939, 1164, 807, 940, 808, 941, 809, + 942, 810, 811, 520, 812, 813, 814, 815, 816, 817, + 818, 950, 1171, 819, 820, 952, 821, 953, 822, 954, + 823, 955, 191, 467, 850, 851, 852, 853, 854, 855, + 856, 192, 473, 886, 887, 888, 889, 890, 193, 470, + 865, 866, 867, 982, 59, 75, 368, 369, 370, 533, + 371, 534, 194, 471, 874, 875, 876, 877, 878, 879, + 880, 881, 195, 456, 830, 831, 832, 962, 47, 69, + 264, 265, 266, 497, 267, 493, 268, 494, 269, 495, + 270, 498, 271, 501, 272, 500, 196, 197, 198, 199, + 463, 718, 277, 200, 460, 842, 843, 844, 971, 1085, + 1086, 201, 457, 53, 72, 834, 835, 836, 965, 55, + 73, 333, 334, 335, 336, 337, 338, 339, 519, 340, + 523, 341, 522, 342, 343, 524, 344, 202, 458, 838, + 839, 840, 968, 57, 74, 354, 355, 356, 357, 358, + 528, 359, 360, 361, 362, 279, 496, 925, 926, 927, + 1018, 49, 70, 292, 293, 294, 505, 203, 461, 204, + 462, 205, 469, 861, 862, 863, 979, 51, 71, 309, + 310, 311, 206, 427, 207, 428, 208, 429, 315, 515, + 930, 1021, 316, 509, 317, 510, 318, 512, 319, 511, + 320, 514, 321, 513, 322, 508, 286, 502, 931, 209, + 468, 858, 859, 976, 1110, 1111, 1112, 1113, 1114, 1182, + 1115, 210, 211, 474, 898, 899, 900, 998, 901, 999, + 212, 475, 908, 909, 910, 911, 1003, 912, 913, 1005, + 213, 476, 61, 76, 390, 391, 392, 393, 539, 394, + 395, 541, 396, 397, 398, 544, 771, 399, 545, 400, + 538, 401, 402, 403, 548, 404, 549, 405, 550, 406, + 551, 214, 421, 63, 77, 409, 410, 411, 554, 412, + 215, 482, 916, 917, 1009, 1147, 1148, 1149, 1150, 1194, + 1151, 1192, 1212, 1213, 1214, 1222, 1223, 1224, 1230, 1225, + 1226, 1227, 1228, 1234, 216, 483, 920, 921, 922 }; const short Dhcp4Parser::yytable_[] = { 151, 221, 240, 288, 305, 289, 331, 350, 367, 387, - 78, 352, 838, 1105, 283, 1106, 312, 228, 280, 295, - 307, 746, 345, 363, 1121, 388, 323, 750, 28, 244, - 282, 769, 353, 40, 278, 291, 306, 365, 366, 711, - 332, 351, 699, 700, 701, 702, 245, 29, 42, 30, - 932, 31, 995, 81, 284, 996, 313, 246, 127, 128, - 229, 281, 296, 308, 150, 346, 364, 44, 389, 46, - 419, 123, 285, 241, 314, 420, 414, 998, 703, 242, - 999, 217, 218, 127, 128, 219, 1031, 48, 220, 1032, - 485, 247, 243, 50, 248, 486, 127, 128, 249, 896, - 897, 898, 250, 711, 251, 491, 52, 150, 503, 252, - 492, 54, 253, 504, 254, 255, 256, 56, 506, 257, - 258, 1248, 259, 507, 1249, 413, 260, 261, 907, 908, - 262, 535, 263, 273, 274, 84, 536, 275, 276, 58, - 290, 407, 408, 415, 916, 917, 918, 87, 1250, 60, - 88, 1251, 1252, 1253, 1254, 1201, 1202, 1203, 150, 89, - 62, 90, 91, 92, 93, 94, 95, 96, 97, 98, - 416, 365, 366, 127, 128, 325, 347, 326, 327, 348, - 349, 552, 556, 150, 417, 770, 553, 557, 127, 128, - 485, 516, 556, 734, 735, 947, 919, 948, 93, 94, - 95, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 78, 352, 824, 1077, 283, 1078, 312, 228, 280, 295, + 307, 746, 345, 363, 1093, 388, 323, 750, 28, 244, + 282, 769, 353, 40, 278, 291, 306, 365, 366, 918, + 332, 351, 711, 29, 419, 30, 245, 31, 81, 420, + 123, 217, 218, 150, 284, 219, 313, 246, 220, 485, + 229, 281, 296, 308, 486, 346, 364, 416, 389, 365, + 366, 124, 285, 241, 314, 699, 700, 701, 702, 242, + 737, 738, 127, 128, 287, 127, 128, 974, 491, 42, + 975, 247, 243, 492, 248, 93, 94, 95, 249, 44, + 237, 46, 250, 238, 251, 503, 711, 150, 506, 252, + 504, 703, 253, 507, 254, 255, 256, 48, 977, 257, + 258, 978, 259, 882, 883, 884, 260, 261, 1010, 50, + 262, 1011, 263, 273, 274, 127, 128, 275, 276, 1217, + 290, 535, 1218, 1219, 1220, 1221, 536, 1215, 552, 556, + 1216, 786, 124, 553, 557, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 797, 127, 128, 52, 798, + 799, 800, 801, 802, 127, 128, 485, 770, 127, 128, + 297, 933, 150, 407, 408, 150, 298, 299, 300, 301, + 302, 303, 556, 304, 54, 87, 84, 934, 88, 845, + 846, 847, 848, 325, 849, 734, 735, 89, 56, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 491, 893, + 894, 58, 1077, 935, 1078, 937, 902, 903, 904, 956, + 938, 956, 60, 1093, 957, 150, 958, 32, 33, 34, + 35, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 737, 738, 424, 123, 124, - 859, 860, 861, 862, 1105, 863, 1106, 491, 517, 125, - 126, 425, 949, 127, 128, 1121, 325, 426, 129, 32, - 33, 34, 35, 130, 131, 132, 133, 134, 433, 127, - 128, 951, 135, 124, 304, 942, 952, 434, 93, 94, - 95, 977, 136, 150, 977, 137, 978, 127, 128, 979, - 1012, 1017, 138, 139, 1021, 1013, 1018, 140, 150, 1022, - 141, 297, 435, 436, 142, 437, 1072, 298, 299, 300, - 301, 302, 303, 1027, 304, 99, 100, 101, 1028, 438, - 439, 440, 124, 441, 143, 144, 145, 146, 147, 148, - 714, 715, 716, 717, 552, 287, 127, 128, 149, 1029, - 1034, 518, 123, 124, 325, 1035, 1168, 977, 1169, 1170, - 503, 237, 1209, 150, 238, 1210, 442, 127, 128, 324, - 882, 883, 884, 885, 886, 887, 443, 1213, 526, 150, - 558, 559, 1214, 1124, 1125, 535, 1228, 506, 1268, 527, - 1220, 1229, 1231, 1269, 786, 445, 446, 150, 447, 787, - 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, - 798, 799, 800, 801, 448, 449, 453, 802, 803, 804, - 805, 806, 807, 808, 809, 1189, 1190, 1191, 1192, 325, - 454, 326, 327, 455, 459, 328, 329, 330, 151, 464, - 465, 466, 127, 128, 221, 472, 150, 479, 480, 481, - 484, 490, 499, 521, 325, 525, 240, 529, 530, 288, - 228, 289, 532, 531, 537, 540, 542, 150, 283, 543, - 305, 546, 280, 547, 555, 295, 560, 561, 562, 563, - 331, 564, 312, 244, 282, 350, 307, 565, 278, 352, - 566, 291, 567, 568, 569, 570, 345, 571, 572, 573, - 245, 363, 306, 229, 574, 387, 585, 575, 284, 580, - 353, 246, 576, 577, 332, 281, 579, 588, 296, 351, - 578, 388, 313, 581, 582, 583, 285, 241, 589, 308, - 584, 586, 587, 242, 591, 592, 593, 597, 590, 346, - 314, 594, 150, 595, 364, 247, 243, 596, 248, 127, - 128, 598, 249, 599, 600, 601, 250, 602, 251, 603, - 604, 605, 606, 252, 389, 607, 253, 150, 254, 255, - 256, 608, 609, 257, 258, 610, 259, 611, 612, 613, - 260, 261, 614, 615, 262, 616, 263, 273, 274, 617, - 1232, 275, 276, 618, 619, 623, 290, 620, 621, 622, - 624, 372, 373, 374, 375, 376, 377, 378, 379, 380, - 381, 382, 383, 384, 626, 627, 628, 629, 631, 632, - 385, 386, 1, 2, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 633, 634, 635, 636, 637, - 638, 151, 655, 221, 639, 640, 642, 644, 645, 150, - 646, 647, 648, 778, 649, 650, 651, 653, 654, 228, - 656, 657, 658, 661, 91, 92, 93, 94, 95, 665, - 666, 669, 670, 659, 662, 672, 663, 899, 909, 675, - 387, 668, 676, 679, 933, 680, 671, 673, 674, 681, - 682, 677, 678, 905, 910, 920, 388, 684, 687, 688, - 685, 697, 229, 99, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 689, 690, 691, 692, 113, 114, 115, - 116, 117, 118, 119, 120, 121, 693, 230, 231, 232, - 694, 124, 695, 696, 698, 705, 906, 911, 921, 389, - 707, 706, 708, 233, 709, 127, 128, 234, 235, 236, - 129, 710, 30, 713, 719, 130, 131, 132, 723, 720, - 237, 721, 722, 238, 135, 724, 725, 726, 727, 728, - 729, 239, 730, 731, 732, 743, 740, 741, 748, 91, - 92, 93, 94, 95, 742, 777, 772, 744, 782, 745, - 747, 749, 839, 751, 752, 753, 843, 847, 851, 754, - 755, 756, 757, 855, 758, 759, 760, 761, 762, 763, - 764, 766, 767, 768, 774, 775, 143, 144, 99, 100, - 101, 102, 103, 104, 105, 106, 107, 108, 776, 871, - 874, 878, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 929, 938, 957, 150, 124, 325, 958, 959, - 960, 961, 966, 967, 969, 970, 971, 972, 982, 1052, - 127, 128, 981, 235, 984, 129, 985, 987, 988, 991, - 130, 131, 132, 990, 993, 237, 994, 1001, 238, 1002, - 1004, 1005, 1051, 1006, 1007, 1008, 239, 1009, 1010, 1011, - 1014, 1015, 1016, 1023, 1025, 1033, 1036, 1041, 1040, 1045, - 1054, 1043, 1044, 1047, 1048, 1049, 1050, 1053, 1055, 1056, - 1057, 1058, 1059, 1060, 1062, 1067, 1068, 1061, 1063, 1064, - 1069, 1066, 1065, 1070, 1149, 1150, 1151, 1152, 1153, 1154, - 1157, 143, 144, 1156, 1160, 1158, 240, 1161, 1163, 331, - 1164, 1165, 350, 1166, 1181, 1080, 352, 1107, 283, 1183, - 1126, 1184, 280, 305, 1187, 345, 367, 1118, 363, 1188, - 150, 1116, 1135, 244, 282, 312, 1133, 353, 278, 307, - 899, 1131, 1084, 332, 909, 1194, 351, 1115, 1211, 1104, - 245, 1195, 1132, 1171, 1130, 306, 905, 933, 284, 1085, - 910, 246, 288, 1196, 289, 281, 920, 1119, 346, 1173, - 1086, 364, 1136, 1212, 1117, 313, 285, 241, 295, 1134, - 1197, 1198, 308, 242, 1199, 1120, 1081, 1172, 1200, 1205, - 1137, 1127, 1082, 314, 291, 247, 243, 1128, 248, 906, - 1216, 1217, 249, 911, 1087, 1083, 250, 1088, 251, 921, - 1129, 1089, 1174, 252, 1206, 1090, 253, 1091, 254, 255, - 256, 296, 1092, 257, 258, 1093, 259, 1094, 1095, 1096, - 260, 261, 1097, 1098, 262, 1099, 263, 273, 274, 1100, - 1101, 275, 276, 1102, 1218, 1103, 1109, 1110, 1219, 1207, - 1111, 1112, 1108, 1226, 1208, 1234, 1237, 1239, 765, 1221, - 1242, 1244, 1264, 1265, 1266, 1270, 1274, 779, 773, 1073, - 630, 625, 1046, 781, 1222, 1223, 1071, 946, 1123, 1159, - 1230, 667, 1147, 1148, 1235, 1074, 1155, 1238, 1075, 1233, - 1241, 1243, 641, 1078, 1276, 1271, 1272, 1076, 1273, 290, - 1277, 1122, 1224, 1079, 1077, 1185, 1186, 652, 1146, 1236, - 1145, 643, 1144, 943, 660, 1167, 780, 1162, 928, 1262, - 664, 1180, 1240, 1275, 0, 0, 0, 0, 0, 0, - 0, 1182, 0, 0, 0, 0, 1080, 0, 1107, 0, - 0, 1126, 0, 0, 683, 0, 0, 0, 1118, 686, - 0, 1171, 1116, 1135, 0, 0, 0, 1133, 0, 0, - 0, 0, 1131, 1084, 0, 0, 0, 1173, 1115, 0, - 1104, 0, 0, 1132, 0, 1130, 0, 0, 0, 0, - 1085, 0, 0, 0, 0, 1172, 0, 0, 1119, 0, - 0, 1086, 0, 1136, 0, 1117, 0, 0, 0, 0, - 1134, 0, 0, 0, 0, 0, 1120, 1081, 0, 0, - 1174, 1137, 1127, 1082, 0, 0, 0, 0, 1128, 0, - 0, 0, 0, 0, 0, 1087, 1083, 0, 1088, 0, - 0, 1129, 1089, 0, 0, 0, 1090, 0, 1091, 0, - 0, 0, 0, 1092, 0, 0, 1093, 0, 1094, 1095, - 1096, 0, 0, 1097, 1098, 0, 1099, 0, 0, 0, - 1100, 1101, 0, 0, 1102, 0, 1103, 1109, 1110, 0, - 0, 1111, 1112, 1108 + 118, 119, 120, 121, 122, 991, 150, 996, 123, 124, + 992, 1000, 997, 62, 150, 1044, 1001, 325, 905, 125, + 126, 413, 1006, 127, 128, 414, 324, 1007, 129, 417, + 127, 128, 415, 130, 131, 132, 133, 134, 552, 1013, + 956, 516, 135, 1008, 1014, 1176, 93, 94, 95, 503, + 518, 424, 136, 1180, 1177, 137, 150, 425, 1181, 535, + 1195, 506, 138, 139, 1187, 1196, 1198, 140, 1235, 517, + 141, 304, 928, 1236, 142, 99, 100, 101, 325, 426, + 326, 327, 433, 434, 328, 329, 330, 435, 436, 127, + 128, 127, 128, 437, 143, 144, 145, 146, 147, 148, + 558, 559, 123, 124, 325, 438, 439, 1140, 149, 1141, + 1142, 325, 347, 326, 327, 348, 349, 127, 128, 714, + 715, 716, 717, 150, 127, 128, 1161, 1162, 1163, 440, + 150, 441, 442, 1096, 1097, 868, 869, 870, 871, 872, + 873, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 1168, 1169, 1170, 443, 151, 445, + 385, 386, 446, 447, 221, 448, 449, 453, 454, 455, + 459, 464, 465, 466, 472, 479, 240, 480, 481, 288, + 228, 289, 484, 490, 499, 521, 525, 527, 283, 150, + 305, 150, 280, 526, 529, 295, 530, 531, 532, 560, + 331, 537, 312, 244, 282, 350, 307, 540, 278, 352, + 542, 291, 543, 546, 547, 555, 345, 150, 561, 562, + 245, 363, 306, 229, 150, 387, 563, 564, 284, 565, + 353, 246, 566, 567, 332, 281, 568, 569, 296, 351, + 570, 388, 313, 571, 572, 573, 285, 241, 574, 308, + 580, 575, 576, 242, 577, 578, 585, 591, 592, 346, + 314, 579, 581, 582, 364, 247, 243, 583, 248, 584, + 586, 587, 249, 593, 588, 589, 250, 597, 251, 590, + 598, 599, 1199, 252, 389, 601, 253, 594, 254, 255, + 256, 602, 595, 257, 258, 596, 259, 600, 603, 604, + 260, 261, 605, 608, 262, 606, 263, 273, 274, 607, + 609, 275, 276, 610, 611, 612, 290, 1, 2, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 626, 627, 628, 629, 631, 632, 633, 634, + 635, 636, 637, 638, 639, 640, 642, 644, 645, 646, + 647, 151, 648, 221, 649, 650, 651, 653, 654, 656, + 772, 657, 655, 778, 658, 661, 665, 659, 662, 228, + 666, 669, 670, 672, 675, 663, 676, 671, 668, 679, + 677, 673, 91, 92, 93, 94, 95, 885, 895, 674, + 387, 680, 678, 681, 919, 682, 684, 685, 687, 961, + 688, 692, 689, 891, 896, 906, 388, 690, 691, 693, + 694, 695, 229, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 696, 697, 707, 698, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 705, 230, 231, 232, + 706, 124, 708, 709, 710, 713, 892, 897, 907, 389, + 30, 719, 720, 233, 721, 127, 128, 234, 235, 236, + 129, 722, 723, 728, 724, 130, 131, 132, 725, 726, + 237, 727, 729, 238, 135, 730, 731, 732, 740, 741, + 742, 239, 743, 748, 777, 744, 745, 747, 825, 749, + 751, 752, 753, 754, 755, 782, 756, 757, 829, 833, + 837, 758, 759, 760, 761, 762, 763, 764, 766, 767, + 768, 774, 775, 776, 841, 857, 860, 864, 915, 924, + 943, 944, 945, 946, 947, 948, 143, 144, 949, 951, + 1015, 964, 960, 963, 967, 966, 969, 970, 972, 973, + 981, 980, 984, 1020, 983, 985, 986, 987, 988, 989, + 990, 993, 994, 995, 1002, 150, 1004, 1012, 1030, 1022, + 1019, 1023, 1024, 1026, 1027, 1028, 1029, 1031, 1037, 1039, + 1040, 1032, 1041, 1042, 1034, 1033, 1035, 1036, 1038, 1121, + 1122, 1123, 1124, 1125, 1126, 1132, 1129, 1128, 1130, 1133, + 1136, 1138, 1135, 1156, 1155, 1159, 1183, 1137, 1160, 1185, + 1153, 1165, 1166, 1178, 1167, 1172, 1173, 1174, 1175, 1179, + 1184, 1186, 1188, 1189, 1190, 1193, 1197, 1201, 1204, 1206, + 1202, 1205, 1208, 1209, 1210, 240, 1211, 1231, 331, 1232, + 1233, 350, 1237, 1238, 1052, 352, 1079, 283, 1241, 1098, + 1239, 280, 305, 1243, 345, 367, 1090, 363, 1240, 1244, + 1088, 1107, 244, 282, 312, 1105, 353, 278, 307, 885, + 1103, 1056, 332, 895, 779, 351, 1087, 765, 1076, 245, + 773, 1104, 1143, 1102, 306, 891, 919, 284, 1057, 896, + 246, 288, 630, 289, 281, 906, 1091, 346, 1145, 1058, + 364, 1108, 625, 1089, 313, 285, 241, 295, 1106, 1025, + 781, 308, 242, 932, 1092, 1053, 1144, 1045, 1131, 1109, + 1099, 1054, 314, 291, 247, 243, 1100, 248, 892, 1095, + 1043, 249, 897, 1059, 1055, 250, 1060, 251, 907, 1101, + 1061, 1146, 252, 1120, 1062, 253, 1063, 254, 255, 256, + 296, 1064, 257, 258, 1065, 259, 1066, 1067, 1068, 260, + 261, 1069, 1070, 262, 1071, 263, 273, 274, 1072, 1073, + 275, 276, 1074, 667, 1075, 1081, 1082, 1119, 1047, 1083, + 1084, 1080, 641, 1127, 1094, 1046, 1200, 660, 1049, 664, + 1158, 1048, 643, 1118, 1116, 1157, 1050, 1051, 1203, 652, + 1139, 914, 1134, 780, 686, 1207, 1229, 683, 1117, 1242, + 0, 929, 0, 0, 0, 0, 1152, 0, 0, 0, + 0, 0, 0, 0, 1191, 0, 1154, 0, 290, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1052, 0, 1079, 0, 0, 1098, 0, + 0, 0, 0, 0, 0, 1090, 0, 0, 1143, 1088, + 1107, 0, 0, 0, 1105, 0, 0, 0, 0, 1103, + 1056, 0, 0, 0, 1145, 1087, 0, 1076, 0, 0, + 1104, 0, 1102, 0, 0, 0, 0, 1057, 0, 0, + 0, 0, 1144, 0, 0, 1091, 0, 0, 1058, 0, + 1108, 0, 1089, 0, 0, 0, 0, 1106, 0, 0, + 0, 0, 0, 1092, 1053, 0, 0, 1146, 1109, 1099, + 1054, 0, 0, 0, 0, 1100, 0, 0, 0, 0, + 0, 0, 1059, 1055, 0, 1060, 0, 0, 1101, 1061, + 0, 0, 0, 1062, 0, 1063, 0, 0, 0, 0, + 1064, 0, 0, 1065, 0, 1066, 1067, 1068, 0, 0, + 1069, 1070, 0, 1071, 0, 0, 0, 1072, 1073, 0, + 0, 1074, 0, 1075, 1081, 1082, 0, 0, 1083, 1084, + 1080, 91, 92, 93, 94, 95, 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, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 0, 0, 0, 0, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 0, 0, 0, 0, + 124, 325, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 127, 128, 0, 235, 0, 129, + 0, 0, 0, 0, 130, 131, 132, 0, 0, 237, + 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, + 239, 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, 143, 144, 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, 150 }; const short Dhcp4Parser::yycheck_[] = { 67, 68, 69, 70, 71, 70, 73, 74, 75, 76, - 64, 74, 696, 992, 69, 992, 71, 68, 69, 70, - 71, 638, 73, 74, 992, 76, 72, 644, 0, 69, - 69, 18, 74, 7, 69, 70, 71, 137, 138, 602, - 73, 74, 174, 175, 176, 177, 69, 5, 7, 7, - 193, 9, 3, 207, 69, 6, 71, 69, 107, 108, - 68, 69, 70, 71, 207, 73, 74, 7, 76, 7, - 3, 92, 69, 69, 71, 8, 3, 3, 210, 69, - 6, 15, 16, 107, 108, 19, 3, 7, 22, 6, - 3, 69, 69, 7, 69, 8, 107, 108, 69, 148, - 149, 150, 69, 666, 69, 3, 7, 207, 3, 69, - 8, 7, 69, 8, 69, 69, 69, 7, 3, 69, - 69, 3, 69, 8, 6, 6, 69, 69, 152, 153, - 69, 3, 69, 69, 69, 10, 8, 69, 69, 7, - 70, 12, 13, 4, 155, 156, 157, 11, 185, 7, - 14, 188, 189, 190, 191, 54, 55, 56, 207, 23, - 7, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 8, 137, 138, 107, 108, 94, 95, 96, 97, 98, - 99, 3, 3, 207, 3, 172, 8, 8, 107, 108, - 3, 8, 3, 17, 18, 8, 207, 8, 28, 29, - 30, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 85, 86, 87, 88, 20, 21, 4, 92, 93, - 127, 128, 129, 130, 1213, 132, 1213, 3, 3, 103, - 104, 4, 8, 107, 108, 1213, 94, 4, 112, 207, - 208, 209, 210, 117, 118, 119, 120, 121, 4, 107, - 108, 3, 126, 93, 134, 135, 8, 4, 28, 29, - 30, 3, 136, 207, 3, 139, 8, 107, 108, 8, - 3, 3, 146, 147, 3, 8, 8, 151, 207, 8, - 154, 121, 4, 4, 158, 4, 980, 127, 128, 129, - 130, 131, 132, 3, 134, 65, 66, 67, 8, 4, - 4, 4, 93, 4, 178, 179, 180, 181, 182, 183, - 113, 114, 115, 116, 3, 106, 107, 108, 192, 8, - 3, 8, 92, 93, 94, 8, 184, 3, 186, 187, - 3, 122, 8, 207, 125, 8, 4, 107, 108, 34, - 140, 141, 142, 143, 144, 145, 4, 3, 8, 207, - 414, 415, 8, 123, 124, 3, 3, 3, 3, 3, - 8, 8, 8, 8, 34, 4, 4, 207, 4, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 4, 4, 4, 57, 58, 59, - 60, 61, 62, 63, 64, 35, 36, 37, 38, 94, - 4, 96, 97, 4, 4, 100, 101, 102, 485, 4, - 4, 4, 107, 108, 491, 4, 207, 4, 4, 4, - 4, 4, 4, 4, 94, 4, 503, 4, 4, 506, - 491, 506, 3, 8, 4, 4, 4, 207, 503, 4, - 517, 4, 503, 4, 4, 506, 207, 4, 4, 4, - 527, 4, 517, 503, 503, 532, 517, 210, 503, 532, - 210, 506, 210, 4, 4, 4, 527, 4, 4, 4, - 503, 532, 517, 491, 208, 552, 4, 208, 503, 209, - 532, 503, 208, 208, 527, 503, 210, 210, 506, 532, - 208, 552, 517, 209, 209, 208, 503, 503, 210, 517, - 208, 208, 208, 503, 4, 4, 4, 4, 210, 527, - 517, 210, 207, 210, 532, 503, 503, 210, 503, 107, - 108, 4, 503, 4, 208, 4, 503, 4, 503, 4, - 4, 210, 210, 503, 552, 210, 503, 207, 503, 503, - 503, 4, 4, 503, 503, 4, 503, 4, 4, 208, - 503, 503, 4, 4, 503, 4, 503, 503, 503, 4, - 1187, 503, 503, 4, 4, 4, 506, 210, 210, 210, - 4, 159, 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 4, 4, 4, 210, 4, 4, - 178, 179, 194, 195, 196, 197, 198, 199, 200, 201, - 202, 203, 204, 205, 206, 4, 4, 4, 4, 208, - 4, 688, 208, 690, 4, 4, 4, 4, 4, 207, - 4, 4, 4, 687, 4, 4, 4, 4, 4, 690, - 4, 4, 4, 4, 26, 27, 28, 29, 30, 4, - 4, 4, 4, 210, 210, 4, 210, 724, 725, 4, - 727, 210, 4, 4, 731, 4, 208, 208, 208, 4, - 4, 210, 210, 724, 725, 726, 727, 4, 4, 7, - 208, 5, 690, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 7, 7, 7, 207, 79, 80, 81, - 82, 83, 84, 85, 86, 87, 207, 89, 90, 91, - 207, 93, 7, 7, 207, 207, 724, 725, 726, 727, - 5, 207, 5, 105, 5, 107, 108, 109, 110, 111, - 112, 5, 7, 207, 5, 117, 118, 119, 7, 5, - 122, 5, 5, 125, 126, 7, 7, 7, 7, 207, - 207, 133, 5, 7, 5, 5, 207, 207, 7, 26, - 27, 28, 29, 30, 207, 5, 173, 207, 24, 207, - 207, 207, 7, 207, 207, 207, 7, 7, 7, 207, - 207, 207, 207, 7, 207, 207, 207, 207, 207, 207, - 207, 207, 207, 207, 207, 207, 178, 179, 65, 66, - 67, 68, 69, 70, 71, 72, 73, 74, 207, 7, - 7, 7, 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 7, 7, 4, 207, 93, 94, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 3, 210, - 107, 108, 6, 110, 6, 112, 3, 6, 3, 3, - 117, 118, 119, 6, 6, 122, 3, 6, 125, 3, - 6, 3, 208, 4, 4, 4, 133, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 207, 3, 6, 4, - 210, 8, 6, 4, 4, 4, 4, 208, 208, 4, - 4, 4, 4, 208, 4, 4, 4, 208, 208, 208, - 4, 208, 210, 4, 208, 208, 208, 208, 208, 208, - 208, 178, 179, 210, 4, 208, 983, 4, 210, 986, - 4, 208, 989, 4, 210, 992, 989, 992, 983, 6, - 997, 3, 983, 1000, 4, 986, 1003, 992, 989, 207, - 207, 992, 997, 983, 983, 1000, 997, 989, 983, 1000, - 1017, 997, 992, 986, 1021, 207, 989, 992, 8, 992, - 983, 207, 997, 1030, 997, 1000, 1017, 1034, 983, 992, - 1021, 983, 1039, 207, 1039, 983, 1027, 992, 986, 1030, - 992, 989, 997, 8, 992, 1000, 983, 983, 1039, 997, - 207, 207, 1000, 983, 207, 992, 992, 1030, 207, 207, - 997, 997, 992, 1000, 1039, 983, 983, 997, 983, 1017, - 4, 8, 983, 1021, 992, 992, 983, 992, 983, 1027, - 997, 992, 1030, 983, 207, 992, 983, 992, 983, 983, - 983, 1039, 992, 983, 983, 992, 983, 992, 992, 992, - 983, 983, 992, 992, 983, 992, 983, 983, 983, 992, - 992, 983, 983, 992, 3, 992, 992, 992, 8, 207, - 992, 992, 992, 4, 207, 4, 4, 4, 666, 207, - 5, 7, 4, 4, 4, 4, 4, 688, 679, 982, - 491, 485, 951, 690, 207, 207, 977, 777, 995, 1017, - 207, 535, 1003, 1005, 210, 983, 1012, 208, 985, 1213, - 207, 207, 503, 989, 207, 210, 208, 986, 208, 1039, - 207, 994, 1166, 991, 988, 1039, 1041, 517, 1002, 1218, - 1000, 506, 998, 748, 527, 1027, 689, 1021, 727, 1248, - 532, 1031, 1228, 1268, -1, -1, -1, -1, -1, -1, - -1, 1034, -1, -1, -1, -1, 1213, -1, 1213, -1, - -1, 1218, -1, -1, 552, -1, -1, -1, 1213, 556, - -1, 1228, 1213, 1218, -1, -1, -1, 1218, -1, -1, - -1, -1, 1218, 1213, -1, -1, -1, 1228, 1213, -1, - 1213, -1, -1, 1218, -1, 1218, -1, -1, -1, -1, - 1213, -1, -1, -1, -1, 1228, -1, -1, 1213, -1, - -1, 1213, -1, 1218, -1, 1213, -1, -1, -1, -1, - 1218, -1, -1, -1, -1, -1, 1213, 1213, -1, -1, - 1228, 1218, 1218, 1213, -1, -1, -1, -1, 1218, -1, - -1, -1, -1, -1, -1, 1213, 1213, -1, 1213, -1, - -1, 1218, 1213, -1, -1, -1, 1213, -1, 1213, -1, - -1, -1, -1, 1213, -1, -1, 1213, -1, 1213, 1213, - 1213, -1, -1, 1213, 1213, -1, 1213, -1, -1, -1, - 1213, 1213, -1, -1, 1213, -1, 1213, 1213, 1213, -1, - -1, 1213, 1213, 1213 + 64, 74, 696, 971, 69, 971, 71, 68, 69, 70, + 71, 638, 73, 74, 971, 76, 72, 644, 0, 69, + 69, 18, 74, 7, 69, 70, 71, 129, 130, 185, + 73, 74, 602, 5, 3, 7, 69, 9, 199, 8, + 84, 15, 16, 199, 69, 19, 71, 69, 22, 3, + 68, 69, 70, 71, 8, 73, 74, 8, 76, 129, + 130, 85, 69, 69, 71, 166, 167, 168, 169, 69, + 20, 21, 99, 100, 98, 99, 100, 3, 3, 7, + 6, 69, 69, 8, 69, 28, 29, 30, 69, 7, + 114, 7, 69, 117, 69, 3, 666, 199, 3, 69, + 8, 202, 69, 8, 69, 69, 69, 7, 3, 69, + 69, 6, 69, 140, 141, 142, 69, 69, 3, 7, + 69, 6, 69, 69, 69, 99, 100, 69, 69, 177, + 70, 3, 180, 181, 182, 183, 8, 3, 3, 3, + 6, 34, 85, 8, 8, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 99, 100, 7, 52, + 53, 54, 55, 56, 99, 100, 3, 164, 99, 100, + 113, 8, 199, 12, 13, 199, 119, 120, 121, 122, + 123, 124, 3, 126, 7, 11, 10, 8, 14, 119, + 120, 121, 122, 86, 124, 17, 18, 23, 7, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 3, 144, + 145, 7, 1180, 8, 1180, 3, 147, 148, 149, 3, + 8, 3, 7, 1180, 8, 199, 8, 199, 200, 201, + 202, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 3, 199, 3, 84, 85, + 8, 3, 8, 7, 199, 959, 8, 86, 199, 95, + 96, 6, 3, 99, 100, 3, 34, 8, 104, 3, + 99, 100, 4, 109, 110, 111, 112, 113, 3, 3, + 3, 8, 118, 8, 8, 8, 28, 29, 30, 3, + 8, 4, 128, 3, 8, 131, 199, 4, 8, 3, + 3, 3, 138, 139, 8, 8, 8, 143, 3, 3, + 146, 126, 127, 8, 150, 57, 58, 59, 86, 4, + 88, 89, 4, 4, 92, 93, 94, 4, 4, 99, + 100, 99, 100, 4, 170, 171, 172, 173, 174, 175, + 414, 415, 84, 85, 86, 4, 4, 176, 184, 178, + 179, 86, 87, 88, 89, 90, 91, 99, 100, 105, + 106, 107, 108, 199, 99, 100, 35, 36, 37, 4, + 199, 4, 4, 115, 116, 132, 133, 134, 135, 136, + 137, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 49, 50, 51, 4, 485, 4, + 170, 171, 4, 4, 491, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 503, 4, 4, 506, + 491, 506, 4, 4, 4, 4, 4, 3, 503, 199, + 517, 199, 503, 8, 4, 506, 4, 8, 3, 199, + 527, 4, 517, 503, 503, 532, 517, 4, 503, 532, + 4, 506, 4, 4, 4, 4, 527, 199, 4, 4, + 503, 532, 517, 491, 199, 552, 4, 4, 503, 202, + 532, 503, 202, 202, 527, 503, 4, 4, 506, 532, + 4, 552, 517, 4, 4, 4, 503, 503, 200, 517, + 201, 200, 200, 503, 200, 200, 4, 4, 4, 527, + 517, 202, 201, 201, 532, 503, 503, 200, 503, 200, + 200, 200, 503, 4, 202, 202, 503, 4, 503, 202, + 4, 4, 1159, 503, 552, 4, 503, 202, 503, 503, + 503, 4, 202, 503, 503, 202, 503, 200, 4, 4, + 503, 503, 202, 4, 503, 202, 503, 503, 503, 202, + 4, 503, 503, 4, 4, 4, 506, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 200, 4, 4, 4, 4, 4, 4, 202, 202, 202, + 4, 4, 4, 4, 4, 202, 4, 4, 4, 4, + 4, 4, 200, 4, 4, 4, 4, 4, 4, 4, + 4, 688, 4, 690, 4, 4, 4, 4, 4, 4, + 165, 4, 200, 687, 4, 4, 4, 202, 202, 690, + 4, 4, 4, 4, 4, 202, 4, 200, 202, 4, + 202, 200, 26, 27, 28, 29, 30, 724, 725, 200, + 727, 4, 202, 4, 731, 4, 4, 200, 4, 3, + 7, 199, 7, 724, 725, 726, 727, 7, 7, 199, + 199, 7, 690, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 7, 5, 5, 199, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 199, 81, 82, 83, + 199, 85, 5, 5, 5, 199, 724, 725, 726, 727, + 7, 5, 5, 97, 5, 99, 100, 101, 102, 103, + 104, 5, 7, 199, 7, 109, 110, 111, 7, 7, + 114, 7, 199, 117, 118, 5, 7, 5, 199, 199, + 199, 125, 5, 7, 5, 199, 199, 199, 7, 199, + 199, 199, 199, 199, 199, 24, 199, 199, 7, 7, + 7, 199, 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 7, 7, 7, 7, 7, 7, + 4, 4, 4, 4, 4, 4, 170, 171, 4, 4, + 199, 3, 6, 6, 3, 6, 6, 3, 6, 3, + 3, 6, 3, 3, 6, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 199, 4, 4, 200, 8, + 6, 6, 4, 4, 4, 4, 4, 202, 4, 4, + 4, 200, 4, 4, 200, 202, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 4, 200, 202, 200, 4, + 4, 4, 202, 3, 6, 4, 4, 200, 199, 3, + 202, 199, 199, 8, 199, 199, 199, 199, 199, 8, + 8, 8, 199, 199, 199, 4, 199, 4, 4, 4, + 202, 200, 199, 5, 199, 962, 7, 4, 965, 4, + 4, 968, 4, 202, 971, 968, 971, 962, 4, 976, + 200, 962, 979, 199, 965, 982, 971, 968, 200, 199, + 971, 976, 962, 962, 979, 976, 968, 962, 979, 996, + 976, 971, 965, 1000, 688, 968, 971, 666, 971, 962, + 679, 976, 1009, 976, 979, 996, 1013, 962, 971, 1000, + 962, 1018, 491, 1018, 962, 1006, 971, 965, 1009, 971, + 968, 976, 485, 971, 979, 962, 962, 1018, 976, 937, + 690, 979, 962, 777, 971, 971, 1009, 961, 996, 976, + 976, 971, 979, 1018, 962, 962, 976, 962, 996, 974, + 956, 962, 1000, 971, 971, 962, 971, 962, 1006, 976, + 971, 1009, 962, 984, 971, 962, 971, 962, 962, 962, + 1018, 971, 962, 962, 971, 962, 971, 971, 971, 962, + 962, 971, 971, 962, 971, 962, 962, 962, 971, 971, + 962, 962, 971, 535, 971, 971, 971, 982, 964, 971, + 971, 971, 503, 991, 973, 962, 1180, 527, 967, 532, + 1020, 965, 506, 981, 977, 1018, 968, 970, 1185, 517, + 1006, 727, 1000, 689, 556, 1195, 1215, 552, 979, 1235, + -1, 748, -1, -1, -1, -1, 1010, -1, -1, -1, + -1, -1, -1, -1, 1138, -1, 1013, -1, 1018, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 1180, -1, 1180, -1, -1, 1185, -1, + -1, -1, -1, -1, -1, 1180, -1, -1, 1195, 1180, + 1185, -1, -1, -1, 1185, -1, -1, -1, -1, 1185, + 1180, -1, -1, -1, 1195, 1180, -1, 1180, -1, -1, + 1185, -1, 1185, -1, -1, -1, -1, 1180, -1, -1, + -1, -1, 1195, -1, -1, 1180, -1, -1, 1180, -1, + 1185, -1, 1180, -1, -1, -1, -1, 1185, -1, -1, + -1, -1, -1, 1180, 1180, -1, -1, 1195, 1185, 1185, + 1180, -1, -1, -1, -1, 1185, -1, -1, -1, -1, + -1, -1, 1180, 1180, -1, 1180, -1, -1, 1185, 1180, + -1, -1, -1, 1180, -1, 1180, -1, -1, -1, -1, + 1180, -1, -1, 1180, -1, 1180, 1180, 1180, -1, -1, + 1180, 1180, -1, 1180, -1, -1, -1, 1180, 1180, -1, + -1, 1180, -1, 1180, 1180, 1180, -1, -1, 1180, 1180, + 1180, 26, 27, 28, 29, 30, -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, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, -1, -1, -1, -1, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, -1, -1, -1, -1, + 85, 86, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 99, 100, -1, 102, -1, 104, + -1, -1, -1, -1, 109, 110, 111, -1, -1, 114, + -1, -1, 117, -1, -1, -1, -1, -1, -1, -1, + 125, -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, 170, 171, -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, 199 }; const short Dhcp4Parser::yystos_[] = { - 0, 194, 195, 196, 197, 198, 199, 200, 201, 202, - 203, 204, 205, 206, 212, 213, 214, 215, 216, 217, - 218, 219, 220, 221, 222, 223, 224, 225, 0, 5, - 7, 9, 207, 208, 209, 210, 226, 227, 228, 233, - 7, 242, 7, 247, 7, 294, 7, 410, 7, 493, - 7, 509, 7, 445, 7, 451, 7, 475, 7, 386, - 7, 574, 7, 605, 234, 229, 243, 248, 295, 411, - 494, 510, 446, 452, 476, 387, 575, 606, 226, 235, - 236, 207, 231, 232, 10, 244, 246, 11, 14, 23, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 65, - 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, - 86, 87, 88, 92, 93, 103, 104, 107, 108, 112, - 117, 118, 119, 120, 121, 126, 136, 139, 146, 147, - 151, 154, 158, 178, 179, 180, 181, 182, 183, 192, - 207, 241, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, 261, 262, 264, 265, 266, 267, - 268, 269, 270, 271, 274, 276, 278, 279, 280, 282, - 284, 285, 286, 287, 288, 289, 290, 305, 307, 313, - 315, 364, 373, 380, 394, 404, 428, 429, 430, 431, - 435, 443, 469, 499, 501, 503, 514, 516, 518, 541, - 553, 554, 562, 572, 603, 612, 636, 15, 16, 19, - 22, 241, 292, 293, 296, 298, 301, 304, 499, 501, - 89, 90, 91, 105, 109, 110, 111, 122, 125, 133, - 241, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, 266, 267, 268, 269, 270, 271, 274, 276, 278, - 279, 280, 282, 284, 412, 413, 414, 416, 418, 420, - 422, 424, 426, 428, 429, 430, 431, 434, 469, 487, - 499, 501, 503, 514, 516, 518, 538, 106, 241, 424, - 426, 469, 495, 496, 497, 499, 501, 121, 127, 128, - 129, 130, 131, 132, 134, 241, 469, 499, 501, 511, - 512, 513, 514, 516, 518, 520, 524, 526, 528, 530, - 532, 534, 536, 443, 34, 94, 96, 97, 100, 101, - 102, 241, 333, 453, 454, 455, 456, 457, 458, 459, - 461, 463, 465, 466, 468, 499, 501, 95, 98, 99, - 241, 333, 457, 463, 477, 478, 479, 480, 481, 483, - 484, 485, 486, 499, 501, 137, 138, 241, 388, 389, - 390, 392, 159, 160, 161, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 171, 178, 179, 241, 499, 501, - 576, 577, 578, 579, 581, 582, 584, 585, 586, 589, - 591, 593, 594, 595, 597, 599, 601, 12, 13, 607, - 608, 609, 611, 6, 3, 4, 8, 3, 245, 3, - 8, 604, 291, 308, 4, 4, 4, 515, 517, 519, - 306, 314, 316, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 263, 4, 4, 4, 4, 4, - 272, 275, 277, 4, 4, 4, 405, 444, 470, 4, - 436, 500, 502, 432, 4, 4, 4, 365, 542, 504, - 381, 395, 4, 374, 555, 563, 573, 281, 283, 4, - 4, 4, 613, 637, 4, 3, 8, 297, 299, 302, - 4, 3, 8, 417, 419, 421, 488, 415, 423, 4, - 427, 425, 539, 3, 8, 498, 3, 8, 537, 525, - 527, 531, 529, 535, 533, 521, 8, 3, 8, 460, - 334, 4, 464, 462, 467, 4, 8, 3, 482, 4, - 4, 8, 3, 391, 393, 3, 8, 4, 592, 580, - 4, 583, 4, 4, 587, 590, 4, 4, 596, 598, - 600, 602, 3, 8, 610, 4, 3, 8, 226, 226, - 207, 4, 4, 4, 4, 210, 210, 210, 4, 4, - 4, 4, 4, 4, 208, 208, 208, 208, 208, 210, - 209, 209, 209, 208, 208, 4, 208, 208, 210, 210, - 210, 4, 4, 4, 210, 210, 210, 4, 4, 4, - 208, 4, 4, 4, 4, 210, 210, 210, 4, 4, - 4, 4, 4, 208, 4, 4, 4, 4, 4, 4, - 210, 210, 210, 4, 4, 250, 4, 4, 4, 210, - 293, 4, 4, 4, 4, 4, 4, 208, 4, 4, - 4, 413, 4, 496, 4, 4, 4, 4, 4, 4, - 4, 4, 513, 4, 4, 208, 4, 4, 4, 210, - 455, 4, 210, 210, 479, 4, 4, 389, 210, 4, - 4, 208, 4, 208, 208, 4, 4, 210, 210, 4, - 4, 4, 4, 577, 4, 208, 608, 4, 7, 7, - 7, 7, 207, 207, 207, 7, 7, 5, 207, 174, - 175, 176, 177, 210, 273, 207, 207, 5, 5, 5, - 5, 228, 230, 207, 113, 114, 115, 116, 433, 5, - 5, 5, 5, 7, 7, 7, 7, 7, 207, 207, - 5, 7, 5, 237, 17, 18, 300, 20, 21, 303, - 207, 207, 207, 5, 207, 207, 237, 207, 7, 207, - 237, 207, 207, 207, 207, 207, 207, 207, 207, 207, - 207, 207, 207, 207, 207, 230, 207, 207, 207, 18, - 172, 588, 173, 273, 207, 207, 207, 5, 226, 249, - 607, 292, 24, 309, 310, 311, 34, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 57, 58, 59, 60, 61, 62, 63, 64, - 241, 321, 322, 323, 326, 328, 330, 332, 333, 335, - 336, 337, 338, 339, 340, 341, 342, 344, 346, 348, - 350, 351, 352, 355, 356, 358, 360, 362, 321, 7, - 317, 318, 319, 7, 406, 407, 408, 7, 447, 448, - 449, 7, 471, 472, 473, 7, 437, 438, 439, 127, - 128, 129, 130, 132, 366, 367, 368, 369, 370, 371, - 372, 7, 543, 544, 7, 505, 506, 507, 7, 382, - 383, 384, 140, 141, 142, 143, 144, 145, 396, 397, - 398, 399, 400, 401, 402, 403, 148, 149, 150, 241, - 375, 376, 377, 378, 379, 499, 501, 152, 153, 241, - 499, 501, 556, 557, 558, 560, 155, 156, 157, 207, - 499, 501, 564, 565, 566, 567, 569, 570, 576, 7, - 614, 615, 193, 241, 638, 639, 640, 238, 7, 489, - 490, 491, 135, 520, 522, 540, 317, 8, 8, 8, - 312, 3, 8, 324, 327, 329, 331, 4, 4, 4, - 4, 4, 343, 345, 347, 349, 4, 4, 353, 4, - 4, 4, 4, 357, 359, 361, 363, 3, 8, 8, - 320, 6, 3, 409, 6, 3, 450, 6, 3, 474, - 6, 3, 440, 6, 3, 3, 6, 545, 3, 6, - 508, 6, 3, 385, 6, 3, 4, 4, 4, 4, - 4, 4, 3, 8, 4, 4, 4, 3, 8, 559, - 561, 3, 8, 4, 568, 4, 571, 3, 8, 8, - 616, 3, 6, 4, 3, 8, 207, 239, 240, 492, - 6, 3, 523, 8, 6, 4, 310, 4, 4, 4, - 4, 208, 210, 208, 210, 208, 4, 4, 4, 4, - 208, 208, 4, 208, 208, 210, 208, 4, 4, 4, - 4, 322, 321, 319, 412, 408, 453, 449, 477, 473, - 241, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, 266, 267, 268, 269, 270, 271, 274, 276, 278, - 279, 280, 282, 284, 333, 404, 422, 424, 426, 428, - 429, 430, 431, 441, 442, 469, 499, 501, 514, 516, - 518, 538, 439, 367, 123, 124, 241, 251, 252, 253, - 333, 443, 469, 499, 501, 514, 516, 518, 546, 547, - 548, 549, 550, 552, 544, 511, 507, 388, 384, 208, - 208, 208, 208, 208, 208, 397, 210, 208, 208, 376, - 4, 4, 557, 210, 4, 208, 4, 565, 184, 186, - 187, 241, 333, 499, 501, 617, 618, 619, 620, 622, - 615, 210, 639, 6, 3, 495, 491, 4, 207, 35, - 36, 37, 38, 325, 207, 207, 207, 207, 207, 207, - 207, 54, 55, 56, 354, 207, 207, 207, 207, 8, - 8, 8, 8, 3, 8, 551, 4, 8, 3, 8, - 8, 207, 207, 207, 226, 623, 4, 621, 3, 8, - 207, 8, 237, 442, 4, 210, 548, 4, 208, 4, - 618, 207, 5, 207, 7, 624, 625, 626, 3, 6, - 185, 188, 189, 190, 191, 627, 628, 629, 631, 632, - 633, 634, 625, 630, 4, 4, 4, 635, 3, 8, - 4, 210, 208, 208, 4, 628, 207, 207 + 0, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 0, 5, + 7, 9, 199, 200, 201, 202, 218, 219, 220, 225, + 7, 234, 7, 239, 7, 286, 7, 391, 7, 474, + 7, 490, 7, 426, 7, 432, 7, 456, 7, 367, + 7, 555, 7, 586, 226, 221, 235, 240, 287, 392, + 475, 491, 427, 433, 457, 368, 556, 587, 218, 227, + 228, 199, 223, 224, 10, 236, 238, 11, 14, 23, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 84, 85, 95, 96, 99, 100, 104, + 109, 110, 111, 112, 113, 118, 128, 131, 138, 139, + 143, 146, 150, 170, 171, 172, 173, 174, 175, 184, + 199, 233, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 256, 257, 258, 259, + 260, 261, 262, 263, 266, 268, 270, 271, 272, 274, + 276, 277, 278, 279, 280, 281, 282, 297, 299, 305, + 307, 345, 354, 361, 375, 385, 409, 410, 411, 412, + 416, 424, 450, 480, 482, 484, 495, 497, 499, 522, + 534, 535, 543, 553, 584, 593, 617, 15, 16, 19, + 22, 233, 284, 285, 288, 290, 293, 296, 480, 482, + 81, 82, 83, 97, 101, 102, 103, 114, 117, 125, + 233, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 258, 259, 260, 261, 262, 263, 266, 268, 270, + 271, 272, 274, 276, 393, 394, 395, 397, 399, 401, + 403, 405, 407, 409, 410, 411, 412, 415, 450, 468, + 480, 482, 484, 495, 497, 499, 519, 98, 233, 405, + 407, 450, 476, 477, 478, 480, 482, 113, 119, 120, + 121, 122, 123, 124, 126, 233, 450, 480, 482, 492, + 493, 494, 495, 497, 499, 501, 505, 507, 509, 511, + 513, 515, 517, 424, 34, 86, 88, 89, 92, 93, + 94, 233, 325, 434, 435, 436, 437, 438, 439, 440, + 442, 444, 446, 447, 449, 480, 482, 87, 90, 91, + 233, 325, 438, 444, 458, 459, 460, 461, 462, 464, + 465, 466, 467, 480, 482, 129, 130, 233, 369, 370, + 371, 373, 151, 152, 153, 154, 155, 156, 157, 158, + 159, 160, 161, 162, 163, 170, 171, 233, 480, 482, + 557, 558, 559, 560, 562, 563, 565, 566, 567, 570, + 572, 574, 575, 576, 578, 580, 582, 12, 13, 588, + 589, 590, 592, 6, 3, 4, 8, 3, 237, 3, + 8, 585, 283, 300, 4, 4, 4, 496, 498, 500, + 298, 306, 308, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 255, 4, 4, 4, 4, 4, + 264, 267, 269, 4, 4, 4, 386, 425, 451, 4, + 417, 481, 483, 413, 4, 4, 4, 346, 523, 485, + 362, 376, 4, 355, 536, 544, 554, 273, 275, 4, + 4, 4, 594, 618, 4, 3, 8, 289, 291, 294, + 4, 3, 8, 398, 400, 402, 469, 396, 404, 4, + 408, 406, 520, 3, 8, 479, 3, 8, 518, 506, + 508, 512, 510, 516, 514, 502, 8, 3, 8, 441, + 326, 4, 445, 443, 448, 4, 8, 3, 463, 4, + 4, 8, 3, 372, 374, 3, 8, 4, 573, 561, + 4, 564, 4, 4, 568, 571, 4, 4, 577, 579, + 581, 583, 3, 8, 591, 4, 3, 8, 218, 218, + 199, 4, 4, 4, 4, 202, 202, 202, 4, 4, + 4, 4, 4, 4, 200, 200, 200, 200, 200, 202, + 201, 201, 201, 200, 200, 4, 200, 200, 202, 202, + 202, 4, 4, 4, 202, 202, 202, 4, 4, 4, + 200, 4, 4, 4, 4, 202, 202, 202, 4, 4, + 4, 4, 4, 200, 4, 4, 4, 4, 4, 4, + 202, 202, 202, 4, 4, 242, 4, 4, 4, 202, + 285, 4, 4, 4, 4, 4, 4, 200, 4, 4, + 4, 394, 4, 477, 4, 4, 4, 4, 4, 4, + 4, 4, 494, 4, 4, 200, 4, 4, 4, 202, + 436, 4, 202, 202, 460, 4, 4, 370, 202, 4, + 4, 200, 4, 200, 200, 4, 4, 202, 202, 4, + 4, 4, 4, 558, 4, 200, 589, 4, 7, 7, + 7, 7, 199, 199, 199, 7, 7, 5, 199, 166, + 167, 168, 169, 202, 265, 199, 199, 5, 5, 5, + 5, 220, 222, 199, 105, 106, 107, 108, 414, 5, + 5, 5, 5, 7, 7, 7, 7, 7, 199, 199, + 5, 7, 5, 229, 17, 18, 292, 20, 21, 295, + 199, 199, 199, 5, 199, 199, 229, 199, 7, 199, + 229, 199, 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 222, 199, 199, 199, 18, + 164, 569, 165, 265, 199, 199, 199, 5, 218, 241, + 588, 284, 24, 301, 302, 303, 34, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 52, 53, + 54, 55, 56, 233, 313, 314, 315, 318, 320, 322, + 324, 325, 327, 328, 329, 330, 331, 332, 333, 336, + 337, 339, 341, 343, 313, 7, 309, 310, 311, 7, + 387, 388, 389, 7, 428, 429, 430, 7, 452, 453, + 454, 7, 418, 419, 420, 119, 120, 121, 122, 124, + 347, 348, 349, 350, 351, 352, 353, 7, 524, 525, + 7, 486, 487, 488, 7, 363, 364, 365, 132, 133, + 134, 135, 136, 137, 377, 378, 379, 380, 381, 382, + 383, 384, 140, 141, 142, 233, 356, 357, 358, 359, + 360, 480, 482, 144, 145, 233, 480, 482, 537, 538, + 539, 541, 147, 148, 149, 199, 480, 482, 545, 546, + 547, 548, 550, 551, 557, 7, 595, 596, 185, 233, + 619, 620, 621, 230, 7, 470, 471, 472, 127, 501, + 503, 521, 309, 8, 8, 8, 304, 3, 8, 316, + 319, 321, 323, 4, 4, 4, 4, 4, 4, 4, + 334, 4, 338, 340, 342, 344, 3, 8, 8, 312, + 6, 3, 390, 6, 3, 431, 6, 3, 455, 6, + 3, 421, 6, 3, 3, 6, 526, 3, 6, 489, + 6, 3, 366, 6, 3, 4, 4, 4, 4, 4, + 4, 3, 8, 4, 4, 4, 3, 8, 540, 542, + 3, 8, 4, 549, 4, 552, 3, 8, 8, 597, + 3, 6, 4, 3, 8, 199, 231, 232, 473, 6, + 3, 504, 8, 6, 4, 302, 4, 4, 4, 4, + 200, 202, 200, 202, 200, 200, 200, 4, 200, 4, + 4, 4, 4, 314, 313, 311, 393, 389, 434, 430, + 458, 454, 233, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 258, 259, 260, 261, 262, 263, 266, + 268, 270, 271, 272, 274, 276, 325, 385, 403, 405, + 407, 409, 410, 411, 412, 422, 423, 450, 480, 482, + 495, 497, 499, 519, 420, 348, 115, 116, 233, 243, + 244, 245, 325, 424, 450, 480, 482, 495, 497, 499, + 527, 528, 529, 530, 531, 533, 525, 492, 488, 369, + 365, 200, 200, 200, 200, 200, 200, 378, 202, 200, + 200, 357, 4, 4, 538, 202, 4, 200, 4, 546, + 176, 178, 179, 233, 325, 480, 482, 598, 599, 600, + 601, 603, 596, 202, 620, 6, 3, 476, 472, 4, + 199, 35, 36, 37, 317, 199, 199, 199, 49, 50, + 51, 335, 199, 199, 199, 199, 8, 8, 8, 8, + 3, 8, 532, 4, 8, 3, 8, 8, 199, 199, + 199, 218, 604, 4, 602, 3, 8, 199, 8, 229, + 423, 4, 202, 529, 4, 200, 4, 599, 199, 5, + 199, 7, 605, 606, 607, 3, 6, 177, 180, 181, + 182, 183, 608, 609, 610, 612, 613, 614, 615, 606, + 611, 4, 4, 4, 616, 3, 8, 4, 202, 200, + 200, 4, 609, 199, 199 }; const short Dhcp4Parser::yyr1_[] = { - 0, 211, 213, 212, 214, 212, 215, 212, 216, 212, - 217, 212, 218, 212, 219, 212, 220, 212, 221, 212, - 222, 212, 223, 212, 224, 212, 225, 212, 226, 226, - 226, 226, 226, 226, 226, 227, 229, 228, 230, 231, - 231, 232, 232, 232, 234, 233, 235, 235, 236, 236, - 236, 238, 237, 239, 239, 240, 240, 240, 241, 243, - 242, 245, 244, 244, 246, 248, 247, 249, 249, 249, - 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, - 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, - 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, - 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, - 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, - 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, - 250, 250, 250, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, 261, 263, 262, 264, 265, 266, - 267, 268, 269, 270, 272, 271, 273, 273, 273, 273, - 273, 275, 274, 277, 276, 278, 279, 281, 280, 283, - 282, 284, 285, 286, 287, 288, 289, 291, 290, 292, - 292, 292, 293, 293, 293, 293, 293, 293, 293, 295, - 294, 297, 296, 299, 298, 300, 300, 302, 301, 303, - 303, 304, 306, 305, 308, 307, 309, 309, 309, 310, - 312, 311, 314, 313, 316, 315, 317, 317, 318, 318, - 318, 320, 319, 321, 321, 321, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 324, 323, 325, 325, 325, 325, 327, 326, - 329, 328, 331, 330, 332, 334, 333, 335, 336, 337, - 338, 339, 340, 341, 343, 342, 345, 344, 347, 346, - 349, 348, 350, 351, 353, 352, 354, 354, 354, 355, - 357, 356, 359, 358, 361, 360, 363, 362, 365, 364, - 366, 366, 366, 367, 367, 367, 367, 367, 368, 369, - 370, 371, 372, 374, 373, 375, 375, 375, 376, 376, - 376, 376, 376, 376, 377, 378, 379, 381, 380, 382, - 382, 383, 383, 383, 385, 384, 387, 386, 388, 388, - 388, 388, 389, 389, 391, 390, 393, 392, 395, 394, - 396, 396, 396, 397, 397, 397, 397, 397, 397, 398, - 399, 400, 401, 402, 403, 405, 404, 406, 406, 407, - 407, 407, 409, 408, 411, 410, 412, 412, 412, 413, - 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, - 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, - 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, - 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, - 413, 413, 413, 413, 415, 414, 417, 416, 419, 418, - 421, 420, 423, 422, 425, 424, 427, 426, 428, 429, - 430, 432, 431, 433, 433, 433, 433, 434, 436, 435, - 437, 437, 438, 438, 438, 440, 439, 441, 441, 441, - 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, - 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, - 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, - 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, - 444, 443, 446, 445, 447, 447, 448, 448, 448, 450, - 449, 452, 451, 453, 453, 454, 454, 454, 455, 455, - 455, 455, 455, 455, 455, 455, 455, 455, 456, 457, - 458, 460, 459, 462, 461, 464, 463, 465, 467, 466, - 468, 470, 469, 471, 471, 472, 472, 472, 474, 473, - 476, 475, 477, 477, 478, 478, 478, 479, 479, 479, - 479, 479, 479, 479, 479, 479, 480, 482, 481, 483, - 484, 485, 486, 488, 487, 489, 489, 490, 490, 490, - 492, 491, 494, 493, 495, 495, 495, 496, 496, 496, - 496, 496, 496, 496, 498, 497, 500, 499, 502, 501, - 504, 503, 505, 505, 506, 506, 506, 508, 507, 510, - 509, 511, 511, 512, 512, 512, 513, 513, 513, 513, - 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, - 513, 515, 514, 517, 516, 519, 518, 521, 520, 523, - 522, 525, 524, 527, 526, 529, 528, 531, 530, 533, - 532, 535, 534, 537, 536, 539, 538, 540, 540, 542, - 541, 543, 543, 543, 545, 544, 546, 546, 547, 547, - 547, 548, 548, 548, 548, 548, 548, 548, 548, 548, - 548, 548, 548, 548, 548, 549, 551, 550, 552, 553, - 555, 554, 556, 556, 556, 557, 557, 557, 557, 557, - 559, 558, 561, 560, 563, 562, 564, 564, 564, 565, - 565, 565, 565, 565, 565, 566, 568, 567, 569, 571, - 570, 573, 572, 575, 574, 576, 576, 576, 577, 577, - 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, - 577, 577, 577, 577, 577, 577, 578, 580, 579, 581, - 583, 582, 584, 585, 587, 586, 588, 588, 590, 589, - 592, 591, 593, 594, 596, 595, 598, 597, 600, 599, - 602, 601, 604, 603, 606, 605, 607, 607, 607, 608, - 608, 610, 609, 611, 613, 612, 614, 614, 614, 616, - 615, 617, 617, 617, 618, 618, 618, 618, 618, 618, - 618, 619, 621, 620, 623, 622, 624, 624, 624, 626, - 625, 627, 627, 627, 628, 628, 628, 628, 628, 630, - 629, 631, 632, 633, 635, 634, 637, 636, 638, 638, - 638, 639, 639, 640 + 0, 203, 205, 204, 206, 204, 207, 204, 208, 204, + 209, 204, 210, 204, 211, 204, 212, 204, 213, 204, + 214, 204, 215, 204, 216, 204, 217, 204, 218, 218, + 218, 218, 218, 218, 218, 219, 221, 220, 222, 223, + 223, 224, 224, 224, 226, 225, 227, 227, 228, 228, + 228, 230, 229, 231, 231, 232, 232, 232, 233, 235, + 234, 237, 236, 236, 238, 240, 239, 241, 241, 241, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 255, 254, 256, 257, 258, + 259, 260, 261, 262, 264, 263, 265, 265, 265, 265, + 265, 267, 266, 269, 268, 270, 271, 273, 272, 275, + 274, 276, 277, 278, 279, 280, 281, 283, 282, 284, + 284, 284, 285, 285, 285, 285, 285, 285, 285, 287, + 286, 289, 288, 291, 290, 292, 292, 294, 293, 295, + 295, 296, 298, 297, 300, 299, 301, 301, 301, 302, + 304, 303, 306, 305, 308, 307, 309, 309, 310, 310, + 310, 312, 311, 313, 313, 313, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 316, 315, 317, 317, 317, + 319, 318, 321, 320, 323, 322, 324, 326, 325, 327, + 328, 329, 330, 331, 332, 334, 333, 335, 335, 335, + 336, 338, 337, 340, 339, 342, 341, 344, 343, 346, + 345, 347, 347, 347, 348, 348, 348, 348, 348, 349, + 350, 351, 352, 353, 355, 354, 356, 356, 356, 357, + 357, 357, 357, 357, 357, 358, 359, 360, 362, 361, + 363, 363, 364, 364, 364, 366, 365, 368, 367, 369, + 369, 369, 369, 370, 370, 372, 371, 374, 373, 376, + 375, 377, 377, 377, 378, 378, 378, 378, 378, 378, + 379, 380, 381, 382, 383, 384, 386, 385, 387, 387, + 388, 388, 388, 390, 389, 392, 391, 393, 393, 393, + 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, + 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, + 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, + 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, + 394, 394, 394, 394, 394, 396, 395, 398, 397, 400, + 399, 402, 401, 404, 403, 406, 405, 408, 407, 409, + 410, 411, 413, 412, 414, 414, 414, 414, 415, 417, + 416, 418, 418, 419, 419, 419, 421, 420, 422, 422, + 422, 423, 423, 423, 423, 423, 423, 423, 423, 423, + 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, + 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, + 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, + 423, 425, 424, 427, 426, 428, 428, 429, 429, 429, + 431, 430, 433, 432, 434, 434, 435, 435, 435, 436, + 436, 436, 436, 436, 436, 436, 436, 436, 436, 437, + 438, 439, 441, 440, 443, 442, 445, 444, 446, 448, + 447, 449, 451, 450, 452, 452, 453, 453, 453, 455, + 454, 457, 456, 458, 458, 459, 459, 459, 460, 460, + 460, 460, 460, 460, 460, 460, 460, 461, 463, 462, + 464, 465, 466, 467, 469, 468, 470, 470, 471, 471, + 471, 473, 472, 475, 474, 476, 476, 476, 477, 477, + 477, 477, 477, 477, 477, 479, 478, 481, 480, 483, + 482, 485, 484, 486, 486, 487, 487, 487, 489, 488, + 491, 490, 492, 492, 493, 493, 493, 494, 494, 494, + 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, + 494, 494, 496, 495, 498, 497, 500, 499, 502, 501, + 504, 503, 506, 505, 508, 507, 510, 509, 512, 511, + 514, 513, 516, 515, 518, 517, 520, 519, 521, 521, + 523, 522, 524, 524, 524, 526, 525, 527, 527, 528, + 528, 528, 529, 529, 529, 529, 529, 529, 529, 529, + 529, 529, 529, 529, 529, 529, 530, 532, 531, 533, + 534, 536, 535, 537, 537, 537, 538, 538, 538, 538, + 538, 540, 539, 542, 541, 544, 543, 545, 545, 545, + 546, 546, 546, 546, 546, 546, 547, 549, 548, 550, + 552, 551, 554, 553, 556, 555, 557, 557, 557, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 559, 561, 560, + 562, 564, 563, 565, 566, 568, 567, 569, 569, 571, + 570, 573, 572, 574, 575, 577, 576, 579, 578, 581, + 580, 583, 582, 585, 584, 587, 586, 588, 588, 588, + 589, 589, 591, 590, 592, 594, 593, 595, 595, 595, + 597, 596, 598, 598, 598, 599, 599, 599, 599, 599, + 599, 599, 600, 602, 601, 604, 603, 605, 605, 605, + 607, 606, 608, 608, 608, 609, 609, 609, 609, 609, + 611, 610, 612, 613, 614, 616, 615, 618, 617, 619, + 619, 619, 620, 620, 621 }; const signed char @@ -5868,93 +5721,88 @@ namespace isc { namespace dhcp { 0, 4, 0, 6, 0, 6, 0, 1, 1, 3, 2, 0, 4, 1, 3, 2, 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, 0, 4, 1, 1, 1, 1, 0, 4, - 0, 4, 0, 4, 3, 0, 4, 3, 3, 3, - 3, 3, 3, 3, 0, 4, 0, 4, 0, 4, - 0, 4, 3, 3, 0, 4, 1, 1, 1, 3, - 0, 4, 0, 4, 0, 4, 0, 4, 0, 6, - 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 6, 1, 3, 2, 1, 1, - 1, 1, 1, 1, 3, 3, 3, 0, 6, 0, - 1, 1, 3, 2, 0, 4, 0, 4, 1, 3, - 2, 1, 1, 1, 0, 4, 0, 4, 0, 6, - 1, 3, 2, 1, 1, 1, 1, 1, 1, 3, - 3, 3, 3, 3, 3, 0, 6, 0, 1, 1, - 3, 2, 0, 4, 0, 4, 1, 3, 2, 1, + 1, 1, 1, 1, 1, 0, 4, 1, 1, 1, + 0, 4, 0, 4, 0, 4, 3, 0, 4, 3, + 3, 3, 3, 3, 3, 0, 4, 1, 1, 1, + 3, 0, 4, 0, 4, 0, 4, 0, 4, 0, + 6, 1, 3, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 6, 1, 3, 2, 1, + 1, 1, 1, 1, 1, 3, 3, 3, 0, 6, + 0, 1, 1, 3, 2, 0, 4, 0, 4, 1, + 3, 2, 1, 1, 1, 0, 4, 0, 4, 0, + 6, 1, 3, 2, 1, 1, 1, 1, 1, 1, + 3, 3, 3, 3, 3, 3, 0, 6, 0, 1, + 1, 3, 2, 0, 4, 0, 4, 1, 3, 2, 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, 0, 4, 0, 4, 0, 4, - 0, 4, 0, 4, 0, 4, 0, 4, 3, 3, - 3, 0, 4, 1, 1, 1, 1, 3, 0, 6, - 0, 1, 1, 3, 2, 0, 4, 1, 3, 2, - 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, - 0, 6, 0, 4, 0, 1, 1, 3, 2, 0, - 4, 0, 4, 0, 1, 1, 3, 2, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, - 1, 0, 4, 0, 4, 0, 4, 1, 0, 4, - 3, 0, 6, 0, 1, 1, 3, 2, 0, 4, - 0, 4, 0, 1, 1, 3, 2, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 0, 4, 1, - 1, 3, 3, 0, 6, 0, 1, 1, 3, 2, - 0, 4, 0, 4, 1, 3, 2, 1, 1, 1, - 1, 1, 1, 1, 0, 4, 0, 4, 0, 4, - 0, 6, 0, 1, 1, 3, 2, 0, 4, 0, - 4, 0, 1, 1, 3, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 0, 4, 0, 4, 0, 4, 0, 4, 0, - 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, - 4, 0, 4, 0, 4, 0, 6, 1, 1, 0, - 6, 1, 3, 2, 0, 4, 0, 1, 1, 3, + 1, 1, 1, 1, 1, 0, 4, 0, 4, 0, + 4, 0, 4, 0, 4, 0, 4, 0, 4, 3, + 3, 3, 0, 4, 1, 1, 1, 1, 3, 0, + 6, 0, 1, 1, 3, 2, 0, 4, 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 4, 3, 3, - 0, 6, 1, 3, 2, 1, 1, 1, 1, 1, - 0, 4, 0, 4, 0, 6, 1, 3, 2, 1, - 1, 1, 1, 1, 1, 3, 0, 4, 3, 0, - 4, 0, 6, 0, 4, 1, 3, 2, 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, 0, 6, 0, 4, 0, 1, 1, 3, 2, + 0, 4, 0, 4, 0, 1, 1, 3, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 3, 1, 0, 4, 0, 4, 0, 4, 1, 0, + 4, 3, 0, 6, 0, 1, 1, 3, 2, 0, + 4, 0, 4, 0, 1, 1, 3, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, + 1, 1, 3, 3, 0, 6, 0, 1, 1, 3, + 2, 0, 4, 0, 4, 1, 3, 2, 1, 1, + 1, 1, 1, 1, 1, 0, 4, 0, 4, 0, + 4, 0, 6, 0, 1, 1, 3, 2, 0, 4, + 0, 4, 0, 1, 1, 3, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 4, 0, 4, 0, 4, 0, 4, + 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, + 0, 4, 0, 4, 0, 4, 0, 6, 1, 1, + 0, 6, 1, 3, 2, 0, 4, 0, 1, 1, + 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 0, 4, 3, + 3, 0, 6, 1, 3, 2, 1, 1, 1, 1, + 1, 0, 4, 0, 4, 0, 6, 1, 3, 2, 1, 1, 1, 1, 1, 1, 3, 0, 4, 3, - 0, 4, 3, 3, 0, 4, 1, 1, 0, 4, - 0, 4, 3, 3, 0, 4, 0, 4, 0, 4, 0, 4, 0, 6, 0, 4, 1, 3, 2, 1, - 1, 0, 6, 3, 0, 6, 1, 3, 2, 0, - 4, 1, 3, 2, 1, 1, 1, 1, 1, 1, - 1, 3, 0, 4, 0, 6, 1, 3, 2, 0, - 4, 1, 3, 2, 1, 1, 1, 1, 1, 0, - 4, 3, 3, 3, 0, 4, 0, 6, 1, 3, - 2, 1, 1, 3 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 3, 0, 4, + 3, 0, 4, 3, 3, 0, 4, 1, 1, 0, + 4, 0, 4, 3, 3, 0, 4, 0, 4, 0, + 4, 0, 4, 0, 6, 0, 4, 1, 3, 2, + 1, 1, 0, 6, 3, 0, 6, 1, 3, 2, + 0, 4, 1, 3, 2, 1, 1, 1, 1, 1, + 1, 1, 3, 0, 4, 0, 6, 1, 3, 2, + 0, 4, 1, 3, 2, 1, 1, 1, 1, 1, + 0, 4, 3, 3, 3, 0, 4, 0, 6, 1, + 3, 2, 1, 1, 3 }; -#if PARSER4_DEBUG || 1 + // YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - // First, the terminals, then, starting at \a YYNTOKENS, nonterminals. + // First, the terminals, then, starting at \a yyntokens_, nonterminals. const char* const Dhcp4Parser::yytname_[] = { - "\"end of file\"", "error", "\"invalid token\"", "\",\"", "\":\"", - "\"[\"", "\"]\"", "\"{\"", "\"}\"", "\"null\"", "\"Dhcp4\"", - "\"config-control\"", "\"config-databases\"", - "\"config-fetch-wait-time\"", "\"interfaces-config\"", "\"interfaces\"", - "\"dhcp-socket-type\"", "\"raw\"", "\"udp\"", "\"outbound-interface\"", - "\"same-as-inbound\"", "\"use-routing\"", "\"re-detect\"", - "\"sanity-checks\"", "\"lease-checks\"", "\"echo-client-id\"", - "\"match-client-id\"", "\"authoritative\"", "\"next-server\"", - "\"server-hostname\"", "\"boot-file-name\"", "\"lease-database\"", - "\"hosts-database\"", "\"hosts-databases\"", "\"type\"", "\"memfile\"", - "\"mysql\"", "\"postgresql\"", "\"cql\"", "\"user\"", "\"password\"", - "\"host\"", "\"port\"", "\"persist\"", "\"lfc-interval\"", - "\"readonly\"", "\"connect-timeout\"", "\"contact-points\"", - "\"keyspace\"", "\"consistency\"", "\"serial-consistency\"", + "\"end of file\"", "error", "$undefined", "\",\"", "\":\"", "\"[\"", + "\"]\"", "\"{\"", "\"}\"", "\"null\"", "\"Dhcp4\"", "\"config-control\"", + "\"config-databases\"", "\"config-fetch-wait-time\"", + "\"interfaces-config\"", "\"interfaces\"", "\"dhcp-socket-type\"", + "\"raw\"", "\"udp\"", "\"outbound-interface\"", "\"same-as-inbound\"", + "\"use-routing\"", "\"re-detect\"", "\"sanity-checks\"", + "\"lease-checks\"", "\"echo-client-id\"", "\"match-client-id\"", + "\"authoritative\"", "\"next-server\"", "\"server-hostname\"", + "\"boot-file-name\"", "\"lease-database\"", "\"hosts-database\"", + "\"hosts-databases\"", "\"type\"", "\"memfile\"", "\"mysql\"", + "\"postgresql\"", "\"user\"", "\"password\"", "\"host\"", "\"port\"", + "\"persist\"", "\"lfc-interval\"", "\"readonly\"", "\"connect-timeout\"", "\"max-reconnect-tries\"", "\"reconnect-wait-time\"", "\"on-fail\"", "\"stop-retry-exit\"", "\"serve-retry-exit\"", - "\"serve-retry-continue\"", "\"request-timeout\"", "\"tcp-keepalive\"", - "\"tcp-nodelay\"", "\"max-row-errors\"", "\"trust-anchor\"", + "\"serve-retry-continue\"", "\"max-row-errors\"", "\"trust-anchor\"", "\"cert-file\"", "\"key-file\"", "\"cipher-list\"", "\"valid-lifetime\"", "\"min-valid-lifetime\"", "\"max-valid-lifetime\"", "\"renew-timer\"", "\"rebind-timer\"", "\"calculate-tee-times\"", "\"t1-percent\"", @@ -6034,179 +5882,173 @@ namespace isc { namespace dhcp { "not_empty_database_list", "database", "$@36", "database_map_params", "database_map_param", "database_type", "$@37", "db_type", "user", "$@38", "password", "$@39", "host", "$@40", "port", "name", "$@41", "persist", - "lfc_interval", "readonly", "connect_timeout", "request_timeout", - "tcp_keepalive", "tcp_nodelay", "contact_points", "$@42", "keyspace", - "$@43", "consistency", "$@44", "serial_consistency", "$@45", - "max_reconnect_tries", "reconnect_wait_time", "on_fail", "$@46", - "on_fail_mode", "max_row_errors", "trust_anchor", "$@47", "cert_file", - "$@48", "key_file", "$@49", "cipher_list", "$@50", - "host_reservation_identifiers", "$@51", + "lfc_interval", "readonly", "connect_timeout", "max_reconnect_tries", + "reconnect_wait_time", "on_fail", "$@42", "on_fail_mode", + "max_row_errors", "trust_anchor", "$@43", "cert_file", "$@44", + "key_file", "$@45", "cipher_list", "$@46", + "host_reservation_identifiers", "$@47", "host_reservation_identifiers_list", "host_reservation_identifier", "duid_id", "hw_address_id", "circuit_id", "client_id", "flex_id", - "dhcp_multi_threading", "$@52", "multi_threading_params", + "dhcp_multi_threading", "$@48", "multi_threading_params", "multi_threading_param", "enable_multi_threading", "thread_pool_size", - "packet_queue_size", "hooks_libraries", "$@53", "hooks_libraries_list", - "not_empty_hooks_libraries_list", "hooks_library", "$@54", - "sub_hooks_library", "$@55", "hooks_params", "hooks_param", "library", - "$@56", "parameters", "$@57", "expired_leases_processing", "$@58", + "packet_queue_size", "hooks_libraries", "$@49", "hooks_libraries_list", + "not_empty_hooks_libraries_list", "hooks_library", "$@50", + "sub_hooks_library", "$@51", "hooks_params", "hooks_param", "library", + "$@52", "parameters", "$@53", "expired_leases_processing", "$@54", "expired_leases_params", "expired_leases_param", "reclaim_timer_wait_time", "flush_reclaimed_timer_wait_time", "hold_reclaimed_time", "max_reclaim_leases", "max_reclaim_time", - "unwarned_reclaim_cycles", "subnet4_list", "$@59", - "subnet4_list_content", "not_empty_subnet4_list", "subnet4", "$@60", - "sub_subnet4", "$@61", "subnet4_params", "subnet4_param", "subnet", - "$@62", "subnet_4o6_interface", "$@63", "subnet_4o6_interface_id", - "$@64", "subnet_4o6_subnet", "$@65", "interface", "$@66", "client_class", - "$@67", "require_client_classes", "$@68", "reservations_global", + "unwarned_reclaim_cycles", "subnet4_list", "$@55", + "subnet4_list_content", "not_empty_subnet4_list", "subnet4", "$@56", + "sub_subnet4", "$@57", "subnet4_params", "subnet4_param", "subnet", + "$@58", "subnet_4o6_interface", "$@59", "subnet_4o6_interface_id", + "$@60", "subnet_4o6_subnet", "$@61", "interface", "$@62", "client_class", + "$@63", "require_client_classes", "$@64", "reservations_global", "reservations_in_subnet", "reservations_out_of_pool", "reservation_mode", - "$@69", "hr_mode", "id", "shared_networks", "$@70", + "$@65", "hr_mode", "id", "shared_networks", "$@66", "shared_networks_content", "shared_networks_list", "shared_network", - "$@71", "shared_network_params", "shared_network_param", - "option_def_list", "$@72", "sub_option_def_list", "$@73", + "$@67", "shared_network_params", "shared_network_param", + "option_def_list", "$@68", "sub_option_def_list", "$@69", "option_def_list_content", "not_empty_option_def_list", - "option_def_entry", "$@74", "sub_option_def", "$@75", + "option_def_entry", "$@70", "sub_option_def", "$@71", "option_def_params", "not_empty_option_def_params", "option_def_param", - "option_def_name", "code", "option_def_code", "option_def_type", "$@76", - "option_def_record_types", "$@77", "space", "$@78", "option_def_space", - "option_def_encapsulate", "$@79", "option_def_array", "option_data_list", - "$@80", "option_data_list_content", "not_empty_option_data_list", - "option_data_entry", "$@81", "sub_option_data", "$@82", + "option_def_name", "code", "option_def_code", "option_def_type", "$@72", + "option_def_record_types", "$@73", "space", "$@74", "option_def_space", + "option_def_encapsulate", "$@75", "option_def_array", "option_data_list", + "$@76", "option_data_list_content", "not_empty_option_data_list", + "option_data_entry", "$@77", "sub_option_data", "$@78", "option_data_params", "not_empty_option_data_params", - "option_data_param", "option_data_name", "option_data_data", "$@83", + "option_data_param", "option_data_name", "option_data_data", "$@79", "option_data_code", "option_data_space", "option_data_csv_format", - "option_data_always_send", "pools_list", "$@84", "pools_list_content", - "not_empty_pools_list", "pool_list_entry", "$@85", "sub_pool4", "$@86", - "pool_params", "pool_param", "pool_entry", "$@87", "user_context", - "$@88", "comment", "$@89", "reservations", "$@90", "reservations_list", - "not_empty_reservations_list", "reservation", "$@91", "sub_reservation", - "$@92", "reservation_params", "not_empty_reservation_params", - "reservation_param", "next_server", "$@93", "server_hostname", "$@94", - "boot_file_name", "$@95", "ip_address", "$@96", "ip_addresses", "$@97", - "duid", "$@98", "hw_address", "$@99", "client_id_value", "$@100", - "circuit_id_value", "$@101", "flex_id_value", "$@102", "hostname", - "$@103", "reservation_client_classes", "$@104", "relay", "$@105", - "relay_map", "client_classes", "$@106", "client_classes_list", - "client_class_entry", "$@107", "client_class_params", - "not_empty_client_class_params", "client_class_param", - "client_class_name", "client_class_test", "$@108", "only_if_required", - "dhcp4o6_port", "control_socket", "$@109", "control_socket_params", - "control_socket_param", "control_socket_type", "$@110", - "control_socket_name", "$@111", "dhcp_queue_control", "$@112", + "option_data_always_send", "pools_list", "$@80", "pools_list_content", + "not_empty_pools_list", "pool_list_entry", "$@81", "sub_pool4", "$@82", + "pool_params", "pool_param", "pool_entry", "$@83", "user_context", + "$@84", "comment", "$@85", "reservations", "$@86", "reservations_list", + "not_empty_reservations_list", "reservation", "$@87", "sub_reservation", + "$@88", "reservation_params", "not_empty_reservation_params", + "reservation_param", "next_server", "$@89", "server_hostname", "$@90", + "boot_file_name", "$@91", "ip_address", "$@92", "ip_addresses", "$@93", + "duid", "$@94", "hw_address", "$@95", "client_id_value", "$@96", + "circuit_id_value", "$@97", "flex_id_value", "$@98", "hostname", "$@99", + "reservation_client_classes", "$@100", "relay", "$@101", "relay_map", + "client_classes", "$@102", "client_classes_list", "client_class_entry", + "$@103", "client_class_params", "not_empty_client_class_params", + "client_class_param", "client_class_name", "client_class_test", "$@104", + "only_if_required", "dhcp4o6_port", "control_socket", "$@105", + "control_socket_params", "control_socket_param", "control_socket_type", + "$@106", "control_socket_name", "$@107", "dhcp_queue_control", "$@108", "queue_control_params", "queue_control_param", "enable_queue", - "queue_type", "$@113", "capacity", "arbitrary_map_entry", "$@114", - "dhcp_ddns", "$@115", "sub_dhcp_ddns", "$@116", "dhcp_ddns_params", - "dhcp_ddns_param", "enable_updates", "server_ip", "$@117", "server_port", - "sender_ip", "$@118", "sender_port", "max_queue_size", "ncr_protocol", - "$@119", "ncr_protocol_value", "ncr_format", "$@120", - "dep_qualifying_suffix", "$@121", "dep_override_no_update", - "dep_override_client_update", "dep_replace_client_name", "$@122", - "dep_generated_prefix", "$@123", "dep_hostname_char_set", "$@124", - "dep_hostname_char_replacement", "$@125", "config_control", "$@126", - "sub_config_control", "$@127", "config_control_params", - "config_control_param", "config_databases", "$@128", - "config_fetch_wait_time", "loggers", "$@129", "loggers_entries", - "logger_entry", "$@130", "logger_params", "logger_param", "debuglevel", - "severity", "$@131", "output_options_list", "$@132", - "output_options_list_content", "output_entry", "$@133", - "output_params_list", "output_params", "output", "$@134", "flush", - "maxsize", "maxver", "pattern", "$@135", "compatibility", "$@136", + "queue_type", "$@109", "capacity", "arbitrary_map_entry", "$@110", + "dhcp_ddns", "$@111", "sub_dhcp_ddns", "$@112", "dhcp_ddns_params", + "dhcp_ddns_param", "enable_updates", "server_ip", "$@113", "server_port", + "sender_ip", "$@114", "sender_port", "max_queue_size", "ncr_protocol", + "$@115", "ncr_protocol_value", "ncr_format", "$@116", + "dep_qualifying_suffix", "$@117", "dep_override_no_update", + "dep_override_client_update", "dep_replace_client_name", "$@118", + "dep_generated_prefix", "$@119", "dep_hostname_char_set", "$@120", + "dep_hostname_char_replacement", "$@121", "config_control", "$@122", + "sub_config_control", "$@123", "config_control_params", + "config_control_param", "config_databases", "$@124", + "config_fetch_wait_time", "loggers", "$@125", "loggers_entries", + "logger_entry", "$@126", "logger_params", "logger_param", "debuglevel", + "severity", "$@127", "output_options_list", "$@128", + "output_options_list_content", "output_entry", "$@129", + "output_params_list", "output_params", "output", "$@130", "flush", + "maxsize", "maxver", "pattern", "$@131", "compatibility", "$@132", "compatibility_params", "compatibility_param", "lenient_option_parsing", YY_NULLPTR }; -#endif - #if PARSER4_DEBUG const short Dhcp4Parser::yyrline_[] = { - 0, 300, 300, 300, 301, 301, 302, 302, 303, 303, - 304, 304, 305, 305, 306, 306, 307, 307, 308, 308, - 309, 309, 310, 310, 311, 311, 312, 312, 320, 321, - 322, 323, 324, 325, 326, 329, 334, 334, 345, 348, - 349, 352, 357, 363, 368, 368, 375, 376, 379, 383, - 387, 393, 393, 400, 401, 404, 408, 412, 422, 431, - 431, 446, 446, 460, 463, 469, 469, 478, 479, 480, - 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, - 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, - 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, - 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, - 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, - 547, 548, 549, 550, 553, 559, 565, 571, 577, 583, - 589, 595, 601, 607, 613, 619, 619, 628, 634, 640, - 646, 652, 658, 664, 670, 670, 679, 682, 685, 688, - 691, 697, 697, 706, 706, 715, 721, 727, 727, 736, - 736, 745, 751, 757, 763, 769, 775, 781, 781, 793, - 794, 795, 800, 801, 802, 803, 804, 805, 806, 809, - 809, 818, 818, 829, 829, 837, 838, 841, 841, 849, - 851, 855, 862, 862, 875, 875, 886, 887, 888, 893, - 895, 895, 914, 914, 927, 927, 938, 939, 942, 943, - 944, 949, 949, 959, 960, 961, 966, 967, 968, 969, - 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, - 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, - 990, 991, 994, 994, 1002, 1003, 1004, 1005, 1008, 1008, - 1017, 1017, 1026, 1026, 1035, 1041, 1041, 1050, 1056, 1062, - 1068, 1074, 1080, 1086, 1092, 1092, 1101, 1101, 1110, 1110, - 1119, 1119, 1128, 1134, 1140, 1140, 1148, 1149, 1150, 1153, - 1159, 1159, 1168, 1168, 1177, 1177, 1186, 1186, 1195, 1195, - 1206, 1207, 1208, 1213, 1214, 1215, 1216, 1217, 1220, 1225, - 1230, 1235, 1240, 1247, 1247, 1260, 1261, 1262, 1267, 1268, - 1269, 1270, 1271, 1272, 1275, 1281, 1287, 1293, 1293, 1304, - 1305, 1308, 1309, 1310, 1315, 1315, 1325, 1325, 1335, 1336, - 1337, 1340, 1343, 1344, 1347, 1347, 1356, 1356, 1365, 1365, - 1377, 1378, 1379, 1384, 1385, 1386, 1387, 1388, 1389, 1392, - 1398, 1404, 1410, 1416, 1422, 1431, 1431, 1445, 1446, 1449, - 1450, 1451, 1460, 1460, 1486, 1486, 1497, 1498, 1499, 1505, - 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, - 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, - 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, - 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, - 1546, 1547, 1548, 1549, 1552, 1552, 1561, 1561, 1570, 1570, - 1579, 1579, 1588, 1588, 1597, 1597, 1606, 1606, 1617, 1623, - 1629, 1635, 1635, 1643, 1644, 1645, 1646, 1649, 1657, 1657, - 1669, 1670, 1674, 1675, 1676, 1681, 1681, 1689, 1690, 1691, - 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, - 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, - 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, - 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, - 1742, 1742, 1756, 1756, 1765, 1766, 1769, 1770, 1771, 1778, - 1778, 1793, 1793, 1807, 1808, 1811, 1812, 1813, 1818, 1819, - 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1830, 1832, - 1838, 1840, 1840, 1849, 1849, 1858, 1858, 1867, 1869, 1869, - 1878, 1888, 1888, 1901, 1902, 1907, 1908, 1909, 1916, 1916, - 1928, 1928, 1940, 1941, 1946, 1947, 1948, 1955, 1956, 1957, - 1958, 1959, 1960, 1961, 1962, 1963, 1966, 1968, 1968, 1977, - 1979, 1981, 1987, 1996, 1996, 2009, 2010, 2013, 2014, 2015, - 2020, 2020, 2030, 2030, 2040, 2041, 2042, 2047, 2048, 2049, - 2050, 2051, 2052, 2053, 2056, 2056, 2065, 2065, 2090, 2090, - 2120, 2120, 2131, 2132, 2135, 2136, 2137, 2142, 2142, 2151, - 2151, 2160, 2161, 2164, 2165, 2166, 2172, 2173, 2174, 2175, - 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, - 2186, 2189, 2189, 2198, 2198, 2207, 2207, 2216, 2216, 2225, - 2225, 2236, 2236, 2245, 2245, 2254, 2254, 2263, 2263, 2272, - 2272, 2281, 2281, 2290, 2290, 2304, 2304, 2315, 2316, 2322, - 2322, 2333, 2334, 2335, 2340, 2340, 2350, 2351, 2354, 2355, - 2356, 2361, 2362, 2363, 2364, 2365, 2366, 2367, 2368, 2369, - 2370, 2371, 2372, 2373, 2374, 2377, 2379, 2379, 2388, 2396, - 2404, 2404, 2415, 2416, 2417, 2422, 2423, 2424, 2425, 2426, - 2429, 2429, 2438, 2438, 2450, 2450, 2463, 2464, 2465, 2470, - 2471, 2472, 2473, 2474, 2475, 2478, 2484, 2484, 2493, 2499, - 2499, 2509, 2509, 2522, 2522, 2532, 2533, 2534, 2539, 2540, - 2541, 2542, 2543, 2544, 2545, 2546, 2547, 2548, 2549, 2550, - 2551, 2552, 2553, 2554, 2555, 2556, 2559, 2565, 2565, 2574, - 2580, 2580, 2589, 2595, 2601, 2601, 2610, 2611, 2614, 2614, - 2624, 2624, 2634, 2641, 2648, 2648, 2657, 2657, 2667, 2667, - 2677, 2677, 2689, 2689, 2701, 2701, 2711, 2712, 2713, 2719, - 2720, 2723, 2723, 2734, 2742, 2742, 2755, 2756, 2757, 2763, - 2763, 2771, 2772, 2773, 2778, 2779, 2780, 2781, 2782, 2783, - 2784, 2787, 2793, 2793, 2802, 2802, 2813, 2814, 2815, 2820, - 2820, 2828, 2829, 2830, 2835, 2836, 2837, 2838, 2839, 2842, - 2842, 2851, 2857, 2863, 2869, 2869, 2878, 2878, 2889, 2890, - 2891, 2896, 2897, 2900 + 0, 292, 292, 292, 293, 293, 294, 294, 295, 295, + 296, 296, 297, 297, 298, 298, 299, 299, 300, 300, + 301, 301, 302, 302, 303, 303, 304, 304, 312, 313, + 314, 315, 316, 317, 318, 321, 326, 326, 337, 340, + 341, 344, 349, 355, 360, 360, 367, 368, 371, 375, + 379, 385, 385, 392, 393, 396, 400, 404, 414, 423, + 423, 438, 438, 452, 455, 461, 461, 470, 471, 472, + 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 541, 542, 545, 551, 557, 563, 569, 575, + 581, 587, 593, 599, 605, 611, 611, 620, 626, 632, + 638, 644, 650, 656, 662, 662, 671, 674, 677, 680, + 683, 689, 689, 698, 698, 707, 713, 719, 719, 728, + 728, 737, 743, 749, 755, 761, 767, 773, 773, 785, + 786, 787, 792, 793, 794, 795, 796, 797, 798, 801, + 801, 810, 810, 821, 821, 829, 830, 833, 833, 841, + 843, 847, 854, 854, 867, 867, 878, 879, 880, 885, + 887, 887, 906, 906, 919, 919, 930, 931, 934, 935, + 936, 941, 941, 951, 952, 953, 958, 959, 960, 961, + 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, + 972, 973, 974, 975, 976, 979, 979, 987, 988, 989, + 992, 992, 1001, 1001, 1010, 1010, 1019, 1025, 1025, 1034, + 1040, 1046, 1052, 1058, 1064, 1070, 1070, 1078, 1079, 1080, + 1083, 1089, 1089, 1098, 1098, 1107, 1107, 1116, 1116, 1125, + 1125, 1136, 1137, 1138, 1143, 1144, 1145, 1146, 1147, 1150, + 1155, 1160, 1165, 1170, 1177, 1177, 1190, 1191, 1192, 1197, + 1198, 1199, 1200, 1201, 1202, 1205, 1211, 1217, 1223, 1223, + 1234, 1235, 1238, 1239, 1240, 1245, 1245, 1255, 1255, 1265, + 1266, 1267, 1270, 1273, 1274, 1277, 1277, 1286, 1286, 1295, + 1295, 1307, 1308, 1309, 1314, 1315, 1316, 1317, 1318, 1319, + 1322, 1328, 1334, 1340, 1346, 1352, 1361, 1361, 1375, 1376, + 1379, 1380, 1381, 1390, 1390, 1416, 1416, 1427, 1428, 1429, + 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, 1473, 1474, + 1475, 1476, 1477, 1478, 1479, 1482, 1482, 1491, 1491, 1500, + 1500, 1509, 1509, 1518, 1518, 1527, 1527, 1536, 1536, 1547, + 1553, 1559, 1565, 1565, 1573, 1574, 1575, 1576, 1579, 1587, + 1587, 1599, 1600, 1604, 1605, 1606, 1611, 1611, 1619, 1620, + 1621, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, + 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, + 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, + 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, + 1665, 1672, 1672, 1686, 1686, 1695, 1696, 1699, 1700, 1701, + 1708, 1708, 1723, 1723, 1737, 1738, 1741, 1742, 1743, 1748, + 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1760, + 1762, 1768, 1770, 1770, 1779, 1779, 1788, 1788, 1797, 1799, + 1799, 1808, 1818, 1818, 1831, 1832, 1837, 1838, 1839, 1846, + 1846, 1858, 1858, 1870, 1871, 1876, 1877, 1878, 1885, 1886, + 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1896, 1898, 1898, + 1907, 1909, 1911, 1917, 1926, 1926, 1939, 1940, 1943, 1944, + 1945, 1950, 1950, 1960, 1960, 1970, 1971, 1972, 1977, 1978, + 1979, 1980, 1981, 1982, 1983, 1986, 1986, 1995, 1995, 2020, + 2020, 2050, 2050, 2061, 2062, 2065, 2066, 2067, 2072, 2072, + 2081, 2081, 2090, 2091, 2094, 2095, 2096, 2102, 2103, 2104, + 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114, + 2115, 2116, 2119, 2119, 2128, 2128, 2137, 2137, 2146, 2146, + 2155, 2155, 2166, 2166, 2175, 2175, 2184, 2184, 2193, 2193, + 2202, 2202, 2211, 2211, 2220, 2220, 2234, 2234, 2245, 2246, + 2252, 2252, 2263, 2264, 2265, 2270, 2270, 2280, 2281, 2284, + 2285, 2286, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, + 2299, 2300, 2301, 2302, 2303, 2304, 2307, 2309, 2309, 2318, + 2326, 2334, 2334, 2345, 2346, 2347, 2352, 2353, 2354, 2355, + 2356, 2359, 2359, 2368, 2368, 2380, 2380, 2393, 2394, 2395, + 2400, 2401, 2402, 2403, 2404, 2405, 2408, 2414, 2414, 2423, + 2429, 2429, 2439, 2439, 2452, 2452, 2462, 2463, 2464, 2469, + 2470, 2471, 2472, 2473, 2474, 2475, 2476, 2477, 2478, 2479, + 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2489, 2495, 2495, + 2504, 2510, 2510, 2519, 2525, 2531, 2531, 2540, 2541, 2544, + 2544, 2554, 2554, 2564, 2571, 2578, 2578, 2587, 2587, 2597, + 2597, 2607, 2607, 2619, 2619, 2631, 2631, 2641, 2642, 2643, + 2649, 2650, 2653, 2653, 2664, 2672, 2672, 2685, 2686, 2687, + 2693, 2693, 2701, 2702, 2703, 2708, 2709, 2710, 2711, 2712, + 2713, 2714, 2717, 2723, 2723, 2732, 2732, 2743, 2744, 2745, + 2750, 2750, 2758, 2759, 2760, 2765, 2766, 2767, 2768, 2769, + 2772, 2772, 2781, 2787, 2793, 2799, 2799, 2808, 2808, 2819, + 2820, 2821, 2826, 2827, 2830 }; + // Print the state stack on the debug stream. void - Dhcp4Parser::yy_stack_print_ () const + Dhcp4Parser::yystack_print_ () { *yycdebug_ << "Stack now"; for (stack_type::const_iterator @@ -6217,8 +6059,9 @@ namespace isc { namespace dhcp { *yycdebug_ << '\n'; } + // Report on the debug stream that the rule \a yyrule is going to be reduced. void - Dhcp4Parser::yy_reduce_print_ (int yyrule) const + Dhcp4Parser::yy_reduce_print_ (int yyrule) { int yylno = yyrline_[yyrule]; int yynrhs = yyr2_[yyrule]; @@ -6235,9 +6078,9 @@ namespace isc { namespace dhcp { #line 14 "dhcp4_parser.yy" } } // isc::dhcp -#line 6239 "dhcp4_parser.cc" +#line 6082 "dhcp4_parser.cc" -#line 2906 "dhcp4_parser.yy" +#line 2836 "dhcp4_parser.yy" void diff --git a/src/bin/dhcp4/dhcp4_parser.h b/src/bin/dhcp4/dhcp4_parser.h index 4b69d7801d..7ea2fb0713 100644 --- a/src/bin/dhcp4/dhcp4_parser.h +++ b/src/bin/dhcp4/dhcp4_parser.h @@ -1,8 +1,8 @@ -// A Bison parser, made by GNU Bison 3.8.2. +// A Bison parser, made by GNU Bison 3.5.1. // Skeleton interface for Bison LALR(1) parsers in C++ -// Copyright (C) 2002-2015, 2018-2021 Free Software Foundation, Inc. +// Copyright (C) 2002-2015, 2018-2020 Free Software Foundation, Inc. // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ // GNU General Public License for more details. // You should have received a copy of the GNU General Public License -// along with this program. If not, see . +// along with this program. If not, see . // As a special exception, you may create a larger work that contains // part or all of the Bison parser skeleton and distribute that work @@ -38,9 +38,8 @@ // C++ LALR(1) parser skeleton written by Akim Demaille. -// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, -// especially those whose name start with YY_ or yy_. They are -// private implementation details that can be changed or removed. +// Undocumented macros, especially those whose name start with YY_, +// are private implementation details. Do not rely on them. #ifndef YY_PARSER4_DHCP4_PARSER_H_INCLUDED # define YY_PARSER4_DHCP4_PARSER_H_INCLUDED @@ -57,7 +56,7 @@ using namespace isc::dhcp; using namespace isc::data; using namespace std; -#line 61 "dhcp4_parser.h" +#line 60 "dhcp4_parser.h" # include # include // std::abort @@ -104,9 +103,9 @@ using namespace std; #endif # include "location.hh" #include -#ifndef PARSER4__ASSERT +#ifndef YY_ASSERT # include -# define PARSER4__ASSERT assert +# define YY_ASSERT assert #endif @@ -128,23 +127,17 @@ using namespace std; /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ -# define YY_USE(E) ((void) (E)) +# define YYUSE(E) ((void) (E)) #else -# define YY_USE(E) /* empty */ +# define YYUSE(E) /* empty */ #endif +#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ -#if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__ -# if __GNUC__ * 100 + __GNUC_MINOR__ < 407 -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") -# else -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# endif # define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else @@ -206,7 +199,7 @@ using namespace std; #line 14 "dhcp4_parser.yy" namespace isc { namespace dhcp { -#line 210 "dhcp4_parser.h" +#line 203 "dhcp4_parser.h" @@ -215,49 +208,37 @@ namespace isc { namespace dhcp { class Dhcp4Parser { public: -#ifdef PARSER4_STYPE -# ifdef __GNUC__ -# pragma GCC message "bison: do not #define PARSER4_STYPE in C++, use %define api.value.type" -# endif - typedef PARSER4_STYPE value_type; -#else +#ifndef PARSER4_STYPE /// A buffer to store and retrieve objects. /// /// Sort of a variant, but does not keep track of the nature /// of the stored data, since that knowledge is available /// via the current parser state. - class value_type + class semantic_type { public: /// Type of *this. - typedef value_type self_type; + typedef semantic_type self_type; /// Empty construction. - value_type () YY_NOEXCEPT - : yyraw_ () + semantic_type () YY_NOEXCEPT + : yybuffer_ () , yytypeid_ (YY_NULLPTR) {} /// Construct and fill. template - value_type (YY_RVREF (T) t) + semantic_type (YY_RVREF (T) t) : yytypeid_ (&typeid (T)) { - PARSER4__ASSERT (sizeof (T) <= size); + YY_ASSERT (sizeof (T) <= size); new (yyas_ ()) T (YY_MOVE (t)); } -#if 201103L <= YY_CPLUSPLUS - /// Non copyable. - value_type (const self_type&) = delete; - /// Non copyable. - self_type& operator= (const self_type&) = delete; -#endif - /// Destruction, allowed only if empty. - ~value_type () YY_NOEXCEPT + ~semantic_type () YY_NOEXCEPT { - PARSER4__ASSERT (!yytypeid_); + YY_ASSERT (!yytypeid_); } # if 201103L <= YY_CPLUSPLUS @@ -266,8 +247,8 @@ namespace isc { namespace dhcp { T& emplace (U&&... u) { - PARSER4__ASSERT (!yytypeid_); - PARSER4__ASSERT (sizeof (T) <= size); + YY_ASSERT (!yytypeid_); + YY_ASSERT (sizeof (T) <= size); yytypeid_ = & typeid (T); return *new (yyas_ ()) T (std::forward (u)...); } @@ -277,8 +258,8 @@ namespace isc { namespace dhcp { T& emplace () { - PARSER4__ASSERT (!yytypeid_); - PARSER4__ASSERT (sizeof (T) <= size); + YY_ASSERT (!yytypeid_); + YY_ASSERT (sizeof (T) <= size); yytypeid_ = & typeid (T); return *new (yyas_ ()) T (); } @@ -288,8 +269,8 @@ namespace isc { namespace dhcp { T& emplace (const T& t) { - PARSER4__ASSERT (!yytypeid_); - PARSER4__ASSERT (sizeof (T) <= size); + YY_ASSERT (!yytypeid_); + YY_ASSERT (sizeof (T) <= size); yytypeid_ = & typeid (T); return *new (yyas_ ()) T (t); } @@ -318,9 +299,9 @@ namespace isc { namespace dhcp { T& as () YY_NOEXCEPT { - PARSER4__ASSERT (yytypeid_); - PARSER4__ASSERT (*yytypeid_ == typeid (T)); - PARSER4__ASSERT (sizeof (T) <= size); + YY_ASSERT (yytypeid_); + YY_ASSERT (*yytypeid_ == typeid (T)); + YY_ASSERT (sizeof (T) <= size); return *yyas_ (); } @@ -329,9 +310,9 @@ namespace isc { namespace dhcp { const T& as () const YY_NOEXCEPT { - PARSER4__ASSERT (yytypeid_); - PARSER4__ASSERT (*yytypeid_ == typeid (T)); - PARSER4__ASSERT (sizeof (T) <= size); + YY_ASSERT (yytypeid_); + YY_ASSERT (*yytypeid_ == typeid (T)); + YY_ASSERT (sizeof (T) <= size); return *yyas_ (); } @@ -347,8 +328,8 @@ namespace isc { namespace dhcp { void swap (self_type& that) YY_NOEXCEPT { - PARSER4__ASSERT (yytypeid_); - PARSER4__ASSERT (*yytypeid_ == *that.yytypeid_); + YY_ASSERT (yytypeid_); + YY_ASSERT (*yytypeid_ == *that.yytypeid_); std::swap (as (), that.as ()); } @@ -397,19 +378,16 @@ namespace isc { namespace dhcp { } private: -#if YY_CPLUSPLUS < 201103L - /// Non copyable. - value_type (const self_type&); - /// Non copyable. + /// Prohibit blind copies. self_type& operator= (const self_type&); -#endif + semantic_type (const self_type&); /// Accessor to raw memory as \a T. template T* yyas_ () YY_NOEXCEPT { - void *yyp = yyraw_; + void *yyp = yybuffer_.yyraw; return static_cast (yyp); } @@ -418,7 +396,7 @@ namespace isc { namespace dhcp { const T* yyas_ () const YY_NOEXCEPT { - const void *yyp = yyraw_; + const void *yyp = yybuffer_.yyraw; return static_cast (yyp); } @@ -456,19 +434,18 @@ namespace isc { namespace dhcp { union { /// Strongest alignment constraints. - long double yyalign_me_; + long double yyalign_me; /// A buffer large enough to store any of the semantic values. - char yyraw_[size]; - }; + char yyraw[size]; + } yybuffer_; /// Whether the content is built: if defined, the name of the stored type. const std::type_info *yytypeid_; }; +#else + typedef PARSER4_STYPE semantic_type; #endif - /// Backward compatibility (Bison 3.8). - typedef value_type semantic_type; - /// Symbol locations. typedef location location_type; @@ -490,895 +467,231 @@ namespace isc { namespace dhcp { location_type location; }; - /// Token kinds. + /// Tokens. struct token { - enum token_kind_type + enum yytokentype { - TOKEN_PARSER4_EMPTY = -2, - TOKEN_END = 0, // "end of file" - TOKEN_PARSER4_error = 256, // error - TOKEN_PARSER4_UNDEF = 257, // "invalid token" - TOKEN_COMMA = 258, // "," - TOKEN_COLON = 259, // ":" - TOKEN_LSQUARE_BRACKET = 260, // "[" - TOKEN_RSQUARE_BRACKET = 261, // "]" - TOKEN_LCURLY_BRACKET = 262, // "{" - TOKEN_RCURLY_BRACKET = 263, // "}" - TOKEN_NULL_TYPE = 264, // "null" - TOKEN_DHCP4 = 265, // "Dhcp4" - TOKEN_CONFIG_CONTROL = 266, // "config-control" - TOKEN_CONFIG_DATABASES = 267, // "config-databases" - TOKEN_CONFIG_FETCH_WAIT_TIME = 268, // "config-fetch-wait-time" - TOKEN_INTERFACES_CONFIG = 269, // "interfaces-config" - TOKEN_INTERFACES = 270, // "interfaces" - TOKEN_DHCP_SOCKET_TYPE = 271, // "dhcp-socket-type" - TOKEN_RAW = 272, // "raw" - TOKEN_UDP = 273, // "udp" - TOKEN_OUTBOUND_INTERFACE = 274, // "outbound-interface" - TOKEN_SAME_AS_INBOUND = 275, // "same-as-inbound" - TOKEN_USE_ROUTING = 276, // "use-routing" - TOKEN_RE_DETECT = 277, // "re-detect" - TOKEN_SANITY_CHECKS = 278, // "sanity-checks" - TOKEN_LEASE_CHECKS = 279, // "lease-checks" - TOKEN_ECHO_CLIENT_ID = 280, // "echo-client-id" - TOKEN_MATCH_CLIENT_ID = 281, // "match-client-id" - TOKEN_AUTHORITATIVE = 282, // "authoritative" - TOKEN_NEXT_SERVER = 283, // "next-server" - TOKEN_SERVER_HOSTNAME = 284, // "server-hostname" - TOKEN_BOOT_FILE_NAME = 285, // "boot-file-name" - TOKEN_LEASE_DATABASE = 286, // "lease-database" - TOKEN_HOSTS_DATABASE = 287, // "hosts-database" - TOKEN_HOSTS_DATABASES = 288, // "hosts-databases" - TOKEN_TYPE = 289, // "type" - TOKEN_MEMFILE = 290, // "memfile" - TOKEN_MYSQL = 291, // "mysql" - TOKEN_POSTGRESQL = 292, // "postgresql" - TOKEN_CQL = 293, // "cql" - TOKEN_USER = 294, // "user" - TOKEN_PASSWORD = 295, // "password" - TOKEN_HOST = 296, // "host" - TOKEN_PORT = 297, // "port" - TOKEN_PERSIST = 298, // "persist" - TOKEN_LFC_INTERVAL = 299, // "lfc-interval" - TOKEN_READONLY = 300, // "readonly" - TOKEN_CONNECT_TIMEOUT = 301, // "connect-timeout" - TOKEN_CONTACT_POINTS = 302, // "contact-points" - TOKEN_KEYSPACE = 303, // "keyspace" - TOKEN_CONSISTENCY = 304, // "consistency" - TOKEN_SERIAL_CONSISTENCY = 305, // "serial-consistency" - TOKEN_MAX_RECONNECT_TRIES = 306, // "max-reconnect-tries" - TOKEN_RECONNECT_WAIT_TIME = 307, // "reconnect-wait-time" - TOKEN_ON_FAIL = 308, // "on-fail" - TOKEN_STOP_RETRY_EXIT = 309, // "stop-retry-exit" - TOKEN_SERVE_RETRY_EXIT = 310, // "serve-retry-exit" - TOKEN_SERVE_RETRY_CONTINUE = 311, // "serve-retry-continue" - TOKEN_REQUEST_TIMEOUT = 312, // "request-timeout" - TOKEN_TCP_KEEPALIVE = 313, // "tcp-keepalive" - TOKEN_TCP_NODELAY = 314, // "tcp-nodelay" - TOKEN_MAX_ROW_ERRORS = 315, // "max-row-errors" - TOKEN_TRUST_ANCHOR = 316, // "trust-anchor" - TOKEN_CERT_FILE = 317, // "cert-file" - TOKEN_KEY_FILE = 318, // "key-file" - TOKEN_CIPHER_LIST = 319, // "cipher-list" - TOKEN_VALID_LIFETIME = 320, // "valid-lifetime" - TOKEN_MIN_VALID_LIFETIME = 321, // "min-valid-lifetime" - TOKEN_MAX_VALID_LIFETIME = 322, // "max-valid-lifetime" - TOKEN_RENEW_TIMER = 323, // "renew-timer" - TOKEN_REBIND_TIMER = 324, // "rebind-timer" - TOKEN_CALCULATE_TEE_TIMES = 325, // "calculate-tee-times" - TOKEN_T1_PERCENT = 326, // "t1-percent" - TOKEN_T2_PERCENT = 327, // "t2-percent" - TOKEN_CACHE_THRESHOLD = 328, // "cache-threshold" - TOKEN_CACHE_MAX_AGE = 329, // "cache-max-age" - TOKEN_DECLINE_PROBATION_PERIOD = 330, // "decline-probation-period" - TOKEN_SERVER_TAG = 331, // "server-tag" - TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT = 332, // "statistic-default-sample-count" - TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE = 333, // "statistic-default-sample-age" - TOKEN_DDNS_SEND_UPDATES = 334, // "ddns-send-updates" - TOKEN_DDNS_OVERRIDE_NO_UPDATE = 335, // "ddns-override-no-update" - TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE = 336, // "ddns-override-client-update" - TOKEN_DDNS_REPLACE_CLIENT_NAME = 337, // "ddns-replace-client-name" - TOKEN_DDNS_GENERATED_PREFIX = 338, // "ddns-generated-prefix" - TOKEN_DDNS_QUALIFYING_SUFFIX = 339, // "ddns-qualifying-suffix" - TOKEN_DDNS_UPDATE_ON_RENEW = 340, // "ddns-update-on-renew" - TOKEN_DDNS_USE_CONFLICT_RESOLUTION = 341, // "ddns-use-conflict-resolution" - TOKEN_STORE_EXTENDED_INFO = 342, // "store-extended-info" - TOKEN_SUBNET4 = 343, // "subnet4" - TOKEN_SUBNET_4O6_INTERFACE = 344, // "4o6-interface" - TOKEN_SUBNET_4O6_INTERFACE_ID = 345, // "4o6-interface-id" - TOKEN_SUBNET_4O6_SUBNET = 346, // "4o6-subnet" - TOKEN_OPTION_DEF = 347, // "option-def" - TOKEN_OPTION_DATA = 348, // "option-data" - TOKEN_NAME = 349, // "name" - TOKEN_DATA = 350, // "data" - TOKEN_CODE = 351, // "code" - TOKEN_SPACE = 352, // "space" - TOKEN_CSV_FORMAT = 353, // "csv-format" - TOKEN_ALWAYS_SEND = 354, // "always-send" - TOKEN_RECORD_TYPES = 355, // "record-types" - TOKEN_ENCAPSULATE = 356, // "encapsulate" - TOKEN_ARRAY = 357, // "array" - TOKEN_PARKED_PACKET_LIMIT = 358, // "parked-packet-limit" - TOKEN_SHARED_NETWORKS = 359, // "shared-networks" - TOKEN_POOLS = 360, // "pools" - TOKEN_POOL = 361, // "pool" - TOKEN_USER_CONTEXT = 362, // "user-context" - TOKEN_COMMENT = 363, // "comment" - TOKEN_SUBNET = 364, // "subnet" - TOKEN_INTERFACE = 365, // "interface" - TOKEN_ID = 366, // "id" - TOKEN_RESERVATION_MODE = 367, // "reservation-mode" - TOKEN_DISABLED = 368, // "disabled" - TOKEN_OUT_OF_POOL = 369, // "out-of-pool" - TOKEN_GLOBAL = 370, // "global" - TOKEN_ALL = 371, // "all" - TOKEN_RESERVATIONS_GLOBAL = 372, // "reservations-global" - TOKEN_RESERVATIONS_IN_SUBNET = 373, // "reservations-in-subnet" - TOKEN_RESERVATIONS_OUT_OF_POOL = 374, // "reservations-out-of-pool" - TOKEN_HOST_RESERVATION_IDENTIFIERS = 375, // "host-reservation-identifiers" - TOKEN_CLIENT_CLASSES = 376, // "client-classes" - TOKEN_REQUIRE_CLIENT_CLASSES = 377, // "require-client-classes" - TOKEN_TEST = 378, // "test" - TOKEN_ONLY_IF_REQUIRED = 379, // "only-if-required" - TOKEN_CLIENT_CLASS = 380, // "client-class" - TOKEN_RESERVATIONS = 381, // "reservations" - TOKEN_DUID = 382, // "duid" - TOKEN_HW_ADDRESS = 383, // "hw-address" - TOKEN_CIRCUIT_ID = 384, // "circuit-id" - TOKEN_CLIENT_ID = 385, // "client-id" - TOKEN_HOSTNAME = 386, // "hostname" - TOKEN_FLEX_ID = 387, // "flex-id" - TOKEN_RELAY = 388, // "relay" - TOKEN_IP_ADDRESS = 389, // "ip-address" - TOKEN_IP_ADDRESSES = 390, // "ip-addresses" - TOKEN_HOOKS_LIBRARIES = 391, // "hooks-libraries" - TOKEN_LIBRARY = 392, // "library" - TOKEN_PARAMETERS = 393, // "parameters" - TOKEN_EXPIRED_LEASES_PROCESSING = 394, // "expired-leases-processing" - TOKEN_RECLAIM_TIMER_WAIT_TIME = 395, // "reclaim-timer-wait-time" - TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 396, // "flush-reclaimed-timer-wait-time" - TOKEN_HOLD_RECLAIMED_TIME = 397, // "hold-reclaimed-time" - TOKEN_MAX_RECLAIM_LEASES = 398, // "max-reclaim-leases" - TOKEN_MAX_RECLAIM_TIME = 399, // "max-reclaim-time" - TOKEN_UNWARNED_RECLAIM_CYCLES = 400, // "unwarned-reclaim-cycles" - TOKEN_DHCP4O6_PORT = 401, // "dhcp4o6-port" - TOKEN_DHCP_MULTI_THREADING = 402, // "multi-threading" - TOKEN_ENABLE_MULTI_THREADING = 403, // "enable-multi-threading" - TOKEN_THREAD_POOL_SIZE = 404, // "thread-pool-size" - TOKEN_PACKET_QUEUE_SIZE = 405, // "packet-queue-size" - TOKEN_CONTROL_SOCKET = 406, // "control-socket" - TOKEN_SOCKET_TYPE = 407, // "socket-type" - TOKEN_SOCKET_NAME = 408, // "socket-name" - TOKEN_DHCP_QUEUE_CONTROL = 409, // "dhcp-queue-control" - TOKEN_ENABLE_QUEUE = 410, // "enable-queue" - TOKEN_QUEUE_TYPE = 411, // "queue-type" - TOKEN_CAPACITY = 412, // "capacity" - TOKEN_DHCP_DDNS = 413, // "dhcp-ddns" - TOKEN_ENABLE_UPDATES = 414, // "enable-updates" - TOKEN_QUALIFYING_SUFFIX = 415, // "qualifying-suffix" - TOKEN_SERVER_IP = 416, // "server-ip" - TOKEN_SERVER_PORT = 417, // "server-port" - TOKEN_SENDER_IP = 418, // "sender-ip" - TOKEN_SENDER_PORT = 419, // "sender-port" - TOKEN_MAX_QUEUE_SIZE = 420, // "max-queue-size" - TOKEN_NCR_PROTOCOL = 421, // "ncr-protocol" - TOKEN_NCR_FORMAT = 422, // "ncr-format" - TOKEN_OVERRIDE_NO_UPDATE = 423, // "override-no-update" - TOKEN_OVERRIDE_CLIENT_UPDATE = 424, // "override-client-update" - TOKEN_REPLACE_CLIENT_NAME = 425, // "replace-client-name" - TOKEN_GENERATED_PREFIX = 426, // "generated-prefix" - TOKEN_TCP = 427, // "tcp" - TOKEN_JSON = 428, // "JSON" - TOKEN_WHEN_PRESENT = 429, // "when-present" - TOKEN_NEVER = 430, // "never" - TOKEN_ALWAYS = 431, // "always" - TOKEN_WHEN_NOT_PRESENT = 432, // "when-not-present" - TOKEN_HOSTNAME_CHAR_SET = 433, // "hostname-char-set" - TOKEN_HOSTNAME_CHAR_REPLACEMENT = 434, // "hostname-char-replacement" - TOKEN_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 435, // "early-global-reservations-lookup" - TOKEN_IP_RESERVATIONS_UNIQUE = 436, // "ip-reservations-unique" - TOKEN_RESERVATIONS_LOOKUP_FIRST = 437, // "reservations-lookup-first" - TOKEN_LOGGERS = 438, // "loggers" - TOKEN_OUTPUT_OPTIONS = 439, // "output_options" - TOKEN_OUTPUT = 440, // "output" - TOKEN_DEBUGLEVEL = 441, // "debuglevel" - TOKEN_SEVERITY = 442, // "severity" - TOKEN_FLUSH = 443, // "flush" - TOKEN_MAXSIZE = 444, // "maxsize" - TOKEN_MAXVER = 445, // "maxver" - TOKEN_PATTERN = 446, // "pattern" - TOKEN_COMPATIBILITY = 447, // "compatibility" - TOKEN_LENIENT_OPTION_PARSING = 448, // "lenient-option-parsing" - TOKEN_TOPLEVEL_JSON = 449, // TOPLEVEL_JSON - TOKEN_TOPLEVEL_DHCP4 = 450, // TOPLEVEL_DHCP4 - TOKEN_SUB_DHCP4 = 451, // SUB_DHCP4 - TOKEN_SUB_INTERFACES4 = 452, // SUB_INTERFACES4 - TOKEN_SUB_SUBNET4 = 453, // SUB_SUBNET4 - TOKEN_SUB_POOL4 = 454, // SUB_POOL4 - TOKEN_SUB_RESERVATION = 455, // SUB_RESERVATION - TOKEN_SUB_OPTION_DEFS = 456, // SUB_OPTION_DEFS - TOKEN_SUB_OPTION_DEF = 457, // SUB_OPTION_DEF - TOKEN_SUB_OPTION_DATA = 458, // SUB_OPTION_DATA - TOKEN_SUB_HOOKS_LIBRARY = 459, // SUB_HOOKS_LIBRARY - TOKEN_SUB_DHCP_DDNS = 460, // SUB_DHCP_DDNS - TOKEN_SUB_CONFIG_CONTROL = 461, // SUB_CONFIG_CONTROL - TOKEN_STRING = 462, // "constant string" - TOKEN_INTEGER = 463, // "integer" - TOKEN_FLOAT = 464, // "floating point" - TOKEN_BOOLEAN = 465 // "boolean" - }; - /// Backward compatibility alias (Bison 3.6). - typedef token_kind_type yytokentype; - }; - - /// Token kind, as returned by yylex. - typedef token::token_kind_type token_kind_type; - - /// Backward compatibility alias (Bison 3.6). - typedef token_kind_type token_type; - - /// Symbol kinds. - struct symbol_kind - { - enum symbol_kind_type - { - YYNTOKENS = 211, ///< Number of tokens. - S_YYEMPTY = -2, - S_YYEOF = 0, // "end of file" - S_YYerror = 1, // error - S_YYUNDEF = 2, // "invalid token" - S_COMMA = 3, // "," - S_COLON = 4, // ":" - S_LSQUARE_BRACKET = 5, // "[" - S_RSQUARE_BRACKET = 6, // "]" - S_LCURLY_BRACKET = 7, // "{" - S_RCURLY_BRACKET = 8, // "}" - S_NULL_TYPE = 9, // "null" - S_DHCP4 = 10, // "Dhcp4" - S_CONFIG_CONTROL = 11, // "config-control" - S_CONFIG_DATABASES = 12, // "config-databases" - S_CONFIG_FETCH_WAIT_TIME = 13, // "config-fetch-wait-time" - S_INTERFACES_CONFIG = 14, // "interfaces-config" - S_INTERFACES = 15, // "interfaces" - S_DHCP_SOCKET_TYPE = 16, // "dhcp-socket-type" - S_RAW = 17, // "raw" - S_UDP = 18, // "udp" - S_OUTBOUND_INTERFACE = 19, // "outbound-interface" - S_SAME_AS_INBOUND = 20, // "same-as-inbound" - S_USE_ROUTING = 21, // "use-routing" - S_RE_DETECT = 22, // "re-detect" - S_SANITY_CHECKS = 23, // "sanity-checks" - S_LEASE_CHECKS = 24, // "lease-checks" - S_ECHO_CLIENT_ID = 25, // "echo-client-id" - S_MATCH_CLIENT_ID = 26, // "match-client-id" - S_AUTHORITATIVE = 27, // "authoritative" - S_NEXT_SERVER = 28, // "next-server" - S_SERVER_HOSTNAME = 29, // "server-hostname" - S_BOOT_FILE_NAME = 30, // "boot-file-name" - S_LEASE_DATABASE = 31, // "lease-database" - S_HOSTS_DATABASE = 32, // "hosts-database" - S_HOSTS_DATABASES = 33, // "hosts-databases" - S_TYPE = 34, // "type" - S_MEMFILE = 35, // "memfile" - S_MYSQL = 36, // "mysql" - S_POSTGRESQL = 37, // "postgresql" - S_CQL = 38, // "cql" - S_USER = 39, // "user" - S_PASSWORD = 40, // "password" - S_HOST = 41, // "host" - S_PORT = 42, // "port" - S_PERSIST = 43, // "persist" - S_LFC_INTERVAL = 44, // "lfc-interval" - S_READONLY = 45, // "readonly" - S_CONNECT_TIMEOUT = 46, // "connect-timeout" - S_CONTACT_POINTS = 47, // "contact-points" - S_KEYSPACE = 48, // "keyspace" - S_CONSISTENCY = 49, // "consistency" - S_SERIAL_CONSISTENCY = 50, // "serial-consistency" - S_MAX_RECONNECT_TRIES = 51, // "max-reconnect-tries" - S_RECONNECT_WAIT_TIME = 52, // "reconnect-wait-time" - S_ON_FAIL = 53, // "on-fail" - S_STOP_RETRY_EXIT = 54, // "stop-retry-exit" - S_SERVE_RETRY_EXIT = 55, // "serve-retry-exit" - S_SERVE_RETRY_CONTINUE = 56, // "serve-retry-continue" - S_REQUEST_TIMEOUT = 57, // "request-timeout" - S_TCP_KEEPALIVE = 58, // "tcp-keepalive" - S_TCP_NODELAY = 59, // "tcp-nodelay" - S_MAX_ROW_ERRORS = 60, // "max-row-errors" - S_TRUST_ANCHOR = 61, // "trust-anchor" - S_CERT_FILE = 62, // "cert-file" - S_KEY_FILE = 63, // "key-file" - S_CIPHER_LIST = 64, // "cipher-list" - S_VALID_LIFETIME = 65, // "valid-lifetime" - S_MIN_VALID_LIFETIME = 66, // "min-valid-lifetime" - S_MAX_VALID_LIFETIME = 67, // "max-valid-lifetime" - S_RENEW_TIMER = 68, // "renew-timer" - S_REBIND_TIMER = 69, // "rebind-timer" - S_CALCULATE_TEE_TIMES = 70, // "calculate-tee-times" - S_T1_PERCENT = 71, // "t1-percent" - S_T2_PERCENT = 72, // "t2-percent" - S_CACHE_THRESHOLD = 73, // "cache-threshold" - S_CACHE_MAX_AGE = 74, // "cache-max-age" - S_DECLINE_PROBATION_PERIOD = 75, // "decline-probation-period" - S_SERVER_TAG = 76, // "server-tag" - S_STATISTIC_DEFAULT_SAMPLE_COUNT = 77, // "statistic-default-sample-count" - S_STATISTIC_DEFAULT_SAMPLE_AGE = 78, // "statistic-default-sample-age" - S_DDNS_SEND_UPDATES = 79, // "ddns-send-updates" - S_DDNS_OVERRIDE_NO_UPDATE = 80, // "ddns-override-no-update" - S_DDNS_OVERRIDE_CLIENT_UPDATE = 81, // "ddns-override-client-update" - S_DDNS_REPLACE_CLIENT_NAME = 82, // "ddns-replace-client-name" - S_DDNS_GENERATED_PREFIX = 83, // "ddns-generated-prefix" - S_DDNS_QUALIFYING_SUFFIX = 84, // "ddns-qualifying-suffix" - S_DDNS_UPDATE_ON_RENEW = 85, // "ddns-update-on-renew" - S_DDNS_USE_CONFLICT_RESOLUTION = 86, // "ddns-use-conflict-resolution" - S_STORE_EXTENDED_INFO = 87, // "store-extended-info" - S_SUBNET4 = 88, // "subnet4" - S_SUBNET_4O6_INTERFACE = 89, // "4o6-interface" - S_SUBNET_4O6_INTERFACE_ID = 90, // "4o6-interface-id" - S_SUBNET_4O6_SUBNET = 91, // "4o6-subnet" - S_OPTION_DEF = 92, // "option-def" - S_OPTION_DATA = 93, // "option-data" - S_NAME = 94, // "name" - S_DATA = 95, // "data" - S_CODE = 96, // "code" - S_SPACE = 97, // "space" - S_CSV_FORMAT = 98, // "csv-format" - S_ALWAYS_SEND = 99, // "always-send" - S_RECORD_TYPES = 100, // "record-types" - S_ENCAPSULATE = 101, // "encapsulate" - S_ARRAY = 102, // "array" - S_PARKED_PACKET_LIMIT = 103, // "parked-packet-limit" - S_SHARED_NETWORKS = 104, // "shared-networks" - S_POOLS = 105, // "pools" - S_POOL = 106, // "pool" - S_USER_CONTEXT = 107, // "user-context" - S_COMMENT = 108, // "comment" - S_SUBNET = 109, // "subnet" - S_INTERFACE = 110, // "interface" - S_ID = 111, // "id" - S_RESERVATION_MODE = 112, // "reservation-mode" - S_DISABLED = 113, // "disabled" - S_OUT_OF_POOL = 114, // "out-of-pool" - S_GLOBAL = 115, // "global" - S_ALL = 116, // "all" - S_RESERVATIONS_GLOBAL = 117, // "reservations-global" - S_RESERVATIONS_IN_SUBNET = 118, // "reservations-in-subnet" - S_RESERVATIONS_OUT_OF_POOL = 119, // "reservations-out-of-pool" - S_HOST_RESERVATION_IDENTIFIERS = 120, // "host-reservation-identifiers" - S_CLIENT_CLASSES = 121, // "client-classes" - S_REQUIRE_CLIENT_CLASSES = 122, // "require-client-classes" - S_TEST = 123, // "test" - S_ONLY_IF_REQUIRED = 124, // "only-if-required" - S_CLIENT_CLASS = 125, // "client-class" - S_RESERVATIONS = 126, // "reservations" - S_DUID = 127, // "duid" - S_HW_ADDRESS = 128, // "hw-address" - S_CIRCUIT_ID = 129, // "circuit-id" - S_CLIENT_ID = 130, // "client-id" - S_HOSTNAME = 131, // "hostname" - S_FLEX_ID = 132, // "flex-id" - S_RELAY = 133, // "relay" - S_IP_ADDRESS = 134, // "ip-address" - S_IP_ADDRESSES = 135, // "ip-addresses" - S_HOOKS_LIBRARIES = 136, // "hooks-libraries" - S_LIBRARY = 137, // "library" - S_PARAMETERS = 138, // "parameters" - S_EXPIRED_LEASES_PROCESSING = 139, // "expired-leases-processing" - S_RECLAIM_TIMER_WAIT_TIME = 140, // "reclaim-timer-wait-time" - S_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 141, // "flush-reclaimed-timer-wait-time" - S_HOLD_RECLAIMED_TIME = 142, // "hold-reclaimed-time" - S_MAX_RECLAIM_LEASES = 143, // "max-reclaim-leases" - S_MAX_RECLAIM_TIME = 144, // "max-reclaim-time" - S_UNWARNED_RECLAIM_CYCLES = 145, // "unwarned-reclaim-cycles" - S_DHCP4O6_PORT = 146, // "dhcp4o6-port" - S_DHCP_MULTI_THREADING = 147, // "multi-threading" - S_ENABLE_MULTI_THREADING = 148, // "enable-multi-threading" - S_THREAD_POOL_SIZE = 149, // "thread-pool-size" - S_PACKET_QUEUE_SIZE = 150, // "packet-queue-size" - S_CONTROL_SOCKET = 151, // "control-socket" - S_SOCKET_TYPE = 152, // "socket-type" - S_SOCKET_NAME = 153, // "socket-name" - S_DHCP_QUEUE_CONTROL = 154, // "dhcp-queue-control" - S_ENABLE_QUEUE = 155, // "enable-queue" - S_QUEUE_TYPE = 156, // "queue-type" - S_CAPACITY = 157, // "capacity" - S_DHCP_DDNS = 158, // "dhcp-ddns" - S_ENABLE_UPDATES = 159, // "enable-updates" - S_QUALIFYING_SUFFIX = 160, // "qualifying-suffix" - S_SERVER_IP = 161, // "server-ip" - S_SERVER_PORT = 162, // "server-port" - S_SENDER_IP = 163, // "sender-ip" - S_SENDER_PORT = 164, // "sender-port" - S_MAX_QUEUE_SIZE = 165, // "max-queue-size" - S_NCR_PROTOCOL = 166, // "ncr-protocol" - S_NCR_FORMAT = 167, // "ncr-format" - S_OVERRIDE_NO_UPDATE = 168, // "override-no-update" - S_OVERRIDE_CLIENT_UPDATE = 169, // "override-client-update" - S_REPLACE_CLIENT_NAME = 170, // "replace-client-name" - S_GENERATED_PREFIX = 171, // "generated-prefix" - S_TCP = 172, // "tcp" - S_JSON = 173, // "JSON" - S_WHEN_PRESENT = 174, // "when-present" - S_NEVER = 175, // "never" - S_ALWAYS = 176, // "always" - S_WHEN_NOT_PRESENT = 177, // "when-not-present" - S_HOSTNAME_CHAR_SET = 178, // "hostname-char-set" - S_HOSTNAME_CHAR_REPLACEMENT = 179, // "hostname-char-replacement" - S_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 180, // "early-global-reservations-lookup" - S_IP_RESERVATIONS_UNIQUE = 181, // "ip-reservations-unique" - S_RESERVATIONS_LOOKUP_FIRST = 182, // "reservations-lookup-first" - S_LOGGERS = 183, // "loggers" - S_OUTPUT_OPTIONS = 184, // "output_options" - S_OUTPUT = 185, // "output" - S_DEBUGLEVEL = 186, // "debuglevel" - S_SEVERITY = 187, // "severity" - S_FLUSH = 188, // "flush" - S_MAXSIZE = 189, // "maxsize" - S_MAXVER = 190, // "maxver" - S_PATTERN = 191, // "pattern" - S_COMPATIBILITY = 192, // "compatibility" - S_LENIENT_OPTION_PARSING = 193, // "lenient-option-parsing" - S_TOPLEVEL_JSON = 194, // TOPLEVEL_JSON - S_TOPLEVEL_DHCP4 = 195, // TOPLEVEL_DHCP4 - S_SUB_DHCP4 = 196, // SUB_DHCP4 - S_SUB_INTERFACES4 = 197, // SUB_INTERFACES4 - S_SUB_SUBNET4 = 198, // SUB_SUBNET4 - S_SUB_POOL4 = 199, // SUB_POOL4 - S_SUB_RESERVATION = 200, // SUB_RESERVATION - S_SUB_OPTION_DEFS = 201, // SUB_OPTION_DEFS - S_SUB_OPTION_DEF = 202, // SUB_OPTION_DEF - S_SUB_OPTION_DATA = 203, // SUB_OPTION_DATA - S_SUB_HOOKS_LIBRARY = 204, // SUB_HOOKS_LIBRARY - S_SUB_DHCP_DDNS = 205, // SUB_DHCP_DDNS - S_SUB_CONFIG_CONTROL = 206, // SUB_CONFIG_CONTROL - S_STRING = 207, // "constant string" - S_INTEGER = 208, // "integer" - S_FLOAT = 209, // "floating point" - S_BOOLEAN = 210, // "boolean" - S_YYACCEPT = 211, // $accept - S_start = 212, // start - S_213_1 = 213, // $@1 - S_214_2 = 214, // $@2 - S_215_3 = 215, // $@3 - S_216_4 = 216, // $@4 - S_217_5 = 217, // $@5 - S_218_6 = 218, // $@6 - S_219_7 = 219, // $@7 - S_220_8 = 220, // $@8 - S_221_9 = 221, // $@9 - S_222_10 = 222, // $@10 - S_223_11 = 223, // $@11 - S_224_12 = 224, // $@12 - S_225_13 = 225, // $@13 - S_value = 226, // value - S_sub_json = 227, // sub_json - S_map2 = 228, // map2 - S_229_14 = 229, // $@14 - S_map_value = 230, // map_value - S_map_content = 231, // map_content - S_not_empty_map = 232, // not_empty_map - S_list_generic = 233, // list_generic - S_234_15 = 234, // $@15 - S_list_content = 235, // list_content - S_not_empty_list = 236, // not_empty_list - S_list_strings = 237, // list_strings - S_238_16 = 238, // $@16 - S_list_strings_content = 239, // list_strings_content - S_not_empty_list_strings = 240, // not_empty_list_strings - S_unknown_map_entry = 241, // unknown_map_entry - S_syntax_map = 242, // syntax_map - S_243_17 = 243, // $@17 - S_global_object = 244, // global_object - S_245_18 = 245, // $@18 - S_global_object_comma = 246, // global_object_comma - S_sub_dhcp4 = 247, // sub_dhcp4 - S_248_19 = 248, // $@19 - S_global_params = 249, // global_params - S_global_param = 250, // global_param - S_valid_lifetime = 251, // valid_lifetime - S_min_valid_lifetime = 252, // min_valid_lifetime - S_max_valid_lifetime = 253, // max_valid_lifetime - S_renew_timer = 254, // renew_timer - S_rebind_timer = 255, // rebind_timer - S_calculate_tee_times = 256, // calculate_tee_times - S_t1_percent = 257, // t1_percent - S_t2_percent = 258, // t2_percent - S_cache_threshold = 259, // cache_threshold - S_cache_max_age = 260, // cache_max_age - S_decline_probation_period = 261, // decline_probation_period - S_server_tag = 262, // server_tag - S_263_20 = 263, // $@20 - S_parked_packet_limit = 264, // parked_packet_limit - S_echo_client_id = 265, // echo_client_id - S_match_client_id = 266, // match_client_id - S_authoritative = 267, // authoritative - S_ddns_send_updates = 268, // ddns_send_updates - S_ddns_override_no_update = 269, // ddns_override_no_update - S_ddns_override_client_update = 270, // ddns_override_client_update - S_ddns_replace_client_name = 271, // ddns_replace_client_name - S_272_21 = 272, // $@21 - S_ddns_replace_client_name_value = 273, // ddns_replace_client_name_value - S_ddns_generated_prefix = 274, // ddns_generated_prefix - S_275_22 = 275, // $@22 - S_ddns_qualifying_suffix = 276, // ddns_qualifying_suffix - S_277_23 = 277, // $@23 - S_ddns_update_on_renew = 278, // ddns_update_on_renew - S_ddns_use_conflict_resolution = 279, // ddns_use_conflict_resolution - S_hostname_char_set = 280, // hostname_char_set - S_281_24 = 281, // $@24 - S_hostname_char_replacement = 282, // hostname_char_replacement - S_283_25 = 283, // $@25 - S_store_extended_info = 284, // store_extended_info - S_statistic_default_sample_count = 285, // statistic_default_sample_count - S_statistic_default_sample_age = 286, // statistic_default_sample_age - S_early_global_reservations_lookup = 287, // early_global_reservations_lookup - S_ip_reservations_unique = 288, // ip_reservations_unique - S_reservations_lookup_first = 289, // reservations_lookup_first - S_interfaces_config = 290, // interfaces_config - S_291_26 = 291, // $@26 - S_interfaces_config_params = 292, // interfaces_config_params - S_interfaces_config_param = 293, // interfaces_config_param - S_sub_interfaces4 = 294, // sub_interfaces4 - S_295_27 = 295, // $@27 - S_interfaces_list = 296, // interfaces_list - S_297_28 = 297, // $@28 - S_dhcp_socket_type = 298, // dhcp_socket_type - S_299_29 = 299, // $@29 - S_socket_type = 300, // socket_type - S_outbound_interface = 301, // outbound_interface - S_302_30 = 302, // $@30 - S_outbound_interface_value = 303, // outbound_interface_value - S_re_detect = 304, // re_detect - S_lease_database = 305, // lease_database - S_306_31 = 306, // $@31 - S_sanity_checks = 307, // sanity_checks - S_308_32 = 308, // $@32 - S_sanity_checks_params = 309, // sanity_checks_params - S_sanity_checks_param = 310, // sanity_checks_param - S_lease_checks = 311, // lease_checks - S_312_33 = 312, // $@33 - S_hosts_database = 313, // hosts_database - S_314_34 = 314, // $@34 - S_hosts_databases = 315, // hosts_databases - S_316_35 = 316, // $@35 - S_database_list = 317, // database_list - S_not_empty_database_list = 318, // not_empty_database_list - S_database = 319, // database - S_320_36 = 320, // $@36 - S_database_map_params = 321, // database_map_params - S_database_map_param = 322, // database_map_param - S_database_type = 323, // database_type - S_324_37 = 324, // $@37 - S_db_type = 325, // db_type - S_user = 326, // user - S_327_38 = 327, // $@38 - S_password = 328, // password - S_329_39 = 329, // $@39 - S_host = 330, // host - S_331_40 = 331, // $@40 - S_port = 332, // port - S_name = 333, // name - S_334_41 = 334, // $@41 - S_persist = 335, // persist - S_lfc_interval = 336, // lfc_interval - S_readonly = 337, // readonly - S_connect_timeout = 338, // connect_timeout - S_request_timeout = 339, // request_timeout - S_tcp_keepalive = 340, // tcp_keepalive - S_tcp_nodelay = 341, // tcp_nodelay - S_contact_points = 342, // contact_points - S_343_42 = 343, // $@42 - S_keyspace = 344, // keyspace - S_345_43 = 345, // $@43 - S_consistency = 346, // consistency - S_347_44 = 347, // $@44 - S_serial_consistency = 348, // serial_consistency - S_349_45 = 349, // $@45 - S_max_reconnect_tries = 350, // max_reconnect_tries - S_reconnect_wait_time = 351, // reconnect_wait_time - S_on_fail = 352, // on_fail - S_353_46 = 353, // $@46 - S_on_fail_mode = 354, // on_fail_mode - S_max_row_errors = 355, // max_row_errors - S_trust_anchor = 356, // trust_anchor - S_357_47 = 357, // $@47 - S_cert_file = 358, // cert_file - S_359_48 = 359, // $@48 - S_key_file = 360, // key_file - S_361_49 = 361, // $@49 - S_cipher_list = 362, // cipher_list - S_363_50 = 363, // $@50 - S_host_reservation_identifiers = 364, // host_reservation_identifiers - S_365_51 = 365, // $@51 - S_host_reservation_identifiers_list = 366, // host_reservation_identifiers_list - S_host_reservation_identifier = 367, // host_reservation_identifier - S_duid_id = 368, // duid_id - S_hw_address_id = 369, // hw_address_id - S_circuit_id = 370, // circuit_id - S_client_id = 371, // client_id - S_flex_id = 372, // flex_id - S_dhcp_multi_threading = 373, // dhcp_multi_threading - S_374_52 = 374, // $@52 - S_multi_threading_params = 375, // multi_threading_params - S_multi_threading_param = 376, // multi_threading_param - S_enable_multi_threading = 377, // enable_multi_threading - S_thread_pool_size = 378, // thread_pool_size - S_packet_queue_size = 379, // packet_queue_size - S_hooks_libraries = 380, // hooks_libraries - S_381_53 = 381, // $@53 - S_hooks_libraries_list = 382, // hooks_libraries_list - S_not_empty_hooks_libraries_list = 383, // not_empty_hooks_libraries_list - S_hooks_library = 384, // hooks_library - S_385_54 = 385, // $@54 - S_sub_hooks_library = 386, // sub_hooks_library - S_387_55 = 387, // $@55 - S_hooks_params = 388, // hooks_params - S_hooks_param = 389, // hooks_param - S_library = 390, // library - S_391_56 = 391, // $@56 - S_parameters = 392, // parameters - S_393_57 = 393, // $@57 - S_expired_leases_processing = 394, // expired_leases_processing - S_395_58 = 395, // $@58 - S_expired_leases_params = 396, // expired_leases_params - S_expired_leases_param = 397, // expired_leases_param - S_reclaim_timer_wait_time = 398, // reclaim_timer_wait_time - S_flush_reclaimed_timer_wait_time = 399, // flush_reclaimed_timer_wait_time - S_hold_reclaimed_time = 400, // hold_reclaimed_time - S_max_reclaim_leases = 401, // max_reclaim_leases - S_max_reclaim_time = 402, // max_reclaim_time - S_unwarned_reclaim_cycles = 403, // unwarned_reclaim_cycles - S_subnet4_list = 404, // subnet4_list - S_405_59 = 405, // $@59 - S_subnet4_list_content = 406, // subnet4_list_content - S_not_empty_subnet4_list = 407, // not_empty_subnet4_list - S_subnet4 = 408, // subnet4 - S_409_60 = 409, // $@60 - S_sub_subnet4 = 410, // sub_subnet4 - S_411_61 = 411, // $@61 - S_subnet4_params = 412, // subnet4_params - S_subnet4_param = 413, // subnet4_param - S_subnet = 414, // subnet - S_415_62 = 415, // $@62 - S_subnet_4o6_interface = 416, // subnet_4o6_interface - S_417_63 = 417, // $@63 - S_subnet_4o6_interface_id = 418, // subnet_4o6_interface_id - S_419_64 = 419, // $@64 - S_subnet_4o6_subnet = 420, // subnet_4o6_subnet - S_421_65 = 421, // $@65 - S_interface = 422, // interface - S_423_66 = 423, // $@66 - S_client_class = 424, // client_class - S_425_67 = 425, // $@67 - S_require_client_classes = 426, // require_client_classes - S_427_68 = 427, // $@68 - S_reservations_global = 428, // reservations_global - S_reservations_in_subnet = 429, // reservations_in_subnet - S_reservations_out_of_pool = 430, // reservations_out_of_pool - S_reservation_mode = 431, // reservation_mode - S_432_69 = 432, // $@69 - S_hr_mode = 433, // hr_mode - S_id = 434, // id - S_shared_networks = 435, // shared_networks - S_436_70 = 436, // $@70 - S_shared_networks_content = 437, // shared_networks_content - S_shared_networks_list = 438, // shared_networks_list - S_shared_network = 439, // shared_network - S_440_71 = 440, // $@71 - S_shared_network_params = 441, // shared_network_params - S_shared_network_param = 442, // shared_network_param - S_option_def_list = 443, // option_def_list - S_444_72 = 444, // $@72 - S_sub_option_def_list = 445, // sub_option_def_list - S_446_73 = 446, // $@73 - S_option_def_list_content = 447, // option_def_list_content - S_not_empty_option_def_list = 448, // not_empty_option_def_list - S_option_def_entry = 449, // option_def_entry - S_450_74 = 450, // $@74 - S_sub_option_def = 451, // sub_option_def - S_452_75 = 452, // $@75 - S_option_def_params = 453, // option_def_params - S_not_empty_option_def_params = 454, // not_empty_option_def_params - S_option_def_param = 455, // option_def_param - S_option_def_name = 456, // option_def_name - S_code = 457, // code - S_option_def_code = 458, // option_def_code - S_option_def_type = 459, // option_def_type - S_460_76 = 460, // $@76 - S_option_def_record_types = 461, // option_def_record_types - S_462_77 = 462, // $@77 - S_space = 463, // space - S_464_78 = 464, // $@78 - S_option_def_space = 465, // option_def_space - S_option_def_encapsulate = 466, // option_def_encapsulate - S_467_79 = 467, // $@79 - S_option_def_array = 468, // option_def_array - S_option_data_list = 469, // option_data_list - S_470_80 = 470, // $@80 - S_option_data_list_content = 471, // option_data_list_content - S_not_empty_option_data_list = 472, // not_empty_option_data_list - S_option_data_entry = 473, // option_data_entry - S_474_81 = 474, // $@81 - S_sub_option_data = 475, // sub_option_data - S_476_82 = 476, // $@82 - S_option_data_params = 477, // option_data_params - S_not_empty_option_data_params = 478, // not_empty_option_data_params - S_option_data_param = 479, // option_data_param - S_option_data_name = 480, // option_data_name - S_option_data_data = 481, // option_data_data - S_482_83 = 482, // $@83 - S_option_data_code = 483, // option_data_code - S_option_data_space = 484, // option_data_space - S_option_data_csv_format = 485, // option_data_csv_format - S_option_data_always_send = 486, // option_data_always_send - S_pools_list = 487, // pools_list - S_488_84 = 488, // $@84 - S_pools_list_content = 489, // pools_list_content - S_not_empty_pools_list = 490, // not_empty_pools_list - S_pool_list_entry = 491, // pool_list_entry - S_492_85 = 492, // $@85 - S_sub_pool4 = 493, // sub_pool4 - S_494_86 = 494, // $@86 - S_pool_params = 495, // pool_params - S_pool_param = 496, // pool_param - S_pool_entry = 497, // pool_entry - S_498_87 = 498, // $@87 - S_user_context = 499, // user_context - S_500_88 = 500, // $@88 - S_comment = 501, // comment - S_502_89 = 502, // $@89 - S_reservations = 503, // reservations - S_504_90 = 504, // $@90 - S_reservations_list = 505, // reservations_list - S_not_empty_reservations_list = 506, // not_empty_reservations_list - S_reservation = 507, // reservation - S_508_91 = 508, // $@91 - S_sub_reservation = 509, // sub_reservation - S_510_92 = 510, // $@92 - S_reservation_params = 511, // reservation_params - S_not_empty_reservation_params = 512, // not_empty_reservation_params - S_reservation_param = 513, // reservation_param - S_next_server = 514, // next_server - S_515_93 = 515, // $@93 - S_server_hostname = 516, // server_hostname - S_517_94 = 517, // $@94 - S_boot_file_name = 518, // boot_file_name - S_519_95 = 519, // $@95 - S_ip_address = 520, // ip_address - S_521_96 = 521, // $@96 - S_ip_addresses = 522, // ip_addresses - S_523_97 = 523, // $@97 - S_duid = 524, // duid - S_525_98 = 525, // $@98 - S_hw_address = 526, // hw_address - S_527_99 = 527, // $@99 - S_client_id_value = 528, // client_id_value - S_529_100 = 529, // $@100 - S_circuit_id_value = 530, // circuit_id_value - S_531_101 = 531, // $@101 - S_flex_id_value = 532, // flex_id_value - S_533_102 = 533, // $@102 - S_hostname = 534, // hostname - S_535_103 = 535, // $@103 - S_reservation_client_classes = 536, // reservation_client_classes - S_537_104 = 537, // $@104 - S_relay = 538, // relay - S_539_105 = 539, // $@105 - S_relay_map = 540, // relay_map - S_client_classes = 541, // client_classes - S_542_106 = 542, // $@106 - S_client_classes_list = 543, // client_classes_list - S_client_class_entry = 544, // client_class_entry - S_545_107 = 545, // $@107 - S_client_class_params = 546, // client_class_params - S_not_empty_client_class_params = 547, // not_empty_client_class_params - S_client_class_param = 548, // client_class_param - S_client_class_name = 549, // client_class_name - S_client_class_test = 550, // client_class_test - S_551_108 = 551, // $@108 - S_only_if_required = 552, // only_if_required - S_dhcp4o6_port = 553, // dhcp4o6_port - S_control_socket = 554, // control_socket - S_555_109 = 555, // $@109 - S_control_socket_params = 556, // control_socket_params - S_control_socket_param = 557, // control_socket_param - S_control_socket_type = 558, // control_socket_type - S_559_110 = 559, // $@110 - S_control_socket_name = 560, // control_socket_name - S_561_111 = 561, // $@111 - S_dhcp_queue_control = 562, // dhcp_queue_control - S_563_112 = 563, // $@112 - S_queue_control_params = 564, // queue_control_params - S_queue_control_param = 565, // queue_control_param - S_enable_queue = 566, // enable_queue - S_queue_type = 567, // queue_type - S_568_113 = 568, // $@113 - S_capacity = 569, // capacity - S_arbitrary_map_entry = 570, // arbitrary_map_entry - S_571_114 = 571, // $@114 - S_dhcp_ddns = 572, // dhcp_ddns - S_573_115 = 573, // $@115 - S_sub_dhcp_ddns = 574, // sub_dhcp_ddns - S_575_116 = 575, // $@116 - S_dhcp_ddns_params = 576, // dhcp_ddns_params - S_dhcp_ddns_param = 577, // dhcp_ddns_param - S_enable_updates = 578, // enable_updates - S_server_ip = 579, // server_ip - S_580_117 = 580, // $@117 - S_server_port = 581, // server_port - S_sender_ip = 582, // sender_ip - S_583_118 = 583, // $@118 - S_sender_port = 584, // sender_port - S_max_queue_size = 585, // max_queue_size - S_ncr_protocol = 586, // ncr_protocol - S_587_119 = 587, // $@119 - S_ncr_protocol_value = 588, // ncr_protocol_value - S_ncr_format = 589, // ncr_format - S_590_120 = 590, // $@120 - S_dep_qualifying_suffix = 591, // dep_qualifying_suffix - S_592_121 = 592, // $@121 - S_dep_override_no_update = 593, // dep_override_no_update - S_dep_override_client_update = 594, // dep_override_client_update - S_dep_replace_client_name = 595, // dep_replace_client_name - S_596_122 = 596, // $@122 - S_dep_generated_prefix = 597, // dep_generated_prefix - S_598_123 = 598, // $@123 - S_dep_hostname_char_set = 599, // dep_hostname_char_set - S_600_124 = 600, // $@124 - S_dep_hostname_char_replacement = 601, // dep_hostname_char_replacement - S_602_125 = 602, // $@125 - S_config_control = 603, // config_control - S_604_126 = 604, // $@126 - S_sub_config_control = 605, // sub_config_control - S_606_127 = 606, // $@127 - S_config_control_params = 607, // config_control_params - S_config_control_param = 608, // config_control_param - S_config_databases = 609, // config_databases - S_610_128 = 610, // $@128 - S_config_fetch_wait_time = 611, // config_fetch_wait_time - S_loggers = 612, // loggers - S_613_129 = 613, // $@129 - S_loggers_entries = 614, // loggers_entries - S_logger_entry = 615, // logger_entry - S_616_130 = 616, // $@130 - S_logger_params = 617, // logger_params - S_logger_param = 618, // logger_param - S_debuglevel = 619, // debuglevel - S_severity = 620, // severity - S_621_131 = 621, // $@131 - S_output_options_list = 622, // output_options_list - S_623_132 = 623, // $@132 - S_output_options_list_content = 624, // output_options_list_content - S_output_entry = 625, // output_entry - S_626_133 = 626, // $@133 - S_output_params_list = 627, // output_params_list - S_output_params = 628, // output_params - S_output = 629, // output - S_630_134 = 630, // $@134 - S_flush = 631, // flush - S_maxsize = 632, // maxsize - S_maxver = 633, // maxver - S_pattern = 634, // pattern - S_635_135 = 635, // $@135 - S_compatibility = 636, // compatibility - S_637_136 = 637, // $@136 - S_compatibility_params = 638, // compatibility_params - S_compatibility_param = 639, // compatibility_param - S_lenient_option_parsing = 640 // lenient_option_parsing + TOKEN_END = 0, + TOKEN_COMMA = 258, + TOKEN_COLON = 259, + TOKEN_LSQUARE_BRACKET = 260, + TOKEN_RSQUARE_BRACKET = 261, + TOKEN_LCURLY_BRACKET = 262, + TOKEN_RCURLY_BRACKET = 263, + TOKEN_NULL_TYPE = 264, + TOKEN_DHCP4 = 265, + TOKEN_CONFIG_CONTROL = 266, + TOKEN_CONFIG_DATABASES = 267, + TOKEN_CONFIG_FETCH_WAIT_TIME = 268, + TOKEN_INTERFACES_CONFIG = 269, + TOKEN_INTERFACES = 270, + TOKEN_DHCP_SOCKET_TYPE = 271, + TOKEN_RAW = 272, + TOKEN_UDP = 273, + TOKEN_OUTBOUND_INTERFACE = 274, + TOKEN_SAME_AS_INBOUND = 275, + TOKEN_USE_ROUTING = 276, + TOKEN_RE_DETECT = 277, + TOKEN_SANITY_CHECKS = 278, + TOKEN_LEASE_CHECKS = 279, + TOKEN_ECHO_CLIENT_ID = 280, + TOKEN_MATCH_CLIENT_ID = 281, + TOKEN_AUTHORITATIVE = 282, + TOKEN_NEXT_SERVER = 283, + TOKEN_SERVER_HOSTNAME = 284, + TOKEN_BOOT_FILE_NAME = 285, + TOKEN_LEASE_DATABASE = 286, + TOKEN_HOSTS_DATABASE = 287, + TOKEN_HOSTS_DATABASES = 288, + TOKEN_TYPE = 289, + TOKEN_MEMFILE = 290, + TOKEN_MYSQL = 291, + TOKEN_POSTGRESQL = 292, + TOKEN_USER = 293, + TOKEN_PASSWORD = 294, + TOKEN_HOST = 295, + TOKEN_PORT = 296, + TOKEN_PERSIST = 297, + TOKEN_LFC_INTERVAL = 298, + TOKEN_READONLY = 299, + TOKEN_CONNECT_TIMEOUT = 300, + TOKEN_MAX_RECONNECT_TRIES = 301, + TOKEN_RECONNECT_WAIT_TIME = 302, + TOKEN_ON_FAIL = 303, + TOKEN_STOP_RETRY_EXIT = 304, + TOKEN_SERVE_RETRY_EXIT = 305, + TOKEN_SERVE_RETRY_CONTINUE = 306, + TOKEN_MAX_ROW_ERRORS = 307, + TOKEN_TRUST_ANCHOR = 308, + TOKEN_CERT_FILE = 309, + TOKEN_KEY_FILE = 310, + TOKEN_CIPHER_LIST = 311, + TOKEN_VALID_LIFETIME = 312, + TOKEN_MIN_VALID_LIFETIME = 313, + TOKEN_MAX_VALID_LIFETIME = 314, + TOKEN_RENEW_TIMER = 315, + TOKEN_REBIND_TIMER = 316, + TOKEN_CALCULATE_TEE_TIMES = 317, + TOKEN_T1_PERCENT = 318, + TOKEN_T2_PERCENT = 319, + TOKEN_CACHE_THRESHOLD = 320, + TOKEN_CACHE_MAX_AGE = 321, + TOKEN_DECLINE_PROBATION_PERIOD = 322, + TOKEN_SERVER_TAG = 323, + TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT = 324, + TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE = 325, + TOKEN_DDNS_SEND_UPDATES = 326, + TOKEN_DDNS_OVERRIDE_NO_UPDATE = 327, + TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE = 328, + TOKEN_DDNS_REPLACE_CLIENT_NAME = 329, + TOKEN_DDNS_GENERATED_PREFIX = 330, + TOKEN_DDNS_QUALIFYING_SUFFIX = 331, + TOKEN_DDNS_UPDATE_ON_RENEW = 332, + TOKEN_DDNS_USE_CONFLICT_RESOLUTION = 333, + TOKEN_STORE_EXTENDED_INFO = 334, + TOKEN_SUBNET4 = 335, + TOKEN_SUBNET_4O6_INTERFACE = 336, + TOKEN_SUBNET_4O6_INTERFACE_ID = 337, + TOKEN_SUBNET_4O6_SUBNET = 338, + TOKEN_OPTION_DEF = 339, + TOKEN_OPTION_DATA = 340, + TOKEN_NAME = 341, + TOKEN_DATA = 342, + TOKEN_CODE = 343, + TOKEN_SPACE = 344, + TOKEN_CSV_FORMAT = 345, + TOKEN_ALWAYS_SEND = 346, + TOKEN_RECORD_TYPES = 347, + TOKEN_ENCAPSULATE = 348, + TOKEN_ARRAY = 349, + TOKEN_PARKED_PACKET_LIMIT = 350, + TOKEN_SHARED_NETWORKS = 351, + TOKEN_POOLS = 352, + TOKEN_POOL = 353, + TOKEN_USER_CONTEXT = 354, + TOKEN_COMMENT = 355, + TOKEN_SUBNET = 356, + TOKEN_INTERFACE = 357, + TOKEN_ID = 358, + TOKEN_RESERVATION_MODE = 359, + TOKEN_DISABLED = 360, + TOKEN_OUT_OF_POOL = 361, + TOKEN_GLOBAL = 362, + TOKEN_ALL = 363, + TOKEN_RESERVATIONS_GLOBAL = 364, + TOKEN_RESERVATIONS_IN_SUBNET = 365, + TOKEN_RESERVATIONS_OUT_OF_POOL = 366, + TOKEN_HOST_RESERVATION_IDENTIFIERS = 367, + TOKEN_CLIENT_CLASSES = 368, + TOKEN_REQUIRE_CLIENT_CLASSES = 369, + TOKEN_TEST = 370, + TOKEN_ONLY_IF_REQUIRED = 371, + TOKEN_CLIENT_CLASS = 372, + TOKEN_RESERVATIONS = 373, + TOKEN_DUID = 374, + TOKEN_HW_ADDRESS = 375, + TOKEN_CIRCUIT_ID = 376, + TOKEN_CLIENT_ID = 377, + TOKEN_HOSTNAME = 378, + TOKEN_FLEX_ID = 379, + TOKEN_RELAY = 380, + TOKEN_IP_ADDRESS = 381, + TOKEN_IP_ADDRESSES = 382, + TOKEN_HOOKS_LIBRARIES = 383, + TOKEN_LIBRARY = 384, + TOKEN_PARAMETERS = 385, + TOKEN_EXPIRED_LEASES_PROCESSING = 386, + TOKEN_RECLAIM_TIMER_WAIT_TIME = 387, + TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 388, + TOKEN_HOLD_RECLAIMED_TIME = 389, + TOKEN_MAX_RECLAIM_LEASES = 390, + TOKEN_MAX_RECLAIM_TIME = 391, + TOKEN_UNWARNED_RECLAIM_CYCLES = 392, + TOKEN_DHCP4O6_PORT = 393, + TOKEN_DHCP_MULTI_THREADING = 394, + TOKEN_ENABLE_MULTI_THREADING = 395, + TOKEN_THREAD_POOL_SIZE = 396, + TOKEN_PACKET_QUEUE_SIZE = 397, + TOKEN_CONTROL_SOCKET = 398, + TOKEN_SOCKET_TYPE = 399, + TOKEN_SOCKET_NAME = 400, + TOKEN_DHCP_QUEUE_CONTROL = 401, + TOKEN_ENABLE_QUEUE = 402, + TOKEN_QUEUE_TYPE = 403, + TOKEN_CAPACITY = 404, + TOKEN_DHCP_DDNS = 405, + TOKEN_ENABLE_UPDATES = 406, + TOKEN_QUALIFYING_SUFFIX = 407, + TOKEN_SERVER_IP = 408, + TOKEN_SERVER_PORT = 409, + TOKEN_SENDER_IP = 410, + TOKEN_SENDER_PORT = 411, + TOKEN_MAX_QUEUE_SIZE = 412, + TOKEN_NCR_PROTOCOL = 413, + TOKEN_NCR_FORMAT = 414, + TOKEN_OVERRIDE_NO_UPDATE = 415, + TOKEN_OVERRIDE_CLIENT_UPDATE = 416, + TOKEN_REPLACE_CLIENT_NAME = 417, + TOKEN_GENERATED_PREFIX = 418, + TOKEN_TCP = 419, + TOKEN_JSON = 420, + TOKEN_WHEN_PRESENT = 421, + TOKEN_NEVER = 422, + TOKEN_ALWAYS = 423, + TOKEN_WHEN_NOT_PRESENT = 424, + TOKEN_HOSTNAME_CHAR_SET = 425, + TOKEN_HOSTNAME_CHAR_REPLACEMENT = 426, + TOKEN_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 427, + TOKEN_IP_RESERVATIONS_UNIQUE = 428, + TOKEN_RESERVATIONS_LOOKUP_FIRST = 429, + TOKEN_LOGGERS = 430, + TOKEN_OUTPUT_OPTIONS = 431, + TOKEN_OUTPUT = 432, + TOKEN_DEBUGLEVEL = 433, + TOKEN_SEVERITY = 434, + TOKEN_FLUSH = 435, + TOKEN_MAXSIZE = 436, + TOKEN_MAXVER = 437, + TOKEN_PATTERN = 438, + TOKEN_COMPATIBILITY = 439, + TOKEN_LENIENT_OPTION_PARSING = 440, + TOKEN_TOPLEVEL_JSON = 441, + TOKEN_TOPLEVEL_DHCP4 = 442, + TOKEN_SUB_DHCP4 = 443, + TOKEN_SUB_INTERFACES4 = 444, + TOKEN_SUB_SUBNET4 = 445, + TOKEN_SUB_POOL4 = 446, + TOKEN_SUB_RESERVATION = 447, + TOKEN_SUB_OPTION_DEFS = 448, + TOKEN_SUB_OPTION_DEF = 449, + TOKEN_SUB_OPTION_DATA = 450, + TOKEN_SUB_HOOKS_LIBRARY = 451, + TOKEN_SUB_DHCP_DDNS = 452, + TOKEN_SUB_CONFIG_CONTROL = 453, + TOKEN_STRING = 454, + TOKEN_INTEGER = 455, + TOKEN_FLOAT = 456, + TOKEN_BOOLEAN = 457 }; }; - /// (Internal) symbol kind. - typedef symbol_kind::symbol_kind_type symbol_kind_type; + /// (External) token type, as returned by yylex. + typedef token::yytokentype token_type; - /// The number of tokens. - static const symbol_kind_type YYNTOKENS = symbol_kind::YYNTOKENS; + /// Symbol type: an internal symbol number. + typedef int symbol_number_type; + + /// The symbol type number to denote an empty symbol. + enum { empty_symbol = -2 }; + + /// Internal symbol number for tokens (subsumed by symbol_number_type). + typedef unsigned char token_number_type; /// A complete symbol. /// - /// Expects its Base type to provide access to the symbol kind - /// via kind (). + /// Expects its Base type to provide access to the symbol type + /// via type_get (). /// /// Provide access to semantic value and location. template @@ -1388,59 +701,20 @@ namespace isc { namespace dhcp { typedef Base super_type; /// Default constructor. - basic_symbol () YY_NOEXCEPT + basic_symbol () : value () , location () {} #if 201103L <= YY_CPLUSPLUS /// Move constructor. - basic_symbol (basic_symbol&& that) - : Base (std::move (that)) - , value () - , location (std::move (that.location)) - { - switch (this->kind ()) - { - case symbol_kind::S_value: // value - case symbol_kind::S_map_value: // map_value - case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value - case symbol_kind::S_socket_type: // socket_type - case symbol_kind::S_outbound_interface_value: // outbound_interface_value - case symbol_kind::S_db_type: // db_type - case symbol_kind::S_on_fail_mode: // on_fail_mode - case symbol_kind::S_hr_mode: // hr_mode - case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value - value.move< ElementPtr > (std::move (that.value)); - break; - - case symbol_kind::S_BOOLEAN: // "boolean" - value.move< bool > (std::move (that.value)); - break; - - case symbol_kind::S_FLOAT: // "floating point" - value.move< double > (std::move (that.value)); - break; - - case symbol_kind::S_INTEGER: // "integer" - value.move< int64_t > (std::move (that.value)); - break; - - case symbol_kind::S_STRING: // "constant string" - value.move< std::string > (std::move (that.value)); - break; - - default: - break; - } - - } + basic_symbol (basic_symbol&& that); #endif /// Copy constructor. basic_symbol (const basic_symbol& that); - /// Constructors for typed symbols. + /// Constructor for valueless symbols, and symbols from each type. #if 201103L <= YY_CPLUSPLUS basic_symbol (typename Base::kind_type t, location_type&& l) : Base (t) @@ -1452,7 +726,6 @@ namespace isc { namespace dhcp { , location (l) {} #endif - #if 201103L <= YY_CPLUSPLUS basic_symbol (typename Base::kind_type t, ElementPtr&& v, location_type&& l) : Base (t) @@ -1466,7 +739,6 @@ namespace isc { namespace dhcp { , location (l) {} #endif - #if 201103L <= YY_CPLUSPLUS basic_symbol (typename Base::kind_type t, bool&& v, location_type&& l) : Base (t) @@ -1480,7 +752,6 @@ namespace isc { namespace dhcp { , location (l) {} #endif - #if 201103L <= YY_CPLUSPLUS basic_symbol (typename Base::kind_type t, double&& v, location_type&& l) : Base (t) @@ -1494,7 +765,6 @@ namespace isc { namespace dhcp { , location (l) {} #endif - #if 201103L <= YY_CPLUSPLUS basic_symbol (typename Base::kind_type t, int64_t&& v, location_type&& l) : Base (t) @@ -1508,7 +778,6 @@ namespace isc { namespace dhcp { , location (l) {} #endif - #if 201103L <= YY_CPLUSPLUS basic_symbol (typename Base::kind_type t, std::string&& v, location_type&& l) : Base (t) @@ -1529,49 +798,47 @@ namespace isc { namespace dhcp { clear (); } - - /// Destroy contents, and record that is empty. - void clear () YY_NOEXCEPT + void clear () { // User destructor. - symbol_kind_type yykind = this->kind (); + symbol_number_type yytype = this->type_get (); basic_symbol& yysym = *this; (void) yysym; - switch (yykind) + switch (yytype) { default: break; } - // Value type destructor. -switch (yykind) + // Type destructor. +switch (yytype) { - case symbol_kind::S_value: // value - case symbol_kind::S_map_value: // map_value - case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value - case symbol_kind::S_socket_type: // socket_type - case symbol_kind::S_outbound_interface_value: // outbound_interface_value - case symbol_kind::S_db_type: // db_type - case symbol_kind::S_on_fail_mode: // on_fail_mode - case symbol_kind::S_hr_mode: // hr_mode - case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value + case 218: // value + case 222: // map_value + case 265: // ddns_replace_client_name_value + case 292: // socket_type + case 295: // outbound_interface_value + case 317: // db_type + case 335: // on_fail_mode + case 414: // hr_mode + case 569: // ncr_protocol_value value.template destroy< ElementPtr > (); break; - case symbol_kind::S_BOOLEAN: // "boolean" + case 202: // "boolean" value.template destroy< bool > (); break; - case symbol_kind::S_FLOAT: // "floating point" + case 201: // "floating point" value.template destroy< double > (); break; - case symbol_kind::S_INTEGER: // "integer" + case 200: // "integer" value.template destroy< int64_t > (); break; - case symbol_kind::S_STRING: // "constant string" + case 199: // "constant string" value.template destroy< std::string > (); break; @@ -1582,15 +849,6 @@ switch (yykind) Base::clear (); } - /// The user-facing name of this symbol. - std::string name () const YY_NOEXCEPT - { - return Dhcp4Parser::symbol_name (this->kind ()); - } - - /// Backward compatibility (Bison 3.6). - symbol_kind_type type_get () const YY_NOEXCEPT; - /// Whether empty. bool empty () const YY_NOEXCEPT; @@ -1598,7 +856,7 @@ switch (yykind) void move (basic_symbol& s); /// The semantic value. - value_type value; + semantic_type value; /// The location. location_type location; @@ -1611,132 +869,122 @@ switch (yykind) }; /// Type access provider for token (enum) based symbols. - struct by_kind + struct by_type { - /// The symbol kind as needed by the constructor. - typedef token_kind_type kind_type; - /// Default constructor. - by_kind () YY_NOEXCEPT; + by_type (); #if 201103L <= YY_CPLUSPLUS /// Move constructor. - by_kind (by_kind&& that) YY_NOEXCEPT; + by_type (by_type&& that); #endif /// Copy constructor. - by_kind (const by_kind& that) YY_NOEXCEPT; + by_type (const by_type& that); + + /// The symbol type as needed by the constructor. + typedef token_type kind_type; /// Constructor from (external) token numbers. - by_kind (kind_type t) YY_NOEXCEPT; - - + by_type (kind_type t); /// Record that this symbol is empty. - void clear () YY_NOEXCEPT; + void clear (); - /// Steal the symbol kind from \a that. - void move (by_kind& that); + /// Steal the symbol type from \a that. + void move (by_type& that); /// The (internal) type number (corresponding to \a type). /// \a empty when empty. - symbol_kind_type kind () const YY_NOEXCEPT; + symbol_number_type type_get () const YY_NOEXCEPT; - /// Backward compatibility (Bison 3.6). - symbol_kind_type type_get () const YY_NOEXCEPT; - - /// The symbol kind. - /// \a S_YYEMPTY when empty. - symbol_kind_type kind_; + /// The symbol type. + /// \a empty_symbol when empty. + /// An int, not token_number_type, to be able to store empty_symbol. + int type; }; - /// Backward compatibility for a private implementation detail (Bison 3.6). - typedef by_kind by_type; - /// "External" symbols: returned by the scanner. - struct symbol_type : basic_symbol + struct symbol_type : basic_symbol { /// Superclass. - typedef basic_symbol super_type; + typedef basic_symbol super_type; /// Empty symbol. - symbol_type () YY_NOEXCEPT {} + symbol_type () {} /// Constructor for valueless symbols, and symbols from each type. #if 201103L <= YY_CPLUSPLUS symbol_type (int tok, location_type l) - : super_type (token_kind_type (tok), std::move (l)) + : super_type(token_type (tok), std::move (l)) + { + YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_CONFIG_CONTROL || tok == token::TOKEN_CONFIG_DATABASES || tok == token::TOKEN_CONFIG_FETCH_WAIT_TIME || tok == token::TOKEN_INTERFACES_CONFIG || tok == token::TOKEN_INTERFACES || tok == token::TOKEN_DHCP_SOCKET_TYPE || tok == token::TOKEN_RAW || tok == token::TOKEN_UDP || tok == token::TOKEN_OUTBOUND_INTERFACE || tok == token::TOKEN_SAME_AS_INBOUND || tok == token::TOKEN_USE_ROUTING || tok == token::TOKEN_RE_DETECT || tok == token::TOKEN_SANITY_CHECKS || tok == token::TOKEN_LEASE_CHECKS || tok == token::TOKEN_ECHO_CLIENT_ID || tok == token::TOKEN_MATCH_CLIENT_ID || tok == token::TOKEN_AUTHORITATIVE || tok == token::TOKEN_NEXT_SERVER || tok == token::TOKEN_SERVER_HOSTNAME || tok == token::TOKEN_BOOT_FILE_NAME || tok == token::TOKEN_LEASE_DATABASE || tok == token::TOKEN_HOSTS_DATABASE || tok == token::TOKEN_HOSTS_DATABASES || tok == token::TOKEN_TYPE || tok == token::TOKEN_MEMFILE || tok == token::TOKEN_MYSQL || tok == token::TOKEN_POSTGRESQL || tok == token::TOKEN_USER || tok == token::TOKEN_PASSWORD || tok == token::TOKEN_HOST || tok == token::TOKEN_PORT || tok == token::TOKEN_PERSIST || tok == token::TOKEN_LFC_INTERVAL || tok == token::TOKEN_READONLY || tok == token::TOKEN_CONNECT_TIMEOUT || tok == token::TOKEN_MAX_RECONNECT_TRIES || tok == token::TOKEN_RECONNECT_WAIT_TIME || tok == token::TOKEN_ON_FAIL || tok == token::TOKEN_STOP_RETRY_EXIT || tok == token::TOKEN_SERVE_RETRY_EXIT || tok == token::TOKEN_SERVE_RETRY_CONTINUE || tok == token::TOKEN_MAX_ROW_ERRORS || tok == token::TOKEN_TRUST_ANCHOR || tok == token::TOKEN_CERT_FILE || tok == token::TOKEN_KEY_FILE || tok == token::TOKEN_CIPHER_LIST || tok == token::TOKEN_VALID_LIFETIME || tok == token::TOKEN_MIN_VALID_LIFETIME || tok == token::TOKEN_MAX_VALID_LIFETIME || tok == token::TOKEN_RENEW_TIMER || tok == token::TOKEN_REBIND_TIMER || tok == token::TOKEN_CALCULATE_TEE_TIMES || tok == token::TOKEN_T1_PERCENT || tok == token::TOKEN_T2_PERCENT || tok == token::TOKEN_CACHE_THRESHOLD || tok == token::TOKEN_CACHE_MAX_AGE || tok == token::TOKEN_DECLINE_PROBATION_PERIOD || tok == token::TOKEN_SERVER_TAG || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE || tok == token::TOKEN_DDNS_SEND_UPDATES || tok == token::TOKEN_DDNS_OVERRIDE_NO_UPDATE || tok == token::TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_DDNS_REPLACE_CLIENT_NAME || tok == token::TOKEN_DDNS_GENERATED_PREFIX || tok == token::TOKEN_DDNS_QUALIFYING_SUFFIX || tok == token::TOKEN_DDNS_UPDATE_ON_RENEW || tok == token::TOKEN_DDNS_USE_CONFLICT_RESOLUTION || tok == token::TOKEN_STORE_EXTENDED_INFO || tok == token::TOKEN_SUBNET4 || tok == token::TOKEN_SUBNET_4O6_INTERFACE || tok == token::TOKEN_SUBNET_4O6_INTERFACE_ID || tok == token::TOKEN_SUBNET_4O6_SUBNET || tok == token::TOKEN_OPTION_DEF || tok == token::TOKEN_OPTION_DATA || tok == token::TOKEN_NAME || tok == token::TOKEN_DATA || tok == token::TOKEN_CODE || tok == token::TOKEN_SPACE || tok == token::TOKEN_CSV_FORMAT || tok == token::TOKEN_ALWAYS_SEND || tok == token::TOKEN_RECORD_TYPES || tok == token::TOKEN_ENCAPSULATE || tok == token::TOKEN_ARRAY || tok == token::TOKEN_PARKED_PACKET_LIMIT || tok == token::TOKEN_SHARED_NETWORKS || tok == token::TOKEN_POOLS || tok == token::TOKEN_POOL || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_SUBNET || tok == token::TOKEN_INTERFACE || tok == token::TOKEN_ID || tok == token::TOKEN_RESERVATION_MODE || tok == token::TOKEN_DISABLED || tok == token::TOKEN_OUT_OF_POOL || tok == token::TOKEN_GLOBAL || tok == token::TOKEN_ALL || tok == token::TOKEN_RESERVATIONS_GLOBAL || tok == token::TOKEN_RESERVATIONS_IN_SUBNET || tok == token::TOKEN_RESERVATIONS_OUT_OF_POOL || tok == token::TOKEN_HOST_RESERVATION_IDENTIFIERS || tok == token::TOKEN_CLIENT_CLASSES || tok == token::TOKEN_REQUIRE_CLIENT_CLASSES || tok == token::TOKEN_TEST || tok == token::TOKEN_ONLY_IF_REQUIRED || tok == token::TOKEN_CLIENT_CLASS || tok == token::TOKEN_RESERVATIONS || tok == token::TOKEN_DUID || tok == token::TOKEN_HW_ADDRESS || tok == token::TOKEN_CIRCUIT_ID || tok == token::TOKEN_CLIENT_ID || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_FLEX_ID || tok == token::TOKEN_RELAY || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_IP_ADDRESSES || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_EXPIRED_LEASES_PROCESSING || tok == token::TOKEN_RECLAIM_TIMER_WAIT_TIME || tok == token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME || tok == token::TOKEN_HOLD_RECLAIMED_TIME || tok == token::TOKEN_MAX_RECLAIM_LEASES || tok == token::TOKEN_MAX_RECLAIM_TIME || tok == token::TOKEN_UNWARNED_RECLAIM_CYCLES || tok == token::TOKEN_DHCP4O6_PORT || tok == token::TOKEN_DHCP_MULTI_THREADING || tok == token::TOKEN_ENABLE_MULTI_THREADING || tok == token::TOKEN_THREAD_POOL_SIZE || tok == token::TOKEN_PACKET_QUEUE_SIZE || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_DHCP_QUEUE_CONTROL || tok == token::TOKEN_ENABLE_QUEUE || tok == token::TOKEN_QUEUE_TYPE || tok == token::TOKEN_CAPACITY || tok == token::TOKEN_DHCP_DDNS || tok == token::TOKEN_ENABLE_UPDATES || tok == token::TOKEN_QUALIFYING_SUFFIX || tok == token::TOKEN_SERVER_IP || tok == token::TOKEN_SERVER_PORT || tok == token::TOKEN_SENDER_IP || tok == token::TOKEN_SENDER_PORT || tok == token::TOKEN_MAX_QUEUE_SIZE || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_OVERRIDE_NO_UPDATE || tok == token::TOKEN_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_REPLACE_CLIENT_NAME || tok == token::TOKEN_GENERATED_PREFIX || tok == token::TOKEN_TCP || tok == token::TOKEN_JSON || tok == token::TOKEN_WHEN_PRESENT || tok == token::TOKEN_NEVER || tok == token::TOKEN_ALWAYS || tok == token::TOKEN_WHEN_NOT_PRESENT || tok == token::TOKEN_HOSTNAME_CHAR_SET || tok == token::TOKEN_HOSTNAME_CHAR_REPLACEMENT || tok == token::TOKEN_EARLY_GLOBAL_RESERVATIONS_LOOKUP || tok == token::TOKEN_IP_RESERVATIONS_UNIQUE || tok == token::TOKEN_RESERVATIONS_LOOKUP_FIRST || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_COMPATIBILITY || tok == token::TOKEN_LENIENT_OPTION_PARSING || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCP4 || tok == token::TOKEN_SUB_DHCP4 || tok == token::TOKEN_SUB_INTERFACES4 || tok == token::TOKEN_SUB_SUBNET4 || tok == token::TOKEN_SUB_POOL4 || tok == token::TOKEN_SUB_RESERVATION || tok == token::TOKEN_SUB_OPTION_DEFS || tok == token::TOKEN_SUB_OPTION_DEF || tok == token::TOKEN_SUB_OPTION_DATA || tok == token::TOKEN_SUB_HOOKS_LIBRARY || tok == token::TOKEN_SUB_DHCP_DDNS || tok == token::TOKEN_SUB_CONFIG_CONTROL); + } #else symbol_type (int tok, const location_type& l) - : super_type (token_kind_type (tok), l) -#endif + : super_type(token_type (tok), l) { -#if !defined _MSC_VER || defined __clang__ - PARSER4__ASSERT (tok == token::TOKEN_END - || (token::TOKEN_PARSER4_error <= tok && tok <= token::TOKEN_SUB_CONFIG_CONTROL)); -#endif + YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_CONFIG_CONTROL || tok == token::TOKEN_CONFIG_DATABASES || tok == token::TOKEN_CONFIG_FETCH_WAIT_TIME || tok == token::TOKEN_INTERFACES_CONFIG || tok == token::TOKEN_INTERFACES || tok == token::TOKEN_DHCP_SOCKET_TYPE || tok == token::TOKEN_RAW || tok == token::TOKEN_UDP || tok == token::TOKEN_OUTBOUND_INTERFACE || tok == token::TOKEN_SAME_AS_INBOUND || tok == token::TOKEN_USE_ROUTING || tok == token::TOKEN_RE_DETECT || tok == token::TOKEN_SANITY_CHECKS || tok == token::TOKEN_LEASE_CHECKS || tok == token::TOKEN_ECHO_CLIENT_ID || tok == token::TOKEN_MATCH_CLIENT_ID || tok == token::TOKEN_AUTHORITATIVE || tok == token::TOKEN_NEXT_SERVER || tok == token::TOKEN_SERVER_HOSTNAME || tok == token::TOKEN_BOOT_FILE_NAME || tok == token::TOKEN_LEASE_DATABASE || tok == token::TOKEN_HOSTS_DATABASE || tok == token::TOKEN_HOSTS_DATABASES || tok == token::TOKEN_TYPE || tok == token::TOKEN_MEMFILE || tok == token::TOKEN_MYSQL || tok == token::TOKEN_POSTGRESQL || tok == token::TOKEN_USER || tok == token::TOKEN_PASSWORD || tok == token::TOKEN_HOST || tok == token::TOKEN_PORT || tok == token::TOKEN_PERSIST || tok == token::TOKEN_LFC_INTERVAL || tok == token::TOKEN_READONLY || tok == token::TOKEN_CONNECT_TIMEOUT || tok == token::TOKEN_MAX_RECONNECT_TRIES || tok == token::TOKEN_RECONNECT_WAIT_TIME || tok == token::TOKEN_ON_FAIL || tok == token::TOKEN_STOP_RETRY_EXIT || tok == token::TOKEN_SERVE_RETRY_EXIT || tok == token::TOKEN_SERVE_RETRY_CONTINUE || tok == token::TOKEN_MAX_ROW_ERRORS || tok == token::TOKEN_TRUST_ANCHOR || tok == token::TOKEN_CERT_FILE || tok == token::TOKEN_KEY_FILE || tok == token::TOKEN_CIPHER_LIST || tok == token::TOKEN_VALID_LIFETIME || tok == token::TOKEN_MIN_VALID_LIFETIME || tok == token::TOKEN_MAX_VALID_LIFETIME || tok == token::TOKEN_RENEW_TIMER || tok == token::TOKEN_REBIND_TIMER || tok == token::TOKEN_CALCULATE_TEE_TIMES || tok == token::TOKEN_T1_PERCENT || tok == token::TOKEN_T2_PERCENT || tok == token::TOKEN_CACHE_THRESHOLD || tok == token::TOKEN_CACHE_MAX_AGE || tok == token::TOKEN_DECLINE_PROBATION_PERIOD || tok == token::TOKEN_SERVER_TAG || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE || tok == token::TOKEN_DDNS_SEND_UPDATES || tok == token::TOKEN_DDNS_OVERRIDE_NO_UPDATE || tok == token::TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_DDNS_REPLACE_CLIENT_NAME || tok == token::TOKEN_DDNS_GENERATED_PREFIX || tok == token::TOKEN_DDNS_QUALIFYING_SUFFIX || tok == token::TOKEN_DDNS_UPDATE_ON_RENEW || tok == token::TOKEN_DDNS_USE_CONFLICT_RESOLUTION || tok == token::TOKEN_STORE_EXTENDED_INFO || tok == token::TOKEN_SUBNET4 || tok == token::TOKEN_SUBNET_4O6_INTERFACE || tok == token::TOKEN_SUBNET_4O6_INTERFACE_ID || tok == token::TOKEN_SUBNET_4O6_SUBNET || tok == token::TOKEN_OPTION_DEF || tok == token::TOKEN_OPTION_DATA || tok == token::TOKEN_NAME || tok == token::TOKEN_DATA || tok == token::TOKEN_CODE || tok == token::TOKEN_SPACE || tok == token::TOKEN_CSV_FORMAT || tok == token::TOKEN_ALWAYS_SEND || tok == token::TOKEN_RECORD_TYPES || tok == token::TOKEN_ENCAPSULATE || tok == token::TOKEN_ARRAY || tok == token::TOKEN_PARKED_PACKET_LIMIT || tok == token::TOKEN_SHARED_NETWORKS || tok == token::TOKEN_POOLS || tok == token::TOKEN_POOL || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_SUBNET || tok == token::TOKEN_INTERFACE || tok == token::TOKEN_ID || tok == token::TOKEN_RESERVATION_MODE || tok == token::TOKEN_DISABLED || tok == token::TOKEN_OUT_OF_POOL || tok == token::TOKEN_GLOBAL || tok == token::TOKEN_ALL || tok == token::TOKEN_RESERVATIONS_GLOBAL || tok == token::TOKEN_RESERVATIONS_IN_SUBNET || tok == token::TOKEN_RESERVATIONS_OUT_OF_POOL || tok == token::TOKEN_HOST_RESERVATION_IDENTIFIERS || tok == token::TOKEN_CLIENT_CLASSES || tok == token::TOKEN_REQUIRE_CLIENT_CLASSES || tok == token::TOKEN_TEST || tok == token::TOKEN_ONLY_IF_REQUIRED || tok == token::TOKEN_CLIENT_CLASS || tok == token::TOKEN_RESERVATIONS || tok == token::TOKEN_DUID || tok == token::TOKEN_HW_ADDRESS || tok == token::TOKEN_CIRCUIT_ID || tok == token::TOKEN_CLIENT_ID || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_FLEX_ID || tok == token::TOKEN_RELAY || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_IP_ADDRESSES || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_EXPIRED_LEASES_PROCESSING || tok == token::TOKEN_RECLAIM_TIMER_WAIT_TIME || tok == token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME || tok == token::TOKEN_HOLD_RECLAIMED_TIME || tok == token::TOKEN_MAX_RECLAIM_LEASES || tok == token::TOKEN_MAX_RECLAIM_TIME || tok == token::TOKEN_UNWARNED_RECLAIM_CYCLES || tok == token::TOKEN_DHCP4O6_PORT || tok == token::TOKEN_DHCP_MULTI_THREADING || tok == token::TOKEN_ENABLE_MULTI_THREADING || tok == token::TOKEN_THREAD_POOL_SIZE || tok == token::TOKEN_PACKET_QUEUE_SIZE || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_DHCP_QUEUE_CONTROL || tok == token::TOKEN_ENABLE_QUEUE || tok == token::TOKEN_QUEUE_TYPE || tok == token::TOKEN_CAPACITY || tok == token::TOKEN_DHCP_DDNS || tok == token::TOKEN_ENABLE_UPDATES || tok == token::TOKEN_QUALIFYING_SUFFIX || tok == token::TOKEN_SERVER_IP || tok == token::TOKEN_SERVER_PORT || tok == token::TOKEN_SENDER_IP || tok == token::TOKEN_SENDER_PORT || tok == token::TOKEN_MAX_QUEUE_SIZE || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_OVERRIDE_NO_UPDATE || tok == token::TOKEN_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_REPLACE_CLIENT_NAME || tok == token::TOKEN_GENERATED_PREFIX || tok == token::TOKEN_TCP || tok == token::TOKEN_JSON || tok == token::TOKEN_WHEN_PRESENT || tok == token::TOKEN_NEVER || tok == token::TOKEN_ALWAYS || tok == token::TOKEN_WHEN_NOT_PRESENT || tok == token::TOKEN_HOSTNAME_CHAR_SET || tok == token::TOKEN_HOSTNAME_CHAR_REPLACEMENT || tok == token::TOKEN_EARLY_GLOBAL_RESERVATIONS_LOOKUP || tok == token::TOKEN_IP_RESERVATIONS_UNIQUE || tok == token::TOKEN_RESERVATIONS_LOOKUP_FIRST || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_COMPATIBILITY || tok == token::TOKEN_LENIENT_OPTION_PARSING || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCP4 || tok == token::TOKEN_SUB_DHCP4 || tok == token::TOKEN_SUB_INTERFACES4 || tok == token::TOKEN_SUB_SUBNET4 || tok == token::TOKEN_SUB_POOL4 || tok == token::TOKEN_SUB_RESERVATION || tok == token::TOKEN_SUB_OPTION_DEFS || tok == token::TOKEN_SUB_OPTION_DEF || tok == token::TOKEN_SUB_OPTION_DATA || tok == token::TOKEN_SUB_HOOKS_LIBRARY || tok == token::TOKEN_SUB_DHCP_DDNS || tok == token::TOKEN_SUB_CONFIG_CONTROL); } +#endif #if 201103L <= YY_CPLUSPLUS symbol_type (int tok, bool v, location_type l) - : super_type (token_kind_type (tok), std::move (v), std::move (l)) + : super_type(token_type (tok), std::move (v), std::move (l)) + { + YY_ASSERT (tok == token::TOKEN_BOOLEAN); + } #else symbol_type (int tok, const bool& v, const location_type& l) - : super_type (token_kind_type (tok), v, l) -#endif + : super_type(token_type (tok), v, l) { -#if !defined _MSC_VER || defined __clang__ - PARSER4__ASSERT (tok == token::TOKEN_BOOLEAN); -#endif + YY_ASSERT (tok == token::TOKEN_BOOLEAN); } +#endif #if 201103L <= YY_CPLUSPLUS symbol_type (int tok, double v, location_type l) - : super_type (token_kind_type (tok), std::move (v), std::move (l)) + : super_type(token_type (tok), std::move (v), std::move (l)) + { + YY_ASSERT (tok == token::TOKEN_FLOAT); + } #else symbol_type (int tok, const double& v, const location_type& l) - : super_type (token_kind_type (tok), v, l) -#endif + : super_type(token_type (tok), v, l) { -#if !defined _MSC_VER || defined __clang__ - PARSER4__ASSERT (tok == token::TOKEN_FLOAT); -#endif + YY_ASSERT (tok == token::TOKEN_FLOAT); } +#endif #if 201103L <= YY_CPLUSPLUS symbol_type (int tok, int64_t v, location_type l) - : super_type (token_kind_type (tok), std::move (v), std::move (l)) + : super_type(token_type (tok), std::move (v), std::move (l)) + { + YY_ASSERT (tok == token::TOKEN_INTEGER); + } #else symbol_type (int tok, const int64_t& v, const location_type& l) - : super_type (token_kind_type (tok), v, l) -#endif + : super_type(token_type (tok), v, l) { -#if !defined _MSC_VER || defined __clang__ - PARSER4__ASSERT (tok == token::TOKEN_INTEGER); -#endif + YY_ASSERT (tok == token::TOKEN_INTEGER); } +#endif #if 201103L <= YY_CPLUSPLUS symbol_type (int tok, std::string v, location_type l) - : super_type (token_kind_type (tok), std::move (v), std::move (l)) + : super_type(token_type (tok), std::move (v), std::move (l)) + { + YY_ASSERT (tok == token::TOKEN_STRING); + } #else symbol_type (int tok, const std::string& v, const location_type& l) - : super_type (token_kind_type (tok), v, l) -#endif + : super_type(token_type (tok), v, l) { -#if !defined _MSC_VER || defined __clang__ - PARSER4__ASSERT (tok == token::TOKEN_STRING); -#endif + YY_ASSERT (tok == token::TOKEN_STRING); } +#endif }; /// Build a parser object. Dhcp4Parser (isc::dhcp::Parser4Context& ctx_yyarg); virtual ~Dhcp4Parser (); -#if 201103L <= YY_CPLUSPLUS - /// Non copyable. - Dhcp4Parser (const Dhcp4Parser&) = delete; - /// Non copyable. - Dhcp4Parser& operator= (const Dhcp4Parser&) = delete; -#endif - /// Parse. An alias for parse (). /// \returns 0 iff parsing succeeded. int operator() (); @@ -1767,11 +1015,7 @@ switch (yykind) /// Report a syntax error. void error (const syntax_error& err); - /// The user-facing name of the symbol whose (internal) number is - /// YYSYMBOL. No bounds checking. - static std::string symbol_name (symbol_kind_type yysymbol); - - // Implementation of make_symbol for each token kind. + // Implementation of make_symbol for each symbol type. #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -1787,36 +1031,6 @@ switch (yykind) return symbol_type (token::TOKEN_END, l); } #endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_PARSER4_error (location_type l) - { - return symbol_type (token::TOKEN_PARSER4_error, std::move (l)); - } -#else - static - symbol_type - make_PARSER4_error (const location_type& l) - { - return symbol_type (token::TOKEN_PARSER4_error, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_PARSER4_UNDEF (location_type l) - { - return symbol_type (token::TOKEN_PARSER4_UNDEF, std::move (l)); - } -#else - static - symbol_type - make_PARSER4_UNDEF (const location_type& l) - { - return symbol_type (token::TOKEN_PARSER4_UNDEF, l); - } -#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -2342,21 +1556,6 @@ switch (yykind) return symbol_type (token::TOKEN_POSTGRESQL, l); } #endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_CQL (location_type l) - { - return symbol_type (token::TOKEN_CQL, std::move (l)); - } -#else - static - symbol_type - make_CQL (const location_type& l) - { - return symbol_type (token::TOKEN_CQL, l); - } -#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -2477,66 +1676,6 @@ switch (yykind) return symbol_type (token::TOKEN_CONNECT_TIMEOUT, l); } #endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_CONTACT_POINTS (location_type l) - { - return symbol_type (token::TOKEN_CONTACT_POINTS, std::move (l)); - } -#else - static - symbol_type - make_CONTACT_POINTS (const location_type& l) - { - return symbol_type (token::TOKEN_CONTACT_POINTS, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_KEYSPACE (location_type l) - { - return symbol_type (token::TOKEN_KEYSPACE, std::move (l)); - } -#else - static - symbol_type - make_KEYSPACE (const location_type& l) - { - return symbol_type (token::TOKEN_KEYSPACE, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_CONSISTENCY (location_type l) - { - return symbol_type (token::TOKEN_CONSISTENCY, std::move (l)); - } -#else - static - symbol_type - make_CONSISTENCY (const location_type& l) - { - return symbol_type (token::TOKEN_CONSISTENCY, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SERIAL_CONSISTENCY (location_type l) - { - return symbol_type (token::TOKEN_SERIAL_CONSISTENCY, std::move (l)); - } -#else - static - symbol_type - make_SERIAL_CONSISTENCY (const location_type& l) - { - return symbol_type (token::TOKEN_SERIAL_CONSISTENCY, l); - } -#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -2627,51 +1766,6 @@ switch (yykind) return symbol_type (token::TOKEN_SERVE_RETRY_CONTINUE, l); } #endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_REQUEST_TIMEOUT (location_type l) - { - return symbol_type (token::TOKEN_REQUEST_TIMEOUT, std::move (l)); - } -#else - static - symbol_type - make_REQUEST_TIMEOUT (const location_type& l) - { - return symbol_type (token::TOKEN_REQUEST_TIMEOUT, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_TCP_KEEPALIVE (location_type l) - { - return symbol_type (token::TOKEN_TCP_KEEPALIVE, std::move (l)); - } -#else - static - symbol_type - make_TCP_KEEPALIVE (const location_type& l) - { - return symbol_type (token::TOKEN_TCP_KEEPALIVE, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_TCP_NODELAY (location_type l) - { - return symbol_type (token::TOKEN_TCP_NODELAY, std::move (l)); - } -#else - static - symbol_type - make_TCP_NODELAY (const location_type& l) - { - return symbol_type (token::TOKEN_TCP_NODELAY, l); - } -#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -4939,43 +4033,20 @@ switch (yykind) #endif - class context - { - public: - context (const Dhcp4Parser& yyparser, const symbol_type& yyla); - const symbol_type& lookahead () const YY_NOEXCEPT { return yyla_; } - symbol_kind_type token () const YY_NOEXCEPT { return yyla_.kind (); } - const location_type& location () const YY_NOEXCEPT { return yyla_.location; } - - /// Put in YYARG at most YYARGN of the expected tokens, and return the - /// number of tokens stored in YYARG. If YYARG is null, return the - /// number of expected tokens (guaranteed to be less than YYNTOKENS). - int expected_tokens (symbol_kind_type yyarg[], int yyargn) const; - - private: - const Dhcp4Parser& yyparser_; - const symbol_type& yyla_; - }; - private: -#if YY_CPLUSPLUS < 201103L - /// Non copyable. + /// This class is not copyable. Dhcp4Parser (const Dhcp4Parser&); - /// Non copyable. Dhcp4Parser& operator= (const Dhcp4Parser&); -#endif - /// Stored state numbers (used for stacks). typedef short state_type; - /// The arguments of the error message. - int yy_syntax_error_arguments_ (const context& yyctx, - symbol_kind_type yyarg[], int yyargn) const; - /// Generate an error message. - /// \param yyctx the context in which the error occurred. - virtual std::string yysyntax_error_ (const context& yyctx) const; + /// \param yystate the state where the error occurred. + /// \param yyla the lookahead token. + virtual std::string yysyntax_error_ (state_type yystate, + const symbol_type& yyla) const; + /// Compute post-reduction state. /// \param yystate the current state /// \param yysym the nonterminal to push on the stack @@ -4983,26 +4054,19 @@ switch (yykind) /// Whether the given \c yypact_ value indicates a defaulted state. /// \param yyvalue the value to check - static bool yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT; + static bool yy_pact_value_is_default_ (int yyvalue); /// Whether the given \c yytable_ value indicates a syntax error. /// \param yyvalue the value to check - static bool yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT; + static bool yy_table_value_is_error_ (int yyvalue); static const short yypact_ninf_; static const signed char yytable_ninf_; - /// Convert a scanner token kind \a t to a symbol kind. - /// In theory \a t should be a token_kind_type, but character literals - /// are valid, yet not members of the token_kind_type enum. - static symbol_kind_type yytranslate_ (int t) YY_NOEXCEPT; - - /// Convert the symbol name \a n to a form suitable for a diagnostic. - static std::string yytnamerr_ (const char *yystr); - - /// For a symbol, its name in clear. - static const char* const yytname_[]; - + /// Convert a scanner token number \a t to a symbol number. + /// In theory \a t should be a token_type, but character literals + /// are valid, yet not members of the token_type enum. + static token_number_type yytranslate_ (int t); // Tables. // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing @@ -5027,31 +4091,37 @@ switch (yykind) static const short yycheck_[]; - // YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of - // state STATE-NUM. + // YYSTOS[STATE-NUM] -- The (internal number of the) accessing + // symbol of state STATE-NUM. static const short yystos_[]; - // YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. + // YYR1[YYN] -- Symbol number of symbol that rule YYN derives. static const short yyr1_[]; - // YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. + // YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. static const signed char yyr2_[]; + /// Convert the symbol name \a n to a form suitable for a diagnostic. + static std::string yytnamerr_ (const char *n); + + + /// For a symbol, its name in clear. + static const char* const yytname_[]; #if PARSER4_DEBUG // YYRLINE[YYN] -- Source line where rule number YYN was defined. static const short yyrline_[]; /// Report on the debug stream that the rule \a r is going to be reduced. - virtual void yy_reduce_print_ (int r) const; + virtual void yy_reduce_print_ (int r); /// Print the state stack on the debug stream. - virtual void yy_stack_print_ () const; + virtual void yystack_print_ (); /// Debugging level. int yydebug_; /// Debug stream. std::ostream* yycdebug_; - /// \brief Display a symbol kind, value and location. + /// \brief Display a symbol type, value and location. /// \param yyo The output stream. /// \param yysym The symbol. template @@ -5072,7 +4142,7 @@ switch (yykind) /// Default constructor. by_state () YY_NOEXCEPT; - /// The symbol kind as needed by the constructor. + /// The symbol type as needed by the constructor. typedef state_type kind_type; /// Constructor. @@ -5084,12 +4154,12 @@ switch (yykind) /// Record that this symbol is empty. void clear () YY_NOEXCEPT; - /// Steal the symbol kind from \a that. + /// Steal the symbol type from \a that. void move (by_state& that); - /// The symbol kind (corresponding to \a state). - /// \a symbol_kind::S_YYEMPTY when empty. - symbol_kind_type kind () const YY_NOEXCEPT; + /// The (internal) type number (corresponding to \a state). + /// \a empty_symbol when empty. + symbol_number_type type_get () const YY_NOEXCEPT; /// The state number used to denote an empty symbol. /// We use the initial state, as it does not have a value. @@ -5128,22 +4198,15 @@ switch (yykind) { public: // Hide our reversed order. - typedef typename S::iterator iterator; - typedef typename S::const_iterator const_iterator; + typedef typename S::reverse_iterator iterator; + typedef typename S::const_reverse_iterator const_iterator; typedef typename S::size_type size_type; typedef typename std::ptrdiff_t index_type; - stack (size_type n = 200) YY_NOEXCEPT + stack (size_type n = 200) : seq_ (n) {} -#if 201103L <= YY_CPLUSPLUS - /// Non copyable. - stack (const stack&) = delete; - /// Non copyable. - stack& operator= (const stack&) = delete; -#endif - /// Random access. /// /// Index 0 returns the topmost element. @@ -5194,25 +4257,31 @@ switch (yykind) return index_type (seq_.size ()); } + std::ptrdiff_t + ssize () const YY_NOEXCEPT + { + return std::ptrdiff_t (size ()); + } + /// Iterator on top of the stack (going downwards). const_iterator begin () const YY_NOEXCEPT { - return seq_.begin (); + return seq_.rbegin (); } /// Bottom of the stack. const_iterator end () const YY_NOEXCEPT { - return seq_.end (); + return seq_.rend (); } /// Present a slice of the top of a stack. class slice { public: - slice (const stack& stack, index_type range) YY_NOEXCEPT + slice (const stack& stack, index_type range) : stack_ (stack) , range_ (range) {} @@ -5229,12 +4298,8 @@ switch (yykind) }; private: -#if YY_CPLUSPLUS < 201103L - /// Non copyable. stack (const stack&); - /// Non copyable. stack& operator= (const stack&); -#endif /// The wrapped container. S seq_; }; @@ -5262,30 +4327,35 @@ switch (yykind) void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym); /// Pop \a n symbols from the stack. - void yypop_ (int n = 1) YY_NOEXCEPT; + void yypop_ (int n = 1); + + /// Some specific tokens. + static const token_number_type yy_error_token_ = 1; + static const token_number_type yy_undef_token_ = 2; /// Constants. enum { - yylast_ = 1283, ///< Last index in yytable_. - yynnts_ = 430, ///< Number of nonterminal symbols. - yyfinal_ = 28 ///< Termination state number. + yyeof_ = 0, + yylast_ = 1424, ///< Last index in yytable_. + yynnts_ = 419, ///< Number of nonterminal symbols. + yyfinal_ = 28, ///< Termination state number. + yyntokens_ = 203 ///< Number of tokens. }; // User arguments. isc::dhcp::Parser4Context& ctx; - }; inline - Dhcp4Parser::symbol_kind_type - Dhcp4Parser::yytranslate_ (int t) YY_NOEXCEPT + Dhcp4Parser::token_number_type + Dhcp4Parser::yytranslate_ (int t) { // YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to // TOKEN-NUM as returned by yylex. static - const unsigned char + const token_number_type translate_table[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -5333,54 +4403,96 @@ switch (yykind) 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, - 205, 206, 207, 208, 209, 210 + 195, 196, 197, 198, 199, 200, 201, 202 }; - // Last valid token kind. - const int code_max = 465; + const int user_token_number_max_ = 457; if (t <= 0) - return symbol_kind::S_YYEOF; - else if (t <= code_max) - return static_cast (translate_table[t]); + return yyeof_; + else if (t <= user_token_number_max_) + return translate_table[t]; else - return symbol_kind::S_YYUNDEF; + return yy_undef_token_; } // basic_symbol. +#if 201103L <= YY_CPLUSPLUS + template + Dhcp4Parser::basic_symbol::basic_symbol (basic_symbol&& that) + : Base (std::move (that)) + , value () + , location (std::move (that.location)) + { + switch (this->type_get ()) + { + case 218: // value + case 222: // map_value + case 265: // ddns_replace_client_name_value + case 292: // socket_type + case 295: // outbound_interface_value + case 317: // db_type + case 335: // on_fail_mode + case 414: // hr_mode + case 569: // ncr_protocol_value + value.move< ElementPtr > (std::move (that.value)); + break; + + case 202: // "boolean" + value.move< bool > (std::move (that.value)); + break; + + case 201: // "floating point" + value.move< double > (std::move (that.value)); + break; + + case 200: // "integer" + value.move< int64_t > (std::move (that.value)); + break; + + case 199: // "constant string" + value.move< std::string > (std::move (that.value)); + break; + + default: + break; + } + + } +#endif + template Dhcp4Parser::basic_symbol::basic_symbol (const basic_symbol& that) : Base (that) , value () , location (that.location) { - switch (this->kind ()) + switch (this->type_get ()) { - case symbol_kind::S_value: // value - case symbol_kind::S_map_value: // map_value - case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value - case symbol_kind::S_socket_type: // socket_type - case symbol_kind::S_outbound_interface_value: // outbound_interface_value - case symbol_kind::S_db_type: // db_type - case symbol_kind::S_on_fail_mode: // on_fail_mode - case symbol_kind::S_hr_mode: // hr_mode - case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value + case 218: // value + case 222: // map_value + case 265: // ddns_replace_client_name_value + case 292: // socket_type + case 295: // outbound_interface_value + case 317: // db_type + case 335: // on_fail_mode + case 414: // hr_mode + case 569: // ncr_protocol_value value.copy< ElementPtr > (YY_MOVE (that.value)); break; - case symbol_kind::S_BOOLEAN: // "boolean" + case 202: // "boolean" value.copy< bool > (YY_MOVE (that.value)); break; - case symbol_kind::S_FLOAT: // "floating point" + case 201: // "floating point" value.copy< double > (YY_MOVE (that.value)); break; - case symbol_kind::S_INTEGER: // "integer" + case 200: // "integer" value.copy< int64_t > (YY_MOVE (that.value)); break; - case symbol_kind::S_STRING: // "constant string" + case 199: // "constant string" value.copy< std::string > (YY_MOVE (that.value)); break; @@ -5392,20 +4504,11 @@ switch (yykind) - - template - Dhcp4Parser::symbol_kind_type - Dhcp4Parser::basic_symbol::type_get () const YY_NOEXCEPT - { - return this->kind (); - } - - template bool Dhcp4Parser::basic_symbol::empty () const YY_NOEXCEPT { - return this->kind () == symbol_kind::S_YYEMPTY; + return Base::type_get () == empty_symbol; } template @@ -5413,33 +4516,33 @@ switch (yykind) Dhcp4Parser::basic_symbol::move (basic_symbol& s) { super_type::move (s); - switch (this->kind ()) + switch (this->type_get ()) { - case symbol_kind::S_value: // value - case symbol_kind::S_map_value: // map_value - case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value - case symbol_kind::S_socket_type: // socket_type - case symbol_kind::S_outbound_interface_value: // outbound_interface_value - case symbol_kind::S_db_type: // db_type - case symbol_kind::S_on_fail_mode: // on_fail_mode - case symbol_kind::S_hr_mode: // hr_mode - case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value + case 218: // value + case 222: // map_value + case 265: // ddns_replace_client_name_value + case 292: // socket_type + case 295: // outbound_interface_value + case 317: // db_type + case 335: // on_fail_mode + case 414: // hr_mode + case 569: // ncr_protocol_value value.move< ElementPtr > (YY_MOVE (s.value)); break; - case symbol_kind::S_BOOLEAN: // "boolean" + case 202: // "boolean" value.move< bool > (YY_MOVE (s.value)); break; - case symbol_kind::S_FLOAT: // "floating point" + case 201: // "floating point" value.move< double > (YY_MOVE (s.value)); break; - case symbol_kind::S_INTEGER: // "integer" + case 200: // "integer" value.move< int64_t > (YY_MOVE (s.value)); break; - case symbol_kind::S_STRING: // "constant string" + case 199: // "constant string" value.move< std::string > (YY_MOVE (s.value)); break; @@ -5450,67 +4553,57 @@ switch (yykind) location = YY_MOVE (s.location); } - // by_kind. + // by_type. inline - Dhcp4Parser::by_kind::by_kind () YY_NOEXCEPT - : kind_ (symbol_kind::S_YYEMPTY) + Dhcp4Parser::by_type::by_type () + : type (empty_symbol) {} #if 201103L <= YY_CPLUSPLUS inline - Dhcp4Parser::by_kind::by_kind (by_kind&& that) YY_NOEXCEPT - : kind_ (that.kind_) + Dhcp4Parser::by_type::by_type (by_type&& that) + : type (that.type) { that.clear (); } #endif inline - Dhcp4Parser::by_kind::by_kind (const by_kind& that) YY_NOEXCEPT - : kind_ (that.kind_) + Dhcp4Parser::by_type::by_type (const by_type& that) + : type (that.type) {} inline - Dhcp4Parser::by_kind::by_kind (token_kind_type t) YY_NOEXCEPT - : kind_ (yytranslate_ (t)) + Dhcp4Parser::by_type::by_type (token_type t) + : type (yytranslate_ (t)) {} - - inline void - Dhcp4Parser::by_kind::clear () YY_NOEXCEPT + Dhcp4Parser::by_type::clear () { - kind_ = symbol_kind::S_YYEMPTY; + type = empty_symbol; } inline void - Dhcp4Parser::by_kind::move (by_kind& that) + Dhcp4Parser::by_type::move (by_type& that) { - kind_ = that.kind_; + type = that.type; that.clear (); } inline - Dhcp4Parser::symbol_kind_type - Dhcp4Parser::by_kind::kind () const YY_NOEXCEPT + int + Dhcp4Parser::by_type::type_get () const YY_NOEXCEPT { - return kind_; + return type; } - - inline - Dhcp4Parser::symbol_kind_type - Dhcp4Parser::by_kind::type_get () const YY_NOEXCEPT - { - return this->kind (); - } - - #line 14 "dhcp4_parser.yy" } } // isc::dhcp -#line 5514 "dhcp4_parser.h" +#line 4606 "dhcp4_parser.h" + diff --git a/src/bin/dhcp4/dhcp4_parser.yy b/src/bin/dhcp4/dhcp4_parser.yy index f67edb903f..0db80ff0db 100644 --- a/src/bin/dhcp4/dhcp4_parser.yy +++ b/src/bin/dhcp4/dhcp4_parser.yy @@ -82,7 +82,6 @@ using namespace std; MEMFILE "memfile" MYSQL "mysql" POSTGRESQL "postgresql" - CQL "cql" USER "user" PASSWORD "password" HOST "host" @@ -91,19 +90,12 @@ using namespace std; LFC_INTERVAL "lfc-interval" READONLY "readonly" CONNECT_TIMEOUT "connect-timeout" - CONTACT_POINTS "contact-points" - KEYSPACE "keyspace" - CONSISTENCY "consistency" - SERIAL_CONSISTENCY "serial-consistency" MAX_RECONNECT_TRIES "max-reconnect-tries" RECONNECT_WAIT_TIME "reconnect-wait-time" ON_FAIL "on-fail" STOP_RETRY_EXIT "stop-retry-exit" SERVE_RETRY_EXIT "serve-retry-exit" SERVE_RETRY_CONTINUE "serve-retry-continue" - REQUEST_TIMEOUT "request-timeout" - TCP_KEEPALIVE "tcp-keepalive" - TCP_NODELAY "tcp-nodelay" MAX_ROW_ERRORS "max-row-errors" TRUST_ANCHOR "trust-anchor" CERT_FILE "cert-file" @@ -973,16 +965,9 @@ database_map_param: database_type | lfc_interval | readonly | connect_timeout - | contact_points | max_reconnect_tries | reconnect_wait_time | on_fail - | request_timeout - | tcp_keepalive - | tcp_nodelay - | keyspace - | consistency - | serial_consistency | max_row_errors | trust_anchor | cert_file @@ -1002,7 +987,6 @@ database_type: TYPE { db_type: MEMFILE { $$ = ElementPtr(new StringElement("memfile", ctx.loc2pos(@1))); } | MYSQL { $$ = ElementPtr(new StringElement("mysql", ctx.loc2pos(@1))); } | POSTGRESQL { $$ = ElementPtr(new StringElement("postgresql", ctx.loc2pos(@1))); } - | CQL { $$ = ElementPtr(new StringElement("cql", ctx.loc2pos(@1))); } ; user: USER { @@ -1071,60 +1055,6 @@ connect_timeout: CONNECT_TIMEOUT COLON INTEGER { ctx.stack_.back()->set("connect-timeout", n); }; -request_timeout: REQUEST_TIMEOUT COLON INTEGER { - ctx.unique("request-timeout", ctx.loc2pos(@1)); - ElementPtr n(new IntElement($3, ctx.loc2pos(@3))); - ctx.stack_.back()->set("request-timeout", n); -}; - -tcp_keepalive: TCP_KEEPALIVE COLON INTEGER { - ctx.unique("tcp-keepalive", ctx.loc2pos(@1)); - ElementPtr n(new IntElement($3, ctx.loc2pos(@3))); - ctx.stack_.back()->set("tcp-keepalive", n); -}; - -tcp_nodelay: TCP_NODELAY COLON BOOLEAN { - ctx.unique("tcp-nodelay", ctx.loc2pos(@1)); - ElementPtr n(new BoolElement($3, ctx.loc2pos(@3))); - ctx.stack_.back()->set("tcp-nodelay", n); -}; - -contact_points: CONTACT_POINTS { - ctx.unique("contact-points", ctx.loc2pos(@1)); - ctx.enter(ctx.NO_KEYWORD); -} COLON STRING { - ElementPtr cp(new StringElement($4, ctx.loc2pos(@4))); - ctx.stack_.back()->set("contact-points", cp); - ctx.leave(); -}; - -keyspace: KEYSPACE { - ctx.unique("keyspace", ctx.loc2pos(@1)); - ctx.enter(ctx.NO_KEYWORD); -} COLON STRING { - ElementPtr ks(new StringElement($4, ctx.loc2pos(@4))); - ctx.stack_.back()->set("keyspace", ks); - ctx.leave(); -}; - -consistency: CONSISTENCY { - ctx.unique("consistency", ctx.loc2pos(@1)); - ctx.enter(ctx.NO_KEYWORD); -} COLON STRING { - ElementPtr c(new StringElement($4, ctx.loc2pos(@4))); - ctx.stack_.back()->set("consistency", c); - ctx.leave(); -}; - -serial_consistency: SERIAL_CONSISTENCY { - ctx.unique("serial-consistency", ctx.loc2pos(@1)); - ctx.enter(ctx.NO_KEYWORD); -} COLON STRING { - ElementPtr c(new StringElement($4, ctx.loc2pos(@4))); - ctx.stack_.back()->set("serial-consistency", c); - ctx.leave(); -}; - max_reconnect_tries: MAX_RECONNECT_TRIES COLON INTEGER { ctx.unique("max-reconnect-tries", ctx.loc2pos(@1)); ElementPtr n(new IntElement($3, ctx.loc2pos(@3))); diff --git a/src/bin/dhcp4/dhcp4_srv.cc b/src/bin/dhcp4/dhcp4_srv.cc index f5e302d7e4..62f957fcd7 100644 --- a/src/bin/dhcp4/dhcp4_srv.cc +++ b/src/bin/dhcp4/dhcp4_srv.cc @@ -57,9 +57,6 @@ #ifdef HAVE_PGSQL #include #endif -#ifdef HAVE_CQL -#include -#endif #include #include @@ -4129,9 +4126,6 @@ Dhcpv4Srv::getVersion(bool extended) { #endif #ifdef HAVE_PGSQL tmp << PgSqlLeaseMgr::getDBVersion() << endl; -#endif -#ifdef HAVE_CQL - tmp << CqlLeaseMgr::getDBVersion() << endl; #endif tmp << Memfile_LeaseMgr::getDBVersion(Memfile_LeaseMgr::V4); diff --git a/src/bin/dhcp4/location.hh b/src/bin/dhcp4/location.hh index 860fbfa0c9..72951b2f6d 100644 --- a/src/bin/dhcp4/location.hh +++ b/src/bin/dhcp4/location.hh @@ -1,8 +1,8 @@ -// A Bison parser, made by GNU Bison 3.8.2. +// A Bison parser, made by GNU Bison 3.5.1. // Locations for Bison parsers in C++ -// Copyright (C) 2002-2015, 2018-2021 Free Software Foundation, Inc. +// Copyright (C) 2002-2015, 2018-2020 Free Software Foundation, Inc. // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ // GNU General Public License for more details. // You should have received a copy of the GNU General Public License -// along with this program. If not, see . +// along with this program. If not, see . // As a special exception, you may create a larger work that contains // part or all of the Bison parser skeleton and distribute that work @@ -61,13 +61,11 @@ namespace isc { namespace dhcp { class position { public: - /// Type for file name. - typedef const std::string filename_type; /// Type for line and column numbers. typedef int counter_type; /// Construct a position. - explicit position (filename_type* f = YY_NULLPTR, + explicit position (std::string* f = YY_NULLPTR, counter_type l = 1, counter_type c = 1) : filename (f) @@ -77,7 +75,7 @@ namespace isc { namespace dhcp { /// Initialization. - void initialize (filename_type* fn = YY_NULLPTR, + void initialize (std::string* fn = YY_NULLPTR, counter_type l = 1, counter_type c = 1) { @@ -106,7 +104,7 @@ namespace isc { namespace dhcp { /** \} */ /// File name to which this position refers. - filename_type* filename; + std::string* filename; /// Current line number. counter_type line; /// Current column number. @@ -149,6 +147,24 @@ namespace isc { namespace dhcp { return res -= width; } + /// Compare two position objects. + inline bool + operator== (const position& pos1, const position& pos2) + { + return (pos1.line == pos2.line + && pos1.column == pos2.column + && (pos1.filename == pos2.filename + || (pos1.filename && pos2.filename + && *pos1.filename == *pos2.filename))); + } + + /// Compare two position objects. + inline bool + operator!= (const position& pos1, const position& pos2) + { + return !(pos1 == pos2); + } + /** \brief Intercept output stream redirection. ** \param ostr the destination output stream ** \param pos a reference to the position to redirect @@ -166,8 +182,6 @@ namespace isc { namespace dhcp { class location { public: - /// Type for file name. - typedef position::filename_type filename_type; /// Type for line and column numbers. typedef position::counter_type counter_type; @@ -184,7 +198,7 @@ namespace isc { namespace dhcp { {} /// Construct a 0-width location in \a f, \a l, \a c. - explicit location (filename_type* f, + explicit location (std::string* f, counter_type l = 1, counter_type c = 1) : begin (f, l, c) @@ -193,7 +207,7 @@ namespace isc { namespace dhcp { /// Initialization. - void initialize (filename_type* f = YY_NULLPTR, + void initialize (std::string* f = YY_NULLPTR, counter_type l = 1, counter_type c = 1) { @@ -275,6 +289,20 @@ namespace isc { namespace dhcp { return res -= width; } + /// Compare two location objects. + inline bool + operator== (const location& loc1, const location& loc2) + { + return loc1.begin == loc2.begin && loc1.end == loc2.end; + } + + /// Compare two location objects. + inline bool + operator!= (const location& loc1, const location& loc2) + { + return !(loc1 == loc2); + } + /** \brief Intercept output stream redirection. ** \param ostr the destination output stream ** \param loc a reference to the location to redirect @@ -301,6 +329,6 @@ namespace isc { namespace dhcp { #line 14 "dhcp4_parser.yy" } } // isc::dhcp -#line 305 "location.hh" +#line 333 "location.hh" #endif // !YY_PARSER4_LOCATION_HH_INCLUDED diff --git a/src/bin/dhcp4/tests/Makefile.am b/src/bin/dhcp4/tests/Makefile.am index cba5c96d4f..8e5808bee5 100644 --- a/src/bin/dhcp4/tests/Makefile.am +++ b/src/bin/dhcp4/tests/Makefile.am @@ -117,9 +117,6 @@ endif if HAVE_PGSQL dhcp4_unittests_LDFLAGS += $(PGSQL_LIBS) endif -if HAVE_CQL -dhcp4_unittests_LDFLAGS += $(CQL_LIBS) -endif dhcp4_unittests_LDFLAGS += $(GTEST_LDFLAGS) dhcp4_unittests_LDADD = $(top_builddir)/src/bin/dhcp4/libdhcp4.la @@ -144,10 +141,6 @@ if HAVE_PGSQL dhcp4_unittests_LDADD += $(top_builddir)/src/lib/pgsql/testutils/libpgsqltest.la dhcp4_unittests_LDADD += $(top_builddir)/src/lib/pgsql/libkea-pgsql.la endif -if HAVE_CQL -dhcp4_unittests_LDADD += $(top_builddir)/src/lib/cql/testutils/libcqltest.la -dhcp4_unittests_LDADD += $(top_builddir)/src/lib/cql/libkea-cql.la -endif dhcp4_unittests_LDADD += $(top_builddir)/src/lib/database/testutils/libdatabasetest.la dhcp4_unittests_LDADD += $(top_builddir)/src/lib/database/libkea-database.la diff --git a/src/bin/dhcp4/tests/dora_unittest.cc b/src/bin/dhcp4/tests/dora_unittest.cc index 48224c8624..90bfb28177 100644 --- a/src/bin/dhcp4/tests/dora_unittest.cc +++ b/src/bin/dhcp4/tests/dora_unittest.cc @@ -15,10 +15,6 @@ #include #include -#ifdef HAVE_CQL -#include -#endif - #ifdef HAVE_MYSQL #include #endif @@ -112,37 +108,33 @@ namespace { /// - Using PostgreSQL lease database backend to store leases /// /// - Configuration 10: -/// - Simple configuration with a single subnet and single pool -/// - Using Cassandra lease database backend to store leases -/// -/// - Configuration 11: /// - Simple configuration with a single subnet /// - One in-pool reservation for a circuit-id of 'charter950' /// -/// - Configuration 12: +/// - Configuration 11: /// - Simple configuration with a single subnet /// - One in-pool reservation for MAC address aa:bb:cc:dd:ee:ff /// - The reservations-in-subnet flag is set to true /// -/// - Configuration 13: +/// - Configuration 12: /// - Simple configuration with a single subnet as in #12 /// - The reservations-in-subnet flag is set to false for testing that the /// reservations are ignored /// -/// - Configuration 14: +/// - Configuration 13: /// - Simple configuration with a single subnet /// - Two host reservations, one out of the pool, another one in pool /// - The reservations-in-subnet and reservations-out-of-pool flags are set to /// true to test that only out of pool reservations are honored. /// -/// - Configuration 15: +/// - Configuration 14: /// - Use for testing authoritative flag /// - 1 subnet: 10.0.0.0/24 /// - 1 pool: 10.0.0.10-10.0.0.100 /// - authoritative flag is set to true, thus the server responds /// with DHCPNAK to requests from unknown clients. /// -/// - Configuration 16: +/// - Configuration 15: /// - Use for testing authoritative flag /// - 1 subnet: 10.0.0.0/24 /// - 1 pool: 10.0.0.10-10.0.0.100 @@ -416,24 +408,6 @@ const char* DORA_CONFIGS[] = { "}", // Configuration 10 - "{ \"interfaces-config\": {" - " \"interfaces\": [ \"*\" ]" - "}," - "\"lease-database\": {" - " \"type\": \"cql\"," - " \"name\": \"keatest\"," - " \"user\": \"keatest\"," - " \"password\": \"keatest\"" - "}," - "\"valid-lifetime\": 600," - "\"subnet4\": [ { " - " \"subnet\": \"10.0.0.0/24\", " - " \"id\": 1," - " \"pools\": [ { \"pool\": \"10.0.0.10-10.0.0.100\" } ]" - " } ]" - "}", - - // Configuration 11 "{ \"interfaces-config\": {" " \"interfaces\": [ \"*\" ]" "}," @@ -451,7 +425,7 @@ const char* DORA_CONFIGS[] = { "} ]" "}", - // Configuration 12 + // Configuration 11 "{ \"interfaces-config\": {" " \"interfaces\": [ \"*\" ]" "}," @@ -471,7 +445,7 @@ const char* DORA_CONFIGS[] = { "} ]" "}", - // Configuration 13 + // Configuration 12 "{ \"interfaces-config\": {" " \"interfaces\": [ \"*\" ]" "}," @@ -490,7 +464,7 @@ const char* DORA_CONFIGS[] = { "} ]" "}", - // Configuration 14 + // Configuration 13 "{ \"interfaces-config\": {" " \"interfaces\": [ \"*\" ]" "}," @@ -514,7 +488,7 @@ const char* DORA_CONFIGS[] = { "} ]" "}", - // Configuration 15 + // Configuration 14 "{ \"interfaces-config\": {" " \"interfaces\": [ \"*\" ]" "}," @@ -531,7 +505,7 @@ const char* DORA_CONFIGS[] = { " } ]" "}", - // Configuration 16 + // Configuration 15 "{ \"interfaces-config\": {" " \"interfaces\": [ \"*\" ]" "}," @@ -548,7 +522,7 @@ const char* DORA_CONFIGS[] = { " } ]" "}", - // Configuration 17 + // Configuration 16 "{ \"interfaces-config\": {" " \"interfaces\": [ \"*\" ]" "}," @@ -568,7 +542,6 @@ const char* DORA_CONFIGS[] = { " }" "]" "}" - }; /// @brief Test fixture class for testing 4-way (DORA) exchanges. @@ -1097,7 +1070,7 @@ void DORATest::authoritative() { Dhcp4Client client(Dhcp4Client::SELECTING); // Configure DHCP server. - configure(DORA_CONFIGS[15], *client.getServer()); + configure(DORA_CONFIGS[14], *client.getServer()); client.includeClientId("11:22"); // Try to renew an address that is outside the pool. @@ -1211,7 +1184,7 @@ void DORATest::notAuthoritative() { Dhcp4Client client(Dhcp4Client::SELECTING); // Configure DHCP server. - configure(DORA_CONFIGS[16], *client.getServer()); + configure(DORA_CONFIGS[15], *client.getServer()); client.includeClientId("11:22"); // Try to renew an address that is outside the pool. @@ -2144,7 +2117,7 @@ DORATest::reservationModeDisabled() { // Configure DHCP server. In this configuration the reservations flags are // set to false. Thus, the server should ignore the reservation for // this client. - configure(DORA_CONFIGS[13], *client.getServer()); + configure(DORA_CONFIGS[12], *client.getServer()); // Client requests the 10.0.0.50 address and the server should assign it // as it ignores the reservation in the current mode. ASSERT_NO_THROW(client.doDORA(boost::shared_ptr< @@ -2159,7 +2132,7 @@ DORATest::reservationModeDisabled() { ASSERT_EQ("10.0.0.50", client.config_.lease_.addr_.toText()); // Reconfigure the server to respect the host reservations. - configure(DORA_CONFIGS[12], *client.getServer()); + configure(DORA_CONFIGS[11], *client.getServer()); // The client requests the previously allocated address again, but the // server should allocate the reserved address this time. @@ -2218,7 +2191,7 @@ DORATest::reservationModeOutOfPool() { Dhcp4Client clientA(Dhcp4Client::SELECTING); clientA.setHWAddress("aa:bb:cc:dd:ee:ff"); // Configure the server to respect out of the pool reservations. - configure(DORA_CONFIGS[14], *clientA.getServer()); + configure(DORA_CONFIGS[13], *clientA.getServer()); // The client for which we have a reservation is doing 4-way exchange // and requests a different address than reserved. The server should // allocate the reserved address to this client. @@ -2563,7 +2536,7 @@ DORATest::changingCircuitId() { client.useRelay(true, IOAddress("10.0.0.1"), IOAddress("10.0.0.2")); // Configure DHCP server. - configure(DORA_CONFIGS[11], *client.getServer()); + configure(DORA_CONFIGS[10], *client.getServer()); // Send DHCPDISCOVER. boost::shared_ptr requested_address(new IOAddress("10.0.0.9")); @@ -2636,7 +2609,7 @@ DORATest::storeExtendedInfoEnabled() { client.setCircuitId("charter950"); // Configure DHCP server. - configure(DORA_CONFIGS[17], *client.getServer()); + configure(DORA_CONFIGS[16], *client.getServer()); // Client A performs 4-way exchange and should obtain a reserved // address. ASSERT_NO_THROW_LOG(client.doDORA(boost::shared_ptr< @@ -2684,7 +2657,7 @@ DORATest::storeExtendedInfoDisabled() { client.setCircuitId("charter950"); // Configure DHCP server. - configure(DORA_CONFIGS[17], *client.getServer()); + configure(DORA_CONFIGS[16], *client.getServer()); // Client A performs 4-way exchange and should obtain a reserved // address. ASSERT_NO_THROW_LOG(client.doDORA(boost::shared_ptr< @@ -2799,46 +2772,4 @@ TEST_F(DORAPgSQLTest, multiStageBootMultiThreading) { #endif -#ifdef HAVE_CQL - -// Starting tests which require Cassandra backend availability. Those tests -// will not be executed if Kea has been compiled without the -// --with-cql. -class DORACQLTest : public DORATest { -public: - /// @brief Constructor. - /// - /// Recreates CQL schema for a test. - DORACQLTest() : DORATest() { - // Ensure we have the proper schema with no transient data. - db::test::createCqlSchema(); - } - - /// @brief Destructor. - /// - /// Destroys CQL schema. - virtual ~DORACQLTest() { - // If data wipe enabled, delete transient data otherwise destroy the schema - db::test::destroyCqlSchema(); - } -}; - -// Test that the client using the same hardware address but multiple -// client identifiers will obtain multiple leases (CQL lease database). -TEST_F(DORACQLTest, multiStageBoot) { - Dhcpv4SrvMTTestGuard guard(*this, false); - // DORA_CONFIGS[10] to be used for server configuration. - testMultiStageBoot(10); -} - -// Test that the client using the same hardware address but multiple -// client identifiers will obtain multiple leases (CQL lease database). -TEST_F(DORACQLTest, multiStageBootMultiThreading) { - Dhcpv4SrvMTTestGuard guard(*this, true); - // DORA_CONFIGS[10] to be used for server configuration. - testMultiStageBoot(10); -} - -#endif - } // end of anonymous namespace diff --git a/src/bin/dhcp4/tests/parser_unittest.cc b/src/bin/dhcp4/tests/parser_unittest.cc index 9252e56160..054568870a 100644 --- a/src/bin/dhcp4/tests/parser_unittest.cc +++ b/src/bin/dhcp4/tests/parser_unittest.cc @@ -276,7 +276,6 @@ TEST(ParserTest, file) { "all-keys.json", "all-options.json", "backends.json", - "cassandra.json", "classify.json", "classify2.json", "comments.json", diff --git a/src/bin/dhcp6/Makefile.am b/src/bin/dhcp6/Makefile.am index 4ff91eaa69..283b0e6b49 100644 --- a/src/bin/dhcp6/Makefile.am +++ b/src/bin/dhcp6/Makefile.am @@ -10,9 +10,6 @@ endif if HAVE_PGSQL AM_CPPFLAGS += $(PGSQL_CPPFLAGS) endif -if HAVE_CQL -AM_CPPFLAGS += $(CQL_CPPFLAGS) -endif AM_CXXFLAGS = $(KEA_CXXFLAGS) @@ -61,9 +58,6 @@ endif if HAVE_PGSQL kea_dhcp6_LDADD += $(top_builddir)/src/lib/pgsql/libkea-pgsql.la endif -if HAVE_CQL -kea_dhcp6_LDADD += $(top_builddir)/src/lib/cql/libkea-cql.la -endif kea_dhcp6_LDADD += $(top_builddir)/src/lib/database/libkea-database.la @@ -85,9 +79,6 @@ endif if HAVE_PGSQL kea_dhcp6_LDFLAGS += $(PGSQL_LIBS) endif -if HAVE_CQL -kea_dhcp6_LDFLAGS += $(CQL_LIBS) -endif kea_dhcp6dir = $(pkgdatadir) diff --git a/src/bin/dhcp6/dhcp6_lexer.cc b/src/bin/dhcp6/dhcp6_lexer.cc index 13bfc42733..c9938dff34 100644 --- a/src/bin/dhcp6/dhcp6_lexer.cc +++ b/src/bin/dhcp6/dhcp6_lexer.cc @@ -1,6 +1,6 @@ -#line 1 "dhcp6_lexer.cc" +#line 2 "dhcp6_lexer.cc" -#line 3 "dhcp6_lexer.cc" +#line 4 "dhcp6_lexer.cc" #define YY_INT_ALIGNED short int @@ -691,8 +691,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); /* %% [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 226 -#define YY_END_OF_BUFFER 227 +#define YY_NUM_RULES 218 +#define YY_END_OF_BUFFER 219 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -700,35 +700,35 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[2125] = +static const flex_int16_t yy_accept[2047] = { 0, - 219, 219, 0, 0, 0, 0, 0, 0, 0, 0, - 227, 225, 10, 11, 225, 1, 219, 216, 219, 219, - 225, 218, 217, 225, 225, 225, 225, 225, 212, 213, - 225, 225, 225, 214, 215, 5, 5, 5, 225, 225, - 225, 10, 11, 0, 0, 207, 0, 0, 0, 0, + 211, 211, 0, 0, 0, 0, 0, 0, 0, 0, + 219, 217, 10, 11, 217, 1, 211, 208, 211, 211, + 217, 210, 209, 217, 217, 217, 217, 217, 204, 205, + 217, 217, 217, 206, 207, 5, 5, 5, 217, 217, + 217, 10, 11, 0, 0, 199, 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, 219, 219, - 0, 218, 219, 3, 2, 6, 0, 219, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 9, 0, 208, + 0, 0, 0, 0, 0, 0, 0, 1, 211, 211, + 0, 210, 211, 3, 2, 6, 0, 211, 0, 0, + 0, 0, 0, 0, 4, 0, 0, 9, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 8, 0, 0, 176, 0, 0, + 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 168, 0, 0, 169, 0, - 177, 0, 0, 0, 0, 0, 0, 0, 209, 211, + 0, 0, 0, 0, 0, 0, 201, 203, 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, 123, 0, + 0, 0, 0, 0, 0, 115, 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, @@ -736,206 +736,197 @@ static const flex_int16_t yy_accept[2125] = 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, 224, 222, 0, - 221, 220, 0, 0, 0, 0, 0, 175, 0, 28, - 0, 27, 0, 0, 130, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 216, 214, 0, 213, 212, 0, 0, + 0, 0, 0, 167, 0, 28, 0, 27, 0, 0, + 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 127, 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, 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, 215, 212, 0, 0, 0, 0, 29, 0, + 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 126, 0, 0, 0, 0, 0, 0, 100, 0, + 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 223, 220, 0, 0, 0, 0, 29, 0, 31, + 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 134, 0, 0, 0, 0, 0, 0, 0, 0, 108, - 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 109, 0, 58, 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, 147, 0, + 172, 0, 51, 0, 55, 0, 0, 0, 0, 37, + 34, 33, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 58, 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, 138, + 0, 0, 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 0, 59, + 0, 0, 53, 0, 0, 32, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 155, 0, 180, 0, 51, 0, - 56, 0, 0, 0, 0, 37, 34, 33, 0, 0, + 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, - 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 35, 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, 146, 0, 0, - 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 53, 0, 0, 32, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, - 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 164, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 35, 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, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, + 0, 0, 0, 111, 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, 155, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 165, 135, 0, 0, 0, 0, 0, 0, - 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, + 0, 139, 52, 0, 0, 0, 0, 0, 63, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 141, 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, 0, 0, 0, 0, 0, - 0, 0, 120, 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, 0, 0, 94, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 173, 143, 0, 0, 0, - 0, 0, 0, 0, 147, 52, 0, 0, 0, 0, - 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 149, 0, 60, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, + 0, 0, 0, 0, 71, 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, 102, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 200, 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, 126, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, - 0, 0, 0, 79, 63, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 57, 111, 0, 0, 0, 159, 0, 0, 0, 0, + 56, 103, 0, 0, 0, 151, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, + 166, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 16, 0, 0, 0, 174, 14, + 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, + 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 153, 170, 0, 40, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 20, 0, 0, 0, 97, 0, 0, 0, + 0, 0, 164, 0, 54, 0, 105, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, - 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, + + 131, 132, 0, 0, 0, 0, 0, 0, 0, 101, + 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 161, 178, 0, 40, 0, 170, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 98, 120, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 79, 0, 0, 0, 0, 0, 17, + 0, 15, 0, 188, 187, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 30, 0, 0, 0, 146, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, + 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 114, 0, 150, 0, 43, 0, 0, 60, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 19, 0, 0, 0, 0, 0, 0, 0, 0, 116, + 80, 0, 0, 158, 0, 0, 0, 0, 149, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, + 110, 0, 0, 134, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 20, 0, 0, 0, 105, 0, - 0, 0, 0, 0, 172, 0, 54, 0, 113, 0, - 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, - 0, 0, 0, 0, 139, 140, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 109, 0, 0, 0, 80, - 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, + 0, 0, 108, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 167, 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, 42, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 144, 47, 0, 0, 0, 186, 38, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 45, 0, 0, 0, 44, 0, 0, 18, 0, + 0, 0, 68, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 106, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 87, 0, 0, 0, 0, 0, 0, 17, 0, - 0, 15, 0, 196, 195, 0, 0, 0, 0, 73, - 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, - 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 76, 0, 133, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 189, 0, 0, 198, 0, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 122, 0, 158, 0, 43, - 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, - 0, 0, 124, 88, 0, 0, 166, 0, 0, 0, - 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 77, 0, 118, 0, 0, 142, - 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, - 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, + 0, 0, 106, 0, 0, 0, 0, 0, 163, 0, + 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 182, 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, 42, 0, 0, - 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, - 0, 0, 152, 47, 0, 0, 0, 74, 194, 38, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 45, 0, 0, 0, 44, 0, 0, 18, - 0, 0, 0, 76, 0, 0, 0, 0, 0, 144, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 96, 0, 64, 0, 0, 0, 36, + 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, + 0, 0, 0, 148, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, + 0, 65, 0, 0, 184, 0, 0, 0, 0, 0, + 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 25, 39, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 185, 0, + 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 84, 0, 141, 0, - 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, - 0, 171, 0, 0, 0, 46, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, - 68, 0, 0, 0, 36, 0, 48, 0, 0, 0, + 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 178, 0, 78, + 0, 77, 0, 21, 0, 73, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 107, 0, 0, 177, 0, 0, 0, 0, 0, + 67, 0, 0, 83, 0, 62, 0, 23, 0, 123, + 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, - 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 187, 0, 0, 0, 0, 156, 0, + 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 125, 0, 0, 0, 0, 0, 0, 69, 0, 0, - 192, 0, 0, 0, 0, 0, 0, 0, 0, 94, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 25, 39, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 193, 0, 0, 13, 0, 0, + 0, 0, 0, 66, 0, 0, 0, 90, 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, 49, 0, 0, 91, 0, 0, 0, + 0, 183, 0, 0, 0, 0, 195, 198, 75, 74, + 22, 0, 128, 145, 124, 0, 0, 0, 0, 0, + 87, 0, 0, 0, 0, 0, 0, 0, 0, 175, + 0, 0, 0, 180, 0, 89, 0, 81, 0, 0, - 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 186, 0, 86, 0, 85, 0, - 21, 0, 81, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 65, 0, 0, 0, 0, 138, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, - 0, 0, 185, 0, 0, 0, 0, 0, 75, 0, - 0, 91, 0, 66, 0, 23, 0, 131, 0, 0, - 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, - 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - 0, 70, 0, 0, 0, 98, 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, 49, 0, 0, 99, 0, 0, 0, 0, 191, - 0, 0, 0, 0, 203, 206, 83, 82, 22, 0, - 136, 153, 132, 0, 0, 0, 0, 0, 95, 0, - 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, - 0, 188, 0, 97, 0, 89, 0, 0, 0, 0, - 0, 0, 133, 0, 0, 0, 0, 182, 0, 0, - 26, 204, 0, 0, 0, 0, 0, 0, 0, 0, - - 0, 96, 0, 0, 0, 0, 0, 0, 101, 0, - 0, 137, 93, 0, 0, 0, 0, 0, 0, 92, - 0, 184, 202, 0 + 0, 0, 0, 0, 125, 0, 0, 0, 0, 174, + 0, 0, 26, 196, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, + 93, 0, 0, 129, 85, 0, 0, 0, 0, 0, + 0, 84, 0, 176, 194, 0 } ; static const YY_CHAR yy_ec[256] = @@ -982,274 +973,265 @@ static const YY_CHAR yy_meta[74] = 1, 1, 1 } ; -static const flex_int16_t yy_base[2133] = +static const flex_int16_t yy_base[2055] = { 0, 0, 72, 21, 31, 43, 51, 54, 60, 91, 99, - 2514, 2515, 34, 2510, 145, 0, 207, 2515, 214, 221, - 13, 228, 2515, 2490, 118, 25, 2, 6, 2515, 2515, - 73, 11, 17, 2515, 2515, 2515, 104, 2498, 2451, 0, - 2488, 108, 2505, 24, 256, 2515, 67, 2454, 2474, 84, - 75, 2474, 88, 226, 91, 89, 284, 196, 206, 279, - 203, 235, 197, 60, 216, 2454, 286, 288, 253, 300, - 314, 2437, 223, 319, 366, 329, 2456, 0, 380, 388, - 417, 425, 394, 2515, 0, 2515, 431, 439, 219, 269, - 229, 299, 313, 310, 2515, 2453, 2494, 2515, 346, 2515, + 2435, 2436, 34, 2431, 145, 0, 207, 2436, 214, 221, + 13, 228, 2436, 2411, 118, 25, 2, 6, 2436, 2436, + 73, 11, 17, 2436, 2436, 2436, 104, 2419, 2372, 0, + 2409, 108, 2426, 24, 256, 2436, 67, 2375, 2395, 84, + 75, 2395, 88, 226, 91, 89, 284, 196, 206, 219, + 208, 235, 241, 60, 277, 2375, 279, 291, 253, 293, + 316, 2358, 282, 317, 356, 325, 2377, 0, 378, 385, + 406, 415, 422, 2436, 0, 2436, 429, 436, 218, 219, + 287, 311, 333, 320, 2436, 2374, 2415, 2436, 342, 2436, - 445, 322, 2451, 2492, 326, 10, 362, 383, 352, 421, - 428, 433, 2491, 0, 506, 423, 2433, 413, 2432, 2433, - 2439, 418, 2435, 2424, 2425, 2430, 370, 2440, 2423, 2432, - 2422, 327, 172, 321, 2425, 2423, 408, 2412, 2470, 419, - 2415, 2468, 2408, 239, 2429, 2429, 2423, 416, 2416, 2414, - 2415, 2407, 2412, 2406, 427, 2417, 460, 2402, 2401, 2415, - 434, 2453, 2400, 442, 2412, 440, 2400, 502, 2401, 476, - 2413, 2410, 2411, 293, 2409, 2444, 2443, 439, 2389, 2389, - 2393, 441, 2389, 2381, 2398, 2390, 0, 445, 462, 451, - 478, 484, 468, 2389, 2515, 480, 2384, 2515, 480, 506, + 412, 340, 2372, 2413, 356, 10, 442, 349, 186, 396, + 312, 348, 2412, 0, 474, 401, 2354, 409, 2353, 2354, + 2360, 415, 2346, 2347, 2352, 436, 2362, 2345, 2354, 2344, + 439, 308, 410, 2347, 2345, 446, 2334, 2392, 455, 2337, + 2390, 2330, 422, 2351, 2351, 2345, 286, 2338, 2336, 2337, + 2329, 2334, 2328, 428, 2339, 471, 2324, 2323, 2337, 448, + 2375, 2322, 454, 2334, 361, 2322, 483, 2323, 474, 2335, + 2332, 2333, 486, 2331, 2366, 2365, 2311, 2311, 2315, 469, + 2311, 2303, 2320, 2312, 0, 472, 495, 459, 479, 496, + 489, 2311, 2436, 511, 2306, 2436, 502, 516, 2436, 2360, - 2515, 2438, 501, 2437, 510, 2436, 508, 2435, 2515, 2515, - 554, 2434, 539, 2393, 2385, 2389, 2390, 2370, 2381, 2383, - 2382, 515, 524, 2425, 2419, 2383, 2364, 2361, 2369, 2375, - 2363, 2377, 2373, 2364, 2373, 2373, 2368, 2360, 2362, 2346, - 2350, 2363, 2365, 2362, 2354, 2344, 2347, 2361, 2515, 2347, - 2355, 80, 534, 2340, 2349, 2391, 2338, 2348, 2388, 547, - 2347, 2386, 2331, 2333, 2344, 2382, 547, 2386, 2340, 2320, - 2335, 280, 2325, 2331, 490, 2322, 2320, 2323, 2319, 2325, - 2316, 2315, 2328, 2321, 2311, 2322, 2326, 2325, 2319, 527, - 2326, 2321, 2313, 2303, 2318, 2313, 2317, 532, 2315, 2301, + 522, 2359, 523, 2358, 519, 2357, 2436, 2436, 565, 2356, + 531, 2315, 2307, 2311, 2312, 2292, 2303, 2305, 2304, 497, + 505, 2342, 2306, 2287, 2284, 2292, 2298, 2286, 2300, 2296, + 2287, 2296, 2296, 2291, 2283, 2285, 2269, 2273, 2286, 2288, + 2285, 2277, 2267, 2270, 2284, 2436, 2270, 2278, 80, 2316, + 2262, 2271, 2313, 2260, 2270, 2310, 554, 2269, 2308, 2253, + 2255, 2266, 2304, 534, 2308, 2262, 2242, 2257, 508, 2247, + 2253, 530, 2244, 2242, 2245, 2241, 2247, 2238, 2237, 2250, + 2243, 2233, 2244, 2248, 2247, 2241, 502, 2248, 2243, 2235, + 2225, 2240, 2235, 2239, 2220, 2236, 2222, 2228, 2235, 2217, - 2307, 2314, 2296, 464, 2301, 2298, 2297, 584, 2292, 2306, - 2305, 565, 2304, 2307, 2289, 2297, 566, 2515, 2515, 567, - 2515, 2515, 2284, 550, 2331, 569, 2342, 2515, 571, 2515, - 2341, 2515, 2335, 621, 2515, 571, 2275, 2294, 2277, 2294, - 2330, 2290, 2280, 2332, 2287, 2290, 2281, 2284, 2279, 561, - 2515, 2281, 602, 2320, 2278, 2275, 2276, 610, 2280, 2320, - 2255, 2267, 2262, 2259, 2255, 2257, 2308, 2265, 2254, 2270, - 2304, 2250, 617, 2263, 2263, 2246, 2247, 2260, 2258, 2256, - 2245, 2255, 2254, 2249, 2256, 2251, 2236, 589, 2245, 2248, - 2243, 564, 2242, 2238, 2288, 571, 591, 2515, 2247, 2281, + 524, 2222, 2219, 2218, 2213, 2227, 2226, 544, 2225, 2228, + 2210, 2218, 547, 2436, 2436, 569, 2436, 2436, 2205, 192, + 2252, 572, 2263, 2436, 532, 2436, 2262, 2436, 2256, 609, + 2436, 559, 2196, 2215, 2198, 2215, 2251, 2211, 2201, 2253, + 2208, 2211, 2202, 2205, 2191, 2202, 289, 2241, 2199, 2196, + 2197, 587, 2201, 2241, 2176, 2188, 2183, 2180, 2176, 2178, + 2229, 2186, 2175, 2191, 2225, 2171, 632, 2184, 2184, 2167, + 2168, 2181, 2179, 2177, 2177, 2176, 2171, 2178, 2173, 2158, + 540, 2167, 2170, 2165, 578, 2164, 2160, 2210, 559, 605, + 2436, 2169, 2203, 2153, 2152, 2145, 2147, 2159, 2150, 2157, - 2231, 2230, 2223, 2225, 2237, 2228, 2235, 2216, 2233, 2222, - 2227, 624, 2274, 2227, 603, 2224, 2227, 2227, 2225, 2214, - 2214, 2226, 596, 2201, 2202, 2223, 608, 2205, 2202, 2216, - 2219, 2214, 2200, 2212, 2211, 2210, 2205, 2247, 2207, 2206, - 2205, 2204, 584, 2247, 2206, 2245, 2185, 2243, 2185, 654, - 2198, 2515, 2515, 2197, 597, 2239, 2238, 2515, 2237, 2515, - 632, 680, 637, 2236, 2230, 2183, 2185, 2187, 2174, 2171, - 2515, 2176, 2169, 2181, 2184, 2167, 2182, 2169, 2168, 2515, - 2178, 623, 2169, 2166, 2178, 628, 2163, 2165, 2515, 2210, - 2170, 2155, 2157, 2168, 2166, 2161, 668, 2168, 2156, 2149, + 2138, 2155, 2144, 2149, 599, 2196, 2149, 592, 2146, 2149, + 2149, 2147, 2136, 2136, 2148, 585, 2123, 2124, 2145, 2136, + 2126, 2123, 2137, 2136, 2122, 2134, 2133, 2132, 2127, 2169, + 2129, 2128, 2127, 2126, 2169, 2128, 2167, 2107, 2165, 2107, + 557, 2120, 2436, 2436, 2119, 605, 2161, 2160, 2436, 2159, + 2436, 615, 683, 614, 2158, 2152, 2105, 2107, 2109, 2096, + 2093, 2436, 2098, 2091, 2103, 2106, 2093, 2092, 2436, 2102, + 619, 2093, 2090, 2102, 568, 2087, 2089, 2436, 2134, 2094, + 2079, 2081, 2092, 2090, 2085, 655, 2092, 2080, 2073, 2124, + 2436, 2071, 2087, 2121, 2125, 2081, 2075, 2077, 2078, 2062, - 2200, 2515, 2147, 2163, 2197, 2201, 2157, 2151, 2153, 2154, - 2138, 2147, 2154, 2188, 2139, 2138, 2133, 2132, 2134, 2130, - 2126, 632, 2145, 2119, 2126, 2131, 2124, 2140, 2174, 2178, - 2515, 2123, 2119, 2175, 2126, 2125, 2119, 2126, 2111, 2121, - 2109, 2123, 2123, 2111, 2107, 2109, 2104, 2515, 2161, 2515, - 2103, 2102, 2095, 2112, 2151, 2150, 2095, 2100, 2109, 2103, - 2097, 2106, 703, 2143, 2105, 2088, 2088, 2083, 2079, 2085, - 2090, 652, 2092, 2096, 2079, 2137, 2078, 2078, 2129, 2074, - 2075, 2074, 2086, 2075, 2515, 2085, 2515, 2122, 2515, 2073, - 2515, 2083, 2119, 2079, 2122, 2515, 2515, 2515, 651, 675, + 2071, 2113, 2064, 2063, 2058, 2057, 2059, 2055, 2051, 602, + 2070, 2044, 2051, 2056, 2049, 2065, 2099, 2103, 2436, 2048, + 2044, 2100, 2051, 2050, 2044, 2051, 2036, 2046, 2034, 2048, + 2048, 2036, 2032, 2034, 2029, 2436, 2086, 2436, 2028, 2027, + 2020, 2037, 2076, 2075, 2020, 2025, 2034, 2028, 2022, 2031, + 659, 2068, 2030, 2014, 2009, 2005, 2011, 617, 2019, 2023, + 2006, 2064, 2005, 2005, 2056, 2001, 2002, 2001, 2436, 2014, + 2436, 2051, 2436, 2002, 2436, 2012, 2048, 2008, 2051, 2436, + 2436, 2436, 634, 629, 666, 2436, 628, 2010, 1990, 2000, + 2042, 2041, 1986, 1996, 2038, 1983, 1990, 1983, 1991, 1994, - 706, 2515, 655, 2081, 2061, 2071, 2113, 2112, 2057, 2067, - 2109, 2054, 2053, 2052, 2059, 2052, 2060, 2063, 2045, 2045, - 2060, 2059, 638, 2058, 2057, 2041, 2056, 2038, 2085, 2052, - 2049, 2089, 2033, 2035, 2047, 2047, 2046, 2515, 2031, 2028, - 2086, 2041, 2033, 2039, 2030, 2038, 2515, 2023, 2034, 2038, - 2020, 2032, 2024, 2032, 375, 2014, 2013, 2007, 2012, 2009, - 2024, 2023, 2024, 2003, 2013, 2019, 2062, 2017, 2016, 2008, - 1999, 2515, 2000, 2002, 2515, 2004, 2009, 2048, 2047, 16, - 2008, 2045, 1990, 2043, 1990, 1993, 1994, 1985, 2515, 1999, - 1985, 710, 1977, 1981, 1997, 1994, 1986, 2031, 1983, 1990, + 1976, 1976, 1991, 1990, 545, 1989, 1988, 1972, 1987, 1969, + 2016, 1983, 1980, 2020, 1964, 1966, 1978, 1978, 1977, 2436, + 1962, 1959, 2017, 1972, 1964, 1970, 1961, 1969, 2436, 1954, + 1965, 1969, 1951, 1963, 1955, 605, 1946, 1945, 1939, 1944, + 1941, 1956, 1955, 1956, 1935, 1945, 1951, 1994, 1949, 1948, + 1940, 1931, 2436, 1932, 1934, 2436, 1936, 1941, 1980, 1979, + 16, 1940, 1977, 1922, 1975, 1922, 1925, 1926, 1917, 2436, + 1931, 1917, 678, 1909, 1913, 1929, 1926, 1918, 1963, 1915, + 1922, 1960, 2436, 1906, 1904, 1918, 1917, 1920, 1954, 1953, + 1900, 1951, 1896, 1949, 1948, 2436, 1893, 1907, 1906, 669, - 2028, 2515, 1974, 1972, 1986, 1970, 1984, 1987, 2021, 2020, - 2019, 1966, 2017, 1962, 2015, 2014, 2515, 1959, 1973, 1972, - 716, 1973, 1972, 1969, 1969, 2006, 1966, 91, 424, 490, - 2515, 2515, 681, 673, 545, 564, 565, 577, 608, 623, - 662, 676, 719, 685, 688, 722, 685, 729, 730, 684, - 680, 685, 695, 701, 687, 690, 701, 701, 685, 742, - 704, 696, 706, 746, 709, 702, 703, 705, 709, 715, - 755, 761, 718, 720, 2515, 723, 718, 709, 724, 729, - 726, 723, 730, 729, 717, 731, 732, 730, 738, 774, - 736, 781, 782, 726, 739, 725, 735, 782, 740, 790, + 1907, 1906, 1942, 1906, 1901, 1890, 1892, 2436, 2436, 651, + 663, 1884, 1901, 1893, 1880, 1874, 1886, 1885, 1893, 1934, + 1892, 654, 1927, 1922, 83, 277, 355, 406, 514, 570, + 592, 624, 645, 637, 701, 664, 656, 667, 707, 670, + 663, 677, 664, 668, 674, 713, 719, 676, 677, 2436, + 688, 683, 674, 690, 695, 692, 690, 697, 696, 684, + 698, 696, 704, 740, 702, 747, 748, 692, 705, 691, + 701, 748, 706, 756, 2436, 757, 713, 711, 713, 709, + 703, 763, 759, 722, 711, 2436, 713, 724, 713, 726, + 716, 729, 773, 716, 775, 718, 733, 2436, 727, 721, - 2515, 791, 747, 745, 747, 743, 737, 797, 793, 756, - 745, 2515, 747, 758, 747, 760, 750, 763, 807, 750, - 809, 752, 767, 2515, 761, 755, 766, 751, 762, 775, - 754, 760, 815, 779, 763, 763, 776, 820, 821, 822, - 769, 787, 782, 789, 788, 785, 770, 782, 783, 790, - 780, 778, 2515, 843, 801, 802, 792, 804, 794, 797, - 808, 799, 805, 849, 825, 812, 794, 801, 815, 860, - 817, 814, 812, 2515, 816, 811, 826, 823, 809, 816, - 815, 813, 832, 829, 830, 818, 825, 826, 835, 839, - 875, 837, 827, 841, 827, 826, 832, 888, 835, 830, + 732, 717, 728, 741, 720, 726, 781, 745, 729, 729, + 742, 786, 787, 734, 752, 747, 752, 749, 734, 746, + 747, 753, 744, 742, 2436, 807, 765, 766, 756, 759, + 770, 761, 767, 811, 787, 774, 756, 763, 777, 822, + 779, 776, 774, 2436, 778, 773, 788, 785, 771, 773, + 792, 789, 790, 778, 785, 786, 795, 799, 835, 797, + 787, 800, 786, 786, 792, 848, 795, 790, 791, 797, + 813, 796, 850, 805, 2436, 815, 815, 808, 819, 817, + 862, 804, 806, 821, 822, 810, 808, 870, 827, 813, + 819, 817, 2436, 2436, 833, 832, 833, 838, 826, 836, - 831, 837, 853, 836, 890, 845, 2515, 855, 855, 848, - 859, 857, 902, 844, 846, 861, 862, 850, 848, 910, - 911, 868, 854, 860, 858, 2515, 2515, 874, 873, 874, - 879, 867, 877, 879, 2515, 2515, 879, 881, 868, 886, - 873, 2515, 871, 889, 876, 876, 927, 874, 878, 896, - 937, 2515, 938, 2515, 883, 897, 897, 942, 890, 889, - 893, 887, 947, 900, 890, 891, 887, 897, 901, 912, - 896, 914, 909, 911, 904, 906, 907, 903, 920, 910, - 925, 966, 923, 928, 905, 928, 914, 913, 2515, 920, - 921, 936, 926, 924, 937, 975, 922, 937, 955, 963, + 838, 2436, 2436, 838, 840, 827, 845, 832, 2436, 830, + 848, 835, 835, 886, 833, 837, 855, 896, 2436, 897, + 2436, 842, 856, 856, 901, 849, 848, 852, 846, 906, + 859, 849, 850, 846, 856, 860, 871, 872, 867, 869, + 862, 864, 860, 877, 867, 882, 923, 880, 885, 862, + 885, 871, 870, 2436, 877, 878, 879, 892, 930, 877, + 892, 910, 918, 887, 936, 898, 938, 2436, 944, 887, + 906, 896, 895, 890, 891, 903, 898, 894, 912, 898, + 899, 909, 918, 954, 901, 919, 912, 907, 961, 967, + 924, 915, 2436, 929, 920, 928, 930, 915, 931, 921, - 932, 981, 943, 983, 2515, 989, 932, 951, 941, 940, - 935, 936, 948, 955, 944, 945, 941, 959, 945, 946, - 956, 965, 1001, 949, 967, 960, 955, 1008, 1014, 971, - 962, 2515, 976, 967, 975, 977, 962, 978, 968, 980, - 974, 1021, 987, 971, 972, 2515, 988, 991, 974, 976, - 1034, 977, 996, 2515, 2515, 995, 998, 985, 980, 998, - 986, 1039, 997, 993, 990, 1043, 992, 1045, 1007, 993, - 1011, 1010, 996, 1011, 1003, 999, 1017, 1016, 1003, 1020, - 2515, 2515, 1012, 1059, 1012, 2515, 1020, 1023, 1016, 1069, - 2515, 1019, 1024, 1068, 1019, 1020, 1032, 1026, 1030, 1028, + 933, 927, 974, 940, 924, 925, 2436, 941, 944, 927, + 929, 987, 930, 949, 2436, 948, 951, 938, 933, 951, + 939, 992, 950, 946, 943, 996, 945, 998, 960, 946, + 964, 963, 949, 964, 956, 952, 970, 969, 956, 973, + 2436, 2436, 965, 1012, 965, 2436, 973, 976, 969, 1022, + 2436, 972, 977, 1021, 972, 973, 985, 979, 980, 978, + 989, 1034, 978, 979, 1037, 1038, 982, 994, 2436, 982, + 990, 988, 1039, 982, 1003, 989, 990, 996, 1004, 995, + 1009, 1010, 1026, 1031, 1013, 1018, 1001, 1001, 2436, 1002, + 1004, 1015, 1005, 1025, 1024, 1015, 1026, 1069, 1011, 1031, - 1026, 1037, 1082, 1026, 1031, 1028, 1086, 1087, 1031, 1043, - 2515, 1031, 1039, 1038, 1089, 1031, 1052, 1038, 1039, 1048, - 1060, 1047, 1055, 1046, 1060, 1061, 1077, 1082, 1064, 1069, - 1052, 1052, 2515, 1053, 1055, 1066, 1056, 1076, 1075, 1066, - 1055, 1072, 1079, 1122, 1064, 1084, 1077, 1081, 1085, 1068, - 1085, 1076, 1131, 1078, 1082, 2515, 1131, 1080, 1098, 1080, - 1080, 1101, 1098, 1138, 1087, 1105, 1106, 1092, 1100, 1109, - 1089, 1104, 1111, 1153, 1154, 2515, 1107, 1156, 1157, 1099, - 1109, 1119, 1103, 1123, 1106, 1108, 1108, 1115, 1124, 1112, - 1119, 1114, 1121, 1133, 1174, 1121, 1120, 1137, 1178, 1128, + 1024, 1028, 1032, 1015, 1032, 1023, 1078, 1025, 1029, 2436, + 1076, 1025, 1045, 1027, 1027, 1048, 1045, 1085, 1034, 1052, + 1053, 1039, 1047, 1056, 1036, 1051, 1058, 1100, 1101, 2436, + 1054, 1103, 1104, 1046, 1056, 1066, 1050, 1070, 1053, 1055, + 1055, 1062, 1071, 1059, 1066, 1061, 1068, 1080, 1121, 1068, + 1067, 1084, 1125, 1075, 1079, 1077, 1075, 1070, 1131, 1082, + 1133, 1083, 1135, 1131, 1137, 1090, 2436, 1095, 1088, 1079, + 1098, 1092, 1087, 1097, 1098, 1094, 1107, 2436, 1091, 1087, + 2436, 2436, 1093, 1153, 1092, 1111, 1112, 1114, 1153, 1106, + 1160, 1161, 1111, 1109, 1120, 1102, 1107, 1146, 1137, 1169, - 1132, 1130, 1128, 1123, 1184, 1135, 1186, 1136, 1188, 1184, - 1190, 1143, 2515, 1148, 1141, 1132, 1151, 1145, 1140, 1150, - 1147, 1152, 1149, 1161, 2515, 1145, 1147, 1142, 2515, 2515, - 1148, 1208, 1147, 1166, 1167, 1169, 1208, 1161, 1215, 1216, - 1169, 1154, 1168, 1166, 1177, 1159, 1164, 1203, 1194, 1226, - 1181, 1181, 1185, 1230, 1173, 1173, 1176, 1193, 1188, 1192, - 1237, 1185, 1189, 2515, 1186, 1182, 1199, 1179, 1200, 1190, - 1241, 1195, 2515, 1208, 1206, 1209, 1193, 1203, 1207, 1212, - 1198, 1258, 1211, 1216, 1203, 1214, 1206, 1212, 1208, 1226, - 1227, 1228, 2515, 2515, 1226, 2515, 1228, 2515, 1213, 1224, + 1124, 1124, 1128, 1173, 1116, 1116, 1119, 1136, 1131, 1135, + 1130, 2436, 1127, 1123, 1140, 1120, 1141, 1131, 1182, 1135, + 2436, 1148, 1147, 1150, 1134, 1143, 1147, 1153, 1139, 1199, + 1152, 1157, 1144, 1155, 1147, 1153, 1149, 1167, 1168, 1169, + 2436, 2436, 1167, 2436, 1169, 2436, 1154, 1165, 1156, 1175, + 1168, 1166, 1218, 1175, 1172, 1216, 1180, 1169, 1176, 1181, + 1178, 1184, 2436, 1177, 1169, 1230, 2436, 1231, 1178, 1185, + 1229, 1191, 2436, 1192, 2436, 1189, 2436, 1180, 2436, 1180, + 1183, 1197, 1202, 1185, 1196, 1245, 1202, 1203, 1243, 1199, + 1250, 1246, 1252, 2436, 1199, 1254, 1255, 1212, 1213, 1215, - 1215, 1234, 1227, 1225, 1277, 1234, 1231, 1275, 1239, 1228, - 1235, 1240, 1237, 1243, 2515, 1236, 1228, 1289, 2515, 1290, - 1237, 1244, 1288, 1250, 2515, 1251, 2515, 1248, 2515, 1239, - 2515, 1239, 1242, 1256, 1261, 1244, 1255, 1304, 1261, 1262, - 1263, 1303, 1259, 1310, 1263, 1307, 1313, 2515, 1260, 1315, - 1316, 1273, 1274, 1276, 2515, 2515, 1259, 1321, 1317, 1266, - 1282, 1266, 1278, 1297, 1328, 2515, 1285, 1276, 1287, 2515, - 1332, 1269, 1280, 1295, 1331, 1283, 2515, 1279, 1295, 1283, - 1297, 1298, 1295, 1339, 1302, 1292, 1302, 1308, 1296, 1296, - 1351, 1347, 1348, 1354, 1312, 2515, 1314, 1313, 1315, 1308, + 2436, 2436, 1254, 1203, 1219, 1203, 1215, 1234, 1265, 2436, + 1222, 1213, 1224, 2436, 1269, 1206, 1217, 1232, 1268, 1220, + 1231, 1219, 1233, 1234, 1231, 1275, 1238, 1228, 1238, 1244, + 1232, 1232, 1287, 1283, 1284, 1290, 1247, 2436, 1250, 1249, + 1251, 1244, 1253, 1254, 1251, 1241, 1245, 1245, 1304, 1251, + 1306, 1253, 1308, 1251, 1256, 1311, 2436, 1269, 1249, 1264, + 1257, 1260, 1273, 1276, 1275, 1273, 1322, 1276, 2436, 2436, + 1272, 1282, 1267, 1323, 1270, 1285, 1271, 1332, 1333, 1277, + 1287, 1336, 1293, 2436, 1285, 1286, 1288, 1341, 1284, 2436, + 1301, 2436, 1287, 2436, 2436, 1302, 1285, 1305, 1292, 1351, - 1318, 1319, 1316, 1306, 1309, 1309, 1368, 1315, 1370, 1317, - 1372, 1315, 1320, 1375, 2515, 1334, 1313, 1328, 1321, 1324, - 1337, 1340, 1339, 1337, 1386, 1340, 2515, 2515, 1336, 1346, - 1331, 1387, 1334, 1349, 1335, 1396, 1397, 1341, 1351, 1400, - 1357, 2515, 1349, 1349, 1351, 1353, 1406, 1349, 2515, 1350, - 1368, 2515, 1352, 2515, 2515, 1368, 1351, 1371, 1372, 2515, - 1359, 1418, 1368, 1420, 1369, 1401, 2515, 1423, 1373, 1420, - 2515, 1368, 1427, 1377, 1371, 1368, 1371, 1374, 1374, 1370, - 1392, 1431, 1384, 1396, 1399, 1387, 1390, 1383, 1443, 1391, - 2515, 1389, 1388, 2515, 1390, 1449, 1402, 1393, 1408, 1408, + 1301, 1353, 1302, 1334, 2436, 1356, 1306, 1353, 2436, 1301, + 1360, 1310, 1304, 1301, 1304, 1306, 1302, 1324, 1363, 1316, + 1328, 1331, 1319, 1322, 1315, 1375, 1323, 2436, 1320, 1320, + 2436, 1322, 1381, 1334, 1325, 1340, 1340, 1343, 1343, 1340, + 1384, 1346, 2436, 1338, 2436, 1339, 2436, 1349, 1341, 2436, + 1390, 1352, 1353, 1350, 1394, 1342, 1357, 1397, 1359, 1351, + 2436, 1348, 1348, 1354, 1353, 1351, 1405, 1367, 1367, 2436, + 2436, 1408, 1355, 2436, 1372, 1357, 1358, 1364, 2436, 1373, + 1420, 1368, 1360, 1375, 1386, 1380, 1386, 1382, 2436, 1391, + 2436, 1388, 1407, 2436, 1391, 1376, 1436, 2436, 1437, 1394, - 1411, 1411, 1408, 1452, 1414, 2515, 1406, 2515, 1407, 2515, - 1417, 1409, 2515, 1458, 1420, 1421, 1418, 1462, 1410, 1425, - 1465, 1427, 1419, 2515, 1416, 1416, 1422, 1421, 1419, 1473, - 1435, 1435, 2515, 2515, 1476, 1423, 2515, 1440, 1425, 1425, - 1427, 1433, 2515, 1442, 1489, 1432, 1438, 1431, 1445, 1457, - 1450, 1456, 1500, 1453, 2515, 1462, 2515, 1459, 1478, 2515, - 1462, 1447, 1507, 2515, 1508, 1465, 1470, 1452, 1512, 1513, - 1514, 1510, 1474, 1471, 1467, 1460, 1515, 1473, 1474, 2515, - 1464, 1480, 1478, 1526, 2515, 1465, 1524, 1487, 1484, 1528, - 1476, 1481, 1479, 1538, 1494, 1482, 1541, 1537, 1492, 1544, + 1399, 1381, 1441, 1442, 1438, 1402, 1399, 1395, 1388, 1443, + 1401, 1402, 2436, 1392, 1408, 1406, 1454, 2436, 1393, 1452, + 1415, 1411, 1456, 1404, 1409, 1407, 1466, 1422, 1410, 1469, + 1465, 1420, 1472, 1433, 1422, 1416, 1476, 1418, 1427, 1420, + 1434, 1437, 1482, 1424, 1441, 1437, 1435, 1428, 1443, 1427, + 1485, 1486, 1487, 1488, 1451, 1444, 1443, 1443, 1438, 2436, + 1446, 1452, 1443, 1442, 1444, 1499, 1440, 1458, 1507, 1477, + 1509, 1462, 2436, 2436, 1453, 1464, 1513, 2436, 2436, 1459, + 1464, 1462, 1512, 1470, 1475, 1463, 1479, 1468, 1466, 1467, + 1469, 2436, 1527, 1473, 1524, 1467, 1472, 1533, 1481, 1491, - 1505, 1494, 1488, 1548, 1490, 1499, 1492, 1506, 1509, 1554, - 1496, 1513, 1509, 1507, 1500, 1515, 1499, 1557, 1558, 1559, - 1506, 1561, 1524, 1517, 1516, 1516, 1511, 2515, 1528, 1520, - 1526, 1517, 1516, 1518, 1573, 2515, 1514, 1532, 1581, 1551, - 1583, 1536, 2515, 2515, 1527, 1538, 1587, 2515, 2515, 2515, - 1533, 1538, 1536, 1586, 1544, 1549, 1537, 1553, 1543, 1541, - 1541, 1543, 2515, 1601, 1547, 1598, 1541, 1546, 1607, 1555, - 1565, 1567, 2515, 1612, 1565, 1609, 2515, 1560, 1568, 2515, - 1559, 1574, 1562, 2515, 1572, 1573, 1574, 1623, 1581, 2515, - 1620, 1586, 1562, 1580, 1581, 1582, 1591, 1573, 1579, 1581, + 1493, 2436, 1538, 1491, 1535, 2436, 1486, 1494, 2436, 1485, + 1500, 1488, 2436, 1498, 1499, 1500, 1549, 1507, 2436, 1546, + 1512, 1488, 1506, 1507, 1508, 1517, 1499, 1505, 1507, 1519, + 1518, 1509, 1559, 1511, 1507, 1508, 1509, 1569, 1519, 1571, + 1524, 1529, 1522, 2436, 1575, 2436, 1524, 1577, 1519, 2436, + 1522, 1532, 1576, 1524, 1539, 1526, 1541, 1527, 1534, 1534, + 1545, 1546, 2436, 1540, 1535, 1534, 1594, 1547, 2436, 1591, + 1542, 1539, 2436, 1553, 1540, 1561, 1557, 1559, 1604, 1557, + 1554, 1562, 1556, 2436, 1609, 1550, 1552, 1568, 1561, 1562, + 1552, 1568, 1569, 1563, 1579, 1569, 1621, 1581, 1565, 1574, - 1635, 1594, 1593, 1584, 1634, 1586, 1582, 1589, 1584, 1585, - 1645, 1595, 1647, 1600, 1605, 1598, 2515, 1651, 2515, 1600, - 1653, 1595, 2515, 1598, 1608, 1652, 1600, 1615, 1602, 1617, - 1603, 1610, 1610, 1621, 1622, 2515, 1616, 1611, 1610, 1670, - 1623, 2515, 1667, 1618, 1615, 2515, 1629, 1616, 1637, 1633, - 1635, 1680, 1633, 1630, 1638, 1632, 2515, 1685, 1626, 1628, - 1644, 1637, 1638, 1628, 1644, 1645, 1639, 1655, 2515, 1645, - 1697, 1657, 1641, 1650, 1696, 1660, 1655, 1704, 2515, 1646, - 2515, 1653, 1707, 1703, 2515, 1665, 2515, 1705, 1667, 1668, - 1653, 1654, 1662, 1716, 1664, 1713, 1714, 1669, 1664, 1682, + 1620, 1578, 1627, 2436, 1569, 2436, 1576, 1630, 1626, 2436, + 1588, 2436, 1628, 1590, 1591, 1576, 1577, 1585, 1639, 1587, + 1636, 1637, 1592, 1587, 1605, 1602, 1593, 1600, 2436, 1597, + 1602, 1600, 1652, 1653, 1601, 1598, 1612, 1599, 2436, 1614, + 1615, 1616, 1617, 2436, 1607, 1619, 1664, 1617, 1622, 1667, + 1609, 1617, 1611, 1619, 1632, 2436, 1633, 1614, 1615, 1622, + 1624, 2436, 1673, 1634, 2436, 1638, 1623, 1623, 1638, 1631, + 1630, 1641, 1628, 2436, 1644, 1632, 1635, 1691, 1631, 1650, + 1641, 1653, 1644, 1653, 1655, 1659, 2436, 2436, 1652, 1643, + 1643, 1703, 1646, 1705, 1647, 1707, 1665, 1709, 2436, 1651, - 1679, 1670, 1677, 2515, 1674, 1679, 1677, 1729, 1730, 1678, - 1675, 1689, 1676, 2515, 1691, 1692, 1693, 1694, 2515, 1684, - 1696, 1741, 1694, 1699, 1744, 1686, 1694, 1688, 1696, 1709, - 2515, 1710, 1691, 1692, 1699, 1690, 1702, 2515, 1751, 1712, - 2515, 1716, 1701, 1701, 1716, 1709, 1708, 1719, 1706, 2515, - 1722, 1710, 1713, 1769, 1709, 1728, 1719, 1731, 1722, 1731, - 1733, 1737, 2515, 2515, 1730, 1721, 1721, 1781, 1724, 1783, - 1725, 1785, 1743, 1787, 2515, 1729, 1789, 2515, 1785, 1747, - 1744, 1749, 1736, 1744, 1755, 1742, 1753, 1799, 1740, 1743, - 1748, 1739, 1804, 1757, 1758, 1748, 1765, 1764, 1805, 1749, + 1711, 2436, 1707, 1669, 1666, 1671, 1658, 1666, 1677, 1664, + 1675, 1661, 1664, 1669, 1660, 1725, 1678, 1679, 1669, 1686, + 1685, 1726, 1670, 1689, 1690, 2436, 1695, 1688, 1737, 1694, + 1695, 1740, 1697, 1700, 1687, 1696, 1697, 2436, 1746, 2436, + 1699, 2436, 1708, 2436, 1749, 2436, 1691, 1751, 1698, 1753, + 1696, 1755, 1703, 1752, 1753, 1715, 1720, 1761, 1720, 2436, + 1711, 1701, 1760, 1726, 1719, 1715, 1769, 1712, 1714, 1713, + 1720, 2436, 1716, 1718, 2436, 1723, 1733, 1718, 1726, 1728, + 2436, 1729, 1723, 2436, 1735, 2436, 1731, 2436, 1741, 2436, + 1742, 1742, 1733, 1789, 1738, 2436, 1740, 1748, 1793, 1734, - 1768, 1769, 2515, 1774, 1767, 1816, 1773, 1774, 1819, 1776, - 1779, 1766, 1775, 1776, 2515, 1825, 2515, 1778, 2515, 1787, - 2515, 1828, 2515, 1770, 1830, 1777, 1832, 1775, 1834, 1782, - 1831, 1832, 2515, 1794, 1799, 1840, 1799, 2515, 1790, 1780, - 1839, 1805, 1798, 1794, 1848, 1791, 1793, 1792, 1799, 2515, - 1795, 1797, 2515, 1802, 1812, 1797, 1805, 1807, 2515, 1808, - 1802, 2515, 1814, 2515, 1810, 2515, 1820, 2515, 1821, 1821, - 1812, 1868, 1817, 2515, 1819, 1827, 1872, 1813, 1815, 1812, - 1836, 2515, 1823, 1830, 1831, 1834, 1823, 1877, 1824, 1832, - 1841, 1840, 1843, 1844, 1845, 1838, 1833, 1834, 1834, 1846, + 1736, 1733, 1757, 2436, 1744, 1751, 1752, 1755, 1744, 1798, + 1745, 1753, 1762, 1761, 1764, 1765, 1766, 1759, 1754, 1755, + 1755, 1767, 1762, 2436, 1762, 1774, 1819, 2436, 1765, 1777, + 1822, 1771, 1773, 1771, 1772, 1827, 1780, 1767, 1782, 1787, + 1832, 1833, 1834, 1835, 1836, 1793, 1838, 1839, 1840, 1784, + 1788, 1792, 1786, 2436, 1802, 1846, 2436, 1803, 1788, 1806, + 1797, 2436, 1798, 1812, 1808, 1801, 2436, 2436, 2436, 2436, + 2436, 1855, 2436, 2436, 2436, 1798, 1806, 1814, 1859, 1820, + 2436, 1861, 1803, 1863, 1806, 1819, 1818, 1819, 1809, 2436, + 1810, 1870, 1866, 2436, 1813, 2436, 1825, 2436, 1869, 1875, - 1841, 2515, 1841, 1853, 1898, 2515, 1844, 1856, 1901, 1850, - 1852, 1850, 1851, 1906, 1859, 1846, 1861, 1866, 1911, 1912, - 1913, 1914, 1915, 1872, 1917, 1918, 1919, 1863, 1867, 1871, - 1865, 2515, 1881, 1925, 2515, 1882, 1867, 1885, 1876, 2515, - 1877, 1891, 1887, 1880, 2515, 2515, 2515, 2515, 2515, 1934, - 2515, 2515, 2515, 1877, 1885, 1893, 1938, 1899, 2515, 1940, - 1882, 1942, 1885, 1898, 1897, 1898, 1888, 2515, 1889, 1949, - 1945, 2515, 1892, 2515, 1904, 2515, 1948, 1954, 1896, 1912, - 1957, 1958, 2515, 1919, 1916, 1908, 1912, 2515, 1959, 1908, - 2515, 2515, 1920, 1913, 1968, 1916, 1916, 1912, 1914, 1929, - - 1914, 2515, 1975, 1922, 1929, 1978, 1979, 1927, 2515, 1931, - 1930, 2515, 2515, 1924, 1924, 1941, 1986, 1932, 1988, 2515, - 1989, 2515, 2515, 2515, 1995, 1998, 2001, 2002, 2004, 2007, - 2010, 2013 + 1817, 1833, 1878, 1879, 2436, 1840, 1837, 1829, 1833, 2436, + 1880, 1829, 2436, 2436, 1841, 1834, 1889, 1837, 1837, 1833, + 1835, 1850, 1835, 2436, 1896, 1843, 1850, 1899, 1900, 1848, + 2436, 1852, 1851, 2436, 2436, 1845, 1845, 1862, 1907, 1853, + 1909, 2436, 1910, 2436, 2436, 2436, 1916, 1919, 1922, 1923, + 1925, 1928, 1931, 1934 } ; -static const flex_int16_t yy_def[2133] = +static const flex_int16_t yy_def[2055] = { 0, - 2125, 2125, 2126, 2126, 2125, 2125, 2125, 2125, 2125, 2125, - 2124, 2124, 2124, 2124, 2124, 2127, 2124, 2124, 2124, 2124, - 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, - 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2128, - 2124, 2124, 2124, 2129, 15, 2124, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2130, 45, 45, 45, + 2047, 2047, 2048, 2048, 2047, 2047, 2047, 2047, 2047, 2047, + 2046, 2046, 2046, 2046, 2046, 2049, 2046, 2046, 2046, 2046, + 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, + 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2050, + 2046, 2046, 2046, 2051, 15, 2046, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2052, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2127, 2124, 2124, - 2124, 2124, 2124, 2124, 2131, 2124, 2124, 2124, 2124, 2124, - 2124, 2124, 2124, 2124, 2124, 2124, 2128, 2124, 2129, 2124, + 45, 45, 45, 45, 45, 45, 45, 2049, 2046, 2046, + 2046, 2046, 2046, 2046, 2053, 2046, 2046, 2046, 2046, 2046, + 2046, 2046, 2046, 2046, 2046, 2046, 2050, 2046, 2051, 2046, - 2124, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2132, 45, 2130, 45, 45, 45, 45, 45, + 2046, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2054, 45, 2052, 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, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2131, 2124, 2124, 2124, - 2124, 2124, 2124, 2124, 2124, 45, 45, 2124, 45, 45, + 45, 45, 45, 45, 2053, 2046, 2046, 2046, 2046, 2046, + 2046, 2046, 2046, 45, 45, 2046, 45, 45, 2046, 45, - 2124, 45, 45, 45, 45, 45, 45, 2132, 2124, 2124, - 115, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2054, 2046, 2046, 115, 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, 2124, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2046, 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, @@ -1257,227 +1239,218 @@ static const flex_int16_t yy_def[2133] = 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, 2124, 2124, 2124, 2124, - 2124, 2124, 2124, 45, 45, 45, 45, 2124, 45, 2124, - 45, 2124, 45, 115, 2124, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2124, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 45, + 45, 45, 45, 2046, 45, 2046, 45, 2046, 45, 115, + 2046, 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, 2124, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 2046, 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, 2046, 2046, 2046, 45, 45, 45, 2046, 45, + 2046, 45, 115, 45, 45, 45, 45, 45, 45, 45, + 45, 2046, 45, 45, 45, 45, 45, 45, 2046, 45, + 45, 45, 45, 45, 45, 45, 45, 2046, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2124, 2124, 2124, 45, 45, 45, 2124, 45, 2124, - 45, 115, 45, 45, 45, 45, 45, 45, 45, 45, - 2124, 45, 45, 45, 45, 45, 45, 45, 45, 2124, - 45, 45, 45, 45, 45, 45, 45, 45, 2124, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - - 45, 2124, 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, - 2124, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2124, 45, 2124, - 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, 2124, 45, 2124, 45, 2124, 45, - 2124, 45, 45, 2124, 45, 2124, 2124, 2124, 45, 45, - - 45, 2124, 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, 2124, 45, 45, - 45, 45, 45, 45, 45, 45, 2124, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2124, 45, 45, 2124, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2124, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - - 45, 2124, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2124, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2124, 2124, 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, 2124, 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, - - 2124, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2124, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2124, 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, 2124, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2124, 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, 2124, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2124, 2124, 45, 45, 45, - 45, 45, 45, 45, 2124, 2124, 45, 45, 45, 45, - 45, 2124, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2124, 45, 2124, 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, 2124, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - - 45, 45, 45, 45, 2124, 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, 2124, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2124, 45, 45, 45, 45, - 45, 45, 45, 2124, 2124, 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, - 2124, 2124, 45, 45, 45, 2124, 45, 45, 45, 45, - 2124, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 2046, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2124, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2046, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2124, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2046, 45, 2046, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2124, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2124, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2046, 45, + 2046, 45, 2046, 45, 2046, 45, 45, 2046, 45, 2046, + 2046, 2046, 45, 45, 45, 2046, 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, 2124, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2124, 45, 45, 45, 2124, 2124, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2046, + 45, 45, 45, 45, 45, 45, 45, 45, 2046, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2046, 45, 45, 2046, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2046, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2124, 45, 45, 45, 45, 45, 45, - 45, 45, 2124, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2124, 2124, 45, 2124, 45, 2124, 45, 45, + 45, 45, 2046, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2046, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2046, 2046, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2124, 45, 45, 45, 2124, 45, - 45, 45, 45, 45, 2124, 45, 2124, 45, 2124, 45, - 2124, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2124, 45, 45, - 45, 45, 45, 45, 2124, 2124, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2124, 45, 45, 45, 2124, - 45, 45, 45, 45, 45, 45, 2124, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2124, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2124, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2124, 2124, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2046, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2124, 45, 45, 45, 45, 45, 45, 2124, 45, - 45, 2124, 45, 2124, 2124, 45, 45, 45, 45, 2124, - 45, 45, 45, 45, 45, 45, 2124, 45, 45, 45, - 2124, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2124, 45, 45, 2124, 45, 45, 45, 45, 45, 45, - - 45, 45, 45, 45, 45, 2124, 45, 2124, 45, 2124, - 45, 45, 2124, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2124, 45, 45, 45, 45, 45, 45, - 45, 45, 2124, 2124, 45, 45, 2124, 45, 45, 45, - 45, 45, 2124, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2124, 45, 2124, 45, 45, 2124, - 45, 45, 45, 2124, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 2124, - 45, 45, 45, 45, 2124, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2046, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2046, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2046, 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, 2124, 45, 45, - 45, 45, 45, 45, 45, 2124, 45, 45, 45, 45, - 45, 45, 2124, 2124, 45, 45, 45, 2124, 2124, 2124, + 45, 45, 45, 45, 2046, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2124, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2124, 45, 45, 45, 2124, 45, 45, 2124, - 45, 45, 45, 2124, 45, 45, 45, 45, 45, 2124, + 45, 45, 45, 2046, 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, 2046, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2046, 2046, 45, 45, 45, 45, 45, 45, + + 45, 2046, 2046, 45, 45, 45, 45, 45, 2046, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2046, 45, + 2046, 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, 2046, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2046, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2046, 45, 45, 45, 45, 45, 45, 45, + + 45, 45, 45, 45, 45, 45, 2046, 45, 45, 45, + 45, 45, 45, 45, 2046, 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, + 2046, 2046, 45, 45, 45, 2046, 45, 45, 45, 45, + 2046, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2046, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2046, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2046, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2046, + 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, 2046, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2046, 45, 45, + 2046, 2046, 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, 2124, 45, 2124, 45, - 45, 45, 2124, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2124, 45, 45, 45, 45, - 45, 2124, 45, 45, 45, 2124, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2124, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2124, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2124, 45, - 2124, 45, 45, 45, 2124, 45, 2124, 45, 45, 45, + 45, 2046, 45, 45, 45, 45, 45, 45, 45, 45, + 2046, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 2046, 2046, 45, 2046, 45, 2046, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2046, 45, 45, 45, 2046, 45, 45, 45, + 45, 45, 2046, 45, 2046, 45, 2046, 45, 2046, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2046, 45, 45, 45, 45, 45, 45, + + 2046, 2046, 45, 45, 45, 45, 45, 45, 45, 2046, + 45, 45, 45, 2046, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2046, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2046, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2046, 2046, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2046, 45, 45, 45, 45, 45, 2046, + 45, 2046, 45, 2046, 2046, 45, 45, 45, 45, 45, + + 45, 45, 45, 45, 2046, 45, 45, 45, 2046, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2046, 45, 45, + 2046, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2046, 45, 2046, 45, 2046, 45, 45, 2046, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 2046, 45, 45, 45, 45, 45, 45, 45, 45, 2046, + 2046, 45, 45, 2046, 45, 45, 45, 45, 2046, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2046, 45, + 2046, 45, 45, 2046, 45, 45, 45, 2046, 45, 45, + + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2046, 45, 45, 45, 45, 2046, 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, 2046, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2046, 2046, 45, 45, 45, 2046, 2046, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2046, 45, 45, 45, 45, 45, 45, 45, 45, + + 45, 2046, 45, 45, 45, 2046, 45, 45, 2046, 45, + 45, 45, 2046, 45, 45, 45, 45, 45, 2046, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2046, 45, 2046, 45, 45, 45, 2046, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2046, 45, 45, 45, 45, 45, 2046, 45, + 45, 45, 2046, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2046, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2124, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2124, 45, 45, 45, 45, 2124, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2124, 45, 45, 45, 45, 45, 45, 2124, 45, 45, - 2124, 45, 45, 45, 45, 45, 45, 45, 45, 2124, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2124, 2124, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2124, 45, 45, 2124, 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, 2046, 45, 2046, 45, 45, 45, 2046, + 45, 2046, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2046, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2046, 45, + 45, 45, 45, 2046, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2046, 45, 45, 45, 45, + 45, 2046, 45, 45, 2046, 45, 45, 45, 45, 45, + 45, 45, 45, 2046, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2046, 2046, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2046, 45, - 45, 45, 2124, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2124, 45, 2124, 45, 2124, 45, - 2124, 45, 2124, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2124, 45, 45, 45, 45, 2124, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 2124, - 45, 45, 2124, 45, 45, 45, 45, 45, 2124, 45, - 45, 2124, 45, 2124, 45, 2124, 45, 2124, 45, 45, - 45, 45, 45, 2124, 45, 45, 45, 45, 45, 45, - 45, 2124, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2046, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2046, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2046, 45, 2046, + 45, 2046, 45, 2046, 45, 2046, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2046, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2046, 45, 45, 2046, 45, 45, 45, 45, 45, + 2046, 45, 45, 2046, 45, 2046, 45, 2046, 45, 2046, + 45, 45, 45, 45, 45, 2046, 45, 45, 45, 45, - 45, 2124, 45, 45, 45, 2124, 45, 45, 45, 45, + 45, 45, 45, 2046, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2046, 45, 45, 45, 2046, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2124, 45, 45, 2124, 45, 45, 45, 45, 2124, - 45, 45, 45, 45, 2124, 2124, 2124, 2124, 2124, 45, - 2124, 2124, 2124, 45, 45, 45, 45, 45, 2124, 45, - 45, 45, 45, 45, 45, 45, 45, 2124, 45, 45, - 45, 2124, 45, 2124, 45, 2124, 45, 45, 45, 45, - 45, 45, 2124, 45, 45, 45, 45, 2124, 45, 45, - 2124, 2124, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2046, 45, 45, 2046, 45, 45, 45, + 45, 2046, 45, 45, 45, 45, 2046, 2046, 2046, 2046, + 2046, 45, 2046, 2046, 2046, 45, 45, 45, 45, 45, + 2046, 45, 45, 45, 45, 45, 45, 45, 45, 2046, + 45, 45, 45, 2046, 45, 2046, 45, 2046, 45, 45, - 45, 2124, 45, 45, 45, 45, 45, 45, 2124, 45, - 45, 2124, 2124, 45, 45, 45, 45, 45, 45, 2124, - 45, 2124, 2124, 0, 2124, 2124, 2124, 2124, 2124, 2124, - 2124, 2124 + 45, 45, 45, 45, 2046, 45, 45, 45, 45, 2046, + 45, 45, 2046, 2046, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2046, 45, 45, 45, 45, 45, 45, + 2046, 45, 45, 2046, 2046, 45, 45, 45, 45, 45, + 45, 2046, 45, 2046, 2046, 0, 2046, 2046, 2046, 2046, + 2046, 2046, 2046, 2046 } ; -static const flex_int16_t yy_nxt[2589] = +static const flex_int16_t yy_nxt[2510] = { 0, - 2124, 13, 14, 13, 2124, 15, 16, 2124, 17, 18, + 2046, 13, 14, 13, 2046, 15, 16, 2046, 17, 18, 19, 20, 21, 22, 22, 22, 22, 22, 23, 24, - 84, 812, 37, 14, 37, 85, 25, 26, 38, 100, - 2124, 27, 37, 14, 37, 42, 28, 42, 38, 90, - 91, 29, 200, 30, 13, 14, 13, 89, 90, 25, + 84, 786, 37, 14, 37, 85, 25, 26, 38, 100, + 2046, 27, 37, 14, 37, 42, 28, 42, 38, 90, + 91, 29, 198, 30, 13, 14, 13, 89, 90, 25, 31, 91, 13, 14, 13, 13, 14, 13, 32, 40, - 813, 13, 14, 13, 33, 40, 101, 90, 91, 200, + 787, 13, 14, 13, 33, 40, 101, 90, 91, 198, 89, 34, 35, 13, 14, 13, 93, 15, 16, 94, 17, 18, 19, 20, 21, 22, 22, 22, 22, 22, 23, 24, 13, 14, 13, 89, 39, 102, 25, 26, 13, 14, 13, 27, 39, 42, 105, 42, 28, 42, - 106, 42, 41, 29, 108, 30, 111, 112, 92, 137, - 41, 25, 31, 102, 138, 378, 87, 139, 87, 105, + 106, 42, 41, 29, 108, 30, 111, 112, 92, 136, + 41, 25, 31, 102, 137, 372, 87, 138, 87, 105, 32, 88, 88, 88, 88, 88, 33, 108, 106, 111, - 861, 112, 379, 34, 35, 44, 44, 44, 45, 45, + 851, 112, 373, 34, 35, 44, 44, 44, 45, 45, 46, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 47, 45, 45, 48, 49, 50, 45, 51, 52, 53, 45, 45, 45, @@ -1485,287 +1458,279 @@ static const flex_int16_t yy_nxt[2589] = 58, 45, 59, 60, 61, 62, 63, 64, 65, 51, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 56, 45, 45, 45, 45, 45, 79, 238, + 76, 77, 56, 45, 45, 45, 45, 45, 79, 202, 80, 80, 80, 80, 80, 79, 102, 82, 82, 82, - 82, 82, 239, 81, 83, 83, 83, 83, 83, 79, - 81, 82, 82, 82, 82, 82, 135, 81, 131, 188, - 109, 118, 116, 136, 81, 119, 81, 105, 117, 120, - 110, 132, 121, 81, 140, 122, 190, 123, 167, 124, - 81, 133, 168, 109, 141, 188, 142, 81, 45, 108, - 105, 45, 45, 45, 254, 45, 45, 45, 110, 114, - 402, 134, 45, 45, 190, 45, 45, 255, 153, 189, + 82, 82, 446, 81, 83, 83, 83, 83, 83, 79, + 81, 82, 82, 82, 82, 82, 202, 81, 186, 187, + 109, 118, 116, 130, 81, 119, 81, 105, 117, 120, + 110, 446, 121, 81, 124, 122, 131, 125, 126, 123, + 81, 127, 128, 109, 186, 187, 132, 81, 45, 108, + 105, 45, 45, 45, 129, 45, 45, 45, 110, 114, + 134, 133, 45, 45, 469, 45, 45, 135, 152, 470, - 154, 45, 155, 45, 45, 45, 45, 45, 45, 45, + 153, 45, 154, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 125, 189, 45, 126, 127, 188, - 45, 128, 129, 148, 45, 144, 145, 149, 303, 146, - 403, 150, 45, 189, 130, 147, 45, 190, 45, 115, - 156, 100, 304, 151, 111, 191, 199, 152, 157, 161, - 158, 196, 162, 163, 169, 159, 160, 201, 170, 192, - 240, 171, 235, 164, 236, 193, 165, 111, 172, 173, - 176, 177, 199, 174, 175, 204, 241, 184, 101, 196, - 109, 237, 185, 83, 83, 83, 83, 83, 202, 79, + 45, 45, 45, 45, 188, 139, 45, 166, 143, 144, + 45, 167, 145, 256, 45, 140, 147, 141, 146, 852, + 148, 186, 45, 155, 149, 204, 45, 100, 45, 115, + 111, 156, 188, 157, 257, 235, 150, 188, 158, 159, + 151, 160, 168, 187, 161, 162, 169, 189, 236, 170, + 175, 176, 204, 111, 205, 163, 171, 172, 164, 194, + 109, 173, 174, 182, 101, 191, 197, 201, 183, 190, + 110, 83, 83, 83, 83, 83, 79, 205, 80, 80, - 110, 80, 80, 80, 80, 80, 81, 83, 83, 83, - 83, 83, 204, 178, 81, 179, 228, 229, 180, 181, - 81, 203, 788, 789, 249, 87, 230, 87, 182, 81, - 88, 88, 88, 88, 88, 183, 79, 81, 82, 82, - 82, 82, 82, 81, 88, 88, 88, 88, 88, 203, - 99, 81, 88, 88, 88, 88, 88, 99, 205, 207, - 215, 206, 196, 259, 244, 203, 221, 245, 250, 216, - 269, 246, 204, 217, 81, 222, 223, 319, 205, 212, - 317, 274, 207, 862, 260, 284, 205, 99, 206, 285, - 213, 99, 318, 267, 319, 99, 275, 276, 277, 308, + 80, 80, 80, 109, 81, 177, 281, 194, 178, 179, + 282, 81, 197, 853, 87, 201, 87, 99, 180, 88, + 88, 88, 88, 88, 99, 181, 79, 81, 82, 82, + 82, 82, 82, 203, 81, 83, 83, 83, 83, 83, + 194, 81, 88, 88, 88, 88, 88, 199, 81, 88, + 88, 88, 88, 88, 99, 854, 213, 210, 99, 237, + 246, 203, 99, 219, 81, 214, 201, 251, 211, 215, + 99, 81, 220, 221, 99, 238, 99, 99, 200, 208, + 252, 266, 225, 226, 232, 315, 233, 209, 209, 209, + 209, 209, 227, 284, 264, 271, 209, 209, 209, 209, - 319, 280, 324, 99, 281, 282, 312, 99, 317, 99, - 99, 210, 287, 317, 318, 326, 270, 322, 318, 211, - 211, 211, 211, 211, 438, 324, 439, 329, 211, 211, - 211, 211, 211, 211, 297, 406, 331, 327, 298, 333, - 321, 320, 299, 326, 380, 407, 863, 288, 289, 290, - 329, 211, 211, 211, 211, 211, 211, 388, 291, 331, - 292, 324, 293, 294, 327, 295, 333, 334, 334, 334, - 334, 334, 345, 329, 347, 346, 334, 334, 334, 334, - 334, 334, 348, 422, 336, 431, 423, 349, 350, 330, - 455, 331, 452, 452, 443, 457, 397, 381, 432, 334, + 209, 209, 241, 234, 247, 242, 203, 313, 315, 243, + 272, 273, 274, 277, 313, 315, 278, 279, 395, 209, + 209, 209, 209, 209, 209, 314, 314, 267, 285, 286, + 287, 300, 294, 320, 308, 313, 295, 322, 318, 288, + 296, 289, 316, 290, 291, 301, 292, 323, 325, 327, + 329, 314, 317, 320, 341, 343, 320, 342, 415, 855, + 325, 416, 575, 344, 381, 322, 450, 576, 396, 345, + 327, 325, 327, 443, 323, 399, 332, 329, 330, 330, + 330, 330, 330, 390, 430, 400, 431, 330, 330, 330, + 330, 330, 330, 327, 450, 443, 443, 475, 448, 446, - 334, 334, 334, 334, 334, 459, 477, 480, 866, 867, - 389, 455, 481, 390, 331, 452, 453, 868, 457, 455, - 486, 532, 502, 478, 527, 459, 487, 503, 447, 548, - 528, 533, 595, 459, 462, 462, 462, 462, 462, 583, - 463, 869, 584, 462, 462, 462, 462, 462, 462, 520, - 521, 522, 552, 534, 561, 523, 553, 566, 562, 591, - 595, 567, 712, 599, 592, 600, 462, 462, 462, 462, - 462, 462, 595, 638, 618, 504, 627, 870, 639, 871, - 505, 663, 619, 733, 620, 621, 622, 549, 623, 628, - 599, 664, 600, 45, 45, 45, 45, 45, 757, 865, + 508, 509, 510, 476, 536, 732, 511, 438, 733, 520, + 330, 330, 330, 330, 330, 330, 609, 382, 444, 521, + 383, 448, 453, 453, 453, 453, 453, 691, 454, 610, + 856, 453, 453, 453, 453, 453, 453, 491, 515, 450, + 579, 540, 492, 549, 516, 541, 583, 550, 584, 579, + 857, 644, 762, 763, 453, 453, 453, 453, 453, 453, + 620, 645, 537, 711, 683, 621, 710, 522, 579, 684, + 600, 709, 858, 583, 825, 584, 712, 585, 601, 692, + 602, 603, 604, 798, 605, 713, 826, 834, 799, 835, + 493, 711, 714, 710, 859, 494, 45, 45, 45, 45, - 601, 758, 45, 45, 45, 45, 45, 45, 702, 734, - 733, 732, 736, 703, 713, 824, 735, 864, 872, 737, - 825, 853, 865, 873, 874, 45, 45, 45, 45, 45, - 45, 875, 879, 854, 880, 876, 877, 734, 878, 881, - 882, 883, 884, 885, 886, 864, 887, 888, 889, 890, - 891, 892, 893, 894, 895, 896, 897, 898, 899, 826, - 900, 903, 904, 905, 901, 906, 907, 908, 902, 909, - 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, - 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, - 930, 931, 933, 934, 932, 935, 936, 937, 938, 939, + 45, 846, 847, 860, 848, 45, 45, 45, 45, 45, + 45, 861, 835, 862, 863, 834, 864, 865, 866, 867, + 871, 872, 873, 874, 875, 876, 877, 800, 45, 45, + 45, 45, 45, 45, 868, 878, 879, 880, 869, 881, + 882, 883, 870, 884, 885, 886, 887, 888, 889, 890, + 891, 892, 893, 894, 895, 896, 897, 898, 900, 901, + 899, 902, 903, 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, 934, 935, 936, 937, 938, 939, 940, - 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, - 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, - 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, - 970, 971, 972, 973, 974, 975, 977, 978, 979, 982, - 983, 984, 976, 986, 987, 980, 988, 985, 989, 981, - 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, - 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, - 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, - 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1000, 1028, - 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, + 941, 943, 944, 947, 948, 949, 951, 942, 952, 945, + 953, 950, 954, 946, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, + 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, + 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, + 963, 991, 992, 993, 994, 995, 996, 997, 998, 999, + 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1009, 1010, + 1011, 1012, 1008, 1013, 1014, 1015, 1016, 1017, 1018, 1019, + 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, + 1030, 1031, 1032, 1033, 1035, 1036, 1037, 1034, 1038, 1039, - 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1048, 1049, - 1050, 1051, 1047, 1052, 1053, 1054, 1055, 1056, 1057, 1058, - 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, - 1069, 1070, 1071, 1072, 1073, 1075, 1076, 1077, 1074, 1078, - 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, - 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, - 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1109, - 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, - 1108, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, - 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, + 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, 1067, 1068, 1069, 1070, + 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1066, 1078, 1079, + 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, + 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, + 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1084, 1107, 1108, + 1083, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, + 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, + 1128, 1129, 1130, 1133, 1134, 1135, 1136, 1131, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, - 1149, 1150, 1128, 1151, 1152, 1127, 1153, 1154, 1155, 1156, - 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, - 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, - 1179, 1180, 1181, 1182, 1177, 1183, 1184, 1185, 1186, 1187, - 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, - 1198, 1199, 1200, 1201, 1202, 1204, 1205, 1206, 1207, 1208, - 1209, 1210, 1211, 1212, 1213, 1203, 1214, 1215, 1216, 1217, - 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, - 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1178, 1235, 1236, + 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1158, 1159, + 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1157, 1168, + 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, + 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, + 1132, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, + 1198, 1200, 1199, 1201, 1202, 1203, 1204, 1205, 1206, 1207, + 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, + 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1198, 1199, + 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, - 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, - 1247, 1248, 1250, 1249, 1251, 1252, 1253, 1254, 1255, 1256, + 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1246, + 1248, 1249, 1250, 1245, 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, 1248, - 1249, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, - 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, - 1295, 1296, 1298, 1300, 1301, 1302, 1297, 1303, 1304, 1305, + 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, + 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, + 1287, 1288, 1289, 1247, 1290, 1291, 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, 1335, + 1326, 1327, 1328, 1329, 1330, 1308, 1331, 1332, 1333, 1334, - 1336, 1337, 1338, 1339, 1340, 1341, 1299, 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, 1374, - 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, - 1385, 1386, 1364, 1387, 1388, 1389, 1390, 1391, 1365, 1392, - 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, - 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, - 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, - 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, + 1335, 1309, 1336, 1337, 1338, 1339, 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, + 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, + 1384, 1385, 1386, 1387, 1389, 1390, 1391, 1392, 1393, 1394, + 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, + 1405, 1406, 1407, 1408, 1409, 1411, 1412, 1413, 1414, 1415, + 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, + 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1404, 1433, 1434, - 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, - 1443, 1444, 1445, 1446, 1448, 1449, 1450, 1451, 1452, 1453, - 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, - 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1473, 1474, - 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, - 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, - 1466, 1495, 1496, 1497, 1498, 1499, 1447, 1500, 1501, 1502, + 1435, 1436, 1437, 1438, 1439, 1440, 1388, 1441, 1442, 1443, + 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1410, 1452, + 1453, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1454, 1462, + 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, + 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1481, 1482, 1484, + 1483, 1480, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, + 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, - 1513, 1472, 1514, 1515, 1516, 1518, 1519, 1520, 1521, 1522, - 1523, 1524, 1517, 1525, 1526, 1527, 1528, 1529, 1530, 1531, + 1513, 1514, 1515, 1493, 1516, 1517, 1518, 1519, 1520, 1521, + 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, - 1542, 1543, 1545, 1546, 1549, 1547, 1544, 1548, 1550, 1551, - 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, - 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, + 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, + 1552, 1553, 1554, 1555, 1556, 1560, 1557, 1561, 1562, 1558, + 1563, 1564, 1559, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, - 1559, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, - 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, - 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, - 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, - 1621, 1622, 1623, 1624, 1628, 1625, 1629, 1630, 1626, 1631, + 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, + 1582, 1593, 1594, 1595, 1596, 1570, 1597, 1598, 1599, 1600, + 1601, 1602, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, + 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, + 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, - 1632, 1627, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, - 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, - 1651, 1652, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, - 1662, 1663, 1653, 1664, 1665, 1666, 1640, 1667, 1668, 1669, - 1670, 1671, 1672, 1673, 1675, 1676, 1677, 1678, 1679, 1680, - 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, - 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, - 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, - 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, - 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, + 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, + 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, + 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1603, + 1661, 1662, 1663, 1665, 1666, 1667, 1668, 1664, 1669, 1670, + 1671, 1645, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, + 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, + 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, + 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, + 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, + 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, - 1731, 1674, 1732, 1733, 1734, 1735, 1736, 1738, 1739, 1740, - 1741, 1737, 1742, 1743, 1744, 1718, 1745, 1746, 1747, 1748, - 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, - 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, - 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, - 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, - 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, - 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, - 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, - 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, + 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, + 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, + 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, + 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, + 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, + 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, + 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, + 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, + 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, + 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, - 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, - 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, - 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, - 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, - 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, - 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, - 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, - 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, - 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, - 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, + 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, + 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, + 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, + 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, + 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, + 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, + 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, + 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, + 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, + 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, - 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, - 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, - 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, - 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, - 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, - 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, - 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, - 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, - 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, + 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, + 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, + 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, + 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, + 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, + 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, + 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, + 2010, 2011, 2012, 2013, 2014, 2015, 2017, 2016, 2018, 2019, + 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, - 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, - 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, - 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, - 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, - 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, - 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, - 2089, 2090, 2091, 2092, 2093, 2095, 2094, 2096, 2097, 2098, - 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, - 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117, 2118, - 2119, 2120, 2121, 2122, 2123, 12, 12, 12, 36, 36, + 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, + 2040, 2041, 2042, 2043, 2044, 2045, 12, 12, 12, 36, + 36, 36, 78, 97, 78, 99, 99, 99, 113, 113, + 113, 185, 850, 185, 206, 206, 206, 849, 845, 844, + 843, 842, 841, 840, 839, 838, 837, 836, 833, 832, + 831, 830, 829, 828, 827, 824, 823, 822, 821, 820, + 819, 818, 817, 816, 815, 814, 813, 812, 811, 810, + 809, 808, 807, 806, 805, 804, 803, 802, 801, 797, + 796, 795, 794, 793, 792, 791, 790, 789, 788, 785, + 784, 783, 782, 781, 780, 779, 778, 777, 776, 775, - 36, 78, 97, 78, 99, 99, 99, 113, 113, 113, - 187, 860, 187, 208, 208, 208, 859, 858, 857, 856, - 855, 852, 851, 850, 849, 848, 847, 846, 845, 844, - 843, 842, 841, 840, 839, 838, 837, 836, 835, 834, - 833, 832, 831, 830, 829, 828, 827, 823, 822, 821, - 820, 819, 818, 817, 816, 815, 814, 811, 810, 809, - 808, 807, 806, 805, 804, 803, 802, 801, 800, 799, - 798, 797, 796, 795, 794, 793, 792, 791, 790, 787, - 786, 785, 784, 783, 782, 781, 780, 779, 778, 777, - 776, 775, 774, 773, 772, 771, 770, 769, 768, 767, + 774, 773, 772, 771, 770, 769, 768, 767, 766, 765, + 764, 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, + 730, 729, 728, 727, 726, 725, 724, 723, 722, 721, + 720, 719, 718, 717, 716, 715, 709, 708, 707, 706, + 705, 704, 703, 702, 701, 700, 699, 698, 697, 696, + 695, 694, 693, 690, 689, 688, 687, 686, 685, 682, + 681, 680, 679, 678, 677, 676, 675, 674, 673, 672, + 671, 670, 669, 668, 667, 666, 665, 664, 663, 662, - 766, 765, 764, 763, 762, 761, 760, 759, 756, 755, - 754, 753, 752, 751, 750, 749, 748, 747, 746, 745, - 744, 743, 742, 741, 740, 739, 738, 732, 731, 730, - 729, 728, 727, 726, 725, 724, 723, 722, 721, 720, - 719, 718, 717, 716, 715, 714, 711, 710, 709, 708, - 707, 706, 705, 704, 701, 700, 699, 698, 697, 696, - 695, 694, 693, 692, 691, 690, 689, 688, 687, 686, - 685, 684, 683, 682, 681, 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, + 661, 660, 659, 658, 657, 656, 655, 654, 653, 652, + 651, 650, 649, 648, 647, 646, 643, 642, 641, 640, + 639, 638, 637, 636, 635, 634, 633, 632, 631, 630, + 629, 628, 627, 626, 625, 624, 623, 622, 619, 618, + 617, 616, 615, 614, 613, 612, 611, 608, 607, 606, + 599, 598, 597, 596, 595, 594, 593, 592, 591, 590, + 589, 588, 587, 586, 582, 581, 580, 578, 577, 574, + 573, 572, 571, 570, 569, 568, 567, 566, 565, 564, + 563, 562, 561, 560, 559, 558, 557, 556, 555, 554, + 553, 552, 551, 548, 547, 546, 545, 544, 543, 542, - 653, 652, 651, 650, 649, 648, 647, 646, 645, 644, - 643, 642, 641, 640, 637, 636, 635, 634, 633, 632, - 631, 630, 629, 626, 625, 624, 617, 616, 615, 614, - 613, 612, 611, 610, 609, 608, 607, 606, 605, 604, - 603, 602, 598, 597, 596, 594, 593, 590, 589, 588, - 587, 586, 585, 582, 581, 580, 579, 578, 577, 576, - 575, 574, 573, 572, 571, 570, 569, 568, 565, 564, - 563, 560, 559, 558, 557, 556, 555, 554, 551, 550, - 547, 546, 545, 544, 543, 542, 541, 540, 539, 538, - 537, 536, 535, 531, 530, 529, 526, 525, 524, 519, + 539, 538, 535, 534, 533, 532, 531, 530, 529, 528, + 527, 526, 525, 524, 523, 519, 518, 517, 514, 513, + 512, 507, 506, 505, 504, 503, 502, 501, 500, 499, + 498, 497, 496, 495, 490, 489, 488, 487, 486, 485, + 484, 483, 482, 481, 480, 479, 478, 477, 474, 473, + 472, 471, 468, 467, 466, 465, 464, 463, 462, 461, + 460, 459, 458, 457, 456, 455, 452, 451, 449, 447, + 445, 442, 441, 440, 439, 437, 436, 435, 434, 433, + 432, 429, 428, 427, 426, 425, 424, 423, 422, 421, + 420, 419, 418, 417, 414, 413, 412, 411, 410, 409, - 518, 517, 516, 515, 514, 513, 512, 511, 510, 509, - 508, 507, 506, 501, 500, 499, 498, 497, 496, 495, - 494, 493, 492, 491, 490, 489, 488, 485, 484, 483, - 482, 479, 476, 475, 474, 473, 472, 471, 470, 469, - 468, 467, 466, 465, 464, 461, 460, 458, 456, 454, - 451, 450, 449, 448, 446, 445, 444, 442, 441, 440, - 437, 436, 435, 434, 433, 430, 429, 428, 427, 426, - 425, 424, 421, 420, 419, 418, 417, 416, 415, 414, - 413, 412, 411, 410, 409, 408, 405, 404, 401, 400, - 399, 398, 396, 395, 394, 393, 392, 391, 387, 386, + 408, 407, 406, 405, 404, 403, 402, 401, 398, 397, + 394, 393, 392, 391, 389, 388, 387, 386, 385, 384, + 380, 379, 378, 377, 376, 375, 374, 371, 370, 369, + 368, 367, 366, 365, 364, 363, 362, 361, 360, 359, + 358, 357, 356, 355, 354, 353, 352, 351, 350, 349, + 348, 347, 346, 340, 339, 338, 337, 336, 335, 334, + 333, 331, 207, 328, 326, 324, 321, 319, 312, 311, + 310, 309, 307, 306, 305, 304, 303, 302, 299, 298, + 297, 293, 283, 280, 276, 275, 270, 269, 268, 265, + 263, 262, 261, 260, 259, 258, 255, 254, 253, 250, - 385, 384, 383, 382, 377, 376, 375, 374, 373, 372, - 371, 370, 369, 368, 367, 366, 365, 364, 363, 362, - 361, 360, 359, 358, 357, 356, 355, 354, 353, 352, - 351, 344, 343, 342, 341, 340, 339, 338, 337, 335, - 209, 332, 330, 328, 325, 323, 316, 315, 314, 313, - 311, 310, 309, 307, 306, 305, 302, 301, 300, 296, - 286, 283, 279, 278, 273, 272, 271, 268, 266, 265, - 264, 263, 262, 261, 258, 257, 256, 253, 252, 251, - 248, 247, 243, 242, 234, 233, 232, 231, 227, 226, - 225, 224, 220, 219, 218, 214, 209, 198, 197, 195, + 249, 248, 245, 244, 240, 239, 231, 230, 229, 228, + 224, 223, 222, 218, 217, 216, 212, 207, 196, 195, + 193, 192, 184, 165, 142, 107, 104, 103, 43, 98, + 96, 95, 86, 43, 2046, 11, 2046, 2046, 2046, 2046, + 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, + 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, + 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, + 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, + 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, + 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, - 194, 186, 166, 143, 107, 104, 103, 43, 98, 96, - 95, 86, 43, 2124, 11, 2124, 2124, 2124, 2124, 2124, - 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, - 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, - 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, - 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, - 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, - 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, - 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124 + 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046 } ; -static const flex_int16_t yy_chk[2589] = +static const flex_int16_t yy_chk[2510] = { 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 21, 680, 3, 3, 3, 21, 1, 1, 3, 44, + 21, 661, 3, 3, 3, 21, 1, 1, 3, 44, 0, 1, 4, 4, 4, 13, 1, 13, 4, 27, 28, 1, 106, 1, 5, 5, 5, 26, 32, 1, 1, 33, 6, 6, 6, 7, 7, 7, 1, 7, - 680, 8, 8, 8, 1, 8, 44, 27, 28, 106, + 661, 8, 8, 8, 1, 8, 44, 27, 28, 106, 26, 1, 1, 2, 2, 2, 32, 2, 2, 33, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 9, 9, 31, 5, 47, 2, 2, 10, 10, 10, 2, 6, 37, 50, 37, 2, 42, 51, 42, 9, 2, 53, 2, 55, 56, 31, 64, - 10, 2, 2, 47, 64, 252, 25, 64, 25, 50, + 10, 2, 2, 47, 64, 249, 25, 64, 25, 50, 2, 25, 25, 25, 25, 25, 2, 53, 51, 55, - 728, 56, 252, 2, 2, 15, 15, 15, 15, 15, + 725, 56, 249, 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, 15, 15, 15, 15, 15, 15, @@ -1773,267 +1738,259 @@ static const flex_int16_t yy_chk[2589] = 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 17, 133, + 15, 15, 15, 15, 15, 15, 15, 15, 17, 109, 17, 17, 17, 17, 17, 19, 58, 19, 19, 19, - 19, 19, 133, 17, 20, 20, 20, 20, 20, 22, - 19, 22, 22, 22, 22, 22, 63, 20, 61, 89, - 54, 59, 58, 63, 22, 59, 17, 62, 58, 59, - 54, 61, 59, 19, 65, 59, 91, 59, 73, 59, - 20, 61, 73, 54, 65, 89, 65, 22, 45, 69, - 62, 45, 45, 45, 144, 45, 45, 45, 54, 57, - 272, 62, 45, 45, 91, 45, 57, 144, 69, 90, + 19, 19, 320, 17, 20, 20, 20, 20, 20, 22, + 19, 22, 22, 22, 22, 22, 109, 20, 89, 90, + 54, 59, 58, 61, 22, 59, 17, 62, 58, 59, + 54, 320, 59, 19, 60, 59, 61, 60, 60, 59, + 20, 60, 60, 54, 89, 90, 61, 22, 45, 69, + 62, 45, 45, 45, 60, 45, 45, 45, 54, 57, + 63, 62, 45, 45, 347, 45, 57, 63, 69, 347, 69, 45, 69, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 60, 90, 57, 60, 60, 92, - 57, 60, 60, 68, 57, 67, 67, 68, 174, 67, - 272, 68, 57, 93, 60, 67, 57, 94, 57, 57, - 70, 99, 174, 68, 76, 92, 105, 68, 70, 71, - 70, 102, 71, 71, 74, 70, 70, 107, 74, 93, - 134, 74, 132, 71, 132, 94, 71, 76, 74, 74, - 75, 75, 105, 74, 74, 109, 134, 76, 99, 102, - 75, 132, 76, 79, 79, 79, 79, 79, 107, 80, + 45, 45, 45, 45, 91, 65, 57, 73, 67, 67, + 57, 73, 67, 147, 57, 65, 68, 65, 67, 726, + 68, 92, 57, 70, 68, 111, 57, 99, 57, 57, + 76, 70, 91, 70, 147, 132, 68, 94, 70, 70, + 68, 71, 74, 93, 71, 71, 74, 92, 132, 74, + 75, 75, 111, 76, 112, 71, 74, 74, 71, 102, + 75, 74, 74, 76, 99, 94, 105, 108, 76, 93, + 75, 79, 79, 79, 79, 79, 80, 112, 80, 80, - 75, 80, 80, 80, 80, 80, 79, 83, 83, 83, - 83, 83, 109, 75, 80, 75, 127, 127, 75, 75, - 83, 108, 655, 655, 140, 81, 127, 81, 75, 79, - 81, 81, 81, 81, 81, 75, 82, 80, 82, 82, - 82, 82, 82, 83, 87, 87, 87, 87, 87, 108, - 101, 82, 88, 88, 88, 88, 88, 101, 110, 112, - 118, 111, 116, 148, 137, 155, 122, 137, 140, 118, - 157, 137, 178, 118, 82, 122, 122, 190, 182, 116, - 188, 161, 112, 729, 148, 166, 110, 101, 111, 166, - 116, 101, 189, 155, 193, 101, 161, 161, 161, 178, + 80, 80, 80, 75, 79, 75, 165, 102, 75, 75, + 165, 80, 105, 727, 81, 108, 81, 101, 75, 81, + 81, 81, 81, 81, 101, 75, 82, 79, 82, 82, + 82, 82, 82, 110, 80, 83, 83, 83, 83, 83, + 116, 82, 87, 87, 87, 87, 87, 107, 83, 88, + 88, 88, 88, 88, 101, 728, 118, 116, 101, 133, + 139, 110, 101, 122, 82, 118, 154, 143, 116, 118, + 101, 83, 122, 122, 101, 133, 101, 101, 107, 115, + 143, 156, 126, 126, 131, 188, 131, 115, 115, 115, + 115, 115, 126, 167, 154, 160, 115, 115, 115, 115, - 190, 164, 196, 101, 164, 164, 182, 101, 188, 101, - 101, 115, 168, 191, 192, 199, 157, 193, 189, 115, - 115, 115, 115, 115, 304, 196, 304, 203, 115, 115, - 115, 115, 115, 115, 170, 275, 205, 200, 170, 207, - 192, 191, 170, 199, 253, 275, 730, 168, 168, 168, - 203, 115, 115, 115, 115, 115, 115, 260, 168, 205, - 168, 213, 168, 168, 200, 168, 207, 211, 211, 211, - 211, 211, 222, 267, 223, 222, 211, 211, 211, 211, - 211, 211, 223, 290, 213, 298, 290, 223, 223, 308, - 324, 312, 317, 320, 308, 326, 267, 253, 298, 211, + 115, 115, 136, 131, 139, 136, 180, 186, 188, 136, + 160, 160, 160, 163, 189, 191, 163, 163, 269, 115, + 115, 115, 115, 115, 115, 187, 190, 156, 167, 167, + 167, 173, 169, 194, 180, 186, 169, 197, 191, 167, + 169, 167, 189, 167, 167, 173, 167, 198, 201, 203, + 205, 187, 190, 211, 220, 221, 194, 220, 287, 729, + 264, 287, 441, 221, 257, 197, 325, 441, 269, 221, + 308, 201, 203, 313, 198, 272, 211, 205, 209, 209, + 209, 209, 209, 264, 301, 272, 301, 209, 209, 209, + 209, 209, 209, 308, 325, 316, 313, 352, 322, 332, - 211, 211, 211, 211, 211, 329, 350, 353, 735, 736, - 260, 336, 353, 260, 312, 317, 320, 737, 326, 324, - 358, 396, 373, 350, 392, 397, 358, 373, 312, 412, - 392, 396, 455, 329, 334, 334, 334, 334, 334, 443, - 336, 738, 443, 334, 334, 334, 334, 334, 334, 388, - 388, 388, 415, 397, 423, 388, 415, 427, 423, 450, - 455, 427, 572, 461, 450, 461, 334, 334, 334, 334, - 334, 334, 463, 497, 482, 373, 486, 739, 497, 740, - 373, 522, 482, 599, 482, 482, 482, 412, 482, 486, - 461, 522, 461, 462, 462, 462, 462, 462, 623, 734, + 381, 381, 381, 352, 405, 605, 381, 308, 605, 389, + 209, 209, 209, 209, 209, 209, 475, 257, 316, 389, + 257, 322, 330, 330, 330, 330, 330, 558, 332, 475, + 730, 330, 330, 330, 330, 330, 330, 367, 385, 390, + 446, 408, 367, 416, 385, 408, 452, 416, 452, 454, + 731, 510, 636, 636, 330, 330, 330, 330, 330, 330, + 486, 510, 405, 584, 551, 486, 583, 390, 446, 551, + 471, 585, 732, 452, 700, 452, 585, 454, 471, 558, + 471, 471, 471, 673, 471, 587, 700, 710, 673, 711, + 367, 584, 587, 583, 733, 367, 453, 453, 453, 453, - 463, 623, 462, 462, 462, 462, 462, 462, 563, 600, - 599, 601, 603, 563, 572, 692, 601, 733, 741, 603, - 692, 721, 734, 742, 743, 462, 462, 462, 462, 462, - 462, 744, 746, 721, 747, 745, 745, 600, 745, 748, - 749, 750, 751, 752, 753, 733, 754, 755, 756, 757, - 758, 759, 760, 761, 762, 763, 764, 765, 766, 692, - 767, 768, 769, 770, 767, 771, 772, 773, 767, 774, - 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, - 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, - 796, 797, 798, 799, 797, 800, 802, 803, 804, 805, + 453, 722, 722, 734, 722, 453, 453, 453, 453, 453, + 453, 735, 711, 736, 737, 710, 738, 739, 740, 741, + 743, 744, 745, 746, 747, 748, 749, 673, 453, 453, + 453, 453, 453, 453, 742, 751, 752, 753, 742, 754, + 755, 756, 742, 757, 758, 759, 760, 761, 762, 763, + 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 771, 774, 776, 777, 778, 779, 780, 781, 782, 783, + 784, 785, 787, 788, 789, 790, 791, 792, 793, 794, + 795, 796, 797, 799, 800, 801, 802, 803, 804, 805, + 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, - 806, 807, 808, 809, 810, 811, 813, 814, 815, 816, - 817, 818, 819, 820, 821, 822, 823, 825, 826, 827, - 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, - 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, - 848, 849, 843, 850, 851, 846, 852, 849, 854, 846, - 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, - 865, 866, 867, 868, 869, 870, 871, 872, 873, 875, - 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, - 886, 887, 888, 889, 890, 891, 892, 893, 865, 894, - 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 816, 817, 818, 819, 820, 821, 822, 816, 823, 818, + 824, 821, 826, 818, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, + 843, 845, 846, 847, 848, 849, 850, 851, 852, 853, + 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, + 835, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 876, 877, 878, 879, 880, 881, 882, 883, + 884, 885, 881, 886, 887, 888, 889, 890, 891, 892, + 895, 896, 897, 898, 899, 900, 901, 904, 905, 906, + 907, 908, 910, 911, 912, 913, 914, 911, 915, 916, - 905, 906, 908, 909, 910, 911, 912, 913, 914, 915, - 916, 917, 913, 918, 919, 920, 921, 922, 923, 924, - 925, 928, 929, 930, 931, 932, 933, 934, 937, 938, - 939, 940, 941, 943, 944, 945, 946, 947, 944, 948, - 949, 950, 951, 953, 955, 956, 957, 958, 959, 960, - 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, - 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, - 981, 982, 983, 984, 985, 986, 987, 988, 990, 991, - 979, 992, 993, 994, 995, 996, 997, 998, 999, 1000, - 1001, 1002, 1003, 1004, 1006, 1007, 1008, 1009, 1010, 1011, + 917, 918, 920, 922, 923, 924, 925, 926, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, + 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, + 949, 950, 951, 952, 953, 955, 956, 944, 957, 958, + 959, 960, 961, 962, 963, 964, 965, 966, 967, 969, + 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, + 980, 981, 982, 983, 984, 985, 986, 963, 987, 988, + 962, 989, 990, 991, 992, 994, 995, 996, 997, 998, + 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1008, 1009, + 1010, 1011, 1012, 1013, 1014, 1016, 1017, 1012, 1018, 1019, - 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, - 1022, 1023, 1000, 1024, 1025, 999, 1026, 1027, 1028, 1029, - 1030, 1031, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, - 1041, 1042, 1043, 1044, 1045, 1047, 1048, 1049, 1050, 1051, - 1052, 1053, 1056, 1057, 1051, 1058, 1059, 1060, 1061, 1062, - 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, - 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1083, 1084, - 1085, 1087, 1088, 1089, 1090, 1077, 1092, 1093, 1094, 1095, - 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, - 1106, 1107, 1108, 1109, 1110, 1112, 1113, 1051, 1114, 1115, + 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, + 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, + 1040, 1043, 1044, 1045, 1047, 1048, 1049, 1050, 1037, 1052, + 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, + 1063, 1064, 1065, 1066, 1067, 1068, 1070, 1071, 1072, 1073, + 1012, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, + 1083, 1085, 1084, 1086, 1087, 1088, 1090, 1091, 1092, 1093, + 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, + 1104, 1105, 1106, 1107, 1108, 1109, 1111, 1112, 1083, 1084, + 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, - 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, - 1126, 1127, 1129, 1128, 1130, 1131, 1132, 1134, 1135, 1136, - 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, - 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1127, - 1128, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, - 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, - 1177, 1178, 1179, 1180, 1181, 1182, 1178, 1183, 1184, 1185, + 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1131, 1132, 1133, + 1134, 1135, 1136, 1132, 1137, 1138, 1139, 1140, 1141, 1142, + 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, + 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, + 1163, 1164, 1165, 1166, 1168, 1169, 1170, 1171, 1172, 1173, + 1174, 1175, 1176, 1133, 1177, 1179, 1180, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, - 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1214, 1215, 1216, + 1206, 1207, 1208, 1209, 1210, 1211, 1213, 1214, 1215, 1216, + 1217, 1218, 1219, 1220, 1222, 1198, 1223, 1224, 1225, 1226, - 1217, 1218, 1219, 1220, 1221, 1222, 1179, 1223, 1224, 1226, - 1227, 1228, 1231, 1232, 1233, 1234, 1235, 1236, 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, 1265, 1266, 1267, 1268, 1269, - 1270, 1271, 1248, 1272, 1274, 1275, 1276, 1277, 1249, 1278, - 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, - 1289, 1290, 1291, 1292, 1295, 1297, 1299, 1300, 1301, 1302, - 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, - 1313, 1314, 1316, 1317, 1318, 1320, 1321, 1322, 1323, 1324, + 1227, 1199, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, + 1236, 1237, 1238, 1239, 1240, 1243, 1245, 1247, 1248, 1249, + 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, + 1260, 1261, 1262, 1264, 1265, 1266, 1268, 1269, 1270, 1271, + 1272, 1274, 1276, 1278, 1280, 1281, 1282, 1283, 1284, 1285, + 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1295, 1296, + 1297, 1298, 1299, 1300, 1303, 1304, 1305, 1306, 1307, 1308, + 1309, 1311, 1312, 1313, 1315, 1316, 1317, 1318, 1319, 1320, + 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, + 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1308, 1339, 1340, - 1326, 1328, 1330, 1332, 1333, 1334, 1335, 1336, 1337, 1338, - 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1349, - 1350, 1351, 1352, 1353, 1354, 1357, 1358, 1359, 1360, 1361, - 1362, 1363, 1364, 1365, 1367, 1368, 1369, 1371, 1372, 1373, - 1374, 1375, 1376, 1378, 1379, 1380, 1381, 1382, 1383, 1384, - 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, - 1364, 1395, 1397, 1398, 1399, 1400, 1342, 1401, 1402, 1403, - 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, - 1414, 1371, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, - 1424, 1425, 1418, 1426, 1429, 1430, 1431, 1432, 1433, 1434, + 1341, 1342, 1343, 1344, 1345, 1346, 1289, 1347, 1348, 1349, + 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1358, 1315, 1359, + 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1360, 1368, + 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, + 1381, 1382, 1383, 1385, 1386, 1387, 1388, 1389, 1391, 1393, + 1391, 1388, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, + 1404, 1406, 1407, 1408, 1410, 1411, 1412, 1413, 1414, 1415, + 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, + 1426, 1427, 1429, 1404, 1430, 1432, 1433, 1434, 1435, 1436, + 1437, 1438, 1439, 1440, 1441, 1442, 1444, 1446, 1448, 1449, - 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1443, 1444, 1445, - 1446, 1447, 1448, 1450, 1453, 1451, 1447, 1451, 1456, 1457, - 1458, 1459, 1461, 1462, 1463, 1464, 1465, 1466, 1468, 1469, - 1470, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, - 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, - 1466, 1492, 1493, 1495, 1496, 1497, 1498, 1499, 1500, 1501, - 1502, 1503, 1504, 1505, 1507, 1509, 1511, 1512, 1514, 1515, - 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1525, 1526, - 1527, 1528, 1529, 1530, 1531, 1532, 1535, 1536, 1538, 1539, - 1540, 1541, 1542, 1544, 1545, 1544, 1546, 1547, 1544, 1548, + 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, + 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1472, 1473, + 1475, 1476, 1477, 1478, 1480, 1481, 1480, 1482, 1483, 1480, + 1484, 1485, 1480, 1486, 1487, 1488, 1490, 1492, 1493, 1495, + 1496, 1497, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, + 1507, 1508, 1509, 1510, 1511, 1512, 1514, 1515, 1516, 1517, + 1506, 1519, 1520, 1521, 1522, 1493, 1523, 1524, 1525, 1526, + 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, + 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, + 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, - 1549, 1544, 1550, 1551, 1552, 1553, 1554, 1556, 1558, 1559, - 1561, 1562, 1563, 1565, 1566, 1567, 1568, 1569, 1570, 1571, - 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1581, 1582, - 1583, 1584, 1573, 1586, 1587, 1588, 1559, 1589, 1590, 1591, - 1592, 1593, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, - 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, - 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, - 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1629, 1630, 1631, - 1632, 1633, 1634, 1635, 1637, 1638, 1639, 1640, 1641, 1642, - 1645, 1646, 1647, 1651, 1652, 1653, 1654, 1655, 1656, 1657, + 1556, 1557, 1558, 1559, 1561, 1562, 1563, 1564, 1565, 1566, + 1567, 1568, 1569, 1570, 1571, 1572, 1575, 1576, 1577, 1580, + 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1527, + 1590, 1591, 1593, 1594, 1595, 1596, 1597, 1593, 1598, 1599, + 1600, 1570, 1601, 1603, 1604, 1605, 1607, 1608, 1610, 1611, + 1612, 1614, 1615, 1616, 1617, 1618, 1620, 1621, 1622, 1623, + 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, + 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, + 1645, 1647, 1648, 1649, 1651, 1652, 1653, 1654, 1655, 1656, + 1657, 1658, 1659, 1660, 1661, 1662, 1664, 1665, 1666, 1667, - 1658, 1594, 1659, 1660, 1661, 1662, 1664, 1665, 1666, 1667, - 1668, 1664, 1669, 1670, 1671, 1640, 1672, 1674, 1675, 1676, - 1678, 1679, 1681, 1682, 1683, 1685, 1686, 1687, 1688, 1689, + 1668, 1670, 1671, 1672, 1674, 1675, 1676, 1677, 1678, 1679, + 1680, 1681, 1682, 1683, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, - 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, - 1711, 1712, 1713, 1714, 1715, 1716, 1718, 1720, 1721, 1722, - 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, - 1734, 1735, 1737, 1738, 1739, 1740, 1741, 1743, 1744, 1745, - 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, - 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, + 1701, 1702, 1703, 1705, 1707, 1708, 1709, 1711, 1713, 1714, + 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, + 1725, 1726, 1727, 1728, 1730, 1731, 1732, 1733, 1734, 1735, + 1736, 1737, 1738, 1740, 1741, 1742, 1743, 1745, 1746, 1747, + 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1757, 1758, + 1759, 1760, 1761, 1763, 1764, 1766, 1767, 1768, 1769, 1770, + 1771, 1772, 1773, 1775, 1776, 1777, 1778, 1779, 1780, 1781, - 1768, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, - 1780, 1782, 1783, 1784, 1786, 1788, 1789, 1790, 1791, 1792, - 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, - 1803, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, - 1815, 1816, 1817, 1818, 1820, 1821, 1822, 1823, 1824, 1825, - 1826, 1827, 1828, 1829, 1830, 1832, 1833, 1834, 1835, 1836, - 1837, 1839, 1840, 1842, 1843, 1844, 1845, 1846, 1847, 1848, - 1849, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, - 1860, 1861, 1862, 1865, 1866, 1867, 1868, 1869, 1870, 1871, - 1872, 1873, 1874, 1876, 1877, 1879, 1880, 1881, 1882, 1883, + 1782, 1783, 1784, 1785, 1786, 1789, 1790, 1791, 1792, 1793, + 1794, 1795, 1796, 1797, 1798, 1800, 1801, 1803, 1804, 1805, + 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, + 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, + 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, + 1837, 1839, 1841, 1843, 1845, 1847, 1848, 1849, 1850, 1851, + 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1861, 1862, + 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1873, + 1874, 1876, 1877, 1878, 1879, 1880, 1882, 1883, 1885, 1887, + 1889, 1891, 1892, 1893, 1894, 1895, 1897, 1898, 1899, 1900, - 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, - 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1904, - 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, - 1916, 1918, 1920, 1922, 1924, 1925, 1926, 1927, 1928, 1929, - 1930, 1931, 1932, 1934, 1935, 1936, 1937, 1939, 1940, 1941, - 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1951, 1952, - 1954, 1955, 1956, 1957, 1958, 1960, 1961, 1963, 1965, 1967, - 1969, 1970, 1971, 1972, 1973, 1975, 1976, 1977, 1978, 1979, - 1980, 1981, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, - 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, + 1901, 1902, 1903, 1905, 1906, 1907, 1908, 1909, 1910, 1911, + 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, + 1922, 1923, 1925, 1926, 1927, 1929, 1930, 1931, 1932, 1933, + 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, + 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, + 1955, 1956, 1958, 1959, 1960, 1961, 1963, 1964, 1965, 1966, + 1972, 1976, 1977, 1978, 1979, 1980, 1982, 1983, 1984, 1985, + 1986, 1987, 1988, 1989, 1991, 1992, 1993, 1995, 1997, 1999, + 2000, 2001, 2002, 2003, 2004, 2006, 2007, 2006, 2008, 2009, + 2011, 2012, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, - 2001, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2012, - 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, - 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2033, - 2034, 2036, 2037, 2038, 2039, 2041, 2042, 2043, 2044, 2050, - 2054, 2055, 2056, 2057, 2058, 2060, 2061, 2062, 2063, 2064, - 2065, 2066, 2067, 2069, 2070, 2071, 2073, 2075, 2077, 2078, - 2079, 2080, 2081, 2082, 2084, 2085, 2084, 2086, 2087, 2089, - 2090, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, - 2103, 2104, 2105, 2106, 2107, 2108, 2110, 2111, 2114, 2115, - 2116, 2117, 2118, 2119, 2121, 2125, 2125, 2125, 2126, 2126, + 2023, 2025, 2026, 2027, 2028, 2029, 2030, 2032, 2033, 2036, + 2037, 2038, 2039, 2040, 2041, 2043, 2047, 2047, 2047, 2048, + 2048, 2048, 2049, 2050, 2049, 2051, 2051, 2051, 2052, 2052, + 2052, 2053, 724, 2053, 2054, 2054, 2054, 723, 721, 720, + 719, 718, 717, 716, 715, 714, 713, 712, 707, 706, + 705, 704, 703, 702, 701, 699, 698, 697, 695, 694, + 693, 692, 691, 690, 689, 688, 687, 686, 685, 684, + 682, 681, 680, 679, 678, 677, 676, 675, 674, 672, + 671, 669, 668, 667, 666, 665, 664, 663, 662, 660, + 659, 658, 657, 655, 654, 652, 651, 650, 649, 648, - 2126, 2127, 2128, 2127, 2129, 2129, 2129, 2130, 2130, 2130, - 2131, 727, 2131, 2132, 2132, 2132, 726, 725, 724, 723, - 722, 720, 719, 718, 716, 715, 714, 713, 712, 711, - 710, 709, 708, 707, 706, 705, 704, 703, 701, 700, - 699, 698, 697, 696, 695, 694, 693, 691, 690, 688, - 687, 686, 685, 684, 683, 682, 681, 679, 678, 677, - 676, 674, 673, 671, 670, 669, 668, 667, 666, 665, - 664, 663, 662, 661, 660, 659, 658, 657, 656, 654, - 653, 652, 651, 650, 649, 648, 646, 645, 644, 643, - 642, 641, 640, 639, 637, 636, 635, 634, 633, 632, + 647, 646, 645, 644, 643, 642, 641, 640, 639, 638, + 637, 635, 634, 633, 632, 631, 630, 628, 627, 626, + 625, 624, 623, 622, 621, 619, 618, 617, 616, 615, + 614, 613, 612, 611, 610, 609, 608, 607, 606, 604, + 603, 602, 601, 600, 599, 598, 597, 596, 595, 594, + 593, 592, 591, 590, 589, 588, 579, 578, 577, 576, + 574, 572, 570, 568, 567, 566, 565, 564, 563, 562, + 561, 560, 559, 557, 556, 555, 554, 553, 552, 550, + 549, 548, 547, 546, 545, 544, 543, 542, 541, 540, + 539, 537, 535, 534, 533, 532, 531, 530, 529, 528, - 631, 630, 629, 628, 627, 626, 625, 624, 622, 621, - 620, 619, 618, 617, 616, 615, 614, 613, 612, 611, - 610, 609, 608, 607, 606, 605, 604, 595, 594, 593, - 592, 590, 588, 586, 584, 583, 582, 581, 580, 579, - 578, 577, 576, 575, 574, 573, 571, 570, 569, 568, - 567, 566, 565, 564, 562, 561, 560, 559, 558, 557, - 556, 555, 554, 553, 552, 551, 549, 547, 546, 545, - 544, 543, 542, 541, 540, 539, 538, 537, 536, 535, - 534, 533, 532, 530, 529, 528, 527, 526, 525, 524, - 523, 521, 520, 519, 518, 517, 516, 515, 514, 513, + 527, 526, 525, 524, 523, 522, 521, 520, 518, 517, + 516, 515, 514, 513, 512, 511, 509, 508, 507, 506, + 505, 504, 503, 502, 501, 500, 499, 498, 497, 496, + 495, 494, 493, 492, 490, 489, 488, 487, 485, 484, + 483, 482, 481, 480, 479, 477, 476, 474, 473, 472, + 470, 468, 467, 466, 465, 464, 463, 461, 460, 459, + 458, 457, 456, 455, 450, 448, 447, 445, 442, 440, + 439, 438, 437, 436, 435, 434, 433, 432, 431, 430, + 429, 428, 427, 426, 425, 424, 423, 422, 421, 420, + 419, 418, 417, 415, 414, 413, 412, 411, 410, 409, - 512, 511, 510, 509, 508, 507, 506, 505, 504, 503, - 501, 500, 499, 498, 496, 495, 494, 493, 492, 491, - 490, 488, 487, 485, 484, 483, 481, 479, 478, 477, - 476, 475, 474, 473, 472, 470, 469, 468, 467, 466, - 465, 464, 459, 457, 456, 454, 451, 449, 448, 447, - 446, 445, 444, 442, 441, 440, 439, 438, 437, 436, - 435, 434, 433, 432, 431, 430, 429, 428, 426, 425, - 424, 422, 421, 420, 419, 418, 417, 416, 414, 413, - 411, 410, 409, 408, 407, 406, 405, 404, 403, 402, - 401, 400, 399, 395, 394, 393, 391, 390, 389, 387, + 407, 406, 404, 403, 402, 401, 400, 399, 398, 397, + 396, 395, 394, 393, 392, 388, 387, 386, 384, 383, + 382, 380, 379, 378, 377, 376, 375, 374, 373, 372, + 371, 370, 369, 368, 366, 365, 364, 363, 362, 361, + 360, 359, 358, 357, 356, 355, 354, 353, 351, 350, + 349, 348, 346, 345, 344, 343, 342, 341, 340, 339, + 338, 337, 336, 335, 334, 333, 329, 327, 323, 321, + 319, 312, 311, 310, 309, 307, 306, 305, 304, 303, + 302, 300, 299, 298, 297, 296, 295, 294, 293, 292, + 291, 290, 289, 288, 286, 285, 284, 283, 282, 281, - 386, 385, 384, 383, 382, 381, 380, 379, 378, 377, - 376, 375, 374, 372, 371, 370, 369, 368, 367, 366, - 365, 364, 363, 362, 361, 360, 359, 357, 356, 355, - 354, 352, 349, 348, 347, 346, 345, 344, 343, 342, - 341, 340, 339, 338, 337, 333, 331, 327, 325, 323, - 316, 315, 314, 313, 311, 310, 309, 307, 306, 305, - 303, 302, 301, 300, 299, 297, 296, 295, 294, 293, - 292, 291, 289, 288, 287, 286, 285, 284, 283, 282, - 281, 280, 279, 278, 277, 276, 274, 273, 271, 270, - 269, 268, 266, 265, 264, 263, 262, 261, 259, 258, - - 257, 256, 255, 254, 251, 250, 248, 247, 246, 245, + 280, 279, 278, 277, 276, 275, 274, 273, 271, 270, + 268, 267, 266, 265, 263, 262, 261, 260, 259, 258, + 256, 255, 254, 253, 252, 251, 250, 248, 247, 245, 244, 243, 242, 241, 240, 239, 238, 237, 236, 235, 234, 233, 232, 231, 230, 229, 228, 227, 226, 225, - 224, 221, 220, 219, 218, 217, 216, 215, 214, 212, - 208, 206, 204, 202, 197, 194, 186, 185, 184, 183, - 181, 180, 179, 177, 176, 175, 173, 172, 171, 169, - 167, 165, 163, 162, 160, 159, 158, 156, 154, 153, - 152, 151, 150, 149, 147, 146, 145, 143, 142, 141, - 139, 138, 136, 135, 131, 130, 129, 128, 126, 125, - 124, 123, 121, 120, 119, 117, 113, 104, 103, 97, + 224, 223, 222, 219, 218, 217, 216, 215, 214, 213, + 212, 210, 206, 204, 202, 200, 195, 192, 184, 183, + 182, 181, 179, 178, 177, 176, 175, 174, 172, 171, + 170, 168, 166, 164, 162, 161, 159, 158, 157, 155, + 153, 152, 151, 150, 149, 148, 146, 145, 144, 142, - 96, 77, 72, 66, 52, 49, 48, 43, 41, 39, - 38, 24, 14, 11, 2124, 2124, 2124, 2124, 2124, 2124, - 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, - 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, - 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, - 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, - 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, - 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, - 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124 + 141, 140, 138, 137, 135, 134, 130, 129, 128, 127, + 125, 124, 123, 121, 120, 119, 117, 113, 104, 103, + 97, 96, 77, 72, 66, 52, 49, 48, 43, 41, + 39, 38, 24, 14, 11, 2046, 2046, 2046, 2046, 2046, + 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, + 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, + 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, + 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, + 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, + 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, + + 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046 } ; static yy_state_type yy_last_accepting_state; @@ -2042,33 +1999,32 @@ static char *yy_last_accepting_cpos; extern int yy_flex_debug; int yy_flex_debug = 1; -static const flex_int16_t yy_rule_linenum[226] = +static const flex_int16_t yy_rule_linenum[218] = { 0, 148, 150, 152, 157, 158, 163, 164, 165, 177, 180, 185, 192, 201, 210, 219, 228, 237, 246, 255, 264, 273, 282, 291, 300, 309, 321, 333, 343, 353, 363, 373, 383, 392, 402, 412, 422, 432, 441, 450, 459, 468, 477, 486, 495, 504, 513, 522, 531, 540, 549, - 558, 571, 580, 589, 598, 607, 618, 629, 640, 651, - 663, 674, 685, 696, 707, 718, 729, 740, 749, 758, - 767, 778, 789, 800, 811, 822, 831, 842, 853, 864, - 875, 887, 899, 911, 923, 935, 947, 958, 969, 978, - 987, 996, 1005, 1014, 1025, 1036, 1047, 1058, 1069, 1080, + 558, 571, 580, 589, 598, 609, 620, 631, 642, 654, + 665, 676, 687, 698, 707, 716, 725, 736, 745, 756, + 767, 778, 789, 801, 813, 825, 837, 849, 861, 872, + 883, 892, 901, 910, 919, 928, 939, 950, 961, 972, + 983, 994, 1005, 1017, 1027, 1038, 1047, 1056, 1071, 1087, - 1091, 1103, 1113, 1124, 1133, 1142, 1157, 1173, 1182, 1191, - 1200, 1209, 1218, 1227, 1236, 1245, 1254, 1263, 1287, 1311, - 1320, 1330, 1340, 1349, 1359, 1370, 1379, 1388, 1397, 1406, - 1415, 1426, 1437, 1448, 1458, 1467, 1476, 1485, 1496, 1507, - 1518, 1529, 1540, 1549, 1558, 1567, 1576, 1585, 1594, 1603, - 1612, 1621, 1631, 1643, 1656, 1665, 1674, 1684, 1694, 1703, - 1714, 1724, 1733, 1743, 1753, 1762, 1771, 1780, 1789, 1799, - 1808, 1817, 1826, 1835, 1844, 1853, 1862, 1871, 1880, 1889, - 1898, 1907, 1916, 1925, 1934, 1943, 1952, 1961, 1970, 1979, - 1988, 1997, 2006, 2015, 2024, 2033, 2042, 2051, 2060, 2069, + 1096, 1105, 1114, 1123, 1132, 1141, 1150, 1159, 1168, 1177, + 1201, 1225, 1234, 1244, 1254, 1263, 1273, 1284, 1293, 1302, + 1311, 1320, 1329, 1340, 1351, 1362, 1372, 1381, 1390, 1399, + 1410, 1421, 1432, 1443, 1454, 1463, 1472, 1481, 1490, 1499, + 1508, 1517, 1526, 1535, 1545, 1557, 1570, 1579, 1588, 1598, + 1608, 1617, 1628, 1638, 1647, 1657, 1667, 1676, 1685, 1694, + 1703, 1713, 1722, 1731, 1740, 1749, 1758, 1767, 1776, 1785, + 1794, 1803, 1812, 1821, 1830, 1839, 1848, 1857, 1866, 1875, + 1884, 1893, 1902, 1911, 1920, 1929, 1938, 1947, 1956, 1965, + 1974, 1983, 1992, 2001, 2010, 2019, 2028, 2037, 2046, 2147, - 2078, 2087, 2096, 2105, 2114, 2123, 2132, 2233, 2249, 2298, - 2306, 2321, 2322, 2323, 2324, 2325, 2326, 2328, 2346, 2359, - 2364, 2368, 2370, 2372, 2374 + 2163, 2212, 2220, 2235, 2236, 2237, 2238, 2239, 2240, 2242, + 2260, 2273, 2278, 2282, 2284, 2286, 2288 } ; /* The intent behind this definition is that it'll catch @@ -2122,7 +2078,7 @@ using namespace isc::dhcp; /* To avoid the call to exit... oops! */ #define YY_FATAL_ERROR(msg) isc::dhcp::Parser6Context::fatal(msg) -#line 2125 "dhcp6_lexer.cc" +#line 2082 "dhcp6_lexer.cc" /* noyywrap disables automatic rewinding for the next file to parse. Since we always parse only a single string, there's no need to do any wraps. And using yywrap requires linking with -lfl, which provides the default yywrap @@ -2148,8 +2104,8 @@ using namespace isc::dhcp; by moving it ahead by yyleng bytes. yyleng specifies the length of the currently matched token. */ #define YY_USER_ACTION driver.loc_.columns(yyleng); -#line 2151 "dhcp6_lexer.cc" -#line 2152 "dhcp6_lexer.cc" +#line 2108 "dhcp6_lexer.cc" +#line 2109 "dhcp6_lexer.cc" #define INITIAL 0 #define COMMENT 1 @@ -2479,7 +2435,7 @@ YY_DECL } -#line 2482 "dhcp6_lexer.cc" +#line 2439 "dhcp6_lexer.cc" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -2508,13 +2464,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2125 ) + if ( yy_current_state >= 2047 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_current_state != 2124 ); + while ( yy_current_state != 2046 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); @@ -2533,13 +2489,13 @@ do_action: /* This label is used only to access EOF actions. */ { if ( yy_act == 0 ) fprintf( stderr, "--scanner backing up\n" ); - else if ( yy_act < 226 ) + else if ( yy_act < 218 ) fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n", (long)yy_rule_linenum[yy_act], yytext ); - else if ( yy_act == 226 ) + else if ( yy_act == 218 ) fprintf( stderr, "--accepting default rule (\"%s\")\n", yytext ); - else if ( yy_act == 227 ) + else if ( yy_act == 219 ) fprintf( stderr, "--(end of buffer or a NUL)\n" ); else fprintf( stderr, "--EOF (start condition %d)\n", YY_START ); @@ -3181,18 +3137,6 @@ YY_RULE_SETUP case 55: YY_RULE_SETUP #line 598 "dhcp6_lexer.ll" -{ - switch(driver.ctx_) { - case isc::dhcp::Parser6Context::DATABASE_TYPE: - return isc::dhcp::Dhcp6Parser::make_CQL(driver.loc_); - default: - return isc::dhcp::Dhcp6Parser::make_STRING("cql", driver.loc_); - } -} - YY_BREAK -case 56: -YY_RULE_SETUP -#line 607 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -3204,9 +3148,9 @@ YY_RULE_SETUP } } YY_BREAK -case 57: +case 56: YY_RULE_SETUP -#line 618 "dhcp6_lexer.ll" +#line 609 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -3218,9 +3162,9 @@ YY_RULE_SETUP } } YY_BREAK -case 58: +case 57: YY_RULE_SETUP -#line 629 "dhcp6_lexer.ll" +#line 620 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -3232,9 +3176,9 @@ YY_RULE_SETUP } } YY_BREAK -case 59: +case 58: YY_RULE_SETUP -#line 640 "dhcp6_lexer.ll" +#line 631 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -3246,9 +3190,9 @@ YY_RULE_SETUP } } YY_BREAK -case 60: +case 59: YY_RULE_SETUP -#line 651 "dhcp6_lexer.ll" +#line 642 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -3261,9 +3205,9 @@ YY_RULE_SETUP } } YY_BREAK -case 61: +case 60: YY_RULE_SETUP -#line 663 "dhcp6_lexer.ll" +#line 654 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -3275,9 +3219,9 @@ YY_RULE_SETUP } } YY_BREAK -case 62: +case 61: YY_RULE_SETUP -#line 674 "dhcp6_lexer.ll" +#line 665 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -3289,51 +3233,9 @@ YY_RULE_SETUP } } YY_BREAK -case 63: +case 62: YY_RULE_SETUP -#line 685 "dhcp6_lexer.ll" -{ - switch(driver.ctx_) { - case isc::dhcp::Parser6Context::LEASE_DATABASE: - case isc::dhcp::Parser6Context::HOSTS_DATABASE: - case isc::dhcp::Parser6Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp6Parser::make_KEYSPACE(driver.loc_); - default: - return isc::dhcp::Dhcp6Parser::make_STRING("keyspace", driver.loc_); - } -} - YY_BREAK -case 64: -YY_RULE_SETUP -#line 696 "dhcp6_lexer.ll" -{ - switch(driver.ctx_) { - case isc::dhcp::Parser6Context::LEASE_DATABASE: - case isc::dhcp::Parser6Context::HOSTS_DATABASE: - case isc::dhcp::Parser6Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp6Parser::make_CONSISTENCY(driver.loc_); - default: - return isc::dhcp::Dhcp6Parser::make_STRING("consistency", driver.loc_); - } -} - YY_BREAK -case 65: -YY_RULE_SETUP -#line 707 "dhcp6_lexer.ll" -{ - switch(driver.ctx_) { - case isc::dhcp::Parser6Context::LEASE_DATABASE: - case isc::dhcp::Parser6Context::HOSTS_DATABASE: - case isc::dhcp::Parser6Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp6Parser::make_SERIAL_CONSISTENCY(driver.loc_); - default: - return isc::dhcp::Dhcp6Parser::make_STRING("serial-consistency", driver.loc_); - } -} - YY_BREAK -case 66: -YY_RULE_SETUP -#line 718 "dhcp6_lexer.ll" +#line 676 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -3345,9 +3247,9 @@ YY_RULE_SETUP } } YY_BREAK -case 67: +case 63: YY_RULE_SETUP -#line 729 "dhcp6_lexer.ll" +#line 687 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -3359,9 +3261,9 @@ YY_RULE_SETUP } } YY_BREAK -case 68: +case 64: YY_RULE_SETUP -#line 740 "dhcp6_lexer.ll" +#line 698 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DATABASE_ON_FAIL: @@ -3371,9 +3273,9 @@ YY_RULE_SETUP } } YY_BREAK -case 69: +case 65: YY_RULE_SETUP -#line 749 "dhcp6_lexer.ll" +#line 707 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DATABASE_ON_FAIL: @@ -3383,9 +3285,9 @@ YY_RULE_SETUP } } YY_BREAK -case 70: +case 66: YY_RULE_SETUP -#line 758 "dhcp6_lexer.ll" +#line 716 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DATABASE_ON_FAIL: @@ -3395,65 +3297,9 @@ YY_RULE_SETUP } } YY_BREAK -case 71: +case 67: YY_RULE_SETUP -#line 767 "dhcp6_lexer.ll" -{ - switch(driver.ctx_) { - case isc::dhcp::Parser6Context::LEASE_DATABASE: - case isc::dhcp::Parser6Context::HOSTS_DATABASE: - case isc::dhcp::Parser6Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp6Parser::make_REQUEST_TIMEOUT(driver.loc_); - default: - return isc::dhcp::Dhcp6Parser::make_STRING("request-timeout", driver.loc_); - } -} - YY_BREAK -case 72: -YY_RULE_SETUP -#line 778 "dhcp6_lexer.ll" -{ - switch(driver.ctx_) { - case isc::dhcp::Parser6Context::LEASE_DATABASE: - case isc::dhcp::Parser6Context::HOSTS_DATABASE: - case isc::dhcp::Parser6Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp6Parser::make_TCP_KEEPALIVE(driver.loc_); - default: - return isc::dhcp::Dhcp6Parser::make_STRING("tcp-keepalive", driver.loc_); - } -} - YY_BREAK -case 73: -YY_RULE_SETUP -#line 789 "dhcp6_lexer.ll" -{ - switch(driver.ctx_) { - case isc::dhcp::Parser6Context::LEASE_DATABASE: - case isc::dhcp::Parser6Context::HOSTS_DATABASE: - case isc::dhcp::Parser6Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp6Parser::make_TCP_NODELAY(driver.loc_); - default: - return isc::dhcp::Dhcp6Parser::make_STRING("tcp-nodelay", driver.loc_); - } -} - YY_BREAK -case 74: -YY_RULE_SETUP -#line 800 "dhcp6_lexer.ll" -{ - switch(driver.ctx_) { - case isc::dhcp::Parser6Context::LEASE_DATABASE: - case isc::dhcp::Parser6Context::HOSTS_DATABASE: - case isc::dhcp::Parser6Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp6Parser::make_CONTACT_POINTS(driver.loc_); - default: - return isc::dhcp::Dhcp6Parser::make_STRING("contact-points", driver.loc_); - } -} - YY_BREAK -case 75: -YY_RULE_SETUP -#line 811 "dhcp6_lexer.ll" +#line 725 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -3465,9 +3311,9 @@ YY_RULE_SETUP } } YY_BREAK -case 76: +case 68: YY_RULE_SETUP -#line 822 "dhcp6_lexer.ll" +#line 736 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -3477,9 +3323,9 @@ YY_RULE_SETUP } } YY_BREAK -case 77: +case 69: YY_RULE_SETUP -#line 831 "dhcp6_lexer.ll" +#line 745 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -3491,9 +3337,9 @@ YY_RULE_SETUP } } YY_BREAK -case 78: +case 70: YY_RULE_SETUP -#line 842 "dhcp6_lexer.ll" +#line 756 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -3505,9 +3351,9 @@ YY_RULE_SETUP } } YY_BREAK -case 79: +case 71: YY_RULE_SETUP -#line 853 "dhcp6_lexer.ll" +#line 767 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -3519,9 +3365,9 @@ YY_RULE_SETUP } } YY_BREAK -case 80: +case 72: YY_RULE_SETUP -#line 864 "dhcp6_lexer.ll" +#line 778 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -3533,9 +3379,9 @@ YY_RULE_SETUP } } YY_BREAK -case 81: +case 73: YY_RULE_SETUP -#line 875 "dhcp6_lexer.ll" +#line 789 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3548,9 +3394,9 @@ YY_RULE_SETUP } } YY_BREAK -case 82: +case 74: YY_RULE_SETUP -#line 887 "dhcp6_lexer.ll" +#line 801 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3563,9 +3409,9 @@ YY_RULE_SETUP } } YY_BREAK -case 83: +case 75: YY_RULE_SETUP -#line 899 "dhcp6_lexer.ll" +#line 813 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3578,9 +3424,9 @@ YY_RULE_SETUP } } YY_BREAK -case 84: +case 76: YY_RULE_SETUP -#line 911 "dhcp6_lexer.ll" +#line 825 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3593,9 +3439,9 @@ YY_RULE_SETUP } } YY_BREAK -case 85: +case 77: YY_RULE_SETUP -#line 923 "dhcp6_lexer.ll" +#line 837 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3608,9 +3454,9 @@ YY_RULE_SETUP } } YY_BREAK -case 86: +case 78: YY_RULE_SETUP -#line 935 "dhcp6_lexer.ll" +#line 849 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3623,9 +3469,9 @@ YY_RULE_SETUP } } YY_BREAK -case 87: +case 79: YY_RULE_SETUP -#line 947 "dhcp6_lexer.ll" +#line 861 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3637,9 +3483,9 @@ YY_RULE_SETUP } } YY_BREAK -case 88: +case 80: YY_RULE_SETUP -#line 958 "dhcp6_lexer.ll" +#line 872 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3651,9 +3497,9 @@ YY_RULE_SETUP } } YY_BREAK -case 89: +case 81: YY_RULE_SETUP -#line 969 "dhcp6_lexer.ll" +#line 883 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3663,9 +3509,9 @@ YY_RULE_SETUP } } YY_BREAK -case 90: +case 82: YY_RULE_SETUP -#line 978 "dhcp6_lexer.ll" +#line 892 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3675,9 +3521,9 @@ YY_RULE_SETUP } } YY_BREAK -case 91: +case 83: YY_RULE_SETUP -#line 987 "dhcp6_lexer.ll" +#line 901 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3687,9 +3533,9 @@ YY_RULE_SETUP } } YY_BREAK -case 92: +case 84: YY_RULE_SETUP -#line 996 "dhcp6_lexer.ll" +#line 910 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3699,9 +3545,9 @@ YY_RULE_SETUP } } YY_BREAK -case 93: +case 85: YY_RULE_SETUP -#line 1005 "dhcp6_lexer.ll" +#line 919 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3711,9 +3557,9 @@ YY_RULE_SETUP } } YY_BREAK -case 94: +case 86: YY_RULE_SETUP -#line 1014 "dhcp6_lexer.ll" +#line 928 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3725,9 +3571,9 @@ YY_RULE_SETUP } } YY_BREAK -case 95: +case 87: YY_RULE_SETUP -#line 1025 "dhcp6_lexer.ll" +#line 939 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3739,9 +3585,9 @@ YY_RULE_SETUP } } YY_BREAK -case 96: +case 88: YY_RULE_SETUP -#line 1036 "dhcp6_lexer.ll" +#line 950 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3753,9 +3599,9 @@ YY_RULE_SETUP } } YY_BREAK -case 97: +case 89: YY_RULE_SETUP -#line 1047 "dhcp6_lexer.ll" +#line 961 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3767,9 +3613,9 @@ YY_RULE_SETUP } } YY_BREAK -case 98: +case 90: YY_RULE_SETUP -#line 1058 "dhcp6_lexer.ll" +#line 972 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3781,9 +3627,9 @@ YY_RULE_SETUP } } YY_BREAK -case 99: +case 91: YY_RULE_SETUP -#line 1069 "dhcp6_lexer.ll" +#line 983 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3795,9 +3641,9 @@ YY_RULE_SETUP } } YY_BREAK -case 100: +case 92: YY_RULE_SETUP -#line 1080 "dhcp6_lexer.ll" +#line 994 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3809,9 +3655,9 @@ YY_RULE_SETUP } } YY_BREAK -case 101: +case 93: YY_RULE_SETUP -#line 1091 "dhcp6_lexer.ll" +#line 1005 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3823,9 +3669,9 @@ YY_RULE_SETUP } } YY_BREAK -case 102: +case 94: YY_RULE_SETUP -#line 1103 "dhcp6_lexer.ll" +#line 1017 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3836,9 +3682,9 @@ YY_RULE_SETUP } } YY_BREAK -case 103: +case 95: YY_RULE_SETUP -#line 1113 "dhcp6_lexer.ll" +#line 1027 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3850,9 +3696,9 @@ YY_RULE_SETUP } } YY_BREAK -case 104: +case 96: YY_RULE_SETUP -#line 1124 "dhcp6_lexer.ll" +#line 1038 "dhcp6_lexer.ll" { switch (driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3862,9 +3708,9 @@ YY_RULE_SETUP } } YY_BREAK -case 105: +case 97: YY_RULE_SETUP -#line 1133 "dhcp6_lexer.ll" +#line 1047 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3874,9 +3720,9 @@ YY_RULE_SETUP } } YY_BREAK -case 106: +case 98: YY_RULE_SETUP -#line 1142 "dhcp6_lexer.ll" +#line 1056 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3892,9 +3738,9 @@ YY_RULE_SETUP } } YY_BREAK -case 107: +case 99: YY_RULE_SETUP -#line 1157 "dhcp6_lexer.ll" +#line 1071 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -3911,9 +3757,9 @@ YY_RULE_SETUP } } YY_BREAK -case 108: +case 100: YY_RULE_SETUP -#line 1173 "dhcp6_lexer.ll" +#line 1087 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DATA: @@ -3923,9 +3769,9 @@ YY_RULE_SETUP } } YY_BREAK -case 109: +case 101: YY_RULE_SETUP -#line 1182 "dhcp6_lexer.ll" +#line 1096 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DATA: @@ -3935,9 +3781,9 @@ YY_RULE_SETUP } } YY_BREAK -case 110: +case 102: YY_RULE_SETUP -#line 1191 "dhcp6_lexer.ll" +#line 1105 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -3947,9 +3793,9 @@ YY_RULE_SETUP } } YY_BREAK -case 111: +case 103: YY_RULE_SETUP -#line 1200 "dhcp6_lexer.ll" +#line 1114 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -3959,9 +3805,9 @@ YY_RULE_SETUP } } YY_BREAK -case 112: +case 104: YY_RULE_SETUP -#line 1209 "dhcp6_lexer.ll" +#line 1123 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::PD_POOLS: @@ -3971,9 +3817,9 @@ YY_RULE_SETUP } } YY_BREAK -case 113: +case 105: YY_RULE_SETUP -#line 1218 "dhcp6_lexer.ll" +#line 1132 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::PD_POOLS: @@ -3983,9 +3829,9 @@ YY_RULE_SETUP } } YY_BREAK -case 114: +case 106: YY_RULE_SETUP -#line 1227 "dhcp6_lexer.ll" +#line 1141 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::PD_POOLS: @@ -3995,9 +3841,9 @@ YY_RULE_SETUP } } YY_BREAK -case 115: +case 107: YY_RULE_SETUP -#line 1236 "dhcp6_lexer.ll" +#line 1150 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::PD_POOLS: @@ -4007,9 +3853,9 @@ YY_RULE_SETUP } } YY_BREAK -case 116: +case 108: YY_RULE_SETUP -#line 1245 "dhcp6_lexer.ll" +#line 1159 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::PD_POOLS: @@ -4019,9 +3865,9 @@ YY_RULE_SETUP } } YY_BREAK -case 117: +case 109: YY_RULE_SETUP -#line 1254 "dhcp6_lexer.ll" +#line 1168 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::POOLS: @@ -4031,9 +3877,9 @@ YY_RULE_SETUP } } YY_BREAK -case 118: +case 110: YY_RULE_SETUP -#line 1263 "dhcp6_lexer.ll" +#line 1177 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4058,9 +3904,9 @@ YY_RULE_SETUP } } YY_BREAK -case 119: +case 111: YY_RULE_SETUP -#line 1287 "dhcp6_lexer.ll" +#line 1201 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4085,9 +3931,9 @@ YY_RULE_SETUP } } YY_BREAK -case 120: +case 112: YY_RULE_SETUP -#line 1311 "dhcp6_lexer.ll" +#line 1225 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -4097,9 +3943,9 @@ YY_RULE_SETUP } } YY_BREAK -case 121: +case 113: YY_RULE_SETUP -#line 1320 "dhcp6_lexer.ll" +#line 1234 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -4110,9 +3956,9 @@ YY_RULE_SETUP } } YY_BREAK -case 122: +case 114: YY_RULE_SETUP -#line 1330 "dhcp6_lexer.ll" +#line 1244 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -4123,9 +3969,9 @@ YY_RULE_SETUP } } YY_BREAK -case 123: +case 115: YY_RULE_SETUP -#line 1340 "dhcp6_lexer.ll" +#line 1254 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -4135,9 +3981,9 @@ YY_RULE_SETUP } } YY_BREAK -case 124: +case 116: YY_RULE_SETUP -#line 1349 "dhcp6_lexer.ll" +#line 1263 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -4148,9 +3994,9 @@ YY_RULE_SETUP } } YY_BREAK -case 125: +case 117: YY_RULE_SETUP -#line 1359 "dhcp6_lexer.ll" +#line 1273 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4162,9 +4008,9 @@ YY_RULE_SETUP } } YY_BREAK -case 126: +case 118: YY_RULE_SETUP -#line 1370 "dhcp6_lexer.ll" +#line 1284 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATION_MODE: @@ -4174,9 +4020,9 @@ YY_RULE_SETUP } } YY_BREAK -case 127: +case 119: YY_RULE_SETUP -#line 1379 "dhcp6_lexer.ll" +#line 1293 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATION_MODE: @@ -4186,9 +4032,9 @@ YY_RULE_SETUP } } YY_BREAK -case 128: +case 120: YY_RULE_SETUP -#line 1388 "dhcp6_lexer.ll" +#line 1302 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATION_MODE: @@ -4198,9 +4044,9 @@ YY_RULE_SETUP } } YY_BREAK -case 129: +case 121: YY_RULE_SETUP -#line 1397 "dhcp6_lexer.ll" +#line 1311 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATION_MODE: @@ -4210,9 +4056,9 @@ YY_RULE_SETUP } } YY_BREAK -case 130: +case 122: YY_RULE_SETUP -#line 1406 "dhcp6_lexer.ll" +#line 1320 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATION_MODE: @@ -4222,9 +4068,9 @@ YY_RULE_SETUP } } YY_BREAK -case 131: +case 123: YY_RULE_SETUP -#line 1415 "dhcp6_lexer.ll" +#line 1329 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4236,9 +4082,9 @@ YY_RULE_SETUP } } YY_BREAK -case 132: +case 124: YY_RULE_SETUP -#line 1426 "dhcp6_lexer.ll" +#line 1340 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4250,9 +4096,9 @@ YY_RULE_SETUP } } YY_BREAK -case 133: +case 125: YY_RULE_SETUP -#line 1437 "dhcp6_lexer.ll" +#line 1351 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4264,9 +4110,9 @@ YY_RULE_SETUP } } YY_BREAK -case 134: +case 126: YY_RULE_SETUP -#line 1448 "dhcp6_lexer.ll" +#line 1362 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -4277,9 +4123,9 @@ YY_RULE_SETUP } } YY_BREAK -case 135: +case 127: YY_RULE_SETUP -#line 1458 "dhcp6_lexer.ll" +#line 1372 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4289,9 +4135,9 @@ YY_RULE_SETUP } } YY_BREAK -case 136: +case 128: YY_RULE_SETUP -#line 1467 "dhcp6_lexer.ll" +#line 1381 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4301,9 +4147,9 @@ YY_RULE_SETUP } } YY_BREAK -case 137: +case 129: YY_RULE_SETUP -#line 1476 "dhcp6_lexer.ll" +#line 1390 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4313,9 +4159,9 @@ YY_RULE_SETUP } } YY_BREAK -case 138: +case 130: YY_RULE_SETUP -#line 1485 "dhcp6_lexer.ll" +#line 1399 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4327,9 +4173,9 @@ YY_RULE_SETUP } } YY_BREAK -case 139: +case 131: YY_RULE_SETUP -#line 1496 "dhcp6_lexer.ll" +#line 1410 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4341,9 +4187,9 @@ YY_RULE_SETUP } } YY_BREAK -case 140: +case 132: YY_RULE_SETUP -#line 1507 "dhcp6_lexer.ll" +#line 1421 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4355,9 +4201,9 @@ YY_RULE_SETUP } } YY_BREAK -case 141: +case 133: YY_RULE_SETUP -#line 1518 "dhcp6_lexer.ll" +#line 1432 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4369,9 +4215,9 @@ YY_RULE_SETUP } } YY_BREAK -case 142: +case 134: YY_RULE_SETUP -#line 1529 "dhcp6_lexer.ll" +#line 1443 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4383,9 +4229,9 @@ YY_RULE_SETUP } } YY_BREAK -case 143: +case 135: YY_RULE_SETUP -#line 1540 "dhcp6_lexer.ll" +#line 1454 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4395,9 +4241,9 @@ YY_RULE_SETUP } } YY_BREAK -case 144: +case 136: YY_RULE_SETUP -#line 1549 "dhcp6_lexer.ll" +#line 1463 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LOGGERS: @@ -4407,9 +4253,9 @@ YY_RULE_SETUP } } YY_BREAK -case 145: +case 137: YY_RULE_SETUP -#line 1558 "dhcp6_lexer.ll" +#line 1472 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OUTPUT_OPTIONS: @@ -4419,9 +4265,9 @@ YY_RULE_SETUP } } YY_BREAK -case 146: +case 138: YY_RULE_SETUP -#line 1567 "dhcp6_lexer.ll" +#line 1481 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OUTPUT_OPTIONS: @@ -4431,9 +4277,9 @@ YY_RULE_SETUP } } YY_BREAK -case 147: +case 139: YY_RULE_SETUP -#line 1576 "dhcp6_lexer.ll" +#line 1490 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OUTPUT_OPTIONS: @@ -4443,9 +4289,9 @@ YY_RULE_SETUP } } YY_BREAK -case 148: +case 140: YY_RULE_SETUP -#line 1585 "dhcp6_lexer.ll" +#line 1499 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OUTPUT_OPTIONS: @@ -4455,9 +4301,9 @@ YY_RULE_SETUP } } YY_BREAK -case 149: +case 141: YY_RULE_SETUP -#line 1594 "dhcp6_lexer.ll" +#line 1508 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OUTPUT_OPTIONS: @@ -4467,9 +4313,9 @@ YY_RULE_SETUP } } YY_BREAK -case 150: +case 142: YY_RULE_SETUP -#line 1603 "dhcp6_lexer.ll" +#line 1517 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LOGGERS: @@ -4479,9 +4325,9 @@ YY_RULE_SETUP } } YY_BREAK -case 151: +case 143: YY_RULE_SETUP -#line 1612 "dhcp6_lexer.ll" +#line 1526 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LOGGERS: @@ -4491,9 +4337,9 @@ YY_RULE_SETUP } } YY_BREAK -case 152: +case 144: YY_RULE_SETUP -#line 1621 "dhcp6_lexer.ll" +#line 1535 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4504,9 +4350,9 @@ YY_RULE_SETUP } } YY_BREAK -case 153: +case 145: YY_RULE_SETUP -#line 1631 "dhcp6_lexer.ll" +#line 1545 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -4519,9 +4365,9 @@ YY_RULE_SETUP } } YY_BREAK -case 154: +case 146: YY_RULE_SETUP -#line 1643 "dhcp6_lexer.ll" +#line 1557 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -4535,9 +4381,9 @@ YY_RULE_SETUP } } YY_BREAK -case 155: +case 147: YY_RULE_SETUP -#line 1656 "dhcp6_lexer.ll" +#line 1570 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CLIENT_CLASSES: @@ -4547,9 +4393,9 @@ YY_RULE_SETUP } } YY_BREAK -case 156: +case 148: YY_RULE_SETUP -#line 1665 "dhcp6_lexer.ll" +#line 1579 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CLIENT_CLASSES: @@ -4559,9 +4405,9 @@ YY_RULE_SETUP } } YY_BREAK -case 157: +case 149: YY_RULE_SETUP -#line 1674 "dhcp6_lexer.ll" +#line 1588 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4572,9 +4418,9 @@ YY_RULE_SETUP } } YY_BREAK -case 158: +case 150: YY_RULE_SETUP -#line 1684 "dhcp6_lexer.ll" +#line 1598 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATIONS: @@ -4585,9 +4431,9 @@ YY_RULE_SETUP } } YY_BREAK -case 159: +case 151: YY_RULE_SETUP -#line 1694 "dhcp6_lexer.ll" +#line 1608 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATIONS: @@ -4597,9 +4443,9 @@ YY_RULE_SETUP } } YY_BREAK -case 160: +case 152: YY_RULE_SETUP -#line 1703 "dhcp6_lexer.ll" +#line 1617 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::MAC_SOURCES: @@ -4611,9 +4457,9 @@ YY_RULE_SETUP } } YY_BREAK -case 161: +case 153: YY_RULE_SETUP -#line 1714 "dhcp6_lexer.ll" +#line 1628 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS: @@ -4624,9 +4470,9 @@ YY_RULE_SETUP } } YY_BREAK -case 162: +case 154: YY_RULE_SETUP -#line 1724 "dhcp6_lexer.ll" +#line 1638 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATIONS: @@ -4636,9 +4482,9 @@ YY_RULE_SETUP } } YY_BREAK -case 163: +case 155: YY_RULE_SETUP -#line 1733 "dhcp6_lexer.ll" +#line 1647 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS: @@ -4649,9 +4495,9 @@ YY_RULE_SETUP } } YY_BREAK -case 164: +case 156: YY_RULE_SETUP -#line 1743 "dhcp6_lexer.ll" +#line 1657 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -4662,9 +4508,9 @@ YY_RULE_SETUP } } YY_BREAK -case 165: +case 157: YY_RULE_SETUP -#line 1753 "dhcp6_lexer.ll" +#line 1667 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DATA: @@ -4674,9 +4520,9 @@ YY_RULE_SETUP } } YY_BREAK -case 166: +case 158: YY_RULE_SETUP -#line 1762 "dhcp6_lexer.ll" +#line 1676 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -4686,9 +4532,9 @@ YY_RULE_SETUP } } YY_BREAK -case 167: +case 159: YY_RULE_SETUP -#line 1771 "dhcp6_lexer.ll" +#line 1685 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -4698,9 +4544,9 @@ YY_RULE_SETUP } } YY_BREAK -case 168: +case 160: YY_RULE_SETUP -#line 1780 "dhcp6_lexer.ll" +#line 1694 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -4710,9 +4556,9 @@ YY_RULE_SETUP } } YY_BREAK -case 169: +case 161: YY_RULE_SETUP -#line 1789 "dhcp6_lexer.ll" +#line 1703 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -4723,9 +4569,9 @@ YY_RULE_SETUP } } YY_BREAK -case 170: +case 162: YY_RULE_SETUP -#line 1799 "dhcp6_lexer.ll" +#line 1713 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RELAY: @@ -4735,9 +4581,9 @@ YY_RULE_SETUP } } YY_BREAK -case 171: +case 163: YY_RULE_SETUP -#line 1808 "dhcp6_lexer.ll" +#line 1722 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4747,9 +4593,9 @@ YY_RULE_SETUP } } YY_BREAK -case 172: +case 164: YY_RULE_SETUP -#line 1817 "dhcp6_lexer.ll" +#line 1731 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::HOOKS_LIBRARIES: @@ -4759,9 +4605,9 @@ YY_RULE_SETUP } } YY_BREAK -case 173: +case 165: YY_RULE_SETUP -#line 1826 "dhcp6_lexer.ll" +#line 1740 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::HOOKS_LIBRARIES: @@ -4771,9 +4617,9 @@ YY_RULE_SETUP } } YY_BREAK -case 174: +case 166: YY_RULE_SETUP -#line 1835 "dhcp6_lexer.ll" +#line 1749 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4783,9 +4629,9 @@ YY_RULE_SETUP } } YY_BREAK -case 175: +case 167: YY_RULE_SETUP -#line 1844 "dhcp6_lexer.ll" +#line 1758 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DUID_TYPE: @@ -4795,9 +4641,9 @@ YY_RULE_SETUP } } YY_BREAK -case 176: +case 168: YY_RULE_SETUP -#line 1853 "dhcp6_lexer.ll" +#line 1767 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DUID_TYPE: @@ -4807,9 +4653,9 @@ YY_RULE_SETUP } } YY_BREAK -case 177: +case 169: YY_RULE_SETUP -#line 1862 "dhcp6_lexer.ll" +#line 1776 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DUID_TYPE: @@ -4819,9 +4665,9 @@ YY_RULE_SETUP } } YY_BREAK -case 178: +case 170: YY_RULE_SETUP -#line 1871 "dhcp6_lexer.ll" +#line 1785 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SERVER_ID: @@ -4831,9 +4677,9 @@ YY_RULE_SETUP } } YY_BREAK -case 179: +case 171: YY_RULE_SETUP -#line 1880 "dhcp6_lexer.ll" +#line 1794 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SERVER_ID: @@ -4843,9 +4689,9 @@ YY_RULE_SETUP } } YY_BREAK -case 180: +case 172: YY_RULE_SETUP -#line 1889 "dhcp6_lexer.ll" +#line 1803 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SERVER_ID: @@ -4855,9 +4701,9 @@ YY_RULE_SETUP } } YY_BREAK -case 181: +case 173: YY_RULE_SETUP -#line 1898 "dhcp6_lexer.ll" +#line 1812 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SERVER_ID: @@ -4867,9 +4713,9 @@ YY_RULE_SETUP } } YY_BREAK -case 182: +case 174: YY_RULE_SETUP -#line 1907 "dhcp6_lexer.ll" +#line 1821 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4879,9 +4725,9 @@ YY_RULE_SETUP } } YY_BREAK -case 183: +case 175: YY_RULE_SETUP -#line 1916 "dhcp6_lexer.ll" +#line 1830 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -4891,9 +4737,9 @@ YY_RULE_SETUP } } YY_BREAK -case 184: +case 176: YY_RULE_SETUP -#line 1925 "dhcp6_lexer.ll" +#line 1839 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -4903,9 +4749,9 @@ YY_RULE_SETUP } } YY_BREAK -case 185: +case 177: YY_RULE_SETUP -#line 1934 "dhcp6_lexer.ll" +#line 1848 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -4915,9 +4761,9 @@ YY_RULE_SETUP } } YY_BREAK -case 186: +case 178: YY_RULE_SETUP -#line 1943 "dhcp6_lexer.ll" +#line 1857 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -4927,9 +4773,9 @@ YY_RULE_SETUP } } YY_BREAK -case 187: +case 179: YY_RULE_SETUP -#line 1952 "dhcp6_lexer.ll" +#line 1866 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -4939,9 +4785,9 @@ YY_RULE_SETUP } } YY_BREAK -case 188: +case 180: YY_RULE_SETUP -#line 1961 "dhcp6_lexer.ll" +#line 1875 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -4951,9 +4797,9 @@ YY_RULE_SETUP } } YY_BREAK -case 189: +case 181: YY_RULE_SETUP -#line 1970 "dhcp6_lexer.ll" +#line 1884 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4963,9 +4809,9 @@ YY_RULE_SETUP } } YY_BREAK -case 190: +case 182: YY_RULE_SETUP -#line 1979 "dhcp6_lexer.ll" +#line 1893 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4975,9 +4821,9 @@ YY_RULE_SETUP } } YY_BREAK -case 191: +case 183: YY_RULE_SETUP -#line 1988 "dhcp6_lexer.ll" +#line 1902 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_MULTI_THREADING: @@ -4987,9 +4833,9 @@ YY_RULE_SETUP } } YY_BREAK -case 192: +case 184: YY_RULE_SETUP -#line 1997 "dhcp6_lexer.ll" +#line 1911 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_MULTI_THREADING: @@ -4999,9 +4845,9 @@ YY_RULE_SETUP } } YY_BREAK -case 193: +case 185: YY_RULE_SETUP -#line 2006 "dhcp6_lexer.ll" +#line 1920 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_MULTI_THREADING: @@ -5011,9 +4857,9 @@ YY_RULE_SETUP } } YY_BREAK -case 194: +case 186: YY_RULE_SETUP -#line 2015 "dhcp6_lexer.ll" +#line 1929 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -5023,9 +4869,9 @@ YY_RULE_SETUP } } YY_BREAK -case 195: +case 187: YY_RULE_SETUP -#line 2024 "dhcp6_lexer.ll" +#line 1938 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CONTROL_SOCKET: @@ -5035,9 +4881,9 @@ YY_RULE_SETUP } } YY_BREAK -case 196: +case 188: YY_RULE_SETUP -#line 2033 "dhcp6_lexer.ll" +#line 1947 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CONTROL_SOCKET: @@ -5047,9 +4893,9 @@ YY_RULE_SETUP } } YY_BREAK -case 197: +case 189: YY_RULE_SETUP -#line 2042 "dhcp6_lexer.ll" +#line 1956 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -5059,9 +4905,9 @@ YY_RULE_SETUP } } YY_BREAK -case 198: +case 190: YY_RULE_SETUP -#line 2051 "dhcp6_lexer.ll" +#line 1965 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_QUEUE_CONTROL: @@ -5071,9 +4917,9 @@ YY_RULE_SETUP } } YY_BREAK -case 199: +case 191: YY_RULE_SETUP -#line 2060 "dhcp6_lexer.ll" +#line 1974 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_QUEUE_CONTROL: @@ -5083,9 +4929,9 @@ YY_RULE_SETUP } } YY_BREAK -case 200: +case 192: YY_RULE_SETUP -#line 2069 "dhcp6_lexer.ll" +#line 1983 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_QUEUE_CONTROL: @@ -5095,9 +4941,9 @@ YY_RULE_SETUP } } YY_BREAK -case 201: +case 193: YY_RULE_SETUP -#line 2078 "dhcp6_lexer.ll" +#line 1992 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -5107,9 +4953,9 @@ YY_RULE_SETUP } } YY_BREAK -case 202: +case 194: YY_RULE_SETUP -#line 2087 "dhcp6_lexer.ll" +#line 2001 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -5119,9 +4965,9 @@ YY_RULE_SETUP } } YY_BREAK -case 203: +case 195: YY_RULE_SETUP -#line 2096 "dhcp6_lexer.ll" +#line 2010 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -5131,9 +4977,9 @@ YY_RULE_SETUP } } YY_BREAK -case 204: +case 196: YY_RULE_SETUP -#line 2105 "dhcp6_lexer.ll" +#line 2019 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -5143,9 +4989,9 @@ YY_RULE_SETUP } } YY_BREAK -case 205: +case 197: YY_RULE_SETUP -#line 2114 "dhcp6_lexer.ll" +#line 2028 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -5155,9 +5001,9 @@ YY_RULE_SETUP } } YY_BREAK -case 206: +case 198: YY_RULE_SETUP -#line 2123 "dhcp6_lexer.ll" +#line 2037 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::COMPATIBILITY: @@ -5167,9 +5013,9 @@ YY_RULE_SETUP } } YY_BREAK -case 207: +case 199: YY_RULE_SETUP -#line 2132 "dhcp6_lexer.ll" +#line 2046 "dhcp6_lexer.ll" { /* A string has been matched. It contains the actual string and single quotes. We need to get those quotes out of the way and just use its content, e.g. @@ -5271,10 +5117,10 @@ YY_RULE_SETUP return isc::dhcp::Dhcp6Parser::make_STRING(decoded, driver.loc_); } YY_BREAK -case 208: -/* rule 208 can match eol */ +case 200: +/* rule 200 can match eol */ YY_RULE_SETUP -#line 2233 "dhcp6_lexer.ll" +#line 2147 "dhcp6_lexer.ll" { /* Bad string with a forbidden control character inside */ std::string raw(yytext+1); @@ -5291,10 +5137,10 @@ YY_RULE_SETUP pos + 1); } YY_BREAK -case 209: -/* rule 209 can match eol */ +case 201: +/* rule 201 can match eol */ YY_RULE_SETUP -#line 2249 "dhcp6_lexer.ll" +#line 2163 "dhcp6_lexer.ll" { /* Bad string with a bad escape inside */ std::string raw(yytext+1); @@ -5344,9 +5190,9 @@ YY_RULE_SETUP pos); } YY_BREAK -case 210: +case 202: YY_RULE_SETUP -#line 2298 "dhcp6_lexer.ll" +#line 2212 "dhcp6_lexer.ll" { /* Bad string with an open escape at the end */ std::string raw(yytext+1); @@ -5355,9 +5201,9 @@ YY_RULE_SETUP raw.size() + 1); } YY_BREAK -case 211: +case 203: YY_RULE_SETUP -#line 2306 "dhcp6_lexer.ll" +#line 2220 "dhcp6_lexer.ll" { /* Bad string with an open unicode escape at the end */ std::string raw(yytext+1); @@ -5373,39 +5219,39 @@ YY_RULE_SETUP pos + 1); } YY_BREAK -case 212: +case 204: YY_RULE_SETUP -#line 2321 "dhcp6_lexer.ll" +#line 2235 "dhcp6_lexer.ll" { return isc::dhcp::Dhcp6Parser::make_LSQUARE_BRACKET(driver.loc_); } YY_BREAK -case 213: +case 205: YY_RULE_SETUP -#line 2322 "dhcp6_lexer.ll" +#line 2236 "dhcp6_lexer.ll" { return isc::dhcp::Dhcp6Parser::make_RSQUARE_BRACKET(driver.loc_); } YY_BREAK -case 214: +case 206: YY_RULE_SETUP -#line 2323 "dhcp6_lexer.ll" +#line 2237 "dhcp6_lexer.ll" { return isc::dhcp::Dhcp6Parser::make_LCURLY_BRACKET(driver.loc_); } YY_BREAK -case 215: +case 207: YY_RULE_SETUP -#line 2324 "dhcp6_lexer.ll" +#line 2238 "dhcp6_lexer.ll" { return isc::dhcp::Dhcp6Parser::make_RCURLY_BRACKET(driver.loc_); } YY_BREAK -case 216: +case 208: YY_RULE_SETUP -#line 2325 "dhcp6_lexer.ll" +#line 2239 "dhcp6_lexer.ll" { return isc::dhcp::Dhcp6Parser::make_COMMA(driver.loc_); } YY_BREAK -case 217: +case 209: YY_RULE_SETUP -#line 2326 "dhcp6_lexer.ll" +#line 2240 "dhcp6_lexer.ll" { return isc::dhcp::Dhcp6Parser::make_COLON(driver.loc_); } YY_BREAK -case 218: +case 210: YY_RULE_SETUP -#line 2328 "dhcp6_lexer.ll" +#line 2242 "dhcp6_lexer.ll" { /* An integer was found. */ std::string tmp(yytext); @@ -5424,9 +5270,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp6Parser::make_INTEGER(integer, driver.loc_); } YY_BREAK -case 219: +case 211: YY_RULE_SETUP -#line 2346 "dhcp6_lexer.ll" +#line 2260 "dhcp6_lexer.ll" { /* A floating point was found. */ std::string tmp(yytext); @@ -5440,43 +5286,43 @@ YY_RULE_SETUP return isc::dhcp::Dhcp6Parser::make_FLOAT(fp, driver.loc_); } YY_BREAK -case 220: +case 212: YY_RULE_SETUP -#line 2359 "dhcp6_lexer.ll" +#line 2273 "dhcp6_lexer.ll" { string tmp(yytext); return isc::dhcp::Dhcp6Parser::make_BOOLEAN(tmp == "true", driver.loc_); } YY_BREAK -case 221: +case 213: YY_RULE_SETUP -#line 2364 "dhcp6_lexer.ll" +#line 2278 "dhcp6_lexer.ll" { return isc::dhcp::Dhcp6Parser::make_NULL_TYPE(driver.loc_); } YY_BREAK -case 222: +case 214: YY_RULE_SETUP -#line 2368 "dhcp6_lexer.ll" +#line 2282 "dhcp6_lexer.ll" driver.error (driver.loc_, "JSON true reserved keyword is lower case only"); YY_BREAK -case 223: +case 215: YY_RULE_SETUP -#line 2370 "dhcp6_lexer.ll" +#line 2284 "dhcp6_lexer.ll" driver.error (driver.loc_, "JSON false reserved keyword is lower case only"); YY_BREAK -case 224: +case 216: YY_RULE_SETUP -#line 2372 "dhcp6_lexer.ll" +#line 2286 "dhcp6_lexer.ll" driver.error (driver.loc_, "JSON null reserved keyword is lower case only"); YY_BREAK -case 225: +case 217: YY_RULE_SETUP -#line 2374 "dhcp6_lexer.ll" +#line 2288 "dhcp6_lexer.ll" driver.error (driver.loc_, "Invalid character: " + std::string(yytext)); YY_BREAK case YY_STATE_EOF(INITIAL): -#line 2376 "dhcp6_lexer.ll" +#line 2290 "dhcp6_lexer.ll" { if (driver.states_.empty()) { return isc::dhcp::Dhcp6Parser::make_END(driver.loc_); @@ -5500,12 +5346,12 @@ case YY_STATE_EOF(INITIAL): BEGIN(DIR_EXIT); } YY_BREAK -case 226: +case 218: YY_RULE_SETUP -#line 2399 "dhcp6_lexer.ll" +#line 2313 "dhcp6_lexer.ll" ECHO; YY_BREAK -#line 5508 "dhcp6_lexer.cc" +#line 5355 "dhcp6_lexer.cc" case YY_END_OF_BUFFER: { @@ -5824,7 +5670,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2125 ) + if ( yy_current_state >= 2047 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -5857,11 +5703,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2125 ) + if ( yy_current_state >= 2047 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 2124); + yy_is_jam = (yy_current_state == 2046); return yy_is_jam ? 0 : yy_current_state; } @@ -6610,7 +6456,7 @@ void yyfree (void * ptr ) /* %ok-for-header */ -#line 2399 "dhcp6_lexer.ll" +#line 2313 "dhcp6_lexer.ll" using namespace isc::dhcp; diff --git a/src/bin/dhcp6/dhcp6_lexer.ll b/src/bin/dhcp6/dhcp6_lexer.ll index 82fc77c43c..4b881af3e7 100644 --- a/src/bin/dhcp6/dhcp6_lexer.ll +++ b/src/bin/dhcp6/dhcp6_lexer.ll @@ -594,15 +594,6 @@ ControlCharacterFill [^"\\]|\\["\\/bfnrtu] } } -\"cql\" { - switch(driver.ctx_) { - case isc::dhcp::Parser6Context::DATABASE_TYPE: - return isc::dhcp::Dhcp6Parser::make_CQL(driver.loc_); - default: - return isc::dhcp::Dhcp6Parser::make_STRING("cql", driver.loc_); - } -} - \"user\" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -681,39 +672,6 @@ ControlCharacterFill [^"\\]|\\["\\/bfnrtu] } } -\"keyspace\" { - switch(driver.ctx_) { - case isc::dhcp::Parser6Context::LEASE_DATABASE: - case isc::dhcp::Parser6Context::HOSTS_DATABASE: - case isc::dhcp::Parser6Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp6Parser::make_KEYSPACE(driver.loc_); - default: - return isc::dhcp::Dhcp6Parser::make_STRING("keyspace", driver.loc_); - } -} - -\"consistency\" { - switch(driver.ctx_) { - case isc::dhcp::Parser6Context::LEASE_DATABASE: - case isc::dhcp::Parser6Context::HOSTS_DATABASE: - case isc::dhcp::Parser6Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp6Parser::make_CONSISTENCY(driver.loc_); - default: - return isc::dhcp::Dhcp6Parser::make_STRING("consistency", driver.loc_); - } -} - -\"serial-consistency\" { - switch(driver.ctx_) { - case isc::dhcp::Parser6Context::LEASE_DATABASE: - case isc::dhcp::Parser6Context::HOSTS_DATABASE: - case isc::dhcp::Parser6Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp6Parser::make_SERIAL_CONSISTENCY(driver.loc_); - default: - return isc::dhcp::Dhcp6Parser::make_STRING("serial-consistency", driver.loc_); - } -} - \"reconnect-wait-time\" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -763,50 +721,6 @@ ControlCharacterFill [^"\\]|\\["\\/bfnrtu] } } -\"request-timeout\" { - switch(driver.ctx_) { - case isc::dhcp::Parser6Context::LEASE_DATABASE: - case isc::dhcp::Parser6Context::HOSTS_DATABASE: - case isc::dhcp::Parser6Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp6Parser::make_REQUEST_TIMEOUT(driver.loc_); - default: - return isc::dhcp::Dhcp6Parser::make_STRING("request-timeout", driver.loc_); - } -} - -\"tcp-keepalive\" { - switch(driver.ctx_) { - case isc::dhcp::Parser6Context::LEASE_DATABASE: - case isc::dhcp::Parser6Context::HOSTS_DATABASE: - case isc::dhcp::Parser6Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp6Parser::make_TCP_KEEPALIVE(driver.loc_); - default: - return isc::dhcp::Dhcp6Parser::make_STRING("tcp-keepalive", driver.loc_); - } -} - -\"tcp-nodelay\" { - switch(driver.ctx_) { - case isc::dhcp::Parser6Context::LEASE_DATABASE: - case isc::dhcp::Parser6Context::HOSTS_DATABASE: - case isc::dhcp::Parser6Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp6Parser::make_TCP_NODELAY(driver.loc_); - default: - return isc::dhcp::Dhcp6Parser::make_STRING("tcp-nodelay", driver.loc_); - } -} - -\"contact-points\" { - switch(driver.ctx_) { - case isc::dhcp::Parser6Context::LEASE_DATABASE: - case isc::dhcp::Parser6Context::HOSTS_DATABASE: - case isc::dhcp::Parser6Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp6Parser::make_CONTACT_POINTS(driver.loc_); - default: - return isc::dhcp::Dhcp6Parser::make_STRING("contact-points", driver.loc_); - } -} - \"max-reconnect-tries\" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: diff --git a/src/bin/dhcp6/dhcp6_parser.cc b/src/bin/dhcp6/dhcp6_parser.cc index 68ea76ecd6..0efc54445f 100644 --- a/src/bin/dhcp6/dhcp6_parser.cc +++ b/src/bin/dhcp6/dhcp6_parser.cc @@ -1,8 +1,8 @@ -// A Bison parser, made by GNU Bison 3.8.2. +// A Bison parser, made by GNU Bison 3.5.1. // Skeleton implementation for Bison LALR(1) parsers in C++ -// Copyright (C) 2002-2015, 2018-2021 Free Software Foundation, Inc. +// Copyright (C) 2002-2015, 2018-2020 Free Software Foundation, Inc. // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ // GNU General Public License for more details. // You should have received a copy of the GNU General Public License -// along with this program. If not, see . +// along with this program. If not, see . // As a special exception, you may create a larger work that contains // part or all of the Bison parser skeleton and distribute that work @@ -30,9 +30,8 @@ // This special exception was added by the Free Software Foundation in // version 2.2 of Bison. -// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, -// especially those whose name start with YY_ or yy_. They are -// private implementation details that can be changed or removed. +// Undocumented macros, especially those whose name start with YY_, +// are private implementation details. Do not rely on them. // Take the name prefix into account. @@ -48,7 +47,7 @@ #include -#line 52 "dhcp6_parser.cc" +#line 51 "dhcp6_parser.cc" #ifndef YY_ @@ -63,7 +62,6 @@ # endif #endif - // Whether we are compiled with exception support. #ifndef YY_EXCEPTIONS # if defined __GNUC__ && !defined __EXCEPTIONS @@ -119,13 +117,13 @@ # define YY_STACK_PRINT() \ do { \ if (yydebug_) \ - yy_stack_print_ (); \ + yystack_print_ (); \ } while (false) #else // !PARSER6_DEBUG # define YYCDEBUG if (false) std::cerr -# define YY_SYMBOL_PRINT(Title, Symbol) YY_USE (Symbol) +# define YY_SYMBOL_PRINT(Title, Symbol) YYUSE (Symbol) # define YY_REDUCE_PRINT(Rule) static_cast (0) # define YY_STACK_PRINT() static_cast (0) @@ -141,7 +139,49 @@ #line 14 "dhcp6_parser.yy" namespace isc { namespace dhcp { -#line 145 "dhcp6_parser.cc" +#line 143 "dhcp6_parser.cc" + + + /* Return YYSTR after stripping away unnecessary quotes and + backslashes, so that it's suitable for yyerror. The heuristic is + that double-quoting is unnecessary unless the string contains an + apostrophe, a comma, or backslash (other than backslash-backslash). + YYSTR is taken from yytname. */ + std::string + Dhcp6Parser::yytnamerr_ (const char *yystr) + { + if (*yystr == '"') + { + std::string yyr; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + else + goto append; + + append: + default: + yyr += *yyp; + break; + + case '"': + return yyr; + } + do_not_strip_quotes: ; + } + + return yystr; + } + /// Build a parser object. Dhcp6Parser::Dhcp6Parser (isc::dhcp::Parser6Context& ctx_yyarg) @@ -160,9 +200,9 @@ namespace isc { namespace dhcp { Dhcp6Parser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW {} - /*---------. - | symbol. | - `---------*/ + /*---------------. + | Symbol types. | + `---------------*/ @@ -192,13 +232,13 @@ namespace isc { namespace dhcp { : state (s) {} - Dhcp6Parser::symbol_kind_type - Dhcp6Parser::by_state::kind () const YY_NOEXCEPT + Dhcp6Parser::symbol_number_type + Dhcp6Parser::by_state::type_get () const YY_NOEXCEPT { if (state == empty_state) - return symbol_kind::S_YYEMPTY; + return empty_symbol; else - return YY_CAST (symbol_kind_type, yystos_[+state]); + return yystos_[+state]; } Dhcp6Parser::stack_symbol_type::stack_symbol_type () @@ -207,32 +247,32 @@ namespace isc { namespace dhcp { Dhcp6Parser::stack_symbol_type::stack_symbol_type (YY_RVREF (stack_symbol_type) that) : super_type (YY_MOVE (that.state), YY_MOVE (that.location)) { - switch (that.kind ()) + switch (that.type_get ()) { - case symbol_kind::S_value: // value - case symbol_kind::S_map_value: // map_value - case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value - case symbol_kind::S_db_type: // db_type - case symbol_kind::S_on_fail_mode: // on_fail_mode - case symbol_kind::S_hr_mode: // hr_mode - case symbol_kind::S_duid_type: // duid_type - case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value + case 227: // value + case 231: // map_value + case 273: // ddns_replace_client_name_value + case 316: // db_type + case 333: // on_fail_mode + case 420: // hr_mode + case 556: // duid_type + case 599: // ncr_protocol_value value.YY_MOVE_OR_COPY< ElementPtr > (YY_MOVE (that.value)); break; - case symbol_kind::S_BOOLEAN: // "boolean" + case 210: // "boolean" value.YY_MOVE_OR_COPY< bool > (YY_MOVE (that.value)); break; - case symbol_kind::S_FLOAT: // "floating point" + case 209: // "floating point" value.YY_MOVE_OR_COPY< double > (YY_MOVE (that.value)); break; - case symbol_kind::S_INTEGER: // "integer" + case 208: // "integer" value.YY_MOVE_OR_COPY< int64_t > (YY_MOVE (that.value)); break; - case symbol_kind::S_STRING: // "constant string" + case 207: // "constant string" value.YY_MOVE_OR_COPY< std::string > (YY_MOVE (that.value)); break; @@ -249,32 +289,32 @@ namespace isc { namespace dhcp { Dhcp6Parser::stack_symbol_type::stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) that) : super_type (s, YY_MOVE (that.location)) { - switch (that.kind ()) + switch (that.type_get ()) { - case symbol_kind::S_value: // value - case symbol_kind::S_map_value: // map_value - case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value - case symbol_kind::S_db_type: // db_type - case symbol_kind::S_on_fail_mode: // on_fail_mode - case symbol_kind::S_hr_mode: // hr_mode - case symbol_kind::S_duid_type: // duid_type - case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value + case 227: // value + case 231: // map_value + case 273: // ddns_replace_client_name_value + case 316: // db_type + case 333: // on_fail_mode + case 420: // hr_mode + case 556: // duid_type + case 599: // ncr_protocol_value value.move< ElementPtr > (YY_MOVE (that.value)); break; - case symbol_kind::S_BOOLEAN: // "boolean" + case 210: // "boolean" value.move< bool > (YY_MOVE (that.value)); break; - case symbol_kind::S_FLOAT: // "floating point" + case 209: // "floating point" value.move< double > (YY_MOVE (that.value)); break; - case symbol_kind::S_INTEGER: // "integer" + case 208: // "integer" value.move< int64_t > (YY_MOVE (that.value)); break; - case symbol_kind::S_STRING: // "constant string" + case 207: // "constant string" value.move< std::string > (YY_MOVE (that.value)); break; @@ -283,7 +323,7 @@ namespace isc { namespace dhcp { } // that is emptied. - that.kind_ = symbol_kind::S_YYEMPTY; + that.type = empty_symbol; } #if YY_CPLUSPLUS < 201103L @@ -291,32 +331,32 @@ namespace isc { namespace dhcp { Dhcp6Parser::stack_symbol_type::operator= (const stack_symbol_type& that) { state = that.state; - switch (that.kind ()) + switch (that.type_get ()) { - case symbol_kind::S_value: // value - case symbol_kind::S_map_value: // map_value - case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value - case symbol_kind::S_db_type: // db_type - case symbol_kind::S_on_fail_mode: // on_fail_mode - case symbol_kind::S_hr_mode: // hr_mode - case symbol_kind::S_duid_type: // duid_type - case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value + case 227: // value + case 231: // map_value + case 273: // ddns_replace_client_name_value + case 316: // db_type + case 333: // on_fail_mode + case 420: // hr_mode + case 556: // duid_type + case 599: // ncr_protocol_value value.copy< ElementPtr > (that.value); break; - case symbol_kind::S_BOOLEAN: // "boolean" + case 210: // "boolean" value.copy< bool > (that.value); break; - case symbol_kind::S_FLOAT: // "floating point" + case 209: // "floating point" value.copy< double > (that.value); break; - case symbol_kind::S_INTEGER: // "integer" + case 208: // "integer" value.copy< int64_t > (that.value); break; - case symbol_kind::S_STRING: // "constant string" + case 207: // "constant string" value.copy< std::string > (that.value); break; @@ -332,32 +372,32 @@ namespace isc { namespace dhcp { Dhcp6Parser::stack_symbol_type::operator= (stack_symbol_type& that) { state = that.state; - switch (that.kind ()) + switch (that.type_get ()) { - case symbol_kind::S_value: // value - case symbol_kind::S_map_value: // map_value - case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value - case symbol_kind::S_db_type: // db_type - case symbol_kind::S_on_fail_mode: // on_fail_mode - case symbol_kind::S_hr_mode: // hr_mode - case symbol_kind::S_duid_type: // duid_type - case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value + case 227: // value + case 231: // map_value + case 273: // ddns_replace_client_name_value + case 316: // db_type + case 333: // on_fail_mode + case 420: // hr_mode + case 556: // duid_type + case 599: // ncr_protocol_value value.move< ElementPtr > (that.value); break; - case symbol_kind::S_BOOLEAN: // "boolean" + case 210: // "boolean" value.move< bool > (that.value); break; - case symbol_kind::S_FLOAT: // "floating point" + case 209: // "floating point" value.move< double > (that.value); break; - case symbol_kind::S_INTEGER: // "integer" + case 208: // "integer" value.move< int64_t > (that.value); break; - case symbol_kind::S_STRING: // "constant string" + case 207: // "constant string" value.move< std::string > (that.value); break; @@ -383,97 +423,99 @@ namespace isc { namespace dhcp { #if PARSER6_DEBUG template void - Dhcp6Parser::yy_print_ (std::ostream& yyo, const basic_symbol& yysym) const + Dhcp6Parser::yy_print_ (std::ostream& yyo, + const basic_symbol& yysym) const { std::ostream& yyoutput = yyo; - YY_USE (yyoutput); + YYUSE (yyoutput); + symbol_number_type yytype = yysym.type_get (); +#if defined __GNUC__ && ! defined __clang__ && ! defined __ICC && __GNUC__ * 100 + __GNUC_MINOR__ <= 408 + // Avoid a (spurious) G++ 4.8 warning about "array subscript is + // below array bounds". if (yysym.empty ()) - yyo << "empty symbol"; - else - { - symbol_kind_type yykind = yysym.kind (); - yyo << (yykind < YYNTOKENS ? "token" : "nterm") - << ' ' << yysym.name () << " (" - << yysym.location << ": "; - switch (yykind) + std::abort (); +#endif + yyo << (yytype < yyntokens_ ? "token" : "nterm") + << ' ' << yytname_[yytype] << " (" + << yysym.location << ": "; + switch (yytype) { - case symbol_kind::S_STRING: // "constant string" -#line 298 "dhcp6_parser.yy" + case 207: // "constant string" +#line 290 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < std::string > (); } -#line 404 "dhcp6_parser.cc" +#line 447 "dhcp6_parser.cc" break; - case symbol_kind::S_INTEGER: // "integer" -#line 298 "dhcp6_parser.yy" + case 208: // "integer" +#line 290 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < int64_t > (); } -#line 410 "dhcp6_parser.cc" +#line 453 "dhcp6_parser.cc" break; - case symbol_kind::S_FLOAT: // "floating point" -#line 298 "dhcp6_parser.yy" + case 209: // "floating point" +#line 290 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < double > (); } -#line 416 "dhcp6_parser.cc" +#line 459 "dhcp6_parser.cc" break; - case symbol_kind::S_BOOLEAN: // "boolean" -#line 298 "dhcp6_parser.yy" + case 210: // "boolean" +#line 290 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < bool > (); } -#line 422 "dhcp6_parser.cc" +#line 465 "dhcp6_parser.cc" break; - case symbol_kind::S_value: // value -#line 298 "dhcp6_parser.yy" + case 227: // value +#line 290 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } -#line 428 "dhcp6_parser.cc" +#line 471 "dhcp6_parser.cc" break; - case symbol_kind::S_map_value: // map_value -#line 298 "dhcp6_parser.yy" + case 231: // map_value +#line 290 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } -#line 434 "dhcp6_parser.cc" +#line 477 "dhcp6_parser.cc" break; - case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value -#line 298 "dhcp6_parser.yy" + case 273: // ddns_replace_client_name_value +#line 290 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } -#line 440 "dhcp6_parser.cc" +#line 483 "dhcp6_parser.cc" break; - case symbol_kind::S_db_type: // db_type -#line 298 "dhcp6_parser.yy" + case 316: // db_type +#line 290 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } -#line 446 "dhcp6_parser.cc" +#line 489 "dhcp6_parser.cc" break; - case symbol_kind::S_on_fail_mode: // on_fail_mode -#line 298 "dhcp6_parser.yy" + case 333: // on_fail_mode +#line 290 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } -#line 452 "dhcp6_parser.cc" +#line 495 "dhcp6_parser.cc" break; - case symbol_kind::S_hr_mode: // hr_mode -#line 298 "dhcp6_parser.yy" + case 420: // hr_mode +#line 290 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } -#line 458 "dhcp6_parser.cc" +#line 501 "dhcp6_parser.cc" break; - case symbol_kind::S_duid_type: // duid_type -#line 298 "dhcp6_parser.yy" + case 556: // duid_type +#line 290 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } -#line 464 "dhcp6_parser.cc" +#line 507 "dhcp6_parser.cc" break; - case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value -#line 298 "dhcp6_parser.yy" + case 599: // ncr_protocol_value +#line 290 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } -#line 470 "dhcp6_parser.cc" +#line 513 "dhcp6_parser.cc" break; default: break; } - yyo << ')'; - } + yyo << ')'; } #endif @@ -497,7 +539,7 @@ namespace isc { namespace dhcp { } void - Dhcp6Parser::yypop_ (int n) YY_NOEXCEPT + Dhcp6Parser::yypop_ (int n) { yystack_.pop (n); } @@ -532,21 +574,21 @@ namespace isc { namespace dhcp { Dhcp6Parser::state_type Dhcp6Parser::yy_lr_goto_state_ (state_type yystate, int yysym) { - int yyr = yypgoto_[yysym - YYNTOKENS] + yystate; + int yyr = yypgoto_[yysym - yyntokens_] + yystate; if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate) return yytable_[yyr]; else - return yydefgoto_[yysym - YYNTOKENS]; + return yydefgoto_[yysym - yyntokens_]; } bool - Dhcp6Parser::yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT + Dhcp6Parser::yy_pact_value_is_default_ (int yyvalue) { return yyvalue == yypact_ninf_; } bool - Dhcp6Parser::yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT + Dhcp6Parser::yy_table_value_is_error_ (int yyvalue) { return yyvalue == yytable_ninf_; } @@ -596,7 +638,6 @@ namespace isc { namespace dhcp { `-----------------------------------------------*/ yynewstate: YYCDEBUG << "Entering state " << int (yystack_[0].state) << '\n'; - YY_STACK_PRINT (); // Accept? if (yystack_[0].state == yyfinal_) @@ -617,7 +658,7 @@ namespace isc { namespace dhcp { // Read a lookahead token. if (yyla.empty ()) { - YYCDEBUG << "Reading a token\n"; + YYCDEBUG << "Reading a token: "; #if YY_EXCEPTIONS try #endif // YY_EXCEPTIONS @@ -636,20 +677,10 @@ namespace isc { namespace dhcp { } YY_SYMBOL_PRINT ("Next token is", yyla); - if (yyla.kind () == symbol_kind::S_YYerror) - { - // The scanner already issued an error message, process directly - // to error recovery. But do not keep the error token as - // lookahead, it is too special and may lead us to an endless - // loop in error recovery. */ - yyla.kind_ = symbol_kind::S_YYUNDEF; - goto yyerrlab1; - } - /* If the proper action on seeing token YYLA.TYPE is to reduce or to detect an error, take that action. */ - yyn += yyla.kind (); - if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.kind ()) + yyn += yyla.type_get (); + if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.type_get ()) { goto yydefault; } @@ -696,30 +727,30 @@ namespace isc { namespace dhcp { when using variants. */ switch (yyr1_[yyn]) { - case symbol_kind::S_value: // value - case symbol_kind::S_map_value: // map_value - case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value - case symbol_kind::S_db_type: // db_type - case symbol_kind::S_on_fail_mode: // on_fail_mode - case symbol_kind::S_hr_mode: // hr_mode - case symbol_kind::S_duid_type: // duid_type - case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value + case 227: // value + case 231: // map_value + case 273: // ddns_replace_client_name_value + case 316: // db_type + case 333: // on_fail_mode + case 420: // hr_mode + case 556: // duid_type + case 599: // ncr_protocol_value yylhs.value.emplace< ElementPtr > (); break; - case symbol_kind::S_BOOLEAN: // "boolean" + case 210: // "boolean" yylhs.value.emplace< bool > (); break; - case symbol_kind::S_FLOAT: // "floating point" + case 209: // "floating point" yylhs.value.emplace< double > (); break; - case symbol_kind::S_INTEGER: // "integer" + case 208: // "integer" yylhs.value.emplace< int64_t > (); break; - case symbol_kind::S_STRING: // "constant string" + case 207: // "constant string" yylhs.value.emplace< std::string > (); break; @@ -743,307 +774,307 @@ namespace isc { namespace dhcp { { switch (yyn) { - case 2: // $@1: %empty -#line 307 "dhcp6_parser.yy" + case 2: +#line 299 "dhcp6_parser.yy" { ctx.ctx_ = ctx.NO_KEYWORD; } -#line 750 "dhcp6_parser.cc" +#line 781 "dhcp6_parser.cc" break; - case 4: // $@2: %empty -#line 308 "dhcp6_parser.yy" + case 4: +#line 300 "dhcp6_parser.yy" { ctx.ctx_ = ctx.CONFIG; } -#line 756 "dhcp6_parser.cc" +#line 787 "dhcp6_parser.cc" break; - case 6: // $@3: %empty -#line 309 "dhcp6_parser.yy" + case 6: +#line 301 "dhcp6_parser.yy" { ctx.ctx_ = ctx.DHCP6; } -#line 762 "dhcp6_parser.cc" +#line 793 "dhcp6_parser.cc" break; - case 8: // $@4: %empty -#line 310 "dhcp6_parser.yy" + case 8: +#line 302 "dhcp6_parser.yy" { ctx.ctx_ = ctx.INTERFACES_CONFIG; } -#line 768 "dhcp6_parser.cc" +#line 799 "dhcp6_parser.cc" break; - case 10: // $@5: %empty -#line 311 "dhcp6_parser.yy" + case 10: +#line 303 "dhcp6_parser.yy" { ctx.ctx_ = ctx.SUBNET6; } -#line 774 "dhcp6_parser.cc" +#line 805 "dhcp6_parser.cc" break; - case 12: // $@6: %empty -#line 312 "dhcp6_parser.yy" + case 12: +#line 304 "dhcp6_parser.yy" { ctx.ctx_ = ctx.POOLS; } -#line 780 "dhcp6_parser.cc" +#line 811 "dhcp6_parser.cc" break; - case 14: // $@7: %empty -#line 313 "dhcp6_parser.yy" + case 14: +#line 305 "dhcp6_parser.yy" { ctx.ctx_ = ctx.PD_POOLS; } -#line 786 "dhcp6_parser.cc" +#line 817 "dhcp6_parser.cc" break; - case 16: // $@8: %empty -#line 314 "dhcp6_parser.yy" + case 16: +#line 306 "dhcp6_parser.yy" { ctx.ctx_ = ctx.RESERVATIONS; } -#line 792 "dhcp6_parser.cc" +#line 823 "dhcp6_parser.cc" break; - case 18: // $@9: %empty -#line 315 "dhcp6_parser.yy" + case 18: +#line 307 "dhcp6_parser.yy" { ctx.ctx_ = ctx.DHCP6; } -#line 798 "dhcp6_parser.cc" +#line 829 "dhcp6_parser.cc" break; - case 20: // $@10: %empty -#line 316 "dhcp6_parser.yy" + case 20: +#line 308 "dhcp6_parser.yy" { ctx.ctx_ = ctx.OPTION_DEF; } -#line 804 "dhcp6_parser.cc" +#line 835 "dhcp6_parser.cc" break; - case 22: // $@11: %empty -#line 317 "dhcp6_parser.yy" + case 22: +#line 309 "dhcp6_parser.yy" { ctx.ctx_ = ctx.OPTION_DATA; } -#line 810 "dhcp6_parser.cc" +#line 841 "dhcp6_parser.cc" break; - case 24: // $@12: %empty -#line 318 "dhcp6_parser.yy" + case 24: +#line 310 "dhcp6_parser.yy" { ctx.ctx_ = ctx.HOOKS_LIBRARIES; } -#line 816 "dhcp6_parser.cc" +#line 847 "dhcp6_parser.cc" break; - case 26: // $@13: %empty -#line 319 "dhcp6_parser.yy" + case 26: +#line 311 "dhcp6_parser.yy" { ctx.ctx_ = ctx.DHCP_DDNS; } -#line 822 "dhcp6_parser.cc" +#line 853 "dhcp6_parser.cc" break; - case 28: // $@14: %empty -#line 320 "dhcp6_parser.yy" + case 28: +#line 312 "dhcp6_parser.yy" { ctx.ctx_ = ctx.CONFIG_CONTROL; } -#line 828 "dhcp6_parser.cc" +#line 859 "dhcp6_parser.cc" break; - case 30: // value: "integer" -#line 328 "dhcp6_parser.yy" + case 30: +#line 320 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); } -#line 834 "dhcp6_parser.cc" +#line 865 "dhcp6_parser.cc" break; - case 31: // value: "floating point" -#line 329 "dhcp6_parser.yy" + case 31: +#line 321 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); } -#line 840 "dhcp6_parser.cc" +#line 871 "dhcp6_parser.cc" break; - case 32: // value: "boolean" -#line 330 "dhcp6_parser.yy" + case 32: +#line 322 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); } -#line 846 "dhcp6_parser.cc" +#line 877 "dhcp6_parser.cc" break; - case 33: // value: "constant string" -#line 331 "dhcp6_parser.yy" + case 33: +#line 323 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); } -#line 852 "dhcp6_parser.cc" +#line 883 "dhcp6_parser.cc" break; - case 34: // value: "null" -#line 332 "dhcp6_parser.yy" + case 34: +#line 324 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); } -#line 858 "dhcp6_parser.cc" +#line 889 "dhcp6_parser.cc" break; - case 35: // value: map2 -#line 333 "dhcp6_parser.yy" + case 35: +#line 325 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } -#line 864 "dhcp6_parser.cc" +#line 895 "dhcp6_parser.cc" break; - case 36: // value: list_generic -#line 334 "dhcp6_parser.yy" + case 36: +#line 326 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } -#line 870 "dhcp6_parser.cc" +#line 901 "dhcp6_parser.cc" break; - case 37: // sub_json: value -#line 337 "dhcp6_parser.yy" + case 37: +#line 329 "dhcp6_parser.yy" { // Push back the JSON value on the stack ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ()); } -#line 879 "dhcp6_parser.cc" +#line 910 "dhcp6_parser.cc" break; - case 38: // $@15: %empty -#line 342 "dhcp6_parser.yy" + case 38: +#line 334 "dhcp6_parser.yy" { // This code is executed when we're about to start parsing // the content of the map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 890 "dhcp6_parser.cc" +#line 921 "dhcp6_parser.cc" break; - case 39: // map2: "{" $@15 map_content "}" -#line 347 "dhcp6_parser.yy" + case 39: +#line 339 "dhcp6_parser.yy" { // map parsing completed. If we ever want to do any wrap up // (maybe some sanity checking), this would be the best place // for it. } -#line 900 "dhcp6_parser.cc" +#line 931 "dhcp6_parser.cc" break; - case 40: // map_value: map2 -#line 353 "dhcp6_parser.yy" + case 40: +#line 345 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } -#line 906 "dhcp6_parser.cc" +#line 937 "dhcp6_parser.cc" break; - case 43: // not_empty_map: "constant string" ":" value -#line 360 "dhcp6_parser.yy" + case 43: +#line 352 "dhcp6_parser.yy" { // map containing a single entry ctx.unique(yystack_[2].value.as < std::string > (), ctx.loc2pos(yystack_[2].location)); ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ()); } -#line 916 "dhcp6_parser.cc" +#line 947 "dhcp6_parser.cc" break; - case 44: // not_empty_map: not_empty_map "," "constant string" ":" value -#line 365 "dhcp6_parser.yy" + case 44: +#line 357 "dhcp6_parser.yy" { // map consisting of a shorter map followed by // comma and string:value ctx.unique(yystack_[2].value.as < std::string > (), ctx.loc2pos(yystack_[2].location)); ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ()); } -#line 927 "dhcp6_parser.cc" +#line 958 "dhcp6_parser.cc" break; - case 45: // not_empty_map: not_empty_map "," -#line 371 "dhcp6_parser.yy" + case 45: +#line 363 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 935 "dhcp6_parser.cc" +#line 966 "dhcp6_parser.cc" break; - case 46: // $@16: %empty -#line 376 "dhcp6_parser.yy" + case 46: +#line 368 "dhcp6_parser.yy" { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(l); } -#line 944 "dhcp6_parser.cc" +#line 975 "dhcp6_parser.cc" break; - case 47: // list_generic: "[" $@16 list_content "]" -#line 379 "dhcp6_parser.yy" + case 47: +#line 371 "dhcp6_parser.yy" { // list parsing complete. Put any sanity checking here } -#line 952 "dhcp6_parser.cc" +#line 983 "dhcp6_parser.cc" break; - case 50: // not_empty_list: value -#line 387 "dhcp6_parser.yy" + case 50: +#line 379 "dhcp6_parser.yy" { // List consisting of a single element. ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ()); } -#line 961 "dhcp6_parser.cc" +#line 992 "dhcp6_parser.cc" break; - case 51: // not_empty_list: not_empty_list "," value -#line 391 "dhcp6_parser.yy" + case 51: +#line 383 "dhcp6_parser.yy" { // List ending with , and a value. ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ()); } -#line 970 "dhcp6_parser.cc" +#line 1001 "dhcp6_parser.cc" break; - case 52: // not_empty_list: not_empty_list "," -#line 395 "dhcp6_parser.yy" + case 52: +#line 387 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 978 "dhcp6_parser.cc" +#line 1009 "dhcp6_parser.cc" break; - case 53: // $@17: %empty -#line 401 "dhcp6_parser.yy" + case 53: +#line 393 "dhcp6_parser.yy" { // List parsing about to start } -#line 986 "dhcp6_parser.cc" +#line 1017 "dhcp6_parser.cc" break; - case 54: // list_strings: "[" $@17 list_strings_content "]" -#line 403 "dhcp6_parser.yy" + case 54: +#line 395 "dhcp6_parser.yy" { // list parsing complete. Put any sanity checking here //ctx.stack_.pop_back(); } -#line 995 "dhcp6_parser.cc" +#line 1026 "dhcp6_parser.cc" break; - case 57: // not_empty_list_strings: "constant string" -#line 412 "dhcp6_parser.yy" + case 57: +#line 404 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(s); } -#line 1004 "dhcp6_parser.cc" +#line 1035 "dhcp6_parser.cc" break; - case 58: // not_empty_list_strings: not_empty_list_strings "," "constant string" -#line 416 "dhcp6_parser.yy" + case 58: +#line 408 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(s); } -#line 1013 "dhcp6_parser.cc" +#line 1044 "dhcp6_parser.cc" break; - case 59: // not_empty_list_strings: not_empty_list_strings "," -#line 420 "dhcp6_parser.yy" + case 59: +#line 412 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 1021 "dhcp6_parser.cc" +#line 1052 "dhcp6_parser.cc" break; - case 60: // unknown_map_entry: "constant string" ":" -#line 430 "dhcp6_parser.yy" + case 60: +#line 422 "dhcp6_parser.yy" { const std::string& where = ctx.contextName(); const std::string& keyword = yystack_[1].value.as < std::string > (); error(yystack_[1].location, "got unexpected keyword \"" + keyword + "\" in " + where + " map."); } -#line 1032 "dhcp6_parser.cc" +#line 1063 "dhcp6_parser.cc" break; - case 61: // $@18: %empty -#line 439 "dhcp6_parser.yy" + case 61: +#line 431 "dhcp6_parser.yy" { // This code is executed when we're about to start parsing // the content of the map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 1043 "dhcp6_parser.cc" +#line 1074 "dhcp6_parser.cc" break; - case 62: // syntax_map: "{" $@18 global_object "}" -#line 444 "dhcp6_parser.yy" + case 62: +#line 436 "dhcp6_parser.yy" { // map parsing completed. If we ever want to do any wrap up // (maybe some sanity checking), this would be the best place @@ -1052,11 +1083,11 @@ namespace isc { namespace dhcp { // Dhcp6 is required ctx.require("Dhcp6", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); } -#line 1056 "dhcp6_parser.cc" +#line 1087 "dhcp6_parser.cc" break; - case 63: // $@19: %empty -#line 454 "dhcp6_parser.yy" + case 63: +#line 446 "dhcp6_parser.yy" { // This code is executed when we're about to start parsing // the content of the map @@ -1067,489 +1098,489 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.DHCP6); } -#line 1071 "dhcp6_parser.cc" +#line 1102 "dhcp6_parser.cc" break; - case 64: // global_object: "Dhcp6" $@19 ":" "{" global_params "}" -#line 463 "dhcp6_parser.yy" + case 64: +#line 455 "dhcp6_parser.yy" { // No global parameter is required ctx.stack_.pop_back(); ctx.leave(); } -#line 1081 "dhcp6_parser.cc" +#line 1112 "dhcp6_parser.cc" break; - case 66: // global_object_comma: global_object "," -#line 471 "dhcp6_parser.yy" + case 66: +#line 463 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 1089 "dhcp6_parser.cc" +#line 1120 "dhcp6_parser.cc" break; - case 67: // $@20: %empty -#line 477 "dhcp6_parser.yy" + case 67: +#line 469 "dhcp6_parser.yy" { // Parse the Dhcp6 map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 1099 "dhcp6_parser.cc" +#line 1130 "dhcp6_parser.cc" break; - case 68: // sub_dhcp6: "{" $@20 global_params "}" -#line 481 "dhcp6_parser.yy" + case 68: +#line 473 "dhcp6_parser.yy" { // No global parameter is required // parsing completed } -#line 1108 "dhcp6_parser.cc" +#line 1139 "dhcp6_parser.cc" break; - case 71: // global_params: global_params "," -#line 488 "dhcp6_parser.yy" + case 71: +#line 480 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 1116 "dhcp6_parser.cc" +#line 1147 "dhcp6_parser.cc" break; - case 137: // $@21: %empty -#line 562 "dhcp6_parser.yy" + case 137: +#line 554 "dhcp6_parser.yy" { ctx.unique("data-directory", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 1125 "dhcp6_parser.cc" +#line 1156 "dhcp6_parser.cc" break; - case 138: // data_directory: "data-directory" $@21 ":" "constant string" -#line 565 "dhcp6_parser.yy" + case 138: +#line 557 "dhcp6_parser.yy" { ElementPtr datadir(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("data-directory", datadir); ctx.leave(); } -#line 1135 "dhcp6_parser.cc" +#line 1166 "dhcp6_parser.cc" break; - case 139: // preferred_lifetime: "preferred-lifetime" ":" "integer" -#line 571 "dhcp6_parser.yy" + case 139: +#line 563 "dhcp6_parser.yy" { ctx.unique("preferred-lifetime", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("preferred-lifetime", prf); } -#line 1145 "dhcp6_parser.cc" +#line 1176 "dhcp6_parser.cc" break; - case 140: // min_preferred_lifetime: "min-preferred-lifetime" ":" "integer" -#line 577 "dhcp6_parser.yy" + case 140: +#line 569 "dhcp6_parser.yy" { ctx.unique("min-preferred-lifetime", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("min-preferred-lifetime", prf); } -#line 1155 "dhcp6_parser.cc" +#line 1186 "dhcp6_parser.cc" break; - case 141: // max_preferred_lifetime: "max-preferred-lifetime" ":" "integer" -#line 583 "dhcp6_parser.yy" + case 141: +#line 575 "dhcp6_parser.yy" { ctx.unique("max-preferred-lifetime", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-preferred-lifetime", prf); } -#line 1165 "dhcp6_parser.cc" +#line 1196 "dhcp6_parser.cc" break; - case 142: // valid_lifetime: "valid-lifetime" ":" "integer" -#line 589 "dhcp6_parser.yy" + case 142: +#line 581 "dhcp6_parser.yy" { ctx.unique("valid-lifetime", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("valid-lifetime", prf); } -#line 1175 "dhcp6_parser.cc" +#line 1206 "dhcp6_parser.cc" break; - case 143: // min_valid_lifetime: "min-valid-lifetime" ":" "integer" -#line 595 "dhcp6_parser.yy" + case 143: +#line 587 "dhcp6_parser.yy" { ctx.unique("min-valid-lifetime", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("min-valid-lifetime", prf); } -#line 1185 "dhcp6_parser.cc" +#line 1216 "dhcp6_parser.cc" break; - case 144: // max_valid_lifetime: "max-valid-lifetime" ":" "integer" -#line 601 "dhcp6_parser.yy" + case 144: +#line 593 "dhcp6_parser.yy" { ctx.unique("max-valid-lifetime", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-valid-lifetime", prf); } -#line 1195 "dhcp6_parser.cc" +#line 1226 "dhcp6_parser.cc" break; - case 145: // renew_timer: "renew-timer" ":" "integer" -#line 607 "dhcp6_parser.yy" + case 145: +#line 599 "dhcp6_parser.yy" { ctx.unique("renew-timer", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("renew-timer", prf); } -#line 1205 "dhcp6_parser.cc" +#line 1236 "dhcp6_parser.cc" break; - case 146: // rebind_timer: "rebind-timer" ":" "integer" -#line 613 "dhcp6_parser.yy" + case 146: +#line 605 "dhcp6_parser.yy" { ctx.unique("rebind-timer", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("rebind-timer", prf); } -#line 1215 "dhcp6_parser.cc" +#line 1246 "dhcp6_parser.cc" break; - case 147: // calculate_tee_times: "calculate-tee-times" ":" "boolean" -#line 619 "dhcp6_parser.yy" + case 147: +#line 611 "dhcp6_parser.yy" { ctx.unique("calculate-tee-times", ctx.loc2pos(yystack_[2].location)); ElementPtr ctt(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("calculate-tee-times", ctt); } -#line 1225 "dhcp6_parser.cc" +#line 1256 "dhcp6_parser.cc" break; - case 148: // t1_percent: "t1-percent" ":" "floating point" -#line 625 "dhcp6_parser.yy" + case 148: +#line 617 "dhcp6_parser.yy" { ctx.unique("t1-percent", ctx.loc2pos(yystack_[2].location)); ElementPtr t1(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("t1-percent", t1); } -#line 1235 "dhcp6_parser.cc" +#line 1266 "dhcp6_parser.cc" break; - case 149: // t2_percent: "t2-percent" ":" "floating point" -#line 631 "dhcp6_parser.yy" + case 149: +#line 623 "dhcp6_parser.yy" { ctx.unique("t2-percent", ctx.loc2pos(yystack_[2].location)); ElementPtr t2(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("t2-percent", t2); } -#line 1245 "dhcp6_parser.cc" +#line 1276 "dhcp6_parser.cc" break; - case 150: // cache_threshold: "cache-threshold" ":" "floating point" -#line 637 "dhcp6_parser.yy" + case 150: +#line 629 "dhcp6_parser.yy" { ctx.unique("cache-threshold", ctx.loc2pos(yystack_[2].location)); ElementPtr ct(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("cache-threshold", ct); } -#line 1255 "dhcp6_parser.cc" +#line 1286 "dhcp6_parser.cc" break; - case 151: // cache_max_age: "cache-max-age" ":" "integer" -#line 643 "dhcp6_parser.yy" + case 151: +#line 635 "dhcp6_parser.yy" { ctx.unique("cache-max-age", ctx.loc2pos(yystack_[2].location)); ElementPtr cm(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("cache-max-age", cm); } -#line 1265 "dhcp6_parser.cc" +#line 1296 "dhcp6_parser.cc" break; - case 152: // decline_probation_period: "decline-probation-period" ":" "integer" -#line 649 "dhcp6_parser.yy" + case 152: +#line 641 "dhcp6_parser.yy" { ctx.unique("decline-probation-period", ctx.loc2pos(yystack_[2].location)); ElementPtr dpp(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("decline-probation-period", dpp); } -#line 1275 "dhcp6_parser.cc" +#line 1306 "dhcp6_parser.cc" break; - case 153: // ddns_send_updates: "ddns-send-updates" ":" "boolean" -#line 655 "dhcp6_parser.yy" + case 153: +#line 647 "dhcp6_parser.yy" { ctx.unique("ddns-send-updates", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ddns-send-updates", b); } -#line 1285 "dhcp6_parser.cc" +#line 1316 "dhcp6_parser.cc" break; - case 154: // ddns_override_no_update: "ddns-override-no-update" ":" "boolean" -#line 661 "dhcp6_parser.yy" + case 154: +#line 653 "dhcp6_parser.yy" { ctx.unique("ddns-override-no-update", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ddns-override-no-update", b); } -#line 1295 "dhcp6_parser.cc" +#line 1326 "dhcp6_parser.cc" break; - case 155: // ddns_override_client_update: "ddns-override-client-update" ":" "boolean" -#line 667 "dhcp6_parser.yy" + case 155: +#line 659 "dhcp6_parser.yy" { ctx.unique("ddns-override-client-update", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ddns-override-client-update", b); } -#line 1305 "dhcp6_parser.cc" +#line 1336 "dhcp6_parser.cc" break; - case 156: // $@22: %empty -#line 673 "dhcp6_parser.yy" + case 156: +#line 665 "dhcp6_parser.yy" { ctx.unique("ddns-replace-client-name", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.REPLACE_CLIENT_NAME); } -#line 1314 "dhcp6_parser.cc" +#line 1345 "dhcp6_parser.cc" break; - case 157: // ddns_replace_client_name: "ddns-replace-client-name" $@22 ":" ddns_replace_client_name_value -#line 676 "dhcp6_parser.yy" + case 157: +#line 668 "dhcp6_parser.yy" { ctx.stack_.back()->set("ddns-replace-client-name", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 1323 "dhcp6_parser.cc" +#line 1354 "dhcp6_parser.cc" break; - case 158: // ddns_replace_client_name_value: "when-present" -#line 682 "dhcp6_parser.yy" + case 158: +#line 674 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location))); } -#line 1331 "dhcp6_parser.cc" +#line 1362 "dhcp6_parser.cc" break; - case 159: // ddns_replace_client_name_value: "never" -#line 685 "dhcp6_parser.yy" + case 159: +#line 677 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location))); } -#line 1339 "dhcp6_parser.cc" +#line 1370 "dhcp6_parser.cc" break; - case 160: // ddns_replace_client_name_value: "always" -#line 688 "dhcp6_parser.yy" + case 160: +#line 680 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location))); } -#line 1347 "dhcp6_parser.cc" +#line 1378 "dhcp6_parser.cc" break; - case 161: // ddns_replace_client_name_value: "when-not-present" -#line 691 "dhcp6_parser.yy" + case 161: +#line 683 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location))); } -#line 1355 "dhcp6_parser.cc" +#line 1386 "dhcp6_parser.cc" break; - case 162: // ddns_replace_client_name_value: "boolean" -#line 694 "dhcp6_parser.yy" + case 162: +#line 686 "dhcp6_parser.yy" { error(yystack_[0].location, "boolean values for the replace-client-name are " "no longer supported"); } -#line 1364 "dhcp6_parser.cc" +#line 1395 "dhcp6_parser.cc" break; - case 163: // $@23: %empty -#line 700 "dhcp6_parser.yy" + case 163: +#line 692 "dhcp6_parser.yy" { ctx.unique("ddns-generated-prefix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 1373 "dhcp6_parser.cc" +#line 1404 "dhcp6_parser.cc" break; - case 164: // ddns_generated_prefix: "ddns-generated-prefix" $@23 ":" "constant string" -#line 703 "dhcp6_parser.yy" + case 164: +#line 695 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ddns-generated-prefix", s); ctx.leave(); } -#line 1383 "dhcp6_parser.cc" +#line 1414 "dhcp6_parser.cc" break; - case 165: // $@24: %empty -#line 709 "dhcp6_parser.yy" + case 165: +#line 701 "dhcp6_parser.yy" { ctx.unique("ddns-qualifying-suffix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 1392 "dhcp6_parser.cc" +#line 1423 "dhcp6_parser.cc" break; - case 166: // ddns_qualifying_suffix: "ddns-qualifying-suffix" $@24 ":" "constant string" -#line 712 "dhcp6_parser.yy" + case 166: +#line 704 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ddns-qualifying-suffix", s); ctx.leave(); } -#line 1402 "dhcp6_parser.cc" +#line 1433 "dhcp6_parser.cc" break; - case 167: // ddns_update_on_renew: "ddns-update-on-renew" ":" "boolean" -#line 718 "dhcp6_parser.yy" + case 167: +#line 710 "dhcp6_parser.yy" { ctx.unique("ddns-update-on-renew", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ddns-update-on-renew", b); } -#line 1412 "dhcp6_parser.cc" +#line 1443 "dhcp6_parser.cc" break; - case 168: // ddns_use_conflict_resolution: "ddns-use-conflict-resolution" ":" "boolean" -#line 724 "dhcp6_parser.yy" + case 168: +#line 716 "dhcp6_parser.yy" { ctx.unique("ddns-use-conflict-resolution", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ddns-use-conflict-resolution", b); } -#line 1422 "dhcp6_parser.cc" +#line 1453 "dhcp6_parser.cc" break; - case 169: // $@25: %empty -#line 730 "dhcp6_parser.yy" + case 169: +#line 722 "dhcp6_parser.yy" { ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 1431 "dhcp6_parser.cc" +#line 1462 "dhcp6_parser.cc" break; - case 170: // hostname_char_set: "hostname-char-set" $@25 ":" "constant string" -#line 733 "dhcp6_parser.yy" + case 170: +#line 725 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname-char-set", s); ctx.leave(); } -#line 1441 "dhcp6_parser.cc" +#line 1472 "dhcp6_parser.cc" break; - case 171: // $@26: %empty -#line 739 "dhcp6_parser.yy" + case 171: +#line 731 "dhcp6_parser.yy" { ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 1450 "dhcp6_parser.cc" +#line 1481 "dhcp6_parser.cc" break; - case 172: // hostname_char_replacement: "hostname-char-replacement" $@26 ":" "constant string" -#line 742 "dhcp6_parser.yy" + case 172: +#line 734 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname-char-replacement", s); ctx.leave(); } -#line 1460 "dhcp6_parser.cc" +#line 1491 "dhcp6_parser.cc" break; - case 173: // store_extended_info: "store-extended-info" ":" "boolean" -#line 748 "dhcp6_parser.yy" + case 173: +#line 740 "dhcp6_parser.yy" { ctx.unique("store-extended-info", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("store-extended-info", b); } -#line 1470 "dhcp6_parser.cc" +#line 1501 "dhcp6_parser.cc" break; - case 174: // statistic_default_sample_count: "statistic-default-sample-count" ":" "integer" -#line 754 "dhcp6_parser.yy" + case 174: +#line 746 "dhcp6_parser.yy" { ctx.unique("statistic-default-sample-count", ctx.loc2pos(yystack_[2].location)); ElementPtr count(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("statistic-default-sample-count", count); } -#line 1480 "dhcp6_parser.cc" +#line 1511 "dhcp6_parser.cc" break; - case 175: // statistic_default_sample_age: "statistic-default-sample-age" ":" "integer" -#line 760 "dhcp6_parser.yy" + case 175: +#line 752 "dhcp6_parser.yy" { ctx.unique("statistic-default-sample-age", ctx.loc2pos(yystack_[2].location)); ElementPtr age(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("statistic-default-sample-age", age); } -#line 1490 "dhcp6_parser.cc" +#line 1521 "dhcp6_parser.cc" break; - case 176: // $@27: %empty -#line 766 "dhcp6_parser.yy" + case 176: +#line 758 "dhcp6_parser.yy" { ctx.unique("server-tag", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 1499 "dhcp6_parser.cc" +#line 1530 "dhcp6_parser.cc" break; - case 177: // server_tag: "server-tag" $@27 ":" "constant string" -#line 769 "dhcp6_parser.yy" + case 177: +#line 761 "dhcp6_parser.yy" { ElementPtr stag(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-tag", stag); ctx.leave(); } -#line 1509 "dhcp6_parser.cc" +#line 1540 "dhcp6_parser.cc" break; - case 178: // parked_packet_limit: "parked-packet-limit" ":" "integer" -#line 775 "dhcp6_parser.yy" + case 178: +#line 767 "dhcp6_parser.yy" { ctx.unique("parked-packet-limit", ctx.loc2pos(yystack_[2].location)); ElementPtr ppl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("parked-packet-limit", ppl); } -#line 1519 "dhcp6_parser.cc" +#line 1550 "dhcp6_parser.cc" break; - case 179: // early_global_reservations_lookup: "early-global-reservations-lookup" ":" "boolean" -#line 781 "dhcp6_parser.yy" + case 179: +#line 773 "dhcp6_parser.yy" { ctx.unique("early-global-reservations-lookup", ctx.loc2pos(yystack_[2].location)); ElementPtr early(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("early-global-reservations-lookup", early); } -#line 1529 "dhcp6_parser.cc" +#line 1560 "dhcp6_parser.cc" break; - case 180: // ip_reservations_unique: "ip-reservations-unique" ":" "boolean" -#line 787 "dhcp6_parser.yy" + case 180: +#line 779 "dhcp6_parser.yy" { ctx.unique("ip-reservations-unique", ctx.loc2pos(yystack_[2].location)); ElementPtr unique(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ip-reservations-unique", unique); } -#line 1539 "dhcp6_parser.cc" +#line 1570 "dhcp6_parser.cc" break; - case 181: // reservations_lookup_first: "reservations-lookup-first" ":" "boolean" -#line 793 "dhcp6_parser.yy" + case 181: +#line 785 "dhcp6_parser.yy" { ctx.unique("reservations-lookup-first", ctx.loc2pos(yystack_[2].location)); ElementPtr first(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reservations-lookup-first", first); } -#line 1549 "dhcp6_parser.cc" +#line 1580 "dhcp6_parser.cc" break; - case 182: // $@28: %empty -#line 799 "dhcp6_parser.yy" + case 182: +#line 791 "dhcp6_parser.yy" { ctx.unique("interfaces-config", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1557,48 +1588,48 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(i); ctx.enter(ctx.INTERFACES_CONFIG); } -#line 1561 "dhcp6_parser.cc" +#line 1592 "dhcp6_parser.cc" break; - case 183: // interfaces_config: "interfaces-config" $@28 ":" "{" interfaces_config_params "}" -#line 805 "dhcp6_parser.yy" + case 183: +#line 797 "dhcp6_parser.yy" { // No interfaces config param is required ctx.stack_.pop_back(); ctx.leave(); } -#line 1571 "dhcp6_parser.cc" +#line 1602 "dhcp6_parser.cc" break; - case 184: // $@29: %empty -#line 811 "dhcp6_parser.yy" + case 184: +#line 803 "dhcp6_parser.yy" { // Parse the interfaces-config map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 1581 "dhcp6_parser.cc" +#line 1612 "dhcp6_parser.cc" break; - case 185: // sub_interfaces6: "{" $@29 interfaces_config_params "}" -#line 815 "dhcp6_parser.yy" + case 185: +#line 807 "dhcp6_parser.yy" { // No interfaces config param is required // parsing completed } -#line 1590 "dhcp6_parser.cc" +#line 1621 "dhcp6_parser.cc" break; - case 188: // interfaces_config_params: interfaces_config_params "," -#line 822 "dhcp6_parser.yy" + case 188: +#line 814 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 1598 "dhcp6_parser.cc" +#line 1629 "dhcp6_parser.cc" break; - case 194: // $@30: %empty -#line 834 "dhcp6_parser.yy" + case 194: +#line 826 "dhcp6_parser.yy" { ctx.unique("interfaces", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -1606,30 +1637,30 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.NO_KEYWORD); } -#line 1610 "dhcp6_parser.cc" +#line 1641 "dhcp6_parser.cc" break; - case 195: // interfaces_list: "interfaces" $@30 ":" list_strings -#line 840 "dhcp6_parser.yy" + case 195: +#line 832 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 1619 "dhcp6_parser.cc" +#line 1650 "dhcp6_parser.cc" break; - case 196: // re_detect: "re-detect" ":" "boolean" -#line 845 "dhcp6_parser.yy" + case 196: +#line 837 "dhcp6_parser.yy" { ctx.unique("re-detect", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("re-detect", b); } -#line 1629 "dhcp6_parser.cc" +#line 1660 "dhcp6_parser.cc" break; - case 197: // $@31: %empty -#line 851 "dhcp6_parser.yy" + case 197: +#line 843 "dhcp6_parser.yy" { ctx.unique("lease-database", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1637,22 +1668,22 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(i); ctx.enter(ctx.LEASE_DATABASE); } -#line 1641 "dhcp6_parser.cc" +#line 1672 "dhcp6_parser.cc" break; - case 198: // lease_database: "lease-database" $@31 ":" "{" database_map_params "}" -#line 857 "dhcp6_parser.yy" + case 198: +#line 849 "dhcp6_parser.yy" { // The type parameter is required ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } -#line 1652 "dhcp6_parser.cc" +#line 1683 "dhcp6_parser.cc" break; - case 199: // $@32: %empty -#line 864 "dhcp6_parser.yy" + case 199: +#line 856 "dhcp6_parser.yy" { ctx.unique("hosts-database", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1660,22 +1691,22 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(i); ctx.enter(ctx.HOSTS_DATABASE); } -#line 1664 "dhcp6_parser.cc" +#line 1695 "dhcp6_parser.cc" break; - case 200: // hosts_database: "hosts-database" $@32 ":" "{" database_map_params "}" -#line 870 "dhcp6_parser.yy" + case 200: +#line 862 "dhcp6_parser.yy" { // The type parameter is required ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } -#line 1675 "dhcp6_parser.cc" +#line 1706 "dhcp6_parser.cc" break; - case 201: // $@33: %empty -#line 877 "dhcp6_parser.yy" + case 201: +#line 869 "dhcp6_parser.yy" { ctx.unique("hosts-databases", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -1683,472 +1714,360 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.HOSTS_DATABASE); } -#line 1687 "dhcp6_parser.cc" +#line 1718 "dhcp6_parser.cc" break; - case 202: // hosts_databases: "hosts-databases" $@33 ":" "[" database_list "]" -#line 883 "dhcp6_parser.yy" + case 202: +#line 875 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 1696 "dhcp6_parser.cc" +#line 1727 "dhcp6_parser.cc" break; - case 207: // not_empty_database_list: not_empty_database_list "," -#line 894 "dhcp6_parser.yy" + case 207: +#line 886 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 1704 "dhcp6_parser.cc" +#line 1735 "dhcp6_parser.cc" break; - case 208: // $@34: %empty -#line 899 "dhcp6_parser.yy" + case 208: +#line 891 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 1714 "dhcp6_parser.cc" +#line 1745 "dhcp6_parser.cc" break; - case 209: // database: "{" $@34 database_map_params "}" -#line 903 "dhcp6_parser.yy" + case 209: +#line 895 "dhcp6_parser.yy" { // The type parameter is required ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 1724 "dhcp6_parser.cc" +#line 1755 "dhcp6_parser.cc" break; - case 212: // database_map_params: database_map_params "," -#line 911 "dhcp6_parser.yy" + case 212: +#line 903 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 1732 "dhcp6_parser.cc" +#line 1763 "dhcp6_parser.cc" break; - case 239: // $@35: %empty -#line 944 "dhcp6_parser.yy" + case 232: +#line 929 "dhcp6_parser.yy" { ctx.unique("type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.DATABASE_TYPE); } -#line 1741 "dhcp6_parser.cc" +#line 1772 "dhcp6_parser.cc" break; - case 240: // database_type: "type" $@35 ":" db_type -#line 947 "dhcp6_parser.yy" + case 233: +#line 932 "dhcp6_parser.yy" { ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 1750 "dhcp6_parser.cc" +#line 1781 "dhcp6_parser.cc" break; - case 241: // db_type: "memfile" -#line 952 "dhcp6_parser.yy" + case 234: +#line 937 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); } -#line 1756 "dhcp6_parser.cc" +#line 1787 "dhcp6_parser.cc" break; - case 242: // db_type: "mysql" -#line 953 "dhcp6_parser.yy" + case 235: +#line 938 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); } -#line 1762 "dhcp6_parser.cc" +#line 1793 "dhcp6_parser.cc" break; - case 243: // db_type: "postgresql" -#line 954 "dhcp6_parser.yy" + case 236: +#line 939 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); } -#line 1768 "dhcp6_parser.cc" +#line 1799 "dhcp6_parser.cc" break; - case 244: // db_type: "cql" -#line 955 "dhcp6_parser.yy" - { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("cql", ctx.loc2pos(yystack_[0].location))); } -#line 1774 "dhcp6_parser.cc" - break; - - case 245: // $@36: %empty -#line 958 "dhcp6_parser.yy" + case 237: +#line 942 "dhcp6_parser.yy" { ctx.unique("user", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 1783 "dhcp6_parser.cc" +#line 1808 "dhcp6_parser.cc" break; - case 246: // user: "user" $@36 ":" "constant string" -#line 961 "dhcp6_parser.yy" + case 238: +#line 945 "dhcp6_parser.yy" { ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("user", user); ctx.leave(); } -#line 1793 "dhcp6_parser.cc" +#line 1818 "dhcp6_parser.cc" break; - case 247: // $@37: %empty -#line 967 "dhcp6_parser.yy" + case 239: +#line 951 "dhcp6_parser.yy" { ctx.unique("password", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 1802 "dhcp6_parser.cc" +#line 1827 "dhcp6_parser.cc" break; - case 248: // password: "password" $@37 ":" "constant string" -#line 970 "dhcp6_parser.yy" + case 240: +#line 954 "dhcp6_parser.yy" { ElementPtr pwd(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("password", pwd); ctx.leave(); } -#line 1812 "dhcp6_parser.cc" +#line 1837 "dhcp6_parser.cc" break; - case 249: // $@38: %empty -#line 976 "dhcp6_parser.yy" + case 241: +#line 960 "dhcp6_parser.yy" { ctx.unique("host", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 1821 "dhcp6_parser.cc" +#line 1846 "dhcp6_parser.cc" break; - case 250: // host: "host" $@38 ":" "constant string" -#line 979 "dhcp6_parser.yy" + case 242: +#line 963 "dhcp6_parser.yy" { ElementPtr h(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("host", h); ctx.leave(); } -#line 1831 "dhcp6_parser.cc" +#line 1856 "dhcp6_parser.cc" break; - case 251: // port: "port" ":" "integer" -#line 985 "dhcp6_parser.yy" + case 243: +#line 969 "dhcp6_parser.yy" { ctx.unique("port", ctx.loc2pos(yystack_[2].location)); ElementPtr p(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("port", p); } -#line 1841 "dhcp6_parser.cc" +#line 1866 "dhcp6_parser.cc" break; - case 252: // $@39: %empty -#line 991 "dhcp6_parser.yy" + case 244: +#line 975 "dhcp6_parser.yy" { ctx.unique("name", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 1850 "dhcp6_parser.cc" +#line 1875 "dhcp6_parser.cc" break; - case 253: // name: "name" $@39 ":" "constant string" -#line 994 "dhcp6_parser.yy" + case 245: +#line 978 "dhcp6_parser.yy" { ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("name", name); ctx.leave(); } -#line 1860 "dhcp6_parser.cc" +#line 1885 "dhcp6_parser.cc" break; - case 254: // persist: "persist" ":" "boolean" -#line 1000 "dhcp6_parser.yy" + case 246: +#line 984 "dhcp6_parser.yy" { ctx.unique("persist", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("persist", n); } -#line 1870 "dhcp6_parser.cc" +#line 1895 "dhcp6_parser.cc" break; - case 255: // lfc_interval: "lfc-interval" ":" "integer" -#line 1006 "dhcp6_parser.yy" + case 247: +#line 990 "dhcp6_parser.yy" { ctx.unique("lfc-interval", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("lfc-interval", n); } -#line 1880 "dhcp6_parser.cc" +#line 1905 "dhcp6_parser.cc" break; - case 256: // readonly: "readonly" ":" "boolean" -#line 1012 "dhcp6_parser.yy" + case 248: +#line 996 "dhcp6_parser.yy" { ctx.unique("readonly", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("readonly", n); } -#line 1890 "dhcp6_parser.cc" +#line 1915 "dhcp6_parser.cc" break; - case 257: // connect_timeout: "connect-timeout" ":" "integer" -#line 1018 "dhcp6_parser.yy" + case 249: +#line 1002 "dhcp6_parser.yy" { ctx.unique("connect-timeout", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("connect-timeout", n); } -#line 1900 "dhcp6_parser.cc" +#line 1925 "dhcp6_parser.cc" break; - case 258: // reconnect_wait_time: "reconnect-wait-time" ":" "integer" -#line 1024 "dhcp6_parser.yy" + case 250: +#line 1008 "dhcp6_parser.yy" { ctx.unique("reconnect-wait-time", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reconnect-wait-time", n); } -#line 1910 "dhcp6_parser.cc" +#line 1935 "dhcp6_parser.cc" break; - case 259: // $@40: %empty -#line 1030 "dhcp6_parser.yy" + case 251: +#line 1014 "dhcp6_parser.yy" { ctx.unique("on-fail", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.DATABASE_ON_FAIL); } -#line 1919 "dhcp6_parser.cc" +#line 1944 "dhcp6_parser.cc" break; - case 260: // on_fail: "on-fail" $@40 ":" on_fail_mode -#line 1033 "dhcp6_parser.yy" + case 252: +#line 1017 "dhcp6_parser.yy" { ctx.stack_.back()->set("on-fail", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 1928 "dhcp6_parser.cc" +#line 1953 "dhcp6_parser.cc" break; - case 261: // on_fail_mode: "stop-retry-exit" -#line 1038 "dhcp6_parser.yy" + case 253: +#line 1022 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("stop-retry-exit", ctx.loc2pos(yystack_[0].location))); } -#line 1934 "dhcp6_parser.cc" +#line 1959 "dhcp6_parser.cc" break; - case 262: // on_fail_mode: "serve-retry-exit" -#line 1039 "dhcp6_parser.yy" + case 254: +#line 1023 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-exit", ctx.loc2pos(yystack_[0].location))); } -#line 1940 "dhcp6_parser.cc" +#line 1965 "dhcp6_parser.cc" break; - case 263: // on_fail_mode: "serve-retry-continue" -#line 1040 "dhcp6_parser.yy" + case 255: +#line 1024 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-continue", ctx.loc2pos(yystack_[0].location))); } -#line 1946 "dhcp6_parser.cc" +#line 1971 "dhcp6_parser.cc" break; - case 264: // max_row_errors: "max-row-errors" ":" "integer" -#line 1043 "dhcp6_parser.yy" + case 256: +#line 1027 "dhcp6_parser.yy" { ctx.unique("max-row-errors", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-row-errors", n); } -#line 1956 "dhcp6_parser.cc" +#line 1981 "dhcp6_parser.cc" break; - case 265: // request_timeout: "request-timeout" ":" "integer" -#line 1049 "dhcp6_parser.yy" - { - ctx.unique("request-timeout", ctx.loc2pos(yystack_[2].location)); - ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->set("request-timeout", n); -} -#line 1966 "dhcp6_parser.cc" - break; - - case 266: // tcp_keepalive: "tcp-keepalive" ":" "integer" -#line 1055 "dhcp6_parser.yy" - { - ctx.unique("tcp-keepalive", ctx.loc2pos(yystack_[2].location)); - ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->set("tcp-keepalive", n); -} -#line 1976 "dhcp6_parser.cc" - break; - - case 267: // tcp_nodelay: "tcp-nodelay" ":" "boolean" -#line 1061 "dhcp6_parser.yy" - { - ctx.unique("tcp-nodelay", ctx.loc2pos(yystack_[2].location)); - ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->set("tcp-nodelay", n); -} -#line 1986 "dhcp6_parser.cc" - break; - - case 268: // $@41: %empty -#line 1067 "dhcp6_parser.yy" - { - ctx.unique("contact-points", ctx.loc2pos(yystack_[0].location)); - ctx.enter(ctx.NO_KEYWORD); -} -#line 1995 "dhcp6_parser.cc" - break; - - case 269: // contact_points: "contact-points" $@41 ":" "constant string" -#line 1070 "dhcp6_parser.yy" - { - ElementPtr cp(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->set("contact-points", cp); - ctx.leave(); -} -#line 2005 "dhcp6_parser.cc" - break; - - case 270: // max_reconnect_tries: "max-reconnect-tries" ":" "integer" -#line 1076 "dhcp6_parser.yy" + case 257: +#line 1033 "dhcp6_parser.yy" { ctx.unique("max-reconnect-tries", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-reconnect-tries", n); } -#line 2015 "dhcp6_parser.cc" +#line 1991 "dhcp6_parser.cc" break; - case 271: // $@42: %empty -#line 1082 "dhcp6_parser.yy" - { - ctx.unique("keyspace", ctx.loc2pos(yystack_[0].location)); - ctx.enter(ctx.NO_KEYWORD); -} -#line 2024 "dhcp6_parser.cc" - break; - - case 272: // keyspace: "keyspace" $@42 ":" "constant string" -#line 1085 "dhcp6_parser.yy" - { - ElementPtr ks(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->set("keyspace", ks); - ctx.leave(); -} -#line 2034 "dhcp6_parser.cc" - break; - - case 273: // $@43: %empty -#line 1091 "dhcp6_parser.yy" - { - ctx.unique("consistency", ctx.loc2pos(yystack_[0].location)); - ctx.enter(ctx.NO_KEYWORD); -} -#line 2043 "dhcp6_parser.cc" - break; - - case 274: // consistency: "consistency" $@43 ":" "constant string" -#line 1094 "dhcp6_parser.yy" - { - ElementPtr c(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->set("consistency", c); - ctx.leave(); -} -#line 2053 "dhcp6_parser.cc" - break; - - case 275: // $@44: %empty -#line 1100 "dhcp6_parser.yy" - { - ctx.unique("serial-consistency", ctx.loc2pos(yystack_[0].location)); - ctx.enter(ctx.NO_KEYWORD); -} -#line 2062 "dhcp6_parser.cc" - break; - - case 276: // serial_consistency: "serial-consistency" $@44 ":" "constant string" -#line 1103 "dhcp6_parser.yy" - { - ElementPtr c(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->set("serial-consistency", c); - ctx.leave(); -} -#line 2072 "dhcp6_parser.cc" - break; - - case 277: // $@45: %empty -#line 1109 "dhcp6_parser.yy" + case 258: +#line 1039 "dhcp6_parser.yy" { ctx.unique("trust-anchor", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2081 "dhcp6_parser.cc" +#line 2000 "dhcp6_parser.cc" break; - case 278: // trust_anchor: "trust-anchor" $@45 ":" "constant string" -#line 1112 "dhcp6_parser.yy" + case 259: +#line 1042 "dhcp6_parser.yy" { ElementPtr ca(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("trust-anchor", ca); ctx.leave(); } -#line 2091 "dhcp6_parser.cc" +#line 2010 "dhcp6_parser.cc" break; - case 279: // $@46: %empty -#line 1118 "dhcp6_parser.yy" + case 260: +#line 1048 "dhcp6_parser.yy" { ctx.unique("cert-file", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2100 "dhcp6_parser.cc" +#line 2019 "dhcp6_parser.cc" break; - case 280: // cert_file: "cert-file" $@46 ":" "constant string" -#line 1121 "dhcp6_parser.yy" + case 261: +#line 1051 "dhcp6_parser.yy" { ElementPtr cert(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("cert-file", cert); ctx.leave(); } -#line 2110 "dhcp6_parser.cc" +#line 2029 "dhcp6_parser.cc" break; - case 281: // $@47: %empty -#line 1127 "dhcp6_parser.yy" + case 262: +#line 1057 "dhcp6_parser.yy" { ctx.unique("key-file", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2119 "dhcp6_parser.cc" +#line 2038 "dhcp6_parser.cc" break; - case 282: // key_file: "key-file" $@47 ":" "constant string" -#line 1130 "dhcp6_parser.yy" + case 263: +#line 1060 "dhcp6_parser.yy" { ElementPtr key(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("key-file", key); ctx.leave(); } -#line 2129 "dhcp6_parser.cc" +#line 2048 "dhcp6_parser.cc" break; - case 283: // $@48: %empty -#line 1136 "dhcp6_parser.yy" + case 264: +#line 1066 "dhcp6_parser.yy" { ctx.unique("cipher-list", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2138 "dhcp6_parser.cc" +#line 2057 "dhcp6_parser.cc" break; - case 284: // cipher_list: "cipher-list" $@48 ":" "constant string" -#line 1139 "dhcp6_parser.yy" + case 265: +#line 1069 "dhcp6_parser.yy" { ElementPtr cl(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("cipher-list", cl); ctx.leave(); } -#line 2148 "dhcp6_parser.cc" +#line 2067 "dhcp6_parser.cc" break; - case 285: // $@49: %empty -#line 1145 "dhcp6_parser.yy" + case 266: +#line 1075 "dhcp6_parser.yy" { ctx.unique("sanity-checks", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -2156,37 +2075,37 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.SANITY_CHECKS); } -#line 2160 "dhcp6_parser.cc" +#line 2079 "dhcp6_parser.cc" break; - case 286: // sanity_checks: "sanity-checks" $@49 ":" "{" sanity_checks_params "}" -#line 1151 "dhcp6_parser.yy" + case 267: +#line 1081 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2169 "dhcp6_parser.cc" +#line 2088 "dhcp6_parser.cc" break; - case 289: // sanity_checks_params: sanity_checks_params "," -#line 1158 "dhcp6_parser.yy" + case 270: +#line 1088 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2177 "dhcp6_parser.cc" +#line 2096 "dhcp6_parser.cc" break; - case 291: // $@50: %empty -#line 1165 "dhcp6_parser.yy" + case 272: +#line 1095 "dhcp6_parser.yy" { ctx.unique("lease-checks", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2186 "dhcp6_parser.cc" +#line 2105 "dhcp6_parser.cc" break; - case 292: // lease_checks: "lease-checks" $@50 ":" "constant string" -#line 1168 "dhcp6_parser.yy" + case 273: +#line 1098 "dhcp6_parser.yy" { if ( (string(yystack_[0].value.as < std::string > ()) == "none") || @@ -2202,11 +2121,11 @@ namespace isc { namespace dhcp { ", supported values are: none, warn, fix, fix-del, del"); } } -#line 2206 "dhcp6_parser.cc" +#line 2125 "dhcp6_parser.cc" break; - case 293: // $@51: %empty -#line 1184 "dhcp6_parser.yy" + case 274: +#line 1114 "dhcp6_parser.yy" { ctx.unique("mac-sources", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2214,46 +2133,46 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.MAC_SOURCES); } -#line 2218 "dhcp6_parser.cc" +#line 2137 "dhcp6_parser.cc" break; - case 294: // mac_sources: "mac-sources" $@51 ":" "[" mac_sources_list "]" -#line 1190 "dhcp6_parser.yy" + case 275: +#line 1120 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2227 "dhcp6_parser.cc" +#line 2146 "dhcp6_parser.cc" break; - case 297: // mac_sources_list: mac_sources_list "," -#line 1197 "dhcp6_parser.yy" + case 278: +#line 1127 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2235 "dhcp6_parser.cc" +#line 2154 "dhcp6_parser.cc" break; - case 300: // duid_id: "duid" -#line 1206 "dhcp6_parser.yy" + case 281: +#line 1136 "dhcp6_parser.yy" { ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(duid); } -#line 2244 "dhcp6_parser.cc" +#line 2163 "dhcp6_parser.cc" break; - case 301: // string_id: "constant string" -#line 1211 "dhcp6_parser.yy" + case 282: +#line 1141 "dhcp6_parser.yy" { ElementPtr duid(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(duid); } -#line 2253 "dhcp6_parser.cc" +#line 2172 "dhcp6_parser.cc" break; - case 302: // $@52: %empty -#line 1216 "dhcp6_parser.yy" + case 283: +#line 1146 "dhcp6_parser.yy" { ctx.unique("host-reservation-identifiers", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2261,46 +2180,46 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS); } -#line 2265 "dhcp6_parser.cc" +#line 2184 "dhcp6_parser.cc" break; - case 303: // host_reservation_identifiers: "host-reservation-identifiers" $@52 ":" "[" host_reservation_identifiers_list "]" -#line 1222 "dhcp6_parser.yy" + case 284: +#line 1152 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2274 "dhcp6_parser.cc" +#line 2193 "dhcp6_parser.cc" break; - case 306: // host_reservation_identifiers_list: host_reservation_identifiers_list "," -#line 1229 "dhcp6_parser.yy" + case 287: +#line 1159 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2282 "dhcp6_parser.cc" +#line 2201 "dhcp6_parser.cc" break; - case 310: // hw_address_id: "hw-address" -#line 1239 "dhcp6_parser.yy" + case 291: +#line 1169 "dhcp6_parser.yy" { ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(hwaddr); } -#line 2291 "dhcp6_parser.cc" +#line 2210 "dhcp6_parser.cc" break; - case 311: // flex_id: "flex-id" -#line 1244 "dhcp6_parser.yy" + case 292: +#line 1174 "dhcp6_parser.yy" { ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(flex_id); } -#line 2300 "dhcp6_parser.cc" +#line 2219 "dhcp6_parser.cc" break; - case 312: // $@53: %empty -#line 1251 "dhcp6_parser.yy" + case 293: +#line 1181 "dhcp6_parser.yy" { ctx.unique("relay-supplied-options", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2308,20 +2227,20 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.NO_KEYWORD); } -#line 2312 "dhcp6_parser.cc" +#line 2231 "dhcp6_parser.cc" break; - case 313: // relay_supplied_options: "relay-supplied-options" $@53 ":" "[" list_content "]" -#line 1257 "dhcp6_parser.yy" + case 294: +#line 1187 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2321 "dhcp6_parser.cc" +#line 2240 "dhcp6_parser.cc" break; - case 314: // $@54: %empty -#line 1264 "dhcp6_parser.yy" + case 295: +#line 1194 "dhcp6_parser.yy" { ctx.unique("multi-threading", ctx.loc2pos(yystack_[0].location)); ElementPtr mt(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -2329,60 +2248,60 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(mt); ctx.enter(ctx.DHCP_MULTI_THREADING); } -#line 2333 "dhcp6_parser.cc" +#line 2252 "dhcp6_parser.cc" break; - case 315: // dhcp_multi_threading: "multi-threading" $@54 ":" "{" multi_threading_params "}" -#line 1270 "dhcp6_parser.yy" + case 296: +#line 1200 "dhcp6_parser.yy" { // The enable parameter is required. ctx.require("enable-multi-threading", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } -#line 2344 "dhcp6_parser.cc" +#line 2263 "dhcp6_parser.cc" break; - case 318: // multi_threading_params: multi_threading_params "," -#line 1279 "dhcp6_parser.yy" + case 299: +#line 1209 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2352 "dhcp6_parser.cc" +#line 2271 "dhcp6_parser.cc" break; - case 325: // enable_multi_threading: "enable-multi-threading" ":" "boolean" -#line 1292 "dhcp6_parser.yy" + case 306: +#line 1222 "dhcp6_parser.yy" { ctx.unique("enable-multi-threading", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enable-multi-threading", b); } -#line 2362 "dhcp6_parser.cc" +#line 2281 "dhcp6_parser.cc" break; - case 326: // thread_pool_size: "thread-pool-size" ":" "integer" -#line 1298 "dhcp6_parser.yy" + case 307: +#line 1228 "dhcp6_parser.yy" { ctx.unique("thread-pool-size", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("thread-pool-size", prf); } -#line 2372 "dhcp6_parser.cc" +#line 2291 "dhcp6_parser.cc" break; - case 327: // packet_queue_size: "packet-queue-size" ":" "integer" -#line 1304 "dhcp6_parser.yy" + case 308: +#line 1234 "dhcp6_parser.yy" { ctx.unique("packet-queue-size", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("packet-queue-size", prf); } -#line 2382 "dhcp6_parser.cc" +#line 2301 "dhcp6_parser.cc" break; - case 328: // $@55: %empty -#line 1310 "dhcp6_parser.yy" + case 309: +#line 1240 "dhcp6_parser.yy" { ctx.unique("hooks-libraries", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2390,113 +2309,113 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.HOOKS_LIBRARIES); } -#line 2394 "dhcp6_parser.cc" +#line 2313 "dhcp6_parser.cc" break; - case 329: // hooks_libraries: "hooks-libraries" $@55 ":" "[" hooks_libraries_list "]" -#line 1316 "dhcp6_parser.yy" + case 310: +#line 1246 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2403 "dhcp6_parser.cc" +#line 2322 "dhcp6_parser.cc" break; - case 334: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list "," -#line 1327 "dhcp6_parser.yy" + case 315: +#line 1257 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2411 "dhcp6_parser.cc" +#line 2330 "dhcp6_parser.cc" break; - case 335: // $@56: %empty -#line 1332 "dhcp6_parser.yy" + case 316: +#line 1262 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2421 "dhcp6_parser.cc" +#line 2340 "dhcp6_parser.cc" break; - case 336: // hooks_library: "{" $@56 hooks_params "}" -#line 1336 "dhcp6_parser.yy" + case 317: +#line 1266 "dhcp6_parser.yy" { // The library hooks parameter is required ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 2431 "dhcp6_parser.cc" +#line 2350 "dhcp6_parser.cc" break; - case 337: // $@57: %empty -#line 1342 "dhcp6_parser.yy" + case 318: +#line 1272 "dhcp6_parser.yy" { // Parse the hooks-libraries list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2441 "dhcp6_parser.cc" +#line 2360 "dhcp6_parser.cc" break; - case 338: // sub_hooks_library: "{" $@57 hooks_params "}" -#line 1346 "dhcp6_parser.yy" + case 319: +#line 1276 "dhcp6_parser.yy" { // The library hooks parameter is required ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 2451 "dhcp6_parser.cc" +#line 2370 "dhcp6_parser.cc" break; - case 341: // hooks_params: hooks_params "," -#line 1354 "dhcp6_parser.yy" + case 322: +#line 1284 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2459 "dhcp6_parser.cc" +#line 2378 "dhcp6_parser.cc" break; - case 345: // $@58: %empty -#line 1364 "dhcp6_parser.yy" + case 326: +#line 1294 "dhcp6_parser.yy" { ctx.unique("library", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2468 "dhcp6_parser.cc" +#line 2387 "dhcp6_parser.cc" break; - case 346: // library: "library" $@58 ":" "constant string" -#line 1367 "dhcp6_parser.yy" + case 327: +#line 1297 "dhcp6_parser.yy" { ElementPtr lib(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("library", lib); ctx.leave(); } -#line 2478 "dhcp6_parser.cc" +#line 2397 "dhcp6_parser.cc" break; - case 347: // $@59: %empty -#line 1373 "dhcp6_parser.yy" + case 328: +#line 1303 "dhcp6_parser.yy" { ctx.unique("parameters", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2487 "dhcp6_parser.cc" +#line 2406 "dhcp6_parser.cc" break; - case 348: // parameters: "parameters" $@59 ":" map_value -#line 1376 "dhcp6_parser.yy" + case 329: +#line 1306 "dhcp6_parser.yy" { ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 2496 "dhcp6_parser.cc" +#line 2415 "dhcp6_parser.cc" break; - case 349: // $@60: %empty -#line 1382 "dhcp6_parser.yy" + case 330: +#line 1312 "dhcp6_parser.yy" { ctx.unique("expired-leases-processing", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -2504,89 +2423,89 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.EXPIRED_LEASES_PROCESSING); } -#line 2508 "dhcp6_parser.cc" +#line 2427 "dhcp6_parser.cc" break; - case 350: // expired_leases_processing: "expired-leases-processing" $@60 ":" "{" expired_leases_params "}" -#line 1388 "dhcp6_parser.yy" + case 331: +#line 1318 "dhcp6_parser.yy" { // No expired lease parameter is required ctx.stack_.pop_back(); ctx.leave(); } -#line 2518 "dhcp6_parser.cc" +#line 2437 "dhcp6_parser.cc" break; - case 353: // expired_leases_params: expired_leases_params "," -#line 1396 "dhcp6_parser.yy" + case 334: +#line 1326 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2526 "dhcp6_parser.cc" +#line 2445 "dhcp6_parser.cc" break; - case 360: // reclaim_timer_wait_time: "reclaim-timer-wait-time" ":" "integer" -#line 1409 "dhcp6_parser.yy" + case 341: +#line 1339 "dhcp6_parser.yy" { ctx.unique("reclaim-timer-wait-time", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reclaim-timer-wait-time", value); } -#line 2536 "dhcp6_parser.cc" +#line 2455 "dhcp6_parser.cc" break; - case 361: // flush_reclaimed_timer_wait_time: "flush-reclaimed-timer-wait-time" ":" "integer" -#line 1415 "dhcp6_parser.yy" + case 342: +#line 1345 "dhcp6_parser.yy" { ctx.unique("flush-reclaimed-timer-wait-time", ctx.loc2pos(yystack_[2].location)); 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); } -#line 2546 "dhcp6_parser.cc" +#line 2465 "dhcp6_parser.cc" break; - case 362: // hold_reclaimed_time: "hold-reclaimed-time" ":" "integer" -#line 1421 "dhcp6_parser.yy" + case 343: +#line 1351 "dhcp6_parser.yy" { ctx.unique("hold-reclaimed-time", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hold-reclaimed-time", value); } -#line 2556 "dhcp6_parser.cc" +#line 2475 "dhcp6_parser.cc" break; - case 363: // max_reclaim_leases: "max-reclaim-leases" ":" "integer" -#line 1427 "dhcp6_parser.yy" + case 344: +#line 1357 "dhcp6_parser.yy" { ctx.unique("max-reclaim-leases", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-reclaim-leases", value); } -#line 2566 "dhcp6_parser.cc" +#line 2485 "dhcp6_parser.cc" break; - case 364: // max_reclaim_time: "max-reclaim-time" ":" "integer" -#line 1433 "dhcp6_parser.yy" + case 345: +#line 1363 "dhcp6_parser.yy" { ctx.unique("max-reclaim-time", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-reclaim-time", value); } -#line 2576 "dhcp6_parser.cc" +#line 2495 "dhcp6_parser.cc" break; - case 365: // unwarned_reclaim_cycles: "unwarned-reclaim-cycles" ":" "integer" -#line 1439 "dhcp6_parser.yy" + case 346: +#line 1369 "dhcp6_parser.yy" { ctx.unique("unwarned-reclaim-cycles", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("unwarned-reclaim-cycles", value); } -#line 2586 "dhcp6_parser.cc" +#line 2505 "dhcp6_parser.cc" break; - case 366: // $@61: %empty -#line 1448 "dhcp6_parser.yy" + case 347: +#line 1378 "dhcp6_parser.yy" { ctx.unique("subnet6", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2594,38 +2513,38 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.SUBNET6); } -#line 2598 "dhcp6_parser.cc" +#line 2517 "dhcp6_parser.cc" break; - case 367: // subnet6_list: "subnet6" $@61 ":" "[" subnet6_list_content "]" -#line 1454 "dhcp6_parser.yy" + case 348: +#line 1384 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2607 "dhcp6_parser.cc" +#line 2526 "dhcp6_parser.cc" break; - case 372: // not_empty_subnet6_list: not_empty_subnet6_list "," -#line 1468 "dhcp6_parser.yy" + case 353: +#line 1398 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2615 "dhcp6_parser.cc" +#line 2534 "dhcp6_parser.cc" break; - case 373: // $@62: %empty -#line 1477 "dhcp6_parser.yy" + case 354: +#line 1407 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2625 "dhcp6_parser.cc" +#line 2544 "dhcp6_parser.cc" break; - case 374: // subnet6: "{" $@62 subnet6_params "}" -#line 1481 "dhcp6_parser.yy" + case 355: +#line 1411 "dhcp6_parser.yy" { // Once we reached this place, the subnet parsing is now complete. // If we want to, we can implement default values here. @@ -2647,115 +2566,115 @@ namespace isc { namespace dhcp { ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 2651 "dhcp6_parser.cc" +#line 2570 "dhcp6_parser.cc" break; - case 375: // $@63: %empty -#line 1503 "dhcp6_parser.yy" + case 356: +#line 1433 "dhcp6_parser.yy" { // Parse the subnet6 list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2661 "dhcp6_parser.cc" +#line 2580 "dhcp6_parser.cc" break; - case 376: // sub_subnet6: "{" $@63 subnet6_params "}" -#line 1507 "dhcp6_parser.yy" + case 357: +#line 1437 "dhcp6_parser.yy" { // The subnet subnet6 parameter is required ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 2671 "dhcp6_parser.cc" +#line 2590 "dhcp6_parser.cc" break; - case 379: // subnet6_params: subnet6_params "," -#line 1516 "dhcp6_parser.yy" + case 360: +#line 1446 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2679 "dhcp6_parser.cc" +#line 2598 "dhcp6_parser.cc" break; - case 423: // $@64: %empty -#line 1567 "dhcp6_parser.yy" + case 404: +#line 1497 "dhcp6_parser.yy" { ctx.unique("subnet", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2688 "dhcp6_parser.cc" +#line 2607 "dhcp6_parser.cc" break; - case 424: // subnet: "subnet" $@64 ":" "constant string" -#line 1570 "dhcp6_parser.yy" + case 405: +#line 1500 "dhcp6_parser.yy" { ElementPtr subnet(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("subnet", subnet); ctx.leave(); } -#line 2698 "dhcp6_parser.cc" +#line 2617 "dhcp6_parser.cc" break; - case 425: // $@65: %empty -#line 1576 "dhcp6_parser.yy" + case 406: +#line 1506 "dhcp6_parser.yy" { ctx.unique("interface", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2707 "dhcp6_parser.cc" +#line 2626 "dhcp6_parser.cc" break; - case 426: // interface: "interface" $@65 ":" "constant string" -#line 1579 "dhcp6_parser.yy" + case 407: +#line 1509 "dhcp6_parser.yy" { ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("interface", iface); ctx.leave(); } -#line 2717 "dhcp6_parser.cc" +#line 2636 "dhcp6_parser.cc" break; - case 427: // $@66: %empty -#line 1585 "dhcp6_parser.yy" + case 408: +#line 1515 "dhcp6_parser.yy" { ctx.unique("interface-id", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2726 "dhcp6_parser.cc" +#line 2645 "dhcp6_parser.cc" break; - case 428: // interface_id: "interface-id" $@66 ":" "constant string" -#line 1588 "dhcp6_parser.yy" + case 409: +#line 1518 "dhcp6_parser.yy" { ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("interface-id", iface); ctx.leave(); } -#line 2736 "dhcp6_parser.cc" +#line 2655 "dhcp6_parser.cc" break; - case 429: // $@67: %empty -#line 1594 "dhcp6_parser.yy" + case 410: +#line 1524 "dhcp6_parser.yy" { ctx.unique("client-class", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2745 "dhcp6_parser.cc" +#line 2664 "dhcp6_parser.cc" break; - case 430: // client_class: "client-class" $@67 ":" "constant string" -#line 1597 "dhcp6_parser.yy" + case 411: +#line 1527 "dhcp6_parser.yy" { ElementPtr cls(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("client-class", cls); ctx.leave(); } -#line 2755 "dhcp6_parser.cc" +#line 2674 "dhcp6_parser.cc" break; - case 431: // $@68: %empty -#line 1603 "dhcp6_parser.yy" + case 412: +#line 1533 "dhcp6_parser.yy" { ctx.unique("require-client-classes", ctx.loc2pos(yystack_[0].location)); ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2763,112 +2682,112 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(c); ctx.enter(ctx.NO_KEYWORD); } -#line 2767 "dhcp6_parser.cc" +#line 2686 "dhcp6_parser.cc" break; - case 432: // require_client_classes: "require-client-classes" $@68 ":" list_strings -#line 1609 "dhcp6_parser.yy" + case 413: +#line 1539 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2776 "dhcp6_parser.cc" +#line 2695 "dhcp6_parser.cc" break; - case 433: // reservations_global: "reservations-global" ":" "boolean" -#line 1614 "dhcp6_parser.yy" + case 414: +#line 1544 "dhcp6_parser.yy" { ctx.unique("reservations-global", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reservations-global", b); } -#line 2786 "dhcp6_parser.cc" +#line 2705 "dhcp6_parser.cc" break; - case 434: // reservations_in_subnet: "reservations-in-subnet" ":" "boolean" -#line 1620 "dhcp6_parser.yy" + case 415: +#line 1550 "dhcp6_parser.yy" { ctx.unique("reservations-in-subnet", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reservations-in-subnet", b); } -#line 2796 "dhcp6_parser.cc" +#line 2715 "dhcp6_parser.cc" break; - case 435: // reservations_out_of_pool: "reservations-out-of-pool" ":" "boolean" -#line 1626 "dhcp6_parser.yy" + case 416: +#line 1556 "dhcp6_parser.yy" { ctx.unique("reservations-out-of-pool", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reservations-out-of-pool", b); } -#line 2806 "dhcp6_parser.cc" +#line 2725 "dhcp6_parser.cc" break; - case 436: // $@69: %empty -#line 1632 "dhcp6_parser.yy" + case 417: +#line 1562 "dhcp6_parser.yy" { ctx.unique("reservation-mode", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.RESERVATION_MODE); } -#line 2815 "dhcp6_parser.cc" +#line 2734 "dhcp6_parser.cc" break; - case 437: // reservation_mode: "reservation-mode" $@69 ":" hr_mode -#line 1635 "dhcp6_parser.yy" + case 418: +#line 1565 "dhcp6_parser.yy" { ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 2824 "dhcp6_parser.cc" +#line 2743 "dhcp6_parser.cc" break; - case 438: // hr_mode: "disabled" -#line 1640 "dhcp6_parser.yy" + case 419: +#line 1570 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); } -#line 2830 "dhcp6_parser.cc" +#line 2749 "dhcp6_parser.cc" break; - case 439: // hr_mode: "out-of-pool" -#line 1641 "dhcp6_parser.yy" + case 420: +#line 1571 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); } -#line 2836 "dhcp6_parser.cc" +#line 2755 "dhcp6_parser.cc" break; - case 440: // hr_mode: "global" -#line 1642 "dhcp6_parser.yy" + case 421: +#line 1572 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("global", ctx.loc2pos(yystack_[0].location))); } -#line 2842 "dhcp6_parser.cc" +#line 2761 "dhcp6_parser.cc" break; - case 441: // hr_mode: "all" -#line 1643 "dhcp6_parser.yy" + case 422: +#line 1573 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); } -#line 2848 "dhcp6_parser.cc" +#line 2767 "dhcp6_parser.cc" break; - case 442: // id: "id" ":" "integer" -#line 1646 "dhcp6_parser.yy" + case 423: +#line 1576 "dhcp6_parser.yy" { ctx.unique("id", ctx.loc2pos(yystack_[2].location)); ElementPtr id(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("id", id); } -#line 2858 "dhcp6_parser.cc" +#line 2777 "dhcp6_parser.cc" break; - case 443: // rapid_commit: "rapid-commit" ":" "boolean" -#line 1652 "dhcp6_parser.yy" + case 424: +#line 1582 "dhcp6_parser.yy" { ctx.unique("rapid-commit", ctx.loc2pos(yystack_[2].location)); ElementPtr rc(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("rapid-commit", rc); } -#line 2868 "dhcp6_parser.cc" +#line 2787 "dhcp6_parser.cc" break; - case 444: // $@70: %empty -#line 1660 "dhcp6_parser.yy" + case 425: +#line 1590 "dhcp6_parser.yy" { ctx.unique("shared-networks", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2876,54 +2795,54 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.SHARED_NETWORK); } -#line 2880 "dhcp6_parser.cc" +#line 2799 "dhcp6_parser.cc" break; - case 445: // shared_networks: "shared-networks" $@70 ":" "[" shared_networks_content "]" -#line 1666 "dhcp6_parser.yy" + case 426: +#line 1596 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2889 "dhcp6_parser.cc" +#line 2808 "dhcp6_parser.cc" break; - case 450: // shared_networks_list: shared_networks_list "," -#line 1679 "dhcp6_parser.yy" + case 431: +#line 1609 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2897 "dhcp6_parser.cc" +#line 2816 "dhcp6_parser.cc" break; - case 451: // $@71: %empty -#line 1684 "dhcp6_parser.yy" + case 432: +#line 1614 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2907 "dhcp6_parser.cc" +#line 2826 "dhcp6_parser.cc" break; - case 452: // shared_network: "{" $@71 shared_network_params "}" -#line 1688 "dhcp6_parser.yy" + case 433: +#line 1618 "dhcp6_parser.yy" { ctx.stack_.pop_back(); } -#line 2915 "dhcp6_parser.cc" +#line 2834 "dhcp6_parser.cc" break; - case 455: // shared_network_params: shared_network_params "," -#line 1694 "dhcp6_parser.yy" + case 436: +#line 1624 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2923 "dhcp6_parser.cc" +#line 2842 "dhcp6_parser.cc" break; - case 496: // $@72: %empty -#line 1745 "dhcp6_parser.yy" + case 477: +#line 1675 "dhcp6_parser.yy" { ctx.unique("option-def", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2931,55 +2850,55 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.OPTION_DEF); } -#line 2935 "dhcp6_parser.cc" +#line 2854 "dhcp6_parser.cc" break; - case 497: // option_def_list: "option-def" $@72 ":" "[" option_def_list_content "]" -#line 1751 "dhcp6_parser.yy" + case 478: +#line 1681 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2944 "dhcp6_parser.cc" +#line 2863 "dhcp6_parser.cc" break; - case 498: // $@73: %empty -#line 1759 "dhcp6_parser.yy" + case 479: +#line 1689 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2953 "dhcp6_parser.cc" +#line 2872 "dhcp6_parser.cc" break; - case 499: // sub_option_def_list: "{" $@73 option_def_list "}" -#line 1762 "dhcp6_parser.yy" + case 480: +#line 1692 "dhcp6_parser.yy" { // parsing completed } -#line 2961 "dhcp6_parser.cc" +#line 2880 "dhcp6_parser.cc" break; - case 504: // not_empty_option_def_list: not_empty_option_def_list "," -#line 1774 "dhcp6_parser.yy" + case 485: +#line 1704 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2969 "dhcp6_parser.cc" +#line 2888 "dhcp6_parser.cc" break; - case 505: // $@74: %empty -#line 1781 "dhcp6_parser.yy" + case 486: +#line 1711 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2979 "dhcp6_parser.cc" +#line 2898 "dhcp6_parser.cc" break; - case 506: // option_def_entry: "{" $@74 option_def_params "}" -#line 1785 "dhcp6_parser.yy" + case 487: +#line 1715 "dhcp6_parser.yy" { // The name, code and type option def parameters are required. ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -2987,21 +2906,21 @@ namespace isc { namespace dhcp { ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 2991 "dhcp6_parser.cc" +#line 2910 "dhcp6_parser.cc" break; - case 507: // $@75: %empty -#line 1796 "dhcp6_parser.yy" + case 488: +#line 1726 "dhcp6_parser.yy" { // Parse the option-def list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3001 "dhcp6_parser.cc" +#line 2920 "dhcp6_parser.cc" break; - case 508: // sub_option_def: "{" $@75 option_def_params "}" -#line 1800 "dhcp6_parser.yy" + case 489: +#line 1730 "dhcp6_parser.yy" { // The name, code and type option def parameters are required. ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -3009,115 +2928,115 @@ namespace isc { namespace dhcp { ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 3013 "dhcp6_parser.cc" +#line 2932 "dhcp6_parser.cc" break; - case 513: // not_empty_option_def_params: not_empty_option_def_params "," -#line 1816 "dhcp6_parser.yy" + case 494: +#line 1746 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3021 "dhcp6_parser.cc" +#line 2940 "dhcp6_parser.cc" break; - case 525: // code: "code" ":" "integer" -#line 1835 "dhcp6_parser.yy" + case 506: +#line 1765 "dhcp6_parser.yy" { ctx.unique("code", ctx.loc2pos(yystack_[2].location)); ElementPtr code(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("code", code); } -#line 3031 "dhcp6_parser.cc" +#line 2950 "dhcp6_parser.cc" break; - case 527: // $@76: %empty -#line 1843 "dhcp6_parser.yy" + case 508: +#line 1773 "dhcp6_parser.yy" { ctx.unique("type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3040 "dhcp6_parser.cc" +#line 2959 "dhcp6_parser.cc" break; - case 528: // option_def_type: "type" $@76 ":" "constant string" -#line 1846 "dhcp6_parser.yy" + case 509: +#line 1776 "dhcp6_parser.yy" { ElementPtr prf(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("type", prf); ctx.leave(); } -#line 3050 "dhcp6_parser.cc" +#line 2969 "dhcp6_parser.cc" break; - case 529: // $@77: %empty -#line 1852 "dhcp6_parser.yy" + case 510: +#line 1782 "dhcp6_parser.yy" { ctx.unique("record-types", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3059 "dhcp6_parser.cc" +#line 2978 "dhcp6_parser.cc" break; - case 530: // option_def_record_types: "record-types" $@77 ":" "constant string" -#line 1855 "dhcp6_parser.yy" + case 511: +#line 1785 "dhcp6_parser.yy" { ElementPtr rtypes(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("record-types", rtypes); ctx.leave(); } -#line 3069 "dhcp6_parser.cc" +#line 2988 "dhcp6_parser.cc" break; - case 531: // $@78: %empty -#line 1861 "dhcp6_parser.yy" + case 512: +#line 1791 "dhcp6_parser.yy" { ctx.unique("space", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3078 "dhcp6_parser.cc" +#line 2997 "dhcp6_parser.cc" break; - case 532: // space: "space" $@78 ":" "constant string" -#line 1864 "dhcp6_parser.yy" + case 513: +#line 1794 "dhcp6_parser.yy" { ElementPtr space(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("space", space); ctx.leave(); } -#line 3088 "dhcp6_parser.cc" +#line 3007 "dhcp6_parser.cc" break; - case 534: // $@79: %empty -#line 1872 "dhcp6_parser.yy" + case 515: +#line 1802 "dhcp6_parser.yy" { ctx.unique("encapsulate", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3097 "dhcp6_parser.cc" +#line 3016 "dhcp6_parser.cc" break; - case 535: // option_def_encapsulate: "encapsulate" $@79 ":" "constant string" -#line 1875 "dhcp6_parser.yy" + case 516: +#line 1805 "dhcp6_parser.yy" { ElementPtr encap(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("encapsulate", encap); ctx.leave(); } -#line 3107 "dhcp6_parser.cc" +#line 3026 "dhcp6_parser.cc" break; - case 536: // option_def_array: "array" ":" "boolean" -#line 1881 "dhcp6_parser.yy" + case 517: +#line 1811 "dhcp6_parser.yy" { ctx.unique("array", ctx.loc2pos(yystack_[2].location)); ElementPtr array(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("array", array); } -#line 3117 "dhcp6_parser.cc" +#line 3036 "dhcp6_parser.cc" break; - case 537: // $@80: %empty -#line 1891 "dhcp6_parser.yy" + case 518: +#line 1821 "dhcp6_parser.yy" { ctx.unique("option-data", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3125,113 +3044,113 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.OPTION_DATA); } -#line 3129 "dhcp6_parser.cc" +#line 3048 "dhcp6_parser.cc" break; - case 538: // option_data_list: "option-data" $@80 ":" "[" option_data_list_content "]" -#line 1897 "dhcp6_parser.yy" + case 519: +#line 1827 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3138 "dhcp6_parser.cc" +#line 3057 "dhcp6_parser.cc" break; - case 543: // not_empty_option_data_list: not_empty_option_data_list "," -#line 1912 "dhcp6_parser.yy" + case 524: +#line 1842 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3146 "dhcp6_parser.cc" +#line 3065 "dhcp6_parser.cc" break; - case 544: // $@81: %empty -#line 1919 "dhcp6_parser.yy" + case 525: +#line 1849 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3156 "dhcp6_parser.cc" +#line 3075 "dhcp6_parser.cc" break; - case 545: // option_data_entry: "{" $@81 option_data_params "}" -#line 1923 "dhcp6_parser.yy" + case 526: +#line 1853 "dhcp6_parser.yy" { /// @todo: the code or name parameters are required. ctx.stack_.pop_back(); } -#line 3165 "dhcp6_parser.cc" +#line 3084 "dhcp6_parser.cc" break; - case 546: // $@82: %empty -#line 1931 "dhcp6_parser.yy" + case 527: +#line 1861 "dhcp6_parser.yy" { // Parse the option-data list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3175 "dhcp6_parser.cc" +#line 3094 "dhcp6_parser.cc" break; - case 547: // sub_option_data: "{" $@82 option_data_params "}" -#line 1935 "dhcp6_parser.yy" + case 528: +#line 1865 "dhcp6_parser.yy" { /// @todo: the code or name parameters are required. // parsing completed } -#line 3184 "dhcp6_parser.cc" +#line 3103 "dhcp6_parser.cc" break; - case 552: // not_empty_option_data_params: not_empty_option_data_params "," -#line 1951 "dhcp6_parser.yy" + case 533: +#line 1881 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3192 "dhcp6_parser.cc" +#line 3111 "dhcp6_parser.cc" break; - case 563: // $@83: %empty -#line 1971 "dhcp6_parser.yy" + case 544: +#line 1901 "dhcp6_parser.yy" { ctx.unique("data", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3201 "dhcp6_parser.cc" +#line 3120 "dhcp6_parser.cc" break; - case 564: // option_data_data: "data" $@83 ":" "constant string" -#line 1974 "dhcp6_parser.yy" + case 545: +#line 1904 "dhcp6_parser.yy" { ElementPtr data(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("data", data); ctx.leave(); } -#line 3211 "dhcp6_parser.cc" +#line 3130 "dhcp6_parser.cc" break; - case 567: // option_data_csv_format: "csv-format" ":" "boolean" -#line 1984 "dhcp6_parser.yy" + case 548: +#line 1914 "dhcp6_parser.yy" { ctx.unique("csv-format", ctx.loc2pos(yystack_[2].location)); ElementPtr space(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("csv-format", space); } -#line 3221 "dhcp6_parser.cc" +#line 3140 "dhcp6_parser.cc" break; - case 568: // option_data_always_send: "always-send" ":" "boolean" -#line 1990 "dhcp6_parser.yy" + case 549: +#line 1920 "dhcp6_parser.yy" { ctx.unique("always-send", ctx.loc2pos(yystack_[2].location)); ElementPtr persist(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("always-send", persist); } -#line 3231 "dhcp6_parser.cc" +#line 3150 "dhcp6_parser.cc" break; - case 569: // $@84: %empty -#line 1999 "dhcp6_parser.yy" + case 550: +#line 1929 "dhcp6_parser.yy" { ctx.unique("pools", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3239,103 +3158,103 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.POOLS); } -#line 3243 "dhcp6_parser.cc" +#line 3162 "dhcp6_parser.cc" break; - case 570: // pools_list: "pools" $@84 ":" "[" pools_list_content "]" -#line 2005 "dhcp6_parser.yy" + case 551: +#line 1935 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3252 "dhcp6_parser.cc" +#line 3171 "dhcp6_parser.cc" break; - case 575: // not_empty_pools_list: not_empty_pools_list "," -#line 2018 "dhcp6_parser.yy" + case 556: +#line 1948 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3260 "dhcp6_parser.cc" +#line 3179 "dhcp6_parser.cc" break; - case 576: // $@85: %empty -#line 2023 "dhcp6_parser.yy" + case 557: +#line 1953 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3270 "dhcp6_parser.cc" +#line 3189 "dhcp6_parser.cc" break; - case 577: // pool_list_entry: "{" $@85 pool_params "}" -#line 2027 "dhcp6_parser.yy" + case 558: +#line 1957 "dhcp6_parser.yy" { // The pool parameter is required. ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 3280 "dhcp6_parser.cc" +#line 3199 "dhcp6_parser.cc" break; - case 578: // $@86: %empty -#line 2033 "dhcp6_parser.yy" + case 559: +#line 1963 "dhcp6_parser.yy" { // Parse the pool list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3290 "dhcp6_parser.cc" +#line 3209 "dhcp6_parser.cc" break; - case 579: // sub_pool6: "{" $@86 pool_params "}" -#line 2037 "dhcp6_parser.yy" + case 560: +#line 1967 "dhcp6_parser.yy" { // The pool parameter is required. ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 3300 "dhcp6_parser.cc" +#line 3219 "dhcp6_parser.cc" break; - case 582: // pool_params: pool_params "," -#line 2045 "dhcp6_parser.yy" + case 563: +#line 1975 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3308 "dhcp6_parser.cc" +#line 3227 "dhcp6_parser.cc" break; - case 590: // $@87: %empty -#line 2059 "dhcp6_parser.yy" + case 571: +#line 1989 "dhcp6_parser.yy" { ctx.unique("pool", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3317 "dhcp6_parser.cc" +#line 3236 "dhcp6_parser.cc" break; - case 591: // pool_entry: "pool" $@87 ":" "constant string" -#line 2062 "dhcp6_parser.yy" + case 572: +#line 1992 "dhcp6_parser.yy" { ElementPtr pool(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pool", pool); ctx.leave(); } -#line 3327 "dhcp6_parser.cc" +#line 3246 "dhcp6_parser.cc" break; - case 592: // $@88: %empty -#line 2068 "dhcp6_parser.yy" + case 573: +#line 1998 "dhcp6_parser.yy" { ctx.enter(ctx.NO_KEYWORD); } -#line 3335 "dhcp6_parser.cc" +#line 3254 "dhcp6_parser.cc" break; - case 593: // user_context: "user-context" $@88 ":" map_value -#line 2070 "dhcp6_parser.yy" + case 574: +#line 2000 "dhcp6_parser.yy" { ElementPtr parent = ctx.stack_.back(); ElementPtr user_context = yystack_[0].value.as < ElementPtr > (); @@ -3358,19 +3277,19 @@ namespace isc { namespace dhcp { parent->set("user-context", user_context); ctx.leave(); } -#line 3362 "dhcp6_parser.cc" +#line 3281 "dhcp6_parser.cc" break; - case 594: // $@89: %empty -#line 2093 "dhcp6_parser.yy" + case 575: +#line 2023 "dhcp6_parser.yy" { ctx.enter(ctx.NO_KEYWORD); } -#line 3370 "dhcp6_parser.cc" +#line 3289 "dhcp6_parser.cc" break; - case 595: // comment: "comment" $@89 ":" "constant string" -#line 2095 "dhcp6_parser.yy" + case 576: +#line 2025 "dhcp6_parser.yy" { ElementPtr parent = ctx.stack_.back(); ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location))); @@ -3395,11 +3314,11 @@ namespace isc { namespace dhcp { parent->set("user-context", user_context); ctx.leave(); } -#line 3399 "dhcp6_parser.cc" +#line 3318 "dhcp6_parser.cc" break; - case 596: // $@90: %empty -#line 2123 "dhcp6_parser.yy" + case 577: +#line 2053 "dhcp6_parser.yy" { ctx.unique("pd-pools", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3407,38 +3326,38 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.PD_POOLS); } -#line 3411 "dhcp6_parser.cc" +#line 3330 "dhcp6_parser.cc" break; - case 597: // pd_pools_list: "pd-pools" $@90 ":" "[" pd_pools_list_content "]" -#line 2129 "dhcp6_parser.yy" + case 578: +#line 2059 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3420 "dhcp6_parser.cc" +#line 3339 "dhcp6_parser.cc" break; - case 602: // not_empty_pd_pools_list: not_empty_pd_pools_list "," -#line 2142 "dhcp6_parser.yy" + case 583: +#line 2072 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3428 "dhcp6_parser.cc" +#line 3347 "dhcp6_parser.cc" break; - case 603: // $@91: %empty -#line 2147 "dhcp6_parser.yy" + case 584: +#line 2077 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3438 "dhcp6_parser.cc" +#line 3357 "dhcp6_parser.cc" break; - case 604: // pd_pool_entry: "{" $@91 pd_pool_params "}" -#line 2151 "dhcp6_parser.yy" + case 585: +#line 2081 "dhcp6_parser.yy" { // The prefix, prefix len and delegated len parameters are required. ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -3446,21 +3365,21 @@ namespace isc { namespace dhcp { ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 3450 "dhcp6_parser.cc" +#line 3369 "dhcp6_parser.cc" break; - case 605: // $@92: %empty -#line 2159 "dhcp6_parser.yy" + case 586: +#line 2089 "dhcp6_parser.yy" { // Parse the pd-pool list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3460 "dhcp6_parser.cc" +#line 3379 "dhcp6_parser.cc" break; - case 606: // sub_pd_pool: "{" $@92 pd_pool_params "}" -#line 2163 "dhcp6_parser.yy" + case 587: +#line 2093 "dhcp6_parser.yy" { // The prefix, prefix len and delegated len parameters are required. ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -3468,87 +3387,87 @@ namespace isc { namespace dhcp { ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 3472 "dhcp6_parser.cc" +#line 3391 "dhcp6_parser.cc" break; - case 609: // pd_pool_params: pd_pool_params "," -#line 2173 "dhcp6_parser.yy" + case 590: +#line 2103 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3480 "dhcp6_parser.cc" +#line 3399 "dhcp6_parser.cc" break; - case 621: // $@93: %empty -#line 2191 "dhcp6_parser.yy" + case 602: +#line 2121 "dhcp6_parser.yy" { ctx.unique("prefix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3489 "dhcp6_parser.cc" +#line 3408 "dhcp6_parser.cc" break; - case 622: // pd_prefix: "prefix" $@93 ":" "constant string" -#line 2194 "dhcp6_parser.yy" + case 603: +#line 2124 "dhcp6_parser.yy" { ElementPtr prf(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("prefix", prf); ctx.leave(); } -#line 3499 "dhcp6_parser.cc" +#line 3418 "dhcp6_parser.cc" break; - case 623: // pd_prefix_len: "prefix-len" ":" "integer" -#line 2200 "dhcp6_parser.yy" + case 604: +#line 2130 "dhcp6_parser.yy" { ctx.unique("prefix-len", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("prefix-len", prf); } -#line 3509 "dhcp6_parser.cc" +#line 3428 "dhcp6_parser.cc" break; - case 624: // $@94: %empty -#line 2206 "dhcp6_parser.yy" + case 605: +#line 2136 "dhcp6_parser.yy" { ctx.unique("excluded-prefix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3518 "dhcp6_parser.cc" +#line 3437 "dhcp6_parser.cc" break; - case 625: // excluded_prefix: "excluded-prefix" $@94 ":" "constant string" -#line 2209 "dhcp6_parser.yy" + case 606: +#line 2139 "dhcp6_parser.yy" { ElementPtr prf(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("excluded-prefix", prf); ctx.leave(); } -#line 3528 "dhcp6_parser.cc" +#line 3447 "dhcp6_parser.cc" break; - case 626: // excluded_prefix_len: "excluded-prefix-len" ":" "integer" -#line 2215 "dhcp6_parser.yy" + case 607: +#line 2145 "dhcp6_parser.yy" { ctx.unique("excluded-prefix-len", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("excluded-prefix-len", prf); } -#line 3538 "dhcp6_parser.cc" +#line 3457 "dhcp6_parser.cc" break; - case 627: // pd_delegated_len: "delegated-len" ":" "integer" -#line 2221 "dhcp6_parser.yy" + case 608: +#line 2151 "dhcp6_parser.yy" { ctx.unique("delegated-len", ctx.loc2pos(yystack_[2].location)); ElementPtr deleg(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("delegated-len", deleg); } -#line 3548 "dhcp6_parser.cc" +#line 3467 "dhcp6_parser.cc" break; - case 628: // $@95: %empty -#line 2230 "dhcp6_parser.yy" + case 609: +#line 2160 "dhcp6_parser.yy" { ctx.unique("reservations", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3556,74 +3475,74 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.RESERVATIONS); } -#line 3560 "dhcp6_parser.cc" +#line 3479 "dhcp6_parser.cc" break; - case 629: // reservations: "reservations" $@95 ":" "[" reservations_list "]" -#line 2236 "dhcp6_parser.yy" + case 610: +#line 2166 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3569 "dhcp6_parser.cc" +#line 3488 "dhcp6_parser.cc" break; - case 634: // not_empty_reservations_list: not_empty_reservations_list "," -#line 2247 "dhcp6_parser.yy" + case 615: +#line 2177 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3577 "dhcp6_parser.cc" +#line 3496 "dhcp6_parser.cc" break; - case 635: // $@96: %empty -#line 2252 "dhcp6_parser.yy" + case 616: +#line 2182 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3587 "dhcp6_parser.cc" +#line 3506 "dhcp6_parser.cc" break; - case 636: // reservation: "{" $@96 reservation_params "}" -#line 2256 "dhcp6_parser.yy" + case 617: +#line 2186 "dhcp6_parser.yy" { /// @todo: an identifier parameter is required. ctx.stack_.pop_back(); } -#line 3596 "dhcp6_parser.cc" +#line 3515 "dhcp6_parser.cc" break; - case 637: // $@97: %empty -#line 2261 "dhcp6_parser.yy" + case 618: +#line 2191 "dhcp6_parser.yy" { // Parse the reservations list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3606 "dhcp6_parser.cc" +#line 3525 "dhcp6_parser.cc" break; - case 638: // sub_reservation: "{" $@97 reservation_params "}" -#line 2265 "dhcp6_parser.yy" + case 619: +#line 2195 "dhcp6_parser.yy" { /// @todo: an identifier parameter is required. // parsing completed } -#line 3615 "dhcp6_parser.cc" +#line 3534 "dhcp6_parser.cc" break; - case 643: // not_empty_reservation_params: not_empty_reservation_params "," -#line 2276 "dhcp6_parser.yy" + case 624: +#line 2206 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3623 "dhcp6_parser.cc" +#line 3542 "dhcp6_parser.cc" break; - case 655: // $@98: %empty -#line 2295 "dhcp6_parser.yy" + case 636: +#line 2225 "dhcp6_parser.yy" { ctx.unique("ip-addresses", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3631,20 +3550,20 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.NO_KEYWORD); } -#line 3635 "dhcp6_parser.cc" +#line 3554 "dhcp6_parser.cc" break; - case 656: // ip_addresses: "ip-addresses" $@98 ":" list_strings -#line 2301 "dhcp6_parser.yy" + case 637: +#line 2231 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3644 "dhcp6_parser.cc" +#line 3563 "dhcp6_parser.cc" break; - case 657: // $@99: %empty -#line 2306 "dhcp6_parser.yy" + case 638: +#line 2236 "dhcp6_parser.yy" { ctx.unique("prefixes", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3652,96 +3571,96 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.NO_KEYWORD); } -#line 3656 "dhcp6_parser.cc" +#line 3575 "dhcp6_parser.cc" break; - case 658: // prefixes: "prefixes" $@99 ":" list_strings -#line 2312 "dhcp6_parser.yy" + case 639: +#line 2242 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3665 "dhcp6_parser.cc" +#line 3584 "dhcp6_parser.cc" break; - case 659: // $@100: %empty -#line 2317 "dhcp6_parser.yy" + case 640: +#line 2247 "dhcp6_parser.yy" { ctx.unique("duid", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3674 "dhcp6_parser.cc" +#line 3593 "dhcp6_parser.cc" break; - case 660: // duid: "duid" $@100 ":" "constant string" -#line 2320 "dhcp6_parser.yy" + case 641: +#line 2250 "dhcp6_parser.yy" { ElementPtr d(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("duid", d); ctx.leave(); } -#line 3684 "dhcp6_parser.cc" +#line 3603 "dhcp6_parser.cc" break; - case 661: // $@101: %empty -#line 2326 "dhcp6_parser.yy" + case 642: +#line 2256 "dhcp6_parser.yy" { ctx.unique("hw-address", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3693 "dhcp6_parser.cc" +#line 3612 "dhcp6_parser.cc" break; - case 662: // hw_address: "hw-address" $@101 ":" "constant string" -#line 2329 "dhcp6_parser.yy" + case 643: +#line 2259 "dhcp6_parser.yy" { ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hw-address", hw); ctx.leave(); } -#line 3703 "dhcp6_parser.cc" +#line 3622 "dhcp6_parser.cc" break; - case 663: // $@102: %empty -#line 2335 "dhcp6_parser.yy" + case 644: +#line 2265 "dhcp6_parser.yy" { ctx.unique("hostname", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3712 "dhcp6_parser.cc" +#line 3631 "dhcp6_parser.cc" break; - case 664: // hostname: "hostname" $@102 ":" "constant string" -#line 2338 "dhcp6_parser.yy" + case 645: +#line 2268 "dhcp6_parser.yy" { ElementPtr host(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname", host); ctx.leave(); } -#line 3722 "dhcp6_parser.cc" +#line 3641 "dhcp6_parser.cc" break; - case 665: // $@103: %empty -#line 2344 "dhcp6_parser.yy" + case 646: +#line 2274 "dhcp6_parser.yy" { ctx.unique("flex-id", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3731 "dhcp6_parser.cc" +#line 3650 "dhcp6_parser.cc" break; - case 666: // flex_id_value: "flex-id" $@103 ":" "constant string" -#line 2347 "dhcp6_parser.yy" + case 647: +#line 2277 "dhcp6_parser.yy" { ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("flex-id", hw); ctx.leave(); } -#line 3741 "dhcp6_parser.cc" +#line 3660 "dhcp6_parser.cc" break; - case 667: // $@104: %empty -#line 2353 "dhcp6_parser.yy" + case 648: +#line 2283 "dhcp6_parser.yy" { ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location)); ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3749,20 +3668,20 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(c); ctx.enter(ctx.NO_KEYWORD); } -#line 3753 "dhcp6_parser.cc" +#line 3672 "dhcp6_parser.cc" break; - case 668: // reservation_client_classes: "client-classes" $@104 ":" list_strings -#line 2359 "dhcp6_parser.yy" + case 649: +#line 2289 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3762 "dhcp6_parser.cc" +#line 3681 "dhcp6_parser.cc" break; - case 669: // $@105: %empty -#line 2367 "dhcp6_parser.yy" + case 650: +#line 2297 "dhcp6_parser.yy" { ctx.unique("relay", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -3770,39 +3689,39 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.RELAY); } -#line 3774 "dhcp6_parser.cc" +#line 3693 "dhcp6_parser.cc" break; - case 670: // relay: "relay" $@105 ":" "{" relay_map "}" -#line 2373 "dhcp6_parser.yy" + case 651: +#line 2303 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3783 "dhcp6_parser.cc" +#line 3702 "dhcp6_parser.cc" break; - case 673: // $@106: %empty -#line 2382 "dhcp6_parser.yy" + case 654: +#line 2312 "dhcp6_parser.yy" { ctx.unique("ip-address", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3792 "dhcp6_parser.cc" +#line 3711 "dhcp6_parser.cc" break; - case 674: // ip_address: "ip-address" $@106 ":" "constant string" -#line 2385 "dhcp6_parser.yy" + case 655: +#line 2315 "dhcp6_parser.yy" { ElementPtr addr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ip-address", addr); ctx.leave(); } -#line 3802 "dhcp6_parser.cc" +#line 3721 "dhcp6_parser.cc" break; - case 675: // $@107: %empty -#line 2394 "dhcp6_parser.yy" + case 656: +#line 2324 "dhcp6_parser.yy" { ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3810,85 +3729,85 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.CLIENT_CLASSES); } -#line 3814 "dhcp6_parser.cc" +#line 3733 "dhcp6_parser.cc" break; - case 676: // client_classes: "client-classes" $@107 ":" "[" client_classes_list "]" -#line 2400 "dhcp6_parser.yy" + case 657: +#line 2330 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3823 "dhcp6_parser.cc" +#line 3742 "dhcp6_parser.cc" break; - case 679: // client_classes_list: client_classes_list "," -#line 2407 "dhcp6_parser.yy" + case 660: +#line 2337 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3831 "dhcp6_parser.cc" +#line 3750 "dhcp6_parser.cc" break; - case 680: // $@108: %empty -#line 2412 "dhcp6_parser.yy" + case 661: +#line 2342 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3841 "dhcp6_parser.cc" +#line 3760 "dhcp6_parser.cc" break; - case 681: // client_class_entry: "{" $@108 client_class_params "}" -#line 2416 "dhcp6_parser.yy" + case 662: +#line 2346 "dhcp6_parser.yy" { // The name client class parameter is required. ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 3851 "dhcp6_parser.cc" +#line 3770 "dhcp6_parser.cc" break; - case 686: // not_empty_client_class_params: not_empty_client_class_params "," -#line 2428 "dhcp6_parser.yy" + case 667: +#line 2358 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3859 "dhcp6_parser.cc" +#line 3778 "dhcp6_parser.cc" break; - case 701: // $@109: %empty -#line 2450 "dhcp6_parser.yy" + case 682: +#line 2380 "dhcp6_parser.yy" { ctx.unique("test", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3868 "dhcp6_parser.cc" +#line 3787 "dhcp6_parser.cc" break; - case 702: // client_class_test: "test" $@109 ":" "constant string" -#line 2453 "dhcp6_parser.yy" + case 683: +#line 2383 "dhcp6_parser.yy" { ElementPtr test(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("test", test); ctx.leave(); } -#line 3878 "dhcp6_parser.cc" +#line 3797 "dhcp6_parser.cc" break; - case 703: // only_if_required: "only-if-required" ":" "boolean" -#line 2459 "dhcp6_parser.yy" + case 684: +#line 2389 "dhcp6_parser.yy" { ctx.unique("only-if-required", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("only-if-required", b); } -#line 3888 "dhcp6_parser.cc" +#line 3807 "dhcp6_parser.cc" break; - case 704: // $@110: %empty -#line 2468 "dhcp6_parser.yy" + case 685: +#line 2398 "dhcp6_parser.yy" { ctx.unique("server-id", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -3896,125 +3815,125 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.SERVER_ID); } -#line 3900 "dhcp6_parser.cc" +#line 3819 "dhcp6_parser.cc" break; - case 705: // server_id: "server-id" $@110 ":" "{" server_id_params "}" -#line 2474 "dhcp6_parser.yy" + case 686: +#line 2404 "dhcp6_parser.yy" { // The type parameter is required. ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } -#line 3911 "dhcp6_parser.cc" +#line 3830 "dhcp6_parser.cc" break; - case 708: // server_id_params: server_id_params "," -#line 2483 "dhcp6_parser.yy" + case 689: +#line 2413 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3919 "dhcp6_parser.cc" +#line 3838 "dhcp6_parser.cc" break; - case 718: // $@111: %empty -#line 2499 "dhcp6_parser.yy" + case 699: +#line 2429 "dhcp6_parser.yy" { ctx.unique("type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.DUID_TYPE); } -#line 3928 "dhcp6_parser.cc" +#line 3847 "dhcp6_parser.cc" break; - case 719: // server_id_type: "type" $@111 ":" duid_type -#line 2502 "dhcp6_parser.yy" + case 700: +#line 2432 "dhcp6_parser.yy" { ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 3937 "dhcp6_parser.cc" +#line 3856 "dhcp6_parser.cc" break; - case 720: // duid_type: "LLT" -#line 2507 "dhcp6_parser.yy" + case 701: +#line 2437 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); } -#line 3943 "dhcp6_parser.cc" +#line 3862 "dhcp6_parser.cc" break; - case 721: // duid_type: "EN" -#line 2508 "dhcp6_parser.yy" + case 702: +#line 2438 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); } -#line 3949 "dhcp6_parser.cc" +#line 3868 "dhcp6_parser.cc" break; - case 722: // duid_type: "LL" -#line 2509 "dhcp6_parser.yy" + case 703: +#line 2439 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); } -#line 3955 "dhcp6_parser.cc" +#line 3874 "dhcp6_parser.cc" break; - case 723: // htype: "htype" ":" "integer" -#line 2512 "dhcp6_parser.yy" + case 704: +#line 2442 "dhcp6_parser.yy" { ctx.unique("htype", ctx.loc2pos(yystack_[2].location)); ElementPtr htype(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("htype", htype); } -#line 3965 "dhcp6_parser.cc" +#line 3884 "dhcp6_parser.cc" break; - case 724: // $@112: %empty -#line 2518 "dhcp6_parser.yy" + case 705: +#line 2448 "dhcp6_parser.yy" { ctx.unique("identifier", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3974 "dhcp6_parser.cc" +#line 3893 "dhcp6_parser.cc" break; - case 725: // identifier: "identifier" $@112 ":" "constant string" -#line 2521 "dhcp6_parser.yy" + case 706: +#line 2451 "dhcp6_parser.yy" { ElementPtr id(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("identifier", id); ctx.leave(); } -#line 3984 "dhcp6_parser.cc" +#line 3903 "dhcp6_parser.cc" break; - case 726: // time: "time" ":" "integer" -#line 2527 "dhcp6_parser.yy" + case 707: +#line 2457 "dhcp6_parser.yy" { ctx.unique("time", ctx.loc2pos(yystack_[2].location)); ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("time", time); } -#line 3994 "dhcp6_parser.cc" +#line 3913 "dhcp6_parser.cc" break; - case 727: // enterprise_id: "enterprise-id" ":" "integer" -#line 2533 "dhcp6_parser.yy" + case 708: +#line 2463 "dhcp6_parser.yy" { ctx.unique("enterprise-id", ctx.loc2pos(yystack_[2].location)); ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enterprise-id", time); } -#line 4004 "dhcp6_parser.cc" +#line 3923 "dhcp6_parser.cc" break; - case 728: // dhcp4o6_port: "dhcp4o6-port" ":" "integer" -#line 2541 "dhcp6_parser.yy" + case 709: +#line 2471 "dhcp6_parser.yy" { ctx.unique("dhcp4o6-port", ctx.loc2pos(yystack_[2].location)); ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("dhcp4o6-port", time); } -#line 4014 "dhcp6_parser.cc" +#line 3933 "dhcp6_parser.cc" break; - case 729: // $@113: %empty -#line 2549 "dhcp6_parser.yy" + case 710: +#line 2479 "dhcp6_parser.yy" { ctx.unique("control-socket", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -4022,66 +3941,66 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.CONTROL_SOCKET); } -#line 4026 "dhcp6_parser.cc" +#line 3945 "dhcp6_parser.cc" break; - case 730: // control_socket: "control-socket" $@113 ":" "{" control_socket_params "}" -#line 2555 "dhcp6_parser.yy" + case 711: +#line 2485 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4035 "dhcp6_parser.cc" +#line 3954 "dhcp6_parser.cc" break; - case 733: // control_socket_params: control_socket_params "," -#line 2562 "dhcp6_parser.yy" + case 714: +#line 2492 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4043 "dhcp6_parser.cc" +#line 3962 "dhcp6_parser.cc" break; - case 739: // $@114: %empty -#line 2574 "dhcp6_parser.yy" + case 720: +#line 2504 "dhcp6_parser.yy" { ctx.unique("socket-type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4052 "dhcp6_parser.cc" +#line 3971 "dhcp6_parser.cc" break; - case 740: // socket_type: "socket-type" $@114 ":" "constant string" -#line 2577 "dhcp6_parser.yy" + case 721: +#line 2507 "dhcp6_parser.yy" { ElementPtr stype(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("socket-type", stype); ctx.leave(); } -#line 4062 "dhcp6_parser.cc" +#line 3981 "dhcp6_parser.cc" break; - case 741: // $@115: %empty -#line 2583 "dhcp6_parser.yy" + case 722: +#line 2513 "dhcp6_parser.yy" { ctx.unique("socket-name", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4071 "dhcp6_parser.cc" +#line 3990 "dhcp6_parser.cc" break; - case 742: // socket_name: "socket-name" $@115 ":" "constant string" -#line 2586 "dhcp6_parser.yy" + case 723: +#line 2516 "dhcp6_parser.yy" { ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("socket-name", name); ctx.leave(); } -#line 4081 "dhcp6_parser.cc" +#line 4000 "dhcp6_parser.cc" break; - case 743: // $@116: %empty -#line 2595 "dhcp6_parser.yy" + case 724: +#line 2525 "dhcp6_parser.yy" { ctx.unique("dhcp-queue-control", ctx.loc2pos(yystack_[0].location)); ElementPtr qc(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -4089,87 +4008,87 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(qc); ctx.enter(ctx.DHCP_QUEUE_CONTROL); } -#line 4093 "dhcp6_parser.cc" +#line 4012 "dhcp6_parser.cc" break; - case 744: // dhcp_queue_control: "dhcp-queue-control" $@116 ":" "{" queue_control_params "}" -#line 2601 "dhcp6_parser.yy" + case 725: +#line 2531 "dhcp6_parser.yy" { // The enable queue parameter is required. ctx.require("enable-queue", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } -#line 4104 "dhcp6_parser.cc" +#line 4023 "dhcp6_parser.cc" break; - case 747: // queue_control_params: queue_control_params "," -#line 2610 "dhcp6_parser.yy" + case 728: +#line 2540 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4112 "dhcp6_parser.cc" +#line 4031 "dhcp6_parser.cc" break; - case 754: // enable_queue: "enable-queue" ":" "boolean" -#line 2623 "dhcp6_parser.yy" + case 735: +#line 2553 "dhcp6_parser.yy" { ctx.unique("enable-queue", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enable-queue", b); } -#line 4122 "dhcp6_parser.cc" +#line 4041 "dhcp6_parser.cc" break; - case 755: // $@117: %empty -#line 2629 "dhcp6_parser.yy" + case 736: +#line 2559 "dhcp6_parser.yy" { ctx.unique("queue-type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4131 "dhcp6_parser.cc" +#line 4050 "dhcp6_parser.cc" break; - case 756: // queue_type: "queue-type" $@117 ":" "constant string" -#line 2632 "dhcp6_parser.yy" + case 737: +#line 2562 "dhcp6_parser.yy" { ElementPtr qt(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("queue-type", qt); ctx.leave(); } -#line 4141 "dhcp6_parser.cc" +#line 4060 "dhcp6_parser.cc" break; - case 757: // capacity: "capacity" ":" "integer" -#line 2638 "dhcp6_parser.yy" + case 738: +#line 2568 "dhcp6_parser.yy" { ctx.unique("capacity", ctx.loc2pos(yystack_[2].location)); ElementPtr c(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("capacity", c); } -#line 4151 "dhcp6_parser.cc" +#line 4070 "dhcp6_parser.cc" break; - case 758: // $@118: %empty -#line 2644 "dhcp6_parser.yy" + case 739: +#line 2574 "dhcp6_parser.yy" { ctx.unique(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4160 "dhcp6_parser.cc" +#line 4079 "dhcp6_parser.cc" break; - case 759: // arbitrary_map_entry: "constant string" $@118 ":" value -#line 2647 "dhcp6_parser.yy" + case 740: +#line 2577 "dhcp6_parser.yy" { ctx.stack_.back()->set(yystack_[3].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 4169 "dhcp6_parser.cc" +#line 4088 "dhcp6_parser.cc" break; - case 760: // $@119: %empty -#line 2654 "dhcp6_parser.yy" + case 741: +#line 2584 "dhcp6_parser.yy" { ctx.unique("dhcp-ddns", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -4177,291 +4096,291 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.DHCP_DDNS); } -#line 4181 "dhcp6_parser.cc" +#line 4100 "dhcp6_parser.cc" break; - case 761: // dhcp_ddns: "dhcp-ddns" $@119 ":" "{" dhcp_ddns_params "}" -#line 2660 "dhcp6_parser.yy" + case 742: +#line 2590 "dhcp6_parser.yy" { // The enable updates DHCP DDNS parameter is required. ctx.require("enable-updates", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } -#line 4192 "dhcp6_parser.cc" +#line 4111 "dhcp6_parser.cc" break; - case 762: // $@120: %empty -#line 2667 "dhcp6_parser.yy" + case 743: +#line 2597 "dhcp6_parser.yy" { // Parse the dhcp-ddns map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 4202 "dhcp6_parser.cc" +#line 4121 "dhcp6_parser.cc" break; - case 763: // sub_dhcp_ddns: "{" $@120 dhcp_ddns_params "}" -#line 2671 "dhcp6_parser.yy" + case 744: +#line 2601 "dhcp6_parser.yy" { // The enable updates DHCP DDNS parameter is required. ctx.require("enable-updates", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 4212 "dhcp6_parser.cc" +#line 4131 "dhcp6_parser.cc" break; - case 766: // dhcp_ddns_params: dhcp_ddns_params "," -#line 2679 "dhcp6_parser.yy" + case 747: +#line 2609 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4220 "dhcp6_parser.cc" +#line 4139 "dhcp6_parser.cc" break; - case 785: // enable_updates: "enable-updates" ":" "boolean" -#line 2704 "dhcp6_parser.yy" + case 766: +#line 2634 "dhcp6_parser.yy" { ctx.unique("enable-updates", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enable-updates", b); } -#line 4230 "dhcp6_parser.cc" +#line 4149 "dhcp6_parser.cc" break; - case 786: // $@121: %empty -#line 2711 "dhcp6_parser.yy" + case 767: +#line 2641 "dhcp6_parser.yy" { ctx.unique("qualifying-suffix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4239 "dhcp6_parser.cc" +#line 4158 "dhcp6_parser.cc" break; - case 787: // dep_qualifying_suffix: "qualifying-suffix" $@121 ":" "constant string" -#line 2714 "dhcp6_parser.yy" + case 768: +#line 2644 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("qualifying-suffix", s); ctx.leave(); } -#line 4249 "dhcp6_parser.cc" +#line 4168 "dhcp6_parser.cc" break; - case 788: // $@122: %empty -#line 2720 "dhcp6_parser.yy" + case 769: +#line 2650 "dhcp6_parser.yy" { ctx.unique("server-ip", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4258 "dhcp6_parser.cc" +#line 4177 "dhcp6_parser.cc" break; - case 789: // server_ip: "server-ip" $@122 ":" "constant string" -#line 2723 "dhcp6_parser.yy" + case 770: +#line 2653 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-ip", s); ctx.leave(); } -#line 4268 "dhcp6_parser.cc" +#line 4187 "dhcp6_parser.cc" break; - case 790: // server_port: "server-port" ":" "integer" -#line 2729 "dhcp6_parser.yy" + case 771: +#line 2659 "dhcp6_parser.yy" { ctx.unique("server-port", ctx.loc2pos(yystack_[2].location)); ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-port", i); } -#line 4278 "dhcp6_parser.cc" +#line 4197 "dhcp6_parser.cc" break; - case 791: // $@123: %empty -#line 2735 "dhcp6_parser.yy" + case 772: +#line 2665 "dhcp6_parser.yy" { ctx.unique("sender-ip", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4287 "dhcp6_parser.cc" +#line 4206 "dhcp6_parser.cc" break; - case 792: // sender_ip: "sender-ip" $@123 ":" "constant string" -#line 2738 "dhcp6_parser.yy" + case 773: +#line 2668 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("sender-ip", s); ctx.leave(); } -#line 4297 "dhcp6_parser.cc" +#line 4216 "dhcp6_parser.cc" break; - case 793: // sender_port: "sender-port" ":" "integer" -#line 2744 "dhcp6_parser.yy" + case 774: +#line 2674 "dhcp6_parser.yy" { ctx.unique("sender-port", ctx.loc2pos(yystack_[2].location)); ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("sender-port", i); } -#line 4307 "dhcp6_parser.cc" +#line 4226 "dhcp6_parser.cc" break; - case 794: // max_queue_size: "max-queue-size" ":" "integer" -#line 2750 "dhcp6_parser.yy" + case 775: +#line 2680 "dhcp6_parser.yy" { ctx.unique("max-queue-size", ctx.loc2pos(yystack_[2].location)); ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-queue-size", i); } -#line 4317 "dhcp6_parser.cc" +#line 4236 "dhcp6_parser.cc" break; - case 795: // $@124: %empty -#line 2756 "dhcp6_parser.yy" + case 776: +#line 2686 "dhcp6_parser.yy" { ctx.unique("ncr-protocol", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NCR_PROTOCOL); } -#line 4326 "dhcp6_parser.cc" +#line 4245 "dhcp6_parser.cc" break; - case 796: // ncr_protocol: "ncr-protocol" $@124 ":" ncr_protocol_value -#line 2759 "dhcp6_parser.yy" + case 777: +#line 2689 "dhcp6_parser.yy" { ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 4335 "dhcp6_parser.cc" +#line 4254 "dhcp6_parser.cc" break; - case 797: // ncr_protocol_value: "UDP" -#line 2765 "dhcp6_parser.yy" + case 778: +#line 2695 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); } -#line 4341 "dhcp6_parser.cc" +#line 4260 "dhcp6_parser.cc" break; - case 798: // ncr_protocol_value: "TCP" -#line 2766 "dhcp6_parser.yy" + case 779: +#line 2696 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); } -#line 4347 "dhcp6_parser.cc" +#line 4266 "dhcp6_parser.cc" break; - case 799: // $@125: %empty -#line 2769 "dhcp6_parser.yy" + case 780: +#line 2699 "dhcp6_parser.yy" { ctx.unique("ncr-format", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NCR_FORMAT); } -#line 4356 "dhcp6_parser.cc" +#line 4275 "dhcp6_parser.cc" break; - case 800: // ncr_format: "ncr-format" $@125 ":" "JSON" -#line 2772 "dhcp6_parser.yy" + case 781: +#line 2702 "dhcp6_parser.yy" { ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ncr-format", json); ctx.leave(); } -#line 4366 "dhcp6_parser.cc" +#line 4285 "dhcp6_parser.cc" break; - case 801: // dep_override_no_update: "override-no-update" ":" "boolean" -#line 2779 "dhcp6_parser.yy" + case 782: +#line 2709 "dhcp6_parser.yy" { ctx.unique("override-no-update", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("override-no-update", b); } -#line 4376 "dhcp6_parser.cc" +#line 4295 "dhcp6_parser.cc" break; - case 802: // dep_override_client_update: "override-client-update" ":" "boolean" -#line 2786 "dhcp6_parser.yy" + case 783: +#line 2716 "dhcp6_parser.yy" { ctx.unique("override-client-update", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("override-client-update", b); } -#line 4386 "dhcp6_parser.cc" +#line 4305 "dhcp6_parser.cc" break; - case 803: // $@126: %empty -#line 2793 "dhcp6_parser.yy" + case 784: +#line 2723 "dhcp6_parser.yy" { ctx.unique("replace-client-name", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.REPLACE_CLIENT_NAME); } -#line 4395 "dhcp6_parser.cc" +#line 4314 "dhcp6_parser.cc" break; - case 804: // dep_replace_client_name: "replace-client-name" $@126 ":" ddns_replace_client_name_value -#line 2796 "dhcp6_parser.yy" + case 785: +#line 2726 "dhcp6_parser.yy" { ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 4404 "dhcp6_parser.cc" +#line 4323 "dhcp6_parser.cc" break; - case 805: // $@127: %empty -#line 2802 "dhcp6_parser.yy" + case 786: +#line 2732 "dhcp6_parser.yy" { ctx.unique("generated-prefix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4413 "dhcp6_parser.cc" +#line 4332 "dhcp6_parser.cc" break; - case 806: // dep_generated_prefix: "generated-prefix" $@127 ":" "constant string" -#line 2805 "dhcp6_parser.yy" + case 787: +#line 2735 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("generated-prefix", s); ctx.leave(); } -#line 4423 "dhcp6_parser.cc" +#line 4342 "dhcp6_parser.cc" break; - case 807: // $@128: %empty -#line 2812 "dhcp6_parser.yy" + case 788: +#line 2742 "dhcp6_parser.yy" { ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4432 "dhcp6_parser.cc" +#line 4351 "dhcp6_parser.cc" break; - case 808: // dep_hostname_char_set: "hostname-char-set" $@128 ":" "constant string" -#line 2815 "dhcp6_parser.yy" + case 789: +#line 2745 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname-char-set", s); ctx.leave(); } -#line 4442 "dhcp6_parser.cc" +#line 4361 "dhcp6_parser.cc" break; - case 809: // $@129: %empty -#line 2822 "dhcp6_parser.yy" + case 790: +#line 2752 "dhcp6_parser.yy" { ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4451 "dhcp6_parser.cc" +#line 4370 "dhcp6_parser.cc" break; - case 810: // dep_hostname_char_replacement: "hostname-char-replacement" $@129 ":" "constant string" -#line 2825 "dhcp6_parser.yy" + case 791: +#line 2755 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname-char-replacement", s); ctx.leave(); } -#line 4461 "dhcp6_parser.cc" +#line 4380 "dhcp6_parser.cc" break; - case 811: // $@130: %empty -#line 2834 "dhcp6_parser.yy" + case 792: +#line 2764 "dhcp6_parser.yy" { ctx.unique("config-control", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -4469,48 +4388,48 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(i); ctx.enter(ctx.CONFIG_CONTROL); } -#line 4473 "dhcp6_parser.cc" +#line 4392 "dhcp6_parser.cc" break; - case 812: // config_control: "config-control" $@130 ":" "{" config_control_params "}" -#line 2840 "dhcp6_parser.yy" + case 793: +#line 2770 "dhcp6_parser.yy" { // No config control params are required ctx.stack_.pop_back(); ctx.leave(); } -#line 4483 "dhcp6_parser.cc" +#line 4402 "dhcp6_parser.cc" break; - case 813: // $@131: %empty -#line 2846 "dhcp6_parser.yy" + case 794: +#line 2776 "dhcp6_parser.yy" { // Parse the config-control map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 4493 "dhcp6_parser.cc" +#line 4412 "dhcp6_parser.cc" break; - case 814: // sub_config_control: "{" $@131 config_control_params "}" -#line 2850 "dhcp6_parser.yy" + case 795: +#line 2780 "dhcp6_parser.yy" { // No config_control params are required // parsing completed } -#line 4502 "dhcp6_parser.cc" +#line 4421 "dhcp6_parser.cc" break; - case 817: // config_control_params: config_control_params "," -#line 2858 "dhcp6_parser.yy" + case 798: +#line 2788 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4510 "dhcp6_parser.cc" +#line 4429 "dhcp6_parser.cc" break; - case 820: // $@132: %empty -#line 2868 "dhcp6_parser.yy" + case 801: +#line 2798 "dhcp6_parser.yy" { ctx.unique("config-databases", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -4518,30 +4437,30 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.CONFIG_DATABASE); } -#line 4522 "dhcp6_parser.cc" +#line 4441 "dhcp6_parser.cc" break; - case 821: // config_databases: "config-databases" $@132 ":" "[" database_list "]" -#line 2874 "dhcp6_parser.yy" + case 802: +#line 2804 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4531 "dhcp6_parser.cc" +#line 4450 "dhcp6_parser.cc" break; - case 822: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer" -#line 2879 "dhcp6_parser.yy" + case 803: +#line 2809 "dhcp6_parser.yy" { ctx.unique("config-fetch-wait-time", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("config-fetch-wait-time", value); } -#line 4541 "dhcp6_parser.cc" +#line 4460 "dhcp6_parser.cc" break; - case 823: // $@133: %empty -#line 2887 "dhcp6_parser.yy" + case 804: +#line 2817 "dhcp6_parser.yy" { ctx.unique("loggers", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -4549,83 +4468,83 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.LOGGERS); } -#line 4553 "dhcp6_parser.cc" +#line 4472 "dhcp6_parser.cc" break; - case 824: // loggers: "loggers" $@133 ":" "[" loggers_entries "]" -#line 2893 "dhcp6_parser.yy" + case 805: +#line 2823 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4562 "dhcp6_parser.cc" +#line 4481 "dhcp6_parser.cc" break; - case 827: // loggers_entries: loggers_entries "," -#line 2902 "dhcp6_parser.yy" + case 808: +#line 2832 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4570 "dhcp6_parser.cc" +#line 4489 "dhcp6_parser.cc" break; - case 828: // $@134: %empty -#line 2908 "dhcp6_parser.yy" + case 809: +#line 2838 "dhcp6_parser.yy" { ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(l); ctx.stack_.push_back(l); } -#line 4580 "dhcp6_parser.cc" +#line 4499 "dhcp6_parser.cc" break; - case 829: // logger_entry: "{" $@134 logger_params "}" -#line 2912 "dhcp6_parser.yy" + case 810: +#line 2842 "dhcp6_parser.yy" { ctx.stack_.pop_back(); } -#line 4588 "dhcp6_parser.cc" +#line 4507 "dhcp6_parser.cc" break; - case 832: // logger_params: logger_params "," -#line 2918 "dhcp6_parser.yy" + case 813: +#line 2848 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4596 "dhcp6_parser.cc" +#line 4515 "dhcp6_parser.cc" break; - case 840: // debuglevel: "debuglevel" ":" "integer" -#line 2932 "dhcp6_parser.yy" + case 821: +#line 2862 "dhcp6_parser.yy" { ctx.unique("debuglevel", ctx.loc2pos(yystack_[2].location)); ElementPtr dl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("debuglevel", dl); } -#line 4606 "dhcp6_parser.cc" +#line 4525 "dhcp6_parser.cc" break; - case 841: // $@135: %empty -#line 2938 "dhcp6_parser.yy" + case 822: +#line 2868 "dhcp6_parser.yy" { ctx.unique("severity", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4615 "dhcp6_parser.cc" +#line 4534 "dhcp6_parser.cc" break; - case 842: // severity: "severity" $@135 ":" "constant string" -#line 2941 "dhcp6_parser.yy" + case 823: +#line 2871 "dhcp6_parser.yy" { ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("severity", sev); ctx.leave(); } -#line 4625 "dhcp6_parser.cc" +#line 4544 "dhcp6_parser.cc" break; - case 843: // $@136: %empty -#line 2947 "dhcp6_parser.yy" + case 824: +#line 2877 "dhcp6_parser.yy" { ctx.unique("output_options", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -4633,122 +4552,122 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.OUTPUT_OPTIONS); } -#line 4637 "dhcp6_parser.cc" +#line 4556 "dhcp6_parser.cc" break; - case 844: // output_options_list: "output_options" $@136 ":" "[" output_options_list_content "]" -#line 2953 "dhcp6_parser.yy" + case 825: +#line 2883 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4646 "dhcp6_parser.cc" +#line 4565 "dhcp6_parser.cc" break; - case 847: // output_options_list_content: output_options_list_content "," -#line 2960 "dhcp6_parser.yy" + case 828: +#line 2890 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4654 "dhcp6_parser.cc" +#line 4573 "dhcp6_parser.cc" break; - case 848: // $@137: %empty -#line 2965 "dhcp6_parser.yy" + case 829: +#line 2895 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 4664 "dhcp6_parser.cc" +#line 4583 "dhcp6_parser.cc" break; - case 849: // output_entry: "{" $@137 output_params_list "}" -#line 2969 "dhcp6_parser.yy" + case 830: +#line 2899 "dhcp6_parser.yy" { ctx.stack_.pop_back(); } -#line 4672 "dhcp6_parser.cc" +#line 4591 "dhcp6_parser.cc" break; - case 852: // output_params_list: output_params_list "," -#line 2975 "dhcp6_parser.yy" + case 833: +#line 2905 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4680 "dhcp6_parser.cc" +#line 4599 "dhcp6_parser.cc" break; - case 858: // $@138: %empty -#line 2987 "dhcp6_parser.yy" + case 839: +#line 2917 "dhcp6_parser.yy" { ctx.unique("output", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4689 "dhcp6_parser.cc" +#line 4608 "dhcp6_parser.cc" break; - case 859: // output: "output" $@138 ":" "constant string" -#line 2990 "dhcp6_parser.yy" + case 840: +#line 2920 "dhcp6_parser.yy" { ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("output", sev); ctx.leave(); } -#line 4699 "dhcp6_parser.cc" +#line 4618 "dhcp6_parser.cc" break; - case 860: // flush: "flush" ":" "boolean" -#line 2996 "dhcp6_parser.yy" + case 841: +#line 2926 "dhcp6_parser.yy" { ctx.unique("flush", ctx.loc2pos(yystack_[2].location)); ElementPtr flush(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("flush", flush); } -#line 4709 "dhcp6_parser.cc" +#line 4628 "dhcp6_parser.cc" break; - case 861: // maxsize: "maxsize" ":" "integer" -#line 3002 "dhcp6_parser.yy" + case 842: +#line 2932 "dhcp6_parser.yy" { ctx.unique("maxsize", ctx.loc2pos(yystack_[2].location)); ElementPtr maxsize(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("maxsize", maxsize); } -#line 4719 "dhcp6_parser.cc" +#line 4638 "dhcp6_parser.cc" break; - case 862: // maxver: "maxver" ":" "integer" -#line 3008 "dhcp6_parser.yy" + case 843: +#line 2938 "dhcp6_parser.yy" { ctx.unique("maxver", ctx.loc2pos(yystack_[2].location)); ElementPtr maxver(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("maxver", maxver); } -#line 4729 "dhcp6_parser.cc" +#line 4648 "dhcp6_parser.cc" break; - case 863: // $@139: %empty -#line 3014 "dhcp6_parser.yy" + case 844: +#line 2944 "dhcp6_parser.yy" { ctx.unique("pattern", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4738 "dhcp6_parser.cc" +#line 4657 "dhcp6_parser.cc" break; - case 864: // pattern: "pattern" $@139 ":" "constant string" -#line 3017 "dhcp6_parser.yy" + case 845: +#line 2947 "dhcp6_parser.yy" { ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pattern", sev); ctx.leave(); } -#line 4748 "dhcp6_parser.cc" +#line 4667 "dhcp6_parser.cc" break; - case 865: // $@140: %empty -#line 3023 "dhcp6_parser.yy" + case 846: +#line 2953 "dhcp6_parser.yy" { ctx.unique("compatibility", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -4756,38 +4675,38 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(i); ctx.enter(ctx.COMPATIBILITY); } -#line 4760 "dhcp6_parser.cc" +#line 4679 "dhcp6_parser.cc" break; - case 866: // compatibility: "compatibility" $@140 ":" "{" compatibility_params "}" -#line 3029 "dhcp6_parser.yy" + case 847: +#line 2959 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4769 "dhcp6_parser.cc" +#line 4688 "dhcp6_parser.cc" break; - case 869: // compatibility_params: compatibility_params "," -#line 3036 "dhcp6_parser.yy" + case 850: +#line 2966 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4777 "dhcp6_parser.cc" +#line 4696 "dhcp6_parser.cc" break; - case 872: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean" -#line 3045 "dhcp6_parser.yy" + case 853: +#line 2975 "dhcp6_parser.yy" { ctx.unique("lenient-option-parsing", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("lenient-option-parsing", b); } -#line 4787 "dhcp6_parser.cc" +#line 4706 "dhcp6_parser.cc" break; -#line 4791 "dhcp6_parser.cc" +#line 4710 "dhcp6_parser.cc" default: break; @@ -4804,6 +4723,7 @@ namespace isc { namespace dhcp { YY_SYMBOL_PRINT ("-> $$ =", yylhs); yypop_ (yylen); yylen = 0; + YY_STACK_PRINT (); // Shift the result of the reduction. yypush_ (YY_NULLPTR, YY_MOVE (yylhs)); @@ -4819,9 +4739,7 @@ namespace isc { namespace dhcp { if (!yyerrstatus_) { ++yynerrs_; - context yyctx (*this, yyla); - std::string msg = yysyntax_error_ (yyctx); - error (yyla.location, YY_MOVE (msg)); + error (yyla.location, yysyntax_error_ (yystack_[0].state, yyla)); } @@ -4832,7 +4750,7 @@ namespace isc { namespace dhcp { error, discard it. */ // Return failure if at end of input. - if (yyla.kind () == symbol_kind::S_YYEOF) + if (yyla.type_get () == yyeof_) YYABORT; else if (!yyla.empty ()) { @@ -4858,7 +4776,6 @@ namespace isc { namespace dhcp { this YYERROR. */ yypop_ (yylen); yylen = 0; - YY_STACK_PRINT (); goto yyerrlab1; @@ -4867,33 +4784,31 @@ namespace isc { namespace dhcp { `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus_ = 3; // Each real token shifted decrements this. - // Pop stack until we find a state that shifts the error token. - for (;;) - { - yyn = yypact_[+yystack_[0].state]; - if (!yy_pact_value_is_default_ (yyn)) - { - yyn += symbol_kind::S_YYerror; - if (0 <= yyn && yyn <= yylast_ - && yycheck_[yyn] == symbol_kind::S_YYerror) - { - yyn = yytable_[yyn]; - if (0 < yyn) - break; - } - } - - // Pop the current state because it cannot handle the error token. - if (yystack_.size () == 1) - YYABORT; - - yyerror_range[1].location = yystack_[0].location; - yy_destroy_ ("Error: popping", yystack_[0]); - yypop_ (); - YY_STACK_PRINT (); - } { stack_symbol_type error_token; + for (;;) + { + yyn = yypact_[+yystack_[0].state]; + if (!yy_pact_value_is_default_ (yyn)) + { + yyn += yy_error_token_; + if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yy_error_token_) + { + yyn = yytable_[yyn]; + if (0 < yyn) + break; + } + } + + // Pop the current state because it cannot handle the error token. + if (yystack_.size () == 1) + YYABORT; + + yyerror_range[1].location = yystack_[0].location; + yy_destroy_ ("Error: popping", yystack_[0]); + yypop_ (); + YY_STACK_PRINT (); + } yyerror_range[2].location = yyla.location; YYLLOC_DEFAULT (error_token.location, yyerror_range, 2); @@ -4931,7 +4846,6 @@ namespace isc { namespace dhcp { /* Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT. */ yypop_ (yylen); - YY_STACK_PRINT (); while (1 < yystack_.size ()) { yy_destroy_ ("Cleanup: popping", yystack_[0]); @@ -4965,103 +4879,18 @@ namespace isc { namespace dhcp { error (yyexc.location, yyexc.what ()); } - /* Return YYSTR after stripping away unnecessary quotes and - backslashes, so that it's suitable for yyerror. The heuristic is - that double-quoting is unnecessary unless the string contains an - apostrophe, a comma, or backslash (other than backslash-backslash). - YYSTR is taken from yytname. */ + // Generate an error message. std::string - Dhcp6Parser::yytnamerr_ (const char *yystr) + Dhcp6Parser::yysyntax_error_ (state_type yystate, const symbol_type& yyla) const { - if (*yystr == '"') - { - std::string yyr; - char const *yyp = yystr; + // Number of reported tokens (one for the "unexpected", one per + // "expected"). + std::ptrdiff_t yycount = 0; + // Its maximum. + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + // Arguments of yyformat. + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - else - goto append; - - append: - default: - yyr += *yyp; - break; - - case '"': - return yyr; - } - do_not_strip_quotes: ; - } - - return yystr; - } - - std::string - Dhcp6Parser::symbol_name (symbol_kind_type yysymbol) - { - return yytnamerr_ (yytname_[yysymbol]); - } - - - - // Dhcp6Parser::context. - Dhcp6Parser::context::context (const Dhcp6Parser& yyparser, const symbol_type& yyla) - : yyparser_ (yyparser) - , yyla_ (yyla) - {} - - int - Dhcp6Parser::context::expected_tokens (symbol_kind_type yyarg[], int yyargn) const - { - // Actual number of expected tokens - int yycount = 0; - - const int yyn = yypact_[+yyparser_.yystack_[0].state]; - if (!yy_pact_value_is_default_ (yyn)) - { - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. In other words, skip the first -YYN actions for - this state because they are default actions. */ - const int yyxbegin = yyn < 0 ? -yyn : 0; - // Stay within bounds of both yycheck and yytname. - const int yychecklim = yylast_ - yyn + 1; - const int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - for (int yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::S_YYerror - && !yy_table_value_is_error_ (yytable_[yyx + yyn])) - { - if (!yyarg) - ++yycount; - else if (yycount == yyargn) - return 0; - else - yyarg[yycount++] = YY_CAST (symbol_kind_type, yyx); - } - } - - if (yyarg && yycount == 0 && 0 < yyargn) - yyarg[0] = symbol_kind::S_YYEMPTY; - return yycount; - } - - - - - - - int - Dhcp6Parser::yy_syntax_error_arguments_ (const context& yyctx, - symbol_kind_type yyarg[], int yyargn) const - { /* There are many possibilities here to consider: - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action @@ -5086,26 +4915,35 @@ namespace isc { namespace dhcp { one exception: it will still contain any token that will not be accepted due to an error action in a later state. */ - - if (!yyctx.lookahead ().empty ()) + if (!yyla.empty ()) { - if (yyarg) - yyarg[0] = yyctx.token (); - int yyn = yyctx.expected_tokens (yyarg ? yyarg + 1 : yyarg, yyargn - 1); - return yyn + 1; - } - return 0; - } + symbol_number_type yytoken = yyla.type_get (); + yyarg[yycount++] = yytname_[yytoken]; - // Generate an error message. - std::string - Dhcp6Parser::yysyntax_error_ (const context& yyctx) const - { - // Its maximum. - enum { YYARGS_MAX = 5 }; - // Arguments of yyformat. - symbol_kind_type yyarg[YYARGS_MAX]; - int yycount = yy_syntax_error_arguments_ (yyctx, yyarg, YYARGS_MAX); + int yyn = yypact_[+yystate]; + if (!yy_pact_value_is_default_ (yyn)) + { + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. In other words, skip the first -YYN actions for + this state because they are default actions. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + // Stay within bounds of both yycheck and yytname. + int yychecklim = yylast_ - yyn + 1; + int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_; + for (int yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck_[yyx + yyn] == yyx && yyx != yy_error_token_ + && !yy_table_value_is_error_ (yytable_[yyx + yyn])) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + break; + } + else + yyarg[yycount++] = yytname_[yyx]; + } + } + } char const* yyformat = YY_NULLPTR; switch (yycount) @@ -5130,7 +4968,7 @@ namespace isc { namespace dhcp { for (char const* yyp = yyformat; *yyp; ++yyp) if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount) { - yyres += symbol_name (yyarg[yyi++]); + yyres += yytnamerr_ (yyarg[yyi++]); ++yyp; } else @@ -5139,148 +4977,145 @@ namespace isc { namespace dhcp { } - const short Dhcp6Parser::yypact_ninf_ = -1005; + const short Dhcp6Parser::yypact_ninf_ = -984; const signed char Dhcp6Parser::yytable_ninf_ = -1; const short Dhcp6Parser::yypact_[] = { - 423, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, 48, 30, 31, 58, 61, - 77, 84, 94, 106, 123, 133, 137, 158, 160, 176, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, 30, -81, - 181, 142, 36, 651, 197, 212, 51, 114, 15, 290, - -95, 437, 44, -1005, 217, 228, 248, 253, 267, -1005, - 46, -1005, -1005, -1005, -1005, -1005, -1005, -1005, 270, 283, - 300, 333, 352, 354, 366, 376, 377, 384, 385, 410, - 422, 424, -1005, 428, 430, 431, 439, 440, -1005, -1005, - -1005, 442, 443, 446, -1005, -1005, -1005, 447, -1005, -1005, - -1005, -1005, 450, 458, 459, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, 462, -1005, -1005, -1005, -1005, -1005, - -1005, 463, 464, 465, -1005, -1005, 466, -1005, 78, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, 468, -1005, 79, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, 470, 472, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, 80, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, 87, -1005, -1005, -1005, -1005, -1005, 473, - -1005, 474, 475, -1005, -1005, -1005, -1005, -1005, -1005, 97, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, 293, 331, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, 409, -1005, -1005, - 478, -1005, -1005, -1005, 479, -1005, -1005, 485, 491, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, 493, 494, -1005, -1005, -1005, -1005, 487, 496, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, 109, -1005, -1005, -1005, 499, -1005, -1005, 504, - -1005, 505, 506, -1005, -1005, 507, 508, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, 130, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, 509, 138, -1005, -1005, -1005, -1005, 30, 30, - -1005, 302, 511, -1005, -1005, 514, 515, 517, 518, 521, - 522, 315, 325, 326, 327, 328, 336, 339, 340, 309, - 329, 334, 341, 344, 345, 525, 346, 347, 348, 349, - 351, 543, 544, 560, 355, 356, 358, 573, 575, 576, - 365, 579, 580, 583, 585, 372, 373, 375, 591, 592, - 593, 594, 596, 611, 612, 613, 614, 403, 616, 617, - 634, 635, 637, 638, 426, 427, 429, 642, 644, -1005, - 142, -1005, 645, 432, 36, -1005, 647, 649, 650, 652, - 653, 444, 445, 654, 657, 658, 651, -1005, 660, 197, - -1005, 661, 451, 662, 452, 453, 212, -1005, 666, 667, - 668, 669, 670, 671, 675, -1005, 51, -1005, 677, 678, - 467, 681, 682, 683, 471, -1005, 15, 684, 480, 481, - -1005, 290, 686, 687, 189, -1005, 483, 693, 712, 501, - 714, 503, 513, 726, 728, 516, 523, 729, 736, 740, - 742, 437, -1005, 743, 526, 44, -1005, -1005, -1005, 744, - 648, 534, 752, 753, 754, 755, 745, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, 551, -1005, -1005, -1005, -1005, -1005, -110, 552, 553, - -1005, -1005, -1005, 764, 765, 766, -1005, 768, 767, 562, - 314, -1005, -1005, -1005, 773, 774, 775, 777, 776, 780, - 781, 782, 796, -1005, 797, 798, 799, 810, 567, 572, - -1005, -1005, -1005, 783, 813, -1005, 816, -1005, -1005, 817, - 818, 609, 610, 615, -1005, -1005, 816, 618, 819, -1005, - 619, -1005, 620, -1005, 625, -1005, -1005, -1005, 816, 816, - 816, 628, 631, 632, 633, -1005, 639, 640, -1005, 641, - 643, 646, -1005, -1005, 656, -1005, -1005, -1005, 659, 767, - -1005, -1005, 663, 664, -1005, 665, -1005, -1005, 199, 673, - -1005, -1005, -110, 672, 674, 676, -1005, 822, -1005, -1005, - 30, 142, -1005, 44, 36, 318, 318, 821, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, 824, 825, 842, - 850, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -96, - 30, -5, 710, 853, 856, 857, 254, 88, 127, 164, - 63, 437, -1005, -1005, 858, -145, -1005, -1005, 860, 861, - -1005, -1005, -1005, -1005, -1005, -82, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, 821, -1005, 184, 226, 232, - -1005, -1005, -1005, -1005, 865, 868, 869, 871, 872, -1005, - 873, 877, -1005, -1005, -1005, -1005, 878, 879, 880, 881, - -1005, -1005, -1005, -1005, -1005, 260, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, 277, -1005, 882, 883, -1005, -1005, 884, 889, - -1005, -1005, 887, 891, -1005, -1005, 890, 892, -1005, -1005, - 893, 894, -1005, -1005, -1005, 91, -1005, -1005, -1005, 895, - -1005, -1005, -1005, 152, -1005, -1005, -1005, -1005, 281, -1005, - -1005, -1005, 153, -1005, -1005, 896, 897, -1005, -1005, 898, - 900, -1005, 901, 902, 903, 904, 905, 906, 285, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, 907, 908, - 909, -1005, -1005, -1005, -1005, 288, -1005, -1005, -1005, -1005, - -1005, -1005, 910, 911, 912, -1005, 297, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, 311, -1005, - -1005, -1005, 913, -1005, 914, -1005, -1005, -1005, 312, -1005, - -1005, -1005, -1005, -1005, 332, -1005, 238, -1005, 915, -1005, - 335, -1005, -1005, 705, -1005, 916, 918, -1005, -1005, 919, - 923, -1005, -1005, -1005, 920, -1005, 921, -1005, -1005, -1005, - 925, 926, 927, 928, 717, 680, 718, 719, 720, 931, - 722, 723, 936, 937, 938, 939, 730, 731, 727, 732, - 940, 946, 947, 950, 318, -1005, -1005, 318, -1005, 821, - 651, -1005, 824, 15, -1005, 825, 290, -1005, 842, 738, - -1005, 850, -96, -1005, -1005, -5, -1005, 952, 710, -1005, - 330, 853, -1005, 51, -1005, 856, -95, -1005, 857, 741, - 747, 748, 750, 751, 757, 254, -1005, 972, 975, 771, - 788, 789, 88, -1005, 762, 794, 803, 127, -1005, 978, - 979, 164, -1005, 802, 1019, 811, 1025, 63, -1005, -1005, - -25, 858, -1005, 812, -145, -1005, -1005, 1032, 1039, 197, - -1005, 860, 212, -1005, 861, 1042, -1005, -1005, 414, 828, - 836, 849, -1005, -1005, -1005, -1005, -1005, 885, -1005, -1005, - 402, 888, 899, 917, -1005, -1005, -1005, -1005, 922, 924, - 929, 930, -1005, 395, -1005, 397, -1005, 1063, -1005, 1079, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, 398, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, 932, -1005, -1005, 1090, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, 1089, 1102, -1005, -1005, -1005, -1005, -1005, 1098, -1005, - 399, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, 313, - 933, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, 934, - 935, -1005, -1005, 941, -1005, 30, -1005, -1005, 1103, -1005, - -1005, -1005, -1005, -1005, 401, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, 942, 405, -1005, 412, -1005, 943, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, 738, -1005, -1005, 1104, 945, -1005, 330, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, 1105, 944, 1106, -25, -1005, -1005, -1005, -1005, -1005, - -1005, 951, -1005, -1005, 1107, -1005, 953, -1005, -1005, 1108, - -1005, -1005, 247, -1005, -22, 1108, -1005, -1005, 1109, 1112, - 1113, -1005, 413, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - 1114, 954, 955, 957, 1115, -22, -1005, 959, -1005, -1005, - -1005, 960, -1005, -1005, -1005 + 203, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, 32, 30, 45, 47, 51, + 58, 61, 105, 117, 126, 130, 137, 144, 157, 180, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, 30, 103, + 160, 163, 67, 659, 84, -17, 260, 124, 113, 208, + -87, 445, 289, -984, 238, 251, 356, 286, 311, -984, + 79, -984, -984, -984, -984, -984, -984, -984, 363, 373, + 389, 406, 407, 426, 434, 435, 436, 440, 442, 443, + 446, 447, -984, 448, 449, 450, 454, 455, -984, -984, + -984, 456, 458, 459, -984, -984, -984, 462, -984, -984, + -984, -984, 464, 465, 466, -984, -984, -984, -984, -984, + -984, -984, -984, -984, 468, -984, -984, -984, -984, -984, + -984, 470, 472, 473, -984, -984, 474, -984, 83, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, 475, -984, 87, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, 478, 479, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, 97, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, 118, -984, -984, -984, -984, -984, 489, + -984, 490, 491, -984, -984, -984, -984, -984, -984, 128, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, 420, 494, -984, + -984, -984, -984, -984, -984, -984, -984, 497, -984, -984, + 495, -984, -984, -984, 504, -984, -984, 502, 508, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, 509, 511, -984, -984, -984, -984, 510, 514, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, 138, -984, -984, -984, 515, -984, -984, 517, + -984, 518, 521, -984, -984, 522, 523, -984, -984, -984, + -984, -984, -984, -984, 154, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, 525, 158, -984, -984, -984, -984, 30, 30, + -984, 291, 527, -984, -984, 529, 537, 538, 539, 540, + 541, 338, 339, 340, 343, 344, 347, 348, 350, 351, + 353, 354, 355, 352, 359, 562, 361, 366, 367, 369, + 370, 569, 572, 577, 374, 377, 379, 579, 586, 587, + 385, 591, 592, 593, 594, 390, 405, 408, 612, 613, + 615, 616, 617, 620, 621, 622, 623, 421, 624, 626, + 627, 628, 629, 630, 425, 427, 428, 632, 635, -984, + 163, -984, 637, 432, 67, -984, 640, 641, 642, 643, + 644, 441, 444, 646, 647, 649, 659, -984, 651, 84, + -984, 652, 452, 653, 453, 457, -17, -984, 654, 658, + 660, 662, 663, 664, 665, -984, 260, -984, 666, 667, + 467, 668, 669, 670, 469, -984, 113, 677, 476, 477, + -984, 208, 678, 679, 206, -984, 480, 681, 684, 481, + 687, 493, 524, 693, 694, 506, 507, 695, 714, 715, + 725, 445, -984, 726, 526, 289, -984, -984, -984, 729, + 505, 533, 656, 734, 735, 737, 741, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, 542, -984, -984, -984, -984, -984, 182, 543, 552, + -984, -984, -984, 742, 743, 755, -984, 756, 759, 555, + 334, -984, -984, -984, 762, 763, 764, 766, 765, 769, + 772, 771, 773, -984, 774, 775, 777, 778, 564, 580, + -984, -984, -984, 781, 782, -984, 783, -984, -984, 785, + 786, 598, 599, 600, -984, -984, 783, 601, 812, -984, + 618, -984, 619, -984, 625, -984, -984, -984, 783, 783, + 783, 631, 638, 648, 650, -984, 655, 661, -984, 671, + 672, 673, -984, -984, 674, -984, -984, -984, 675, 759, + -984, -984, 676, 680, -984, 682, -984, -984, 243, 607, + -984, -984, 182, 683, 685, 686, -984, 817, -984, -984, + 30, 163, -984, 289, 67, 296, 296, 816, -984, -984, + -984, -984, -984, -984, -984, -984, -984, 820, 821, 822, + 823, -984, -984, -984, -984, -984, -984, -984, -984, -84, + 30, 156, 713, 824, 826, 827, 290, 109, -44, -42, + -36, 445, -984, -984, 828, -154, -984, -984, 832, 835, + -984, -984, -984, -984, -984, -37, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, 816, -984, 164, 165, 176, + -984, -984, -984, -984, 844, 845, 846, 847, 852, 854, + 855, -984, 856, -984, -984, -984, -984, -984, 177, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, 188, -984, + 857, 862, -984, -984, 861, 866, -984, -984, 864, 868, + -984, -984, 867, 871, -984, -984, 869, 873, -984, -984, + -984, 91, -984, -984, -984, 878, -984, -984, -984, 95, + -984, -984, -984, -984, 195, -984, -984, -984, 110, -984, + -984, 879, 874, -984, -984, 880, 885, -984, 887, 890, + 891, 892, 893, 894, 196, -984, -984, -984, -984, -984, + -984, -984, -984, -984, 895, 896, 897, -984, -984, -984, + -984, 233, -984, -984, -984, -984, -984, -984, 898, 899, + 900, -984, 239, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, 240, -984, -984, -984, 901, -984, + 902, -984, -984, -984, 250, -984, -984, -984, -984, -984, + 285, -984, 152, -984, 903, -984, 301, -984, -984, 701, + -984, 904, 906, -984, -984, 905, 909, -984, -984, -984, + 907, -984, 908, -984, -984, -984, 912, 913, 914, 915, + 705, 710, 716, 711, 719, 721, 722, 918, 724, 919, + 929, 931, 932, 296, -984, -984, 296, -984, 816, 659, + -984, 820, 113, -984, 821, 208, -984, 822, 748, -984, + 823, -84, -984, -984, 156, -984, 938, 713, -984, 302, + 824, -984, 260, -984, 826, -87, -984, 827, 738, 744, + 750, 751, 753, 754, 290, -984, 939, 941, 758, 776, + 790, 109, -984, 779, 791, 794, -44, -984, 979, 1002, + -42, -984, 798, 1005, 809, 1017, -36, -984, -984, 205, + 828, -984, 815, -154, -984, -984, 1016, 1027, 84, -984, + 832, -17, -984, 835, 1039, -984, -984, 242, 843, 859, + 872, -984, -984, -984, -984, -984, -984, -984, 349, -984, + 875, 877, 881, 882, -984, 303, -984, 310, -984, 1065, + -984, 1068, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, 358, + -984, -984, -984, -984, -984, -984, -984, -984, 883, -984, + -984, 1081, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, 1078, 1084, -984, -984, -984, -984, -984, + 1083, -984, 365, -984, -984, -984, -984, -984, -984, -984, + -984, 304, 886, -984, -984, -984, -984, -984, -984, -984, + -984, 888, 889, -984, -984, 910, -984, 30, -984, -984, + 1088, -984, -984, -984, -984, -984, 368, -984, -984, -984, + -984, -984, -984, -984, -984, 911, 381, -984, 423, -984, + 916, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + 748, -984, -984, 1090, 917, -984, 302, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, 1093, 920, + 1094, 205, -984, -984, -984, -984, -984, -984, 922, -984, + -984, 1095, -984, 923, -984, -984, 1092, -984, -984, 284, + -984, 175, 1092, -984, -984, 1097, 1098, 1099, -984, 424, + -984, -984, -984, -984, -984, -984, -984, 1100, 921, 924, + 925, 1101, 175, -984, 927, -984, -984, -984, 928, -984, + -984, -984 }; const short @@ -5290,18 +5125,18 @@ namespace isc { namespace dhcp { 20, 22, 24, 26, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 46, 38, 34, 33, 30, 31, 32, 37, 3, - 35, 36, 61, 5, 67, 7, 184, 9, 375, 11, - 578, 13, 605, 15, 637, 17, 498, 19, 507, 21, - 546, 23, 337, 25, 762, 27, 813, 29, 48, 41, - 0, 0, 0, 0, 0, 0, 639, 0, 509, 548, + 35, 36, 61, 5, 67, 7, 184, 9, 356, 11, + 559, 13, 586, 15, 618, 17, 479, 19, 488, 21, + 527, 23, 318, 25, 743, 27, 794, 29, 48, 41, + 0, 0, 0, 0, 0, 0, 620, 0, 490, 529, 0, 0, 0, 50, 0, 49, 0, 0, 42, 63, - 0, 65, 137, 811, 182, 197, 199, 201, 0, 0, + 0, 65, 137, 792, 182, 197, 199, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 156, 163, - 165, 0, 0, 0, 366, 496, 537, 0, 444, 592, - 594, 436, 0, 0, 0, 293, 312, 302, 285, 675, - 628, 328, 349, 704, 0, 314, 729, 743, 760, 169, - 171, 0, 0, 0, 823, 865, 0, 136, 0, 69, + 165, 0, 0, 0, 347, 477, 518, 0, 425, 573, + 575, 417, 0, 0, 0, 274, 293, 283, 266, 656, + 609, 309, 330, 685, 0, 295, 710, 724, 741, 169, + 171, 0, 0, 0, 804, 846, 0, 136, 0, 69, 72, 73, 74, 75, 76, 77, 78, 79, 80, 111, 112, 113, 114, 115, 81, 119, 120, 121, 122, 123, 124, 125, 126, 117, 118, 127, 128, 129, 106, 135, @@ -5309,26 +5144,26 @@ namespace isc { namespace dhcp { 89, 130, 94, 95, 82, 108, 109, 110, 107, 83, 92, 93, 101, 102, 104, 91, 96, 97, 98, 99, 100, 105, 116, 134, 194, 0, 193, 0, 186, 189, - 190, 191, 192, 569, 596, 423, 425, 427, 0, 0, - 431, 429, 669, 422, 380, 381, 382, 383, 384, 385, - 386, 387, 406, 407, 408, 409, 410, 413, 414, 415, - 416, 417, 418, 419, 420, 411, 412, 421, 0, 377, - 391, 392, 393, 396, 397, 400, 401, 402, 399, 394, - 395, 388, 389, 404, 405, 390, 398, 403, 590, 589, - 585, 586, 584, 0, 580, 583, 587, 588, 621, 0, - 624, 0, 0, 620, 614, 615, 613, 618, 619, 0, - 607, 610, 611, 616, 617, 612, 667, 655, 657, 659, - 661, 663, 665, 654, 651, 652, 653, 0, 640, 641, - 646, 647, 644, 648, 649, 650, 645, 0, 527, 252, - 0, 531, 529, 534, 0, 523, 524, 0, 510, 511, - 514, 526, 515, 516, 517, 533, 518, 519, 520, 521, - 522, 563, 0, 0, 561, 562, 565, 566, 0, 549, - 550, 553, 554, 555, 556, 557, 558, 559, 560, 345, - 347, 342, 0, 339, 343, 344, 0, 786, 788, 0, - 791, 0, 0, 795, 799, 0, 0, 803, 805, 807, - 809, 784, 782, 783, 0, 764, 767, 779, 768, 769, - 770, 771, 772, 773, 774, 775, 776, 777, 778, 780, - 781, 820, 0, 0, 815, 818, 819, 47, 52, 0, + 190, 191, 192, 550, 577, 404, 406, 408, 0, 0, + 412, 410, 650, 403, 361, 362, 363, 364, 365, 366, + 367, 368, 387, 388, 389, 390, 391, 394, 395, 396, + 397, 398, 399, 400, 401, 392, 393, 402, 0, 358, + 372, 373, 374, 377, 378, 381, 382, 383, 380, 375, + 376, 369, 370, 385, 386, 371, 379, 384, 571, 570, + 566, 567, 565, 0, 561, 564, 568, 569, 602, 0, + 605, 0, 0, 601, 595, 596, 594, 599, 600, 0, + 588, 591, 592, 597, 598, 593, 648, 636, 638, 640, + 642, 644, 646, 635, 632, 633, 634, 0, 621, 622, + 627, 628, 625, 629, 630, 631, 626, 0, 508, 244, + 0, 512, 510, 515, 0, 504, 505, 0, 491, 492, + 495, 507, 496, 497, 498, 514, 499, 500, 501, 502, + 503, 544, 0, 0, 542, 543, 546, 547, 0, 530, + 531, 534, 535, 536, 537, 538, 539, 540, 541, 326, + 328, 323, 0, 320, 324, 325, 0, 767, 769, 0, + 772, 0, 0, 776, 780, 0, 0, 784, 786, 788, + 790, 765, 763, 764, 0, 745, 748, 760, 749, 750, + 751, 752, 753, 754, 755, 756, 757, 758, 759, 761, + 762, 801, 0, 0, 796, 799, 800, 47, 52, 0, 39, 45, 0, 66, 62, 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, @@ -5337,330 +5172,322 @@ namespace isc { namespace dhcp { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 71, 68, 0, 0, 188, 185, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 379, 376, 0, 582, - 579, 0, 0, 0, 0, 0, 609, 606, 0, 0, - 0, 0, 0, 0, 0, 638, 643, 499, 0, 0, - 0, 0, 0, 0, 0, 508, 513, 0, 0, 0, - 547, 552, 0, 0, 341, 338, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 360, 357, 0, 563, + 560, 0, 0, 0, 0, 0, 590, 587, 0, 0, + 0, 0, 0, 0, 0, 619, 624, 480, 0, 0, + 0, 0, 0, 0, 0, 489, 494, 0, 0, 0, + 528, 533, 0, 0, 322, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 766, 763, 0, 0, 817, 814, 51, 43, 0, + 0, 747, 744, 0, 0, 798, 795, 51, 43, 0, 0, 0, 0, 0, 0, 0, 0, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 0, 174, 175, 153, 154, 155, 0, 0, 0, 167, 168, 173, 0, 0, 0, 178, 0, 0, 0, - 0, 433, 434, 435, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 728, 0, 0, 0, 0, 0, 0, + 0, 414, 415, 416, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 709, 0, 0, 0, 0, 0, 0, 179, 180, 181, 0, 0, 70, 0, 196, 187, 0, - 0, 0, 0, 0, 442, 443, 0, 0, 0, 378, - 0, 581, 0, 623, 0, 626, 627, 608, 0, 0, - 0, 0, 0, 0, 0, 642, 0, 0, 525, 0, - 0, 0, 536, 512, 0, 567, 568, 551, 0, 0, - 340, 785, 0, 0, 790, 0, 793, 794, 0, 0, - 801, 802, 0, 0, 0, 0, 765, 0, 822, 816, + 0, 0, 0, 0, 423, 424, 0, 0, 0, 359, + 0, 562, 0, 604, 0, 607, 608, 589, 0, 0, + 0, 0, 0, 0, 0, 623, 0, 0, 506, 0, + 0, 0, 517, 493, 0, 548, 549, 532, 0, 0, + 321, 766, 0, 0, 771, 0, 774, 775, 0, 0, + 782, 783, 0, 0, 0, 0, 746, 0, 803, 797, 0, 0, 138, 0, 0, 0, 0, 203, 177, 158, - 159, 160, 161, 162, 157, 164, 166, 368, 500, 539, - 446, 40, 593, 595, 438, 439, 440, 441, 437, 0, - 48, 0, 0, 0, 630, 330, 0, 0, 0, 0, - 0, 0, 170, 172, 0, 0, 53, 195, 571, 598, - 424, 426, 428, 432, 430, 0, 591, 622, 625, 668, - 656, 658, 660, 662, 664, 666, 528, 253, 532, 530, - 535, 564, 346, 348, 787, 789, 792, 797, 798, 796, - 800, 804, 806, 808, 810, 203, 44, 0, 0, 0, - 239, 245, 247, 249, 0, 0, 0, 0, 0, 268, - 0, 0, 259, 271, 273, 275, 0, 0, 0, 0, - 277, 279, 281, 283, 238, 0, 210, 213, 214, 215, - 216, 217, 218, 219, 220, 221, 222, 225, 226, 233, - 227, 228, 229, 223, 224, 230, 231, 232, 234, 235, - 236, 237, 0, 208, 0, 204, 205, 373, 0, 369, - 370, 505, 0, 501, 502, 544, 0, 540, 541, 451, - 0, 447, 448, 300, 301, 0, 295, 298, 299, 0, - 310, 311, 307, 0, 304, 308, 309, 291, 0, 287, - 290, 680, 0, 677, 635, 0, 631, 632, 335, 0, - 331, 332, 0, 0, 0, 0, 0, 0, 0, 351, - 354, 355, 356, 357, 358, 359, 718, 724, 0, 0, - 0, 717, 714, 715, 716, 0, 706, 709, 712, 710, - 711, 713, 0, 0, 0, 324, 0, 316, 319, 320, - 321, 322, 323, 739, 741, 738, 736, 737, 0, 731, - 734, 735, 0, 755, 0, 758, 751, 752, 0, 745, - 748, 749, 750, 753, 0, 828, 0, 825, 0, 871, - 0, 867, 870, 55, 576, 0, 572, 573, 603, 0, - 599, 600, 673, 672, 0, 671, 0, 64, 812, 183, + 159, 160, 161, 162, 157, 164, 166, 349, 481, 520, + 427, 40, 574, 576, 419, 420, 421, 422, 418, 0, + 48, 0, 0, 0, 611, 311, 0, 0, 0, 0, + 0, 0, 170, 172, 0, 0, 53, 195, 552, 579, + 405, 407, 409, 413, 411, 0, 572, 603, 606, 649, + 637, 639, 641, 643, 645, 647, 509, 245, 513, 511, + 516, 545, 327, 329, 768, 770, 773, 778, 779, 777, + 781, 785, 787, 789, 791, 203, 44, 0, 0, 0, + 232, 237, 239, 241, 0, 0, 0, 0, 0, 0, + 0, 251, 0, 258, 260, 262, 264, 231, 0, 210, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 224, 225, 226, 223, 227, 228, 229, 230, 0, 208, + 0, 204, 205, 354, 0, 350, 351, 486, 0, 482, + 483, 525, 0, 521, 522, 432, 0, 428, 429, 281, + 282, 0, 276, 279, 280, 0, 291, 292, 288, 0, + 285, 289, 290, 272, 0, 268, 271, 661, 0, 658, + 616, 0, 612, 613, 316, 0, 312, 313, 0, 0, + 0, 0, 0, 0, 0, 332, 335, 336, 337, 338, + 339, 340, 699, 705, 0, 0, 0, 698, 695, 696, + 697, 0, 687, 690, 693, 691, 692, 694, 0, 0, + 0, 305, 0, 297, 300, 301, 302, 303, 304, 720, + 722, 719, 717, 718, 0, 712, 715, 716, 0, 736, + 0, 739, 732, 733, 0, 726, 729, 730, 731, 734, + 0, 809, 0, 806, 0, 852, 0, 848, 851, 55, + 557, 0, 553, 554, 584, 0, 580, 581, 654, 653, + 0, 652, 0, 64, 793, 183, 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, 212, 198, 200, 0, 202, 207, - 0, 367, 372, 509, 497, 504, 548, 538, 543, 0, - 445, 450, 297, 294, 313, 306, 303, 0, 289, 286, - 682, 679, 676, 639, 629, 634, 0, 329, 334, 0, - 0, 0, 0, 0, 0, 353, 350, 0, 0, 0, - 0, 0, 708, 705, 0, 0, 0, 318, 315, 0, - 0, 733, 730, 0, 0, 0, 0, 747, 744, 761, - 0, 827, 824, 0, 869, 866, 57, 0, 56, 0, - 570, 575, 0, 597, 602, 0, 670, 821, 0, 0, - 0, 0, 251, 254, 255, 256, 257, 0, 270, 258, - 0, 0, 0, 0, 265, 266, 267, 264, 0, 0, - 0, 0, 211, 0, 206, 0, 371, 0, 503, 0, - 542, 495, 470, 471, 472, 474, 475, 476, 460, 461, - 479, 480, 481, 482, 483, 486, 487, 488, 489, 490, - 491, 492, 493, 484, 485, 494, 456, 457, 458, 459, - 468, 469, 465, 466, 467, 464, 473, 0, 453, 462, - 477, 478, 463, 449, 296, 305, 0, 288, 701, 0, - 699, 693, 694, 695, 696, 697, 698, 700, 690, 691, - 692, 0, 683, 684, 687, 688, 689, 678, 0, 633, - 0, 333, 360, 361, 362, 363, 364, 365, 352, 0, - 0, 723, 726, 727, 707, 325, 326, 327, 317, 0, - 0, 732, 754, 0, 757, 0, 746, 843, 0, 841, - 839, 833, 837, 838, 0, 830, 835, 836, 834, 826, - 872, 868, 54, 59, 0, 574, 0, 601, 0, 241, - 242, 243, 244, 240, 246, 248, 250, 269, 261, 262, - 263, 260, 272, 274, 276, 278, 280, 282, 284, 209, - 374, 506, 545, 455, 452, 292, 0, 0, 681, 686, - 636, 336, 720, 721, 722, 719, 725, 740, 742, 756, - 759, 0, 0, 0, 832, 829, 58, 577, 604, 674, - 454, 0, 703, 685, 0, 840, 0, 831, 702, 0, - 842, 848, 0, 845, 0, 847, 844, 858, 0, 0, - 0, 863, 0, 850, 853, 854, 855, 856, 857, 846, - 0, 0, 0, 0, 0, 852, 849, 0, 860, 861, - 862, 0, 851, 859, 864 + 0, 0, 0, 212, 198, 200, 0, 202, 207, 0, + 348, 353, 490, 478, 485, 529, 519, 524, 0, 426, + 431, 278, 275, 294, 287, 284, 0, 270, 267, 663, + 660, 657, 620, 610, 615, 0, 310, 315, 0, 0, + 0, 0, 0, 0, 334, 331, 0, 0, 0, 0, + 0, 689, 686, 0, 0, 0, 299, 296, 0, 0, + 714, 711, 0, 0, 0, 0, 728, 725, 742, 0, + 808, 805, 0, 850, 847, 57, 0, 56, 0, 551, + 556, 0, 578, 583, 0, 651, 802, 0, 0, 0, + 0, 243, 246, 247, 248, 249, 257, 250, 0, 256, + 0, 0, 0, 0, 211, 0, 206, 0, 352, 0, + 484, 0, 523, 476, 451, 452, 453, 455, 456, 457, + 441, 442, 460, 461, 462, 463, 464, 467, 468, 469, + 470, 471, 472, 473, 474, 465, 466, 475, 437, 438, + 439, 440, 449, 450, 446, 447, 448, 445, 454, 0, + 434, 443, 458, 459, 444, 430, 277, 286, 0, 269, + 682, 0, 680, 674, 675, 676, 677, 678, 679, 681, + 671, 672, 673, 0, 664, 665, 668, 669, 670, 659, + 0, 614, 0, 314, 341, 342, 343, 344, 345, 346, + 333, 0, 0, 704, 707, 708, 688, 306, 307, 308, + 298, 0, 0, 713, 735, 0, 738, 0, 727, 824, + 0, 822, 820, 814, 818, 819, 0, 811, 816, 817, + 815, 807, 853, 849, 54, 59, 0, 555, 0, 582, + 0, 234, 235, 236, 233, 238, 240, 242, 253, 254, + 255, 252, 259, 261, 263, 265, 209, 355, 487, 526, + 436, 433, 273, 0, 0, 662, 667, 617, 317, 701, + 702, 703, 700, 706, 721, 723, 737, 740, 0, 0, + 0, 813, 810, 58, 558, 585, 655, 435, 0, 684, + 666, 0, 821, 0, 812, 683, 0, 823, 829, 0, + 826, 0, 828, 825, 839, 0, 0, 0, 844, 0, + 831, 834, 835, 836, 837, 838, 827, 0, 0, 0, + 0, 0, 833, 830, 0, 841, 842, 843, 0, 832, + 840, 845 }; const short Dhcp6Parser::yypgoto_[] = { - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -10, -1005, -568, -1005, - 433, -1005, -1005, -1005, -1005, 371, -1005, -484, -1005, -1005, - -1005, -71, -1005, -1005, -1005, -1005, -1005, -1005, -1005, 415, - 621, -1005, -1005, -43, -14, 12, 16, 20, 33, -59, - -31, -30, -28, -27, -26, 19, -1005, 34, 37, 38, - 41, -1005, 418, 49, -1005, 52, -1005, 54, 55, 56, - -1005, 59, -1005, 62, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, 411, 623, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, 338, -1005, 104, - -1005, -700, 110, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -45, -1005, -736, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, 90, -1005, -1005, - -1005, -1005, -1005, 98, -719, -1005, -1005, -1005, -1005, 96, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, 67, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, 81, -1005, -1005, -1005, 89, - 582, -1005, -1005, -1005, -1005, -1005, -1005, -1005, 83, -1005, - -1005, -1005, -1005, -1005, -1005, -1004, -1005, -1005, -1005, 118, - -1005, -1005, -1005, 121, 626, -1005, -1005, -1002, -1005, -1001, - -1005, 73, -1005, 75, -1005, 66, 69, 70, 72, -1005, - -1005, -1005, -1000, -1005, -1005, -1005, -1005, 112, -1005, -1005, - -127, 1074, -1005, -1005, -1005, -1005, -1005, 128, -1005, -1005, - -1005, 129, -1005, 608, -1005, -67, -1005, -1005, -1005, -1005, - -1005, -64, -1005, -1005, -1005, -1005, -1005, 4, -1005, -1005, - -1005, 131, -1005, -1005, -1005, 135, -1005, 604, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, 85, - -1005, -1005, -1005, 92, 679, -1005, -1005, -55, -1005, -12, - -1005, -1005, -1005, -1005, -1005, 76, -1005, -1005, -1005, 86, - 685, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -60, -1005, - -1005, -1005, 124, -1005, -1005, -1005, 134, -1005, 655, 417, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -998, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, 139, -1005, -1005, -1005, -100, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, 122, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, 115, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, 108, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, 436, 622, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, 476, 624, -1005, -1005, - -1005, -1005, -1005, -1005, 102, -1005, -1005, -106, -1005, -1005, - -1005, -1005, -1005, -1005, -125, -1005, -1005, -143, -1005, -1005, - -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, 111, -1005 + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -10, -984, -574, -984, + 417, -984, -984, -984, -984, 371, -984, -516, -984, -984, + -984, -71, -984, -984, -984, -984, -984, -984, -984, 396, + 608, -984, -984, -43, -14, 12, 16, 20, 33, -59, + -31, -30, -28, -27, -26, 19, -984, 34, 37, 38, + 41, -984, 410, 49, -984, 52, -984, 54, 55, 56, + -984, 59, -984, 62, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, 395, 606, -984, -984, + -984, -984, -984, -984, -984, -984, -984, 318, -984, 116, + -984, -700, 122, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -45, -984, -736, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, 99, -984, -984, -984, + -984, -984, 108, -719, -984, -984, -984, -984, 106, -984, + -984, -984, -984, -984, -984, -984, 76, -984, -984, -984, + -984, -984, -984, -984, 94, -984, -984, -984, 100, 570, + -984, -984, -984, -984, -984, -984, -984, 92, -984, -984, + -984, -984, -984, -984, -983, -984, -984, -984, 135, -984, + -984, -984, 139, 633, -984, -984, -981, -984, -980, -984, + 73, -984, 75, -984, 66, 69, 70, 72, -984, -984, + -984, -979, -984, -984, -984, -984, 127, -984, -984, -101, + 1063, -984, -984, -984, -984, -984, 141, -984, -984, -984, + 140, -984, 602, -984, -67, -984, -984, -984, -984, -984, + -64, -984, -984, -984, -984, -984, 4, -984, -984, -984, + 143, -984, -984, -984, 142, -984, 603, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, 81, -984, + -984, -984, 85, 636, -984, -984, -55, -984, -12, -984, + -984, -984, -984, -984, 86, -984, -984, -984, 89, 639, + -984, -984, -984, -984, -984, -984, -984, -60, -984, -984, + -984, 132, -984, -984, -984, 136, -984, 634, 387, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -977, -984, -984, -984, -984, -984, -984, -984, + 146, -984, -984, -984, -89, -984, -984, -984, -984, -984, + -984, -984, 120, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, 112, -984, -984, -984, -984, + -984, -984, -984, 107, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, 413, 596, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, 460, 597, -984, -984, -984, + -984, -984, -984, 111, -984, -984, -93, -984, -984, -984, + -984, -984, -984, -108, -984, -984, -126, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, 114, -984 }; const short Dhcp6Parser::yydefgoto_[] = { - 0, 15, 16, 17, 18, 19, 20, 21, 22, 23, + -1, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 83, 39, 40, 69, - 732, 87, 88, 41, 68, 84, 85, 757, 973, 1087, - 1088, 824, 43, 70, 90, 432, 91, 45, 71, 158, + 732, 87, 88, 41, 68, 84, 85, 757, 959, 1066, + 1067, 817, 43, 70, 90, 432, 91, 45, 71, 158, 159, 160, 435, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 461, 724, 179, 462, 180, 463, 181, 182, 183, 492, 184, 493, 185, 186, 187, 188, 455, 189, 190, 191, 192, 193, 437, 47, 72, 227, 228, 229, 502, - 230, 194, 438, 195, 439, 196, 440, 854, 855, 856, - 1017, 825, 826, 827, 990, 1253, 828, 991, 829, 992, - 830, 993, 831, 832, 539, 833, 834, 835, 836, 837, - 838, 1002, 1261, 839, 840, 841, 842, 843, 999, 844, - 845, 1003, 846, 1004, 847, 1005, 848, 1010, 849, 1011, - 850, 1012, 851, 1013, 197, 481, 888, 889, 890, 1037, - 198, 478, 875, 876, 877, 878, 199, 480, 883, 884, - 885, 886, 200, 479, 201, 488, 936, 937, 938, 939, - 940, 202, 484, 899, 900, 901, 1046, 63, 80, 382, - 383, 384, 552, 385, 553, 203, 485, 908, 909, 910, - 911, 912, 913, 914, 915, 204, 467, 858, 859, 860, - 1020, 49, 73, 268, 269, 270, 508, 271, 509, 272, - 510, 273, 514, 274, 513, 205, 206, 207, 208, 474, - 738, 279, 280, 209, 471, 870, 871, 872, 1029, 1167, - 1168, 210, 468, 57, 77, 862, 863, 864, 1023, 59, - 78, 347, 348, 349, 350, 351, 352, 353, 538, 354, - 542, 355, 541, 356, 357, 543, 358, 211, 469, 866, - 867, 868, 1026, 61, 79, 368, 369, 370, 371, 372, - 547, 373, 374, 375, 376, 282, 506, 975, 976, 977, - 1089, 51, 74, 293, 294, 295, 518, 212, 472, 213, - 473, 285, 507, 979, 980, 981, 1092, 53, 75, 309, - 310, 311, 521, 312, 313, 523, 314, 315, 214, 483, - 895, 896, 897, 1043, 55, 76, 327, 328, 329, 330, - 529, 331, 530, 332, 531, 333, 532, 334, 533, 335, - 534, 336, 528, 287, 515, 984, 985, 1095, 215, 482, - 892, 893, 1040, 1191, 1192, 1193, 1194, 1195, 1276, 1196, - 216, 486, 925, 926, 927, 1057, 1285, 928, 929, 1058, - 930, 931, 217, 218, 489, 948, 949, 950, 1069, 951, - 1070, 219, 490, 958, 959, 960, 961, 1074, 962, 963, - 1076, 220, 491, 65, 81, 404, 405, 406, 407, 557, - 408, 558, 409, 410, 560, 411, 412, 413, 563, 789, - 414, 564, 415, 416, 417, 567, 418, 568, 419, 569, - 420, 570, 221, 436, 67, 82, 423, 424, 425, 573, - 426, 222, 497, 966, 967, 1080, 1234, 1235, 1236, 1237, - 1293, 1238, 1291, 1312, 1313, 1314, 1322, 1323, 1324, 1330, - 1325, 1326, 1327, 1328, 1334, 223, 498, 970, 971, 972 + 230, 194, 438, 195, 439, 196, 440, 840, 841, 842, + 996, 818, 819, 820, 976, 1224, 821, 977, 822, 978, + 823, 979, 824, 825, 539, 826, 827, 828, 829, 830, + 831, 987, 1231, 832, 833, 834, 989, 835, 990, 836, + 991, 837, 992, 197, 481, 874, 875, 876, 1016, 198, + 478, 861, 862, 863, 864, 199, 480, 869, 870, 871, + 872, 200, 479, 201, 488, 922, 923, 924, 925, 926, + 202, 484, 885, 886, 887, 1025, 63, 80, 382, 383, + 384, 552, 385, 553, 203, 485, 894, 895, 896, 897, + 898, 899, 900, 901, 204, 467, 844, 845, 846, 999, + 49, 73, 268, 269, 270, 508, 271, 509, 272, 510, + 273, 514, 274, 513, 205, 206, 207, 208, 474, 738, + 279, 280, 209, 471, 856, 857, 858, 1008, 1139, 1140, + 210, 468, 57, 77, 848, 849, 850, 1002, 59, 78, + 347, 348, 349, 350, 351, 352, 353, 538, 354, 542, + 355, 541, 356, 357, 543, 358, 211, 469, 852, 853, + 854, 1005, 61, 79, 368, 369, 370, 371, 372, 547, + 373, 374, 375, 376, 282, 506, 961, 962, 963, 1068, + 51, 74, 293, 294, 295, 518, 212, 472, 213, 473, + 285, 507, 965, 966, 967, 1071, 53, 75, 309, 310, + 311, 521, 312, 313, 523, 314, 315, 214, 483, 881, + 882, 883, 1022, 55, 76, 327, 328, 329, 330, 529, + 331, 530, 332, 531, 333, 532, 334, 533, 335, 534, + 336, 528, 287, 515, 970, 971, 1074, 215, 482, 878, + 879, 1019, 1163, 1164, 1165, 1166, 1167, 1243, 1168, 216, + 486, 911, 912, 913, 1036, 1252, 914, 915, 1037, 916, + 917, 217, 218, 489, 934, 935, 936, 1048, 937, 1049, + 219, 490, 944, 945, 946, 947, 1053, 948, 949, 1055, + 220, 491, 65, 81, 404, 405, 406, 407, 557, 408, + 558, 409, 410, 560, 411, 412, 413, 563, 789, 414, + 564, 415, 416, 417, 567, 418, 568, 419, 569, 420, + 570, 221, 436, 67, 82, 423, 424, 425, 573, 426, + 222, 497, 952, 953, 1059, 1206, 1207, 1208, 1209, 1260, + 1210, 1258, 1279, 1280, 1281, 1289, 1290, 1291, 1297, 1292, + 1293, 1294, 1295, 1301, 223, 498, 956, 957, 958 }; const short Dhcp6Parser::yytable_[] = { 157, 226, 243, 289, 303, 323, 38, 345, 364, 381, - 401, 922, 366, 286, 250, 367, 852, 231, 283, 296, - 307, 325, 882, 359, 377, 1157, 402, 1158, 1159, 1166, - 244, 1172, 873, 346, 365, 31, 338, 32, 42, 33, - 379, 380, 251, 252, 317, 253, 254, 255, 30, 433, - 731, 982, 224, 225, 434, 968, 339, 421, 422, 245, - 232, 284, 297, 308, 326, 44, 360, 378, 46, 403, - 156, 719, 720, 721, 722, 129, 130, 281, 292, 306, - 324, 500, 504, 516, 48, 246, 501, 505, 517, 247, - 519, 50, 256, 248, 1032, 520, 339, 1033, 340, 341, - 526, 52, 342, 343, 344, 527, 249, 257, 723, 916, - 258, 259, 554, 54, 260, 129, 130, 555, 805, 874, - 156, 731, 261, 873, 880, 262, 881, 263, 264, 265, - 56, 126, 266, 571, 86, 267, 129, 130, 572, 275, - 58, 575, 276, 277, 60, 278, 576, 290, 304, 291, - 305, 129, 130, 92, 93, 1035, 1041, 94, 1036, 1042, - 95, 96, 97, 129, 130, 62, 1227, 64, 1228, 1229, - 1317, 316, 763, 1318, 1319, 1320, 1321, 317, 318, 319, - 320, 321, 322, 66, 769, 770, 771, 500, 129, 130, - 156, 89, 987, 125, 98, 99, 100, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 126, 427, 952, 953, 954, 129, 130, 575, - 156, 428, 127, 128, 988, 504, 917, 918, 919, 920, - 989, 1081, 129, 130, 1082, 34, 35, 36, 37, 131, - 1315, 156, 429, 1316, 132, 133, 134, 135, 136, 137, - 138, 430, 139, 1014, 129, 130, 156, 140, 1015, 1157, - 431, 1158, 1159, 1166, 441, 1172, 141, 126, 955, 142, - 1014, 932, 933, 934, 1038, 1016, 143, 442, 1055, 1039, - 288, 1062, 126, 1056, 144, 145, 1063, 129, 130, 146, - 1067, 535, 147, 156, 443, 1068, 148, 298, 299, 300, - 301, 302, 129, 130, 1071, 1077, 882, 1123, 240, 1072, - 1078, 241, 943, 944, 379, 380, 922, 149, 150, 151, - 152, 153, 154, 240, 536, 571, 241, 444, 1084, 800, - 1079, 155, 156, 1085, 801, 802, 803, 804, 805, 806, - 807, 808, 809, 810, 811, 812, 445, 156, 446, 813, - 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, - 447, 339, 361, 340, 341, 362, 363, 787, 788, 156, - 448, 449, 98, 99, 100, 101, 102, 103, 450, 451, - 129, 130, 902, 903, 904, 905, 906, 907, 1014, 339, - 516, 1273, 554, 1269, 1294, 1270, 1274, 1281, 519, 1295, - 126, 339, 156, 1297, 452, 526, 1335, 537, 577, 578, - 1298, 1336, 734, 735, 736, 737, 453, 156, 454, 157, - 129, 130, 456, 226, 457, 458, 1249, 1250, 1251, 1252, - 1258, 1259, 1260, 459, 460, 243, 464, 465, 289, 231, - 466, 470, 1178, 1179, 475, 303, 286, 250, 1282, 1283, - 1284, 283, 476, 477, 296, 323, 487, 494, 495, 496, - 499, 307, 503, 244, 511, 345, 512, 522, 524, 525, - 364, 325, 540, 544, 366, 251, 252, 367, 253, 254, - 255, 359, 232, 545, 546, 550, 377, 548, 549, 551, - 401, 346, 245, 556, 284, 156, 365, 297, 559, 561, - 562, 565, 566, 574, 308, 580, 402, 579, 581, 582, - 281, 583, 584, 292, 326, 585, 586, 595, 246, 601, - 306, 587, 247, 156, 360, 256, 248, 129, 130, 378, - 324, 588, 589, 590, 591, 156, 596, 607, 608, 249, - 257, 597, 592, 258, 259, 593, 594, 260, 598, 403, - 599, 600, 602, 603, 609, 261, 604, 605, 262, 606, - 263, 264, 265, 610, 611, 266, 612, 613, 267, 614, - 615, 616, 275, 617, 618, 276, 277, 619, 278, 620, - 621, 622, 290, 623, 291, 624, 625, 626, 627, 304, - 628, 305, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 397, 398, 629, 630, 631, 632, 633, - 634, 635, 399, 400, 1, 2, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 636, 637, - 157, 638, 639, 226, 640, 641, 643, 642, 644, 646, - 647, 649, 156, 650, 651, 711, 652, 653, 656, 231, - 654, 657, 658, 655, 660, 662, 664, 663, 665, 666, - 668, 669, 670, 671, 672, 673, 921, 935, 945, 674, - 401, 676, 677, 678, 969, 679, 680, 681, 684, 682, - 688, 689, 923, 941, 946, 956, 402, 692, 685, 686, - 796, 691, 232, 98, 99, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 693, 694, 695, 696, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 697, - 698, 126, 699, 702, 700, 924, 942, 947, 957, 403, - 703, 701, 708, 233, 704, 234, 705, 707, 710, 712, - 717, 129, 130, 235, 236, 237, 238, 239, 131, 713, - 714, 715, 716, 132, 133, 134, 718, 725, 726, 727, - 728, 729, 240, 730, 32, 241, 140, 733, 739, 740, - 741, 743, 752, 242, 742, 744, 745, 753, 754, 746, - 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 747, 748, 749, 750, 115, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 751, 126, 339, - 755, 756, 758, 759, 760, 761, 765, 795, 853, 887, - 762, 857, 861, 764, 766, 767, 149, 150, 129, 130, - 768, 236, 237, 772, 239, 131, 773, 774, 775, 865, - 132, 133, 134, 790, 776, 777, 778, 869, 779, 240, - 891, 780, 241, 894, 898, 965, 156, 974, 978, 994, - 242, 781, 995, 996, 782, 997, 998, 1000, 784, 785, - 786, 1001, 1006, 1007, 1008, 1009, 1019, 792, 1018, 793, - 1021, 794, 1022, 1024, 1025, 1028, 1027, 1031, 1103, 1030, - 1045, 1034, 1044, 1048, 1047, 1049, 1050, 1051, 1052, 1053, - 1054, 1059, 1060, 1061, 1064, 1065, 1066, 1073, 1075, 1083, - 1086, 1091, 1090, 149, 150, 1093, 1094, 1097, 1096, 1098, - 1099, 1100, 1101, 1102, 1104, 1107, 1106, 1105, 1108, 1109, - 1110, 1111, 1112, 1113, 1118, 1116, 1114, 1115, 1117, 243, - 1119, 1120, 345, 156, 1121, 364, 1176, 1202, 1131, 366, - 286, 250, 367, 1203, 1204, 283, 1205, 1206, 359, 1180, - 1138, 377, 323, 1207, 1170, 381, 1209, 244, 346, 1210, - 1215, 365, 1219, 1220, 1156, 1189, 1132, 1211, 325, 251, - 252, 921, 253, 254, 255, 1187, 935, 1181, 1139, 1140, - 945, 1141, 1142, 1143, 1212, 1213, 245, 923, 284, 1230, - 1216, 360, 941, 969, 378, 1133, 946, 1171, 289, 1217, - 1222, 303, 956, 1223, 281, 1232, 1182, 1224, 1190, 1225, - 1240, 326, 246, 1169, 296, 1231, 247, 307, 1242, 256, - 248, 1134, 1243, 1254, 1188, 1135, 1248, 324, 1144, 1136, - 924, 1255, 1183, 249, 257, 942, 1184, 258, 259, 947, - 1185, 260, 1137, 1145, 1256, 957, 1146, 1147, 1233, 261, - 1148, 1271, 262, 1186, 263, 264, 265, 297, 1149, 266, - 308, 1150, 267, 1151, 1152, 1153, 275, 1272, 1154, 276, - 277, 1155, 278, 292, 1277, 1162, 306, 1278, 1163, 1164, - 1257, 1165, 1160, 1262, 1161, 1279, 1280, 1292, 1301, 1304, - 1306, 879, 1309, 1331, 1263, 1311, 1332, 1333, 1337, 1341, - 791, 645, 783, 1124, 1122, 799, 797, 648, 1177, 1201, - 1174, 1175, 1264, 986, 1218, 1200, 690, 1265, 1208, 1266, - 1126, 1125, 659, 1173, 1267, 1268, 1300, 1275, 1286, 1287, - 1288, 337, 1127, 1128, 683, 687, 1289, 1296, 1299, 1130, - 1305, 1129, 290, 1302, 291, 304, 1308, 305, 1310, 1199, - 1247, 1339, 1338, 1340, 1343, 1344, 1245, 1198, 1246, 1303, - 1197, 1244, 983, 1239, 1214, 1226, 1221, 964, 1307, 798, - 1329, 675, 1342, 706, 0, 1241, 0, 0, 661, 709, - 0, 0, 1131, 0, 0, 0, 0, 0, 1180, 0, - 0, 667, 0, 0, 1138, 1290, 0, 0, 1170, 0, - 0, 0, 0, 1230, 1189, 0, 0, 0, 1156, 0, - 1132, 0, 0, 0, 1187, 0, 1181, 0, 0, 1232, - 0, 0, 1139, 1140, 0, 1141, 1142, 1143, 0, 1231, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1133, - 0, 1171, 0, 0, 0, 1182, 0, 1190, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1169, 0, 0, - 0, 0, 1233, 1188, 0, 1134, 0, 0, 0, 1135, - 0, 1183, 1144, 1136, 0, 1184, 0, 0, 0, 1185, - 0, 0, 0, 0, 0, 0, 1137, 1145, 0, 0, - 1146, 1147, 1186, 0, 1148, 0, 0, 0, 0, 0, - 0, 0, 1149, 0, 0, 1150, 0, 1151, 1152, 1153, - 0, 0, 1154, 0, 0, 1155, 0, 0, 0, 1162, - 0, 0, 1163, 1164, 0, 1165, 1160, 0, 1161 + 401, 908, 366, 286, 250, 367, 838, 231, 283, 296, + 307, 325, 868, 359, 377, 1129, 402, 1130, 1131, 1138, + 244, 1144, 30, 346, 365, 31, 859, 32, 954, 33, + 379, 380, 251, 252, 731, 253, 254, 255, 129, 130, + 129, 130, 42, 156, 44, 126, 129, 130, 46, 245, + 232, 284, 297, 308, 326, 48, 360, 378, 50, 403, + 298, 299, 300, 301, 302, 129, 130, 281, 292, 306, + 324, 317, 433, 224, 225, 246, 500, 434, 968, 247, + 504, 501, 256, 248, 1011, 505, 240, 1012, 1014, 241, + 516, 1015, 918, 919, 920, 517, 249, 257, 929, 930, + 258, 259, 52, 1020, 260, 731, 1021, 938, 939, 940, + 156, 519, 261, 860, 54, 262, 520, 263, 264, 265, + 902, 526, 266, 56, 338, 267, 527, 58, 805, 275, + 763, 554, 276, 277, 60, 278, 555, 290, 304, 291, + 305, 62, 769, 770, 771, 1060, 126, 571, 1061, 129, + 130, 575, 572, 156, 64, 156, 576, 500, 575, 288, + 89, 941, 973, 974, 92, 93, 129, 130, 94, 504, + 993, 95, 96, 97, 975, 994, 339, 66, 340, 341, + 156, 993, 342, 343, 344, 125, 995, 240, 1017, 1034, + 241, 129, 130, 1018, 1035, 129, 130, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 1041, 34, 35, 36, + 37, 1042, 1046, 1050, 427, 127, 128, 1047, 1051, 903, + 904, 905, 906, 1056, 428, 129, 130, 1129, 1057, 1130, + 1131, 1138, 131, 1144, 1221, 1222, 1223, 132, 133, 134, + 135, 136, 137, 138, 156, 139, 859, 866, 339, 867, + 140, 339, 361, 340, 341, 362, 363, 1282, 571, 141, + 1283, 156, 142, 1058, 430, 868, 1095, 129, 130, 143, + 129, 130, 421, 422, 1063, 908, 993, 144, 145, 1064, + 86, 1236, 146, 516, 431, 147, 156, 800, 1237, 148, + 156, 801, 802, 803, 804, 805, 806, 807, 808, 809, + 810, 811, 126, 379, 380, 812, 813, 814, 815, 816, + 149, 150, 151, 152, 153, 154, 98, 99, 100, 101, + 102, 103, 129, 130, 155, 719, 720, 721, 722, 1284, + 429, 1240, 1285, 1286, 1287, 1288, 1241, 441, 554, 339, + 156, 1261, 316, 1248, 126, 339, 1262, 442, 317, 318, + 319, 320, 321, 322, 519, 1228, 1229, 1230, 1199, 1264, + 1200, 1201, 723, 443, 129, 130, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 444, 445, 156, 787, 788, 156, 1150, 1151, 577, 578, + 888, 889, 890, 891, 892, 893, 526, 1302, 535, 157, + 446, 1265, 1303, 226, 734, 735, 736, 737, 447, 448, + 449, 1249, 1250, 1251, 450, 243, 451, 452, 289, 231, + 453, 454, 456, 457, 458, 303, 286, 250, 459, 460, + 464, 283, 465, 466, 296, 323, 470, 156, 475, 476, + 477, 307, 487, 244, 494, 345, 495, 496, 499, 503, + 364, 325, 511, 512, 366, 251, 252, 367, 253, 254, + 255, 359, 232, 522, 524, 525, 377, 536, 579, 540, + 401, 346, 245, 156, 284, 537, 365, 297, 544, 156, + 545, 546, 711, 548, 308, 549, 402, 551, 550, 556, + 281, 559, 561, 292, 326, 562, 565, 566, 246, 574, + 306, 580, 247, 581, 360, 256, 248, 129, 130, 378, + 324, 582, 583, 584, 585, 586, 587, 588, 589, 249, + 257, 590, 591, 258, 259, 592, 593, 260, 594, 403, + 599, 595, 596, 597, 598, 261, 601, 600, 262, 602, + 263, 264, 265, 607, 603, 266, 608, 604, 267, 605, + 606, 609, 275, 613, 610, 276, 277, 611, 278, 612, + 614, 615, 290, 616, 291, 617, 618, 619, 620, 304, + 621, 305, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 622, 624, 625, 623, 626, + 627, 628, 399, 400, 629, 630, 631, 632, 634, 633, + 635, 636, 637, 638, 639, 640, 643, 641, 642, 644, + 157, 646, 647, 226, 649, 650, 651, 652, 653, 654, + 656, 657, 156, 658, 655, 660, 662, 664, 668, 231, + 663, 665, 669, 713, 670, 666, 671, 672, 673, 674, + 676, 677, 679, 680, 681, 678, 907, 921, 931, 682, + 401, 684, 688, 689, 955, 692, 685, 686, 693, 694, + 691, 695, 909, 927, 932, 942, 402, 698, 699, 702, + 796, 696, 232, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 700, 701, 703, 704, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 705, + 707, 126, 697, 710, 708, 910, 928, 933, 943, 403, + 712, 714, 715, 233, 716, 234, 717, 727, 728, 718, + 725, 129, 130, 235, 236, 237, 238, 239, 131, 726, + 729, 730, 733, 132, 133, 134, 32, 739, 740, 741, + 743, 752, 240, 742, 744, 241, 140, 745, 746, 790, + 747, 748, 749, 242, 750, 751, 754, 753, 756, 755, + 758, 759, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 760, 761, 762, 764, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 765, + 126, 339, 795, 839, 873, 766, 767, 843, 847, 851, + 855, 877, 768, 880, 884, 951, 149, 150, 772, 960, + 129, 130, 964, 236, 237, 773, 239, 131, 980, 981, + 982, 983, 132, 133, 134, 774, 984, 775, 985, 986, + 988, 240, 776, 997, 241, 998, 156, 1000, 777, 1001, + 1003, 1004, 242, 1006, 1007, 1009, 1010, 1024, 778, 779, + 780, 781, 782, 784, 1013, 1023, 1026, 785, 1027, 786, + 792, 1028, 793, 794, 1029, 1030, 1031, 1032, 1033, 1038, + 1039, 1040, 1043, 1044, 1045, 1052, 1054, 1062, 1065, 1070, + 1069, 1072, 1073, 1081, 1076, 1075, 1077, 1078, 1079, 1080, + 1082, 1084, 1088, 1090, 1083, 149, 150, 1085, 243, 1086, + 1087, 345, 1089, 1091, 364, 1092, 1093, 1103, 366, 286, + 250, 367, 1148, 1181, 283, 1182, 1174, 359, 1152, 1110, + 377, 323, 1175, 1142, 381, 156, 244, 346, 1176, 1177, + 365, 1178, 1179, 1128, 1161, 1104, 1183, 325, 251, 252, + 907, 253, 254, 255, 1159, 921, 1153, 1111, 1112, 931, + 1113, 1114, 1115, 1191, 1184, 245, 909, 284, 1202, 1187, + 360, 927, 955, 378, 1105, 932, 1143, 289, 1185, 1188, + 303, 942, 1189, 281, 1204, 1154, 1192, 1162, 1194, 1195, + 326, 246, 1141, 296, 1203, 247, 307, 1196, 256, 248, + 1106, 1197, 1214, 1160, 1107, 1212, 324, 1116, 1108, 910, + 1215, 1155, 249, 257, 928, 1156, 258, 259, 933, 1157, + 260, 1109, 1117, 1220, 943, 1118, 1119, 1205, 261, 1120, + 1225, 262, 1158, 263, 264, 265, 297, 1121, 266, 308, + 1122, 267, 1123, 1124, 1125, 275, 1226, 1126, 276, 277, + 1127, 278, 292, 1238, 1134, 306, 1239, 1135, 1136, 1227, + 1137, 1132, 1232, 1133, 1233, 1244, 1245, 1246, 1234, 1235, + 1242, 1247, 1259, 1253, 1268, 1254, 1255, 1271, 1273, 1278, + 1276, 1298, 1299, 1300, 1304, 1308, 783, 797, 645, 799, + 648, 865, 791, 972, 1096, 1094, 1149, 1256, 1263, 1146, + 1147, 1173, 1190, 1266, 690, 1172, 1180, 1269, 1272, 1275, + 1277, 1305, 1306, 1307, 1310, 1311, 1098, 1145, 1097, 1267, + 337, 290, 1099, 291, 304, 1100, 305, 1101, 683, 659, + 1102, 1217, 969, 1216, 687, 661, 1171, 1270, 1170, 1219, + 1218, 1186, 1193, 1198, 950, 667, 1169, 706, 1274, 1103, + 675, 1211, 709, 798, 1296, 1152, 1309, 1213, 0, 0, + 0, 1110, 0, 0, 0, 1142, 0, 1257, 0, 0, + 1202, 1161, 0, 0, 0, 1128, 0, 1104, 0, 0, + 0, 1159, 0, 1153, 0, 0, 1204, 0, 0, 1111, + 1112, 0, 1113, 1114, 1115, 0, 1203, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1105, 0, 1143, 0, + 0, 0, 1154, 0, 1162, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1141, 0, 0, 0, 0, 1205, + 1160, 0, 1106, 0, 0, 0, 1107, 0, 1155, 1116, + 1108, 0, 1156, 0, 0, 0, 1157, 0, 0, 0, + 0, 0, 0, 1109, 1117, 0, 0, 1118, 1119, 1158, + 0, 1120, 0, 0, 0, 0, 0, 0, 0, 1121, + 0, 0, 1122, 0, 1123, 1124, 1125, 0, 0, 1126, + 0, 0, 1127, 0, 0, 0, 1134, 0, 0, 1135, + 1136, 0, 1137, 1132, 0, 1133 }; const short @@ -5668,372 +5495,364 @@ namespace isc { namespace dhcp { { 71, 72, 73, 74, 75, 76, 16, 78, 79, 80, 81, 747, 79, 73, 73, 79, 716, 72, 73, 74, - 75, 76, 741, 78, 79, 1029, 81, 1029, 1029, 1029, - 73, 1029, 128, 78, 79, 5, 21, 7, 7, 9, - 135, 136, 73, 73, 126, 73, 73, 73, 0, 3, - 618, 133, 16, 17, 8, 200, 81, 13, 14, 73, + 75, 76, 741, 78, 79, 1008, 81, 1008, 1008, 1008, + 73, 1008, 0, 78, 79, 5, 120, 7, 192, 9, + 127, 128, 73, 73, 618, 73, 73, 73, 92, 93, + 92, 93, 7, 207, 7, 72, 92, 93, 7, 73, 72, 73, 74, 75, 76, 7, 78, 79, 7, 81, - 215, 181, 182, 183, 184, 100, 101, 73, 74, 75, - 76, 3, 3, 3, 7, 73, 8, 8, 8, 73, - 3, 7, 73, 73, 3, 8, 81, 6, 83, 84, - 3, 7, 87, 88, 89, 8, 73, 73, 218, 21, - 73, 73, 3, 7, 73, 100, 101, 8, 30, 215, - 215, 689, 73, 128, 129, 73, 131, 73, 73, 73, - 7, 80, 73, 3, 215, 73, 100, 101, 8, 73, - 7, 3, 73, 73, 7, 73, 8, 74, 75, 74, - 75, 100, 101, 11, 12, 3, 3, 15, 6, 6, - 18, 19, 20, 100, 101, 7, 191, 7, 193, 194, - 192, 120, 656, 195, 196, 197, 198, 126, 127, 128, - 129, 130, 131, 7, 668, 669, 670, 3, 100, 101, - 215, 10, 8, 79, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 6, 161, 162, 163, 100, 101, 3, - 215, 3, 90, 91, 8, 3, 148, 149, 150, 151, - 8, 3, 100, 101, 6, 215, 216, 217, 218, 107, - 3, 215, 4, 6, 112, 113, 114, 115, 116, 117, - 118, 8, 120, 3, 100, 101, 215, 125, 8, 1273, - 3, 1273, 1273, 1273, 4, 1273, 134, 80, 215, 137, - 3, 154, 155, 156, 3, 8, 144, 4, 3, 8, - 93, 3, 80, 8, 152, 153, 8, 100, 101, 157, - 3, 8, 160, 215, 4, 8, 164, 95, 96, 97, - 98, 99, 100, 101, 3, 3, 1035, 1017, 121, 8, - 8, 124, 158, 159, 135, 136, 1062, 185, 186, 187, - 188, 189, 190, 121, 3, 3, 124, 4, 3, 21, - 8, 199, 215, 8, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 4, 215, 4, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 4, 81, 82, 83, 84, 85, 86, 178, 179, 215, - 4, 4, 52, 53, 54, 55, 56, 57, 4, 4, - 100, 101, 138, 139, 140, 141, 142, 143, 3, 81, - 3, 3, 3, 8, 3, 8, 8, 8, 3, 8, - 80, 81, 215, 8, 4, 3, 3, 8, 428, 429, - 8, 8, 108, 109, 110, 111, 4, 215, 4, 500, - 100, 101, 4, 504, 4, 4, 22, 23, 24, 25, - 38, 39, 40, 4, 4, 516, 4, 4, 519, 504, - 4, 4, 122, 123, 4, 526, 516, 516, 145, 146, - 147, 516, 4, 4, 519, 536, 4, 4, 4, 4, + 87, 88, 89, 90, 91, 92, 93, 73, 74, 75, + 76, 118, 3, 16, 17, 73, 3, 8, 125, 73, + 3, 8, 73, 73, 3, 8, 113, 6, 3, 116, + 3, 6, 146, 147, 148, 8, 73, 73, 150, 151, + 73, 73, 7, 3, 73, 689, 6, 153, 154, 155, + 207, 3, 73, 207, 7, 73, 8, 73, 73, 73, + 21, 3, 73, 7, 21, 73, 8, 7, 29, 73, + 656, 3, 73, 73, 7, 73, 8, 74, 75, 74, + 75, 7, 668, 669, 670, 3, 72, 3, 6, 92, + 93, 3, 8, 207, 7, 207, 8, 3, 3, 85, + 10, 207, 8, 8, 11, 12, 92, 93, 15, 3, + 3, 18, 19, 20, 8, 8, 73, 7, 75, 76, + 207, 3, 79, 80, 81, 71, 8, 113, 3, 3, + 116, 92, 93, 8, 8, 92, 93, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 3, 207, 208, 209, + 210, 8, 3, 3, 6, 82, 83, 8, 8, 140, + 141, 142, 143, 3, 3, 92, 93, 1240, 8, 1240, + 1240, 1240, 99, 1240, 22, 23, 24, 104, 105, 106, + 107, 108, 109, 110, 207, 112, 120, 121, 73, 123, + 117, 73, 74, 75, 76, 77, 78, 3, 3, 126, + 6, 207, 129, 8, 8, 1014, 996, 92, 93, 136, + 92, 93, 13, 14, 3, 1041, 3, 144, 145, 8, + 207, 8, 149, 3, 3, 152, 207, 21, 8, 156, + 207, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 72, 127, 128, 39, 40, 41, 42, 43, + 177, 178, 179, 180, 181, 182, 44, 45, 46, 47, + 48, 49, 92, 93, 191, 173, 174, 175, 176, 184, + 4, 3, 187, 188, 189, 190, 8, 4, 3, 73, + 207, 3, 112, 8, 72, 73, 8, 4, 118, 119, + 120, 121, 122, 123, 3, 36, 37, 38, 183, 8, + 185, 186, 210, 4, 92, 93, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 4, 4, 207, 170, 171, 207, 114, 115, 428, 429, + 130, 131, 132, 133, 134, 135, 3, 3, 8, 500, + 4, 8, 8, 504, 100, 101, 102, 103, 4, 4, + 4, 137, 138, 139, 4, 516, 4, 4, 519, 504, + 4, 4, 4, 4, 4, 526, 516, 516, 4, 4, + 4, 516, 4, 4, 519, 536, 4, 207, 4, 4, 4, 526, 4, 516, 4, 546, 4, 4, 4, 4, 551, 536, 4, 4, 551, 516, 516, 551, 516, 516, - 516, 546, 504, 8, 3, 8, 551, 4, 4, 3, - 571, 546, 516, 4, 516, 215, 551, 519, 4, 4, - 4, 4, 4, 4, 526, 4, 571, 215, 4, 4, - 516, 4, 4, 519, 536, 4, 4, 218, 516, 4, - 526, 216, 516, 215, 546, 516, 516, 100, 101, 551, - 536, 216, 216, 216, 216, 215, 217, 4, 4, 516, - 516, 217, 216, 516, 516, 216, 216, 516, 217, 571, - 216, 216, 216, 216, 4, 516, 218, 218, 516, 218, - 516, 516, 516, 218, 218, 516, 218, 4, 516, 4, - 4, 216, 516, 4, 4, 516, 516, 4, 516, 4, - 218, 218, 519, 218, 519, 4, 4, 4, 4, 526, - 4, 526, 165, 166, 167, 168, 169, 170, 171, 172, - 173, 174, 175, 176, 177, 4, 4, 4, 4, 216, - 4, 4, 185, 186, 201, 202, 203, 204, 205, 206, - 207, 208, 209, 210, 211, 212, 213, 214, 4, 4, - 711, 4, 4, 714, 218, 218, 4, 218, 4, 4, - 218, 4, 215, 4, 4, 7, 4, 4, 4, 714, - 216, 4, 4, 218, 4, 4, 4, 216, 216, 216, - 4, 4, 4, 4, 4, 4, 747, 748, 749, 4, - 751, 4, 4, 216, 755, 4, 4, 4, 4, 218, - 4, 4, 747, 748, 749, 750, 751, 4, 218, 218, - 710, 218, 714, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 4, 216, 4, 216, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 216, - 4, 80, 4, 4, 218, 747, 748, 749, 750, 751, - 4, 218, 216, 92, 4, 94, 4, 4, 4, 215, - 5, 100, 101, 102, 103, 104, 105, 106, 107, 7, - 7, 7, 7, 112, 113, 114, 215, 215, 215, 5, - 5, 5, 121, 5, 7, 124, 125, 215, 5, 5, - 5, 5, 215, 132, 7, 5, 5, 215, 5, 7, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 7, 7, 7, 7, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 7, 80, 81, - 7, 5, 5, 5, 215, 215, 7, 5, 7, 119, - 215, 7, 7, 215, 215, 215, 185, 186, 100, 101, - 215, 103, 104, 215, 106, 107, 215, 215, 215, 7, - 112, 113, 114, 180, 215, 215, 215, 7, 215, 121, - 7, 215, 124, 7, 7, 7, 215, 7, 7, 4, - 132, 215, 4, 4, 215, 4, 4, 4, 215, 215, - 215, 4, 4, 4, 4, 4, 3, 215, 6, 215, - 6, 215, 3, 6, 3, 3, 6, 3, 218, 6, - 3, 6, 6, 3, 6, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 215, 3, 6, 185, 186, 6, 3, 6, 8, 4, - 4, 4, 4, 216, 216, 4, 216, 218, 216, 216, - 4, 4, 4, 4, 4, 218, 216, 216, 216, 1020, - 4, 4, 1023, 215, 4, 1026, 4, 216, 1029, 1026, - 1020, 1020, 1026, 216, 216, 1020, 216, 216, 1023, 1040, - 1029, 1026, 1043, 216, 1029, 1046, 4, 1020, 1023, 4, - 218, 1026, 4, 4, 1029, 1040, 1029, 216, 1043, 1020, - 1020, 1062, 1020, 1020, 1020, 1040, 1067, 1040, 1029, 1029, - 1071, 1029, 1029, 1029, 216, 216, 1020, 1062, 1020, 1080, - 216, 1023, 1067, 1084, 1026, 1029, 1071, 1029, 1089, 216, - 218, 1092, 1077, 4, 1020, 1080, 1040, 216, 1040, 4, - 218, 1043, 1020, 1029, 1089, 1080, 1020, 1092, 6, 1020, - 1020, 1029, 3, 215, 1040, 1029, 4, 1043, 1029, 1029, - 1062, 215, 1040, 1020, 1020, 1067, 1040, 1020, 1020, 1071, - 1040, 1020, 1029, 1029, 215, 1077, 1029, 1029, 1080, 1020, - 1029, 8, 1020, 1040, 1020, 1020, 1020, 1089, 1029, 1020, - 1092, 1029, 1020, 1029, 1029, 1029, 1020, 8, 1029, 1020, - 1020, 1029, 1020, 1089, 4, 1029, 1092, 8, 1029, 1029, - 215, 1029, 1029, 215, 1029, 3, 8, 4, 4, 4, - 4, 740, 5, 4, 215, 7, 4, 4, 4, 4, - 702, 500, 689, 1019, 1014, 714, 711, 504, 1038, 1048, - 1032, 1035, 215, 795, 1067, 1046, 554, 215, 1055, 215, - 1022, 1020, 516, 1031, 215, 215, 1273, 215, 215, 215, - 215, 77, 1023, 1025, 546, 551, 215, 215, 215, 1028, - 216, 1026, 1089, 218, 1089, 1092, 215, 1092, 215, 1045, - 1094, 216, 218, 216, 215, 215, 1091, 1043, 1092, 1279, - 1041, 1089, 765, 1081, 1062, 1077, 1071, 751, 1294, 713, - 1315, 536, 1335, 571, -1, 1084, -1, -1, 519, 575, - -1, -1, 1273, -1, -1, -1, -1, -1, 1279, -1, - -1, 526, -1, -1, 1273, 1225, -1, -1, 1273, -1, - -1, -1, -1, 1294, 1279, -1, -1, -1, 1273, -1, - 1273, -1, -1, -1, 1279, -1, 1279, -1, -1, 1294, - -1, -1, 1273, 1273, -1, 1273, 1273, 1273, -1, 1294, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 1273, - -1, 1273, -1, -1, -1, 1279, -1, 1279, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 1273, -1, -1, - -1, -1, 1294, 1279, -1, 1273, -1, -1, -1, 1273, - -1, 1279, 1273, 1273, -1, 1279, -1, -1, -1, 1279, - -1, -1, -1, -1, -1, -1, 1273, 1273, -1, -1, - 1273, 1273, 1279, -1, 1273, -1, -1, -1, -1, -1, - -1, -1, 1273, -1, -1, 1273, -1, 1273, 1273, 1273, - -1, -1, 1273, -1, -1, 1273, -1, -1, -1, 1273, - -1, -1, 1273, 1273, -1, 1273, 1273, -1, 1273 + 516, 546, 504, 4, 4, 4, 551, 3, 207, 4, + 571, 546, 516, 207, 516, 8, 551, 519, 4, 207, + 8, 3, 7, 4, 526, 4, 571, 3, 8, 4, + 516, 4, 4, 519, 536, 4, 4, 4, 516, 4, + 526, 4, 516, 4, 546, 516, 516, 92, 93, 551, + 536, 4, 4, 4, 4, 4, 208, 208, 208, 516, + 516, 208, 208, 516, 516, 208, 208, 516, 208, 571, + 208, 210, 209, 209, 209, 516, 4, 208, 516, 208, + 516, 516, 516, 4, 208, 516, 4, 210, 516, 210, + 210, 4, 516, 4, 210, 516, 516, 210, 516, 210, + 4, 4, 519, 208, 519, 4, 4, 4, 4, 526, + 210, 526, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 210, 4, 4, 210, 4, + 4, 4, 177, 178, 4, 4, 4, 4, 4, 208, + 4, 4, 4, 4, 4, 210, 4, 210, 210, 4, + 711, 4, 210, 714, 4, 4, 4, 4, 4, 208, + 4, 4, 207, 4, 210, 4, 4, 4, 4, 714, + 208, 208, 4, 7, 4, 208, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 208, 747, 748, 749, 210, + 751, 4, 4, 4, 755, 4, 210, 210, 4, 208, + 210, 4, 747, 748, 749, 750, 751, 4, 4, 4, + 710, 208, 714, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 210, 210, 4, 4, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 4, + 4, 72, 208, 4, 208, 747, 748, 749, 750, 751, + 207, 7, 7, 84, 7, 86, 5, 5, 5, 207, + 207, 92, 93, 94, 95, 96, 97, 98, 99, 207, + 5, 5, 207, 104, 105, 106, 7, 5, 5, 5, + 5, 207, 113, 7, 5, 116, 117, 5, 7, 172, + 7, 7, 7, 124, 7, 7, 5, 207, 5, 7, + 5, 5, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 207, 207, 207, 207, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 7, + 72, 73, 5, 7, 111, 207, 207, 7, 7, 7, + 7, 7, 207, 7, 7, 7, 177, 178, 207, 7, + 92, 93, 7, 95, 96, 207, 98, 99, 4, 4, + 4, 4, 104, 105, 106, 207, 4, 207, 4, 4, + 4, 113, 207, 6, 116, 3, 207, 6, 207, 3, + 6, 3, 124, 6, 3, 6, 3, 3, 207, 207, + 207, 207, 207, 207, 6, 6, 6, 207, 3, 207, + 207, 4, 207, 207, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 207, 3, + 6, 6, 3, 208, 6, 8, 4, 4, 4, 4, + 210, 210, 4, 4, 208, 177, 178, 208, 999, 208, + 208, 1002, 208, 4, 1005, 4, 4, 1008, 1005, 999, + 999, 1005, 4, 4, 999, 4, 208, 1002, 1019, 1008, + 1005, 1022, 208, 1008, 1025, 207, 999, 1002, 208, 208, + 1005, 208, 208, 1008, 1019, 1008, 208, 1022, 999, 999, + 1041, 999, 999, 999, 1019, 1046, 1019, 1008, 1008, 1050, + 1008, 1008, 1008, 4, 208, 999, 1041, 999, 1059, 210, + 1002, 1046, 1063, 1005, 1008, 1050, 1008, 1068, 208, 208, + 1071, 1056, 208, 999, 1059, 1019, 4, 1019, 210, 4, + 1022, 999, 1008, 1068, 1059, 999, 1071, 208, 999, 999, + 1008, 4, 6, 1019, 1008, 210, 1022, 1008, 1008, 1041, + 3, 1019, 999, 999, 1046, 1019, 999, 999, 1050, 1019, + 999, 1008, 1008, 4, 1056, 1008, 1008, 1059, 999, 1008, + 207, 999, 1019, 999, 999, 999, 1068, 1008, 999, 1071, + 1008, 999, 1008, 1008, 1008, 999, 207, 1008, 999, 999, + 1008, 999, 1068, 8, 1008, 1071, 8, 1008, 1008, 207, + 1008, 1008, 207, 1008, 207, 4, 8, 3, 207, 207, + 207, 8, 4, 207, 4, 207, 207, 4, 4, 7, + 5, 4, 4, 4, 4, 4, 689, 711, 500, 714, + 504, 740, 702, 795, 998, 993, 1017, 207, 207, 1011, + 1014, 1027, 1046, 207, 554, 1025, 1034, 210, 208, 207, + 207, 210, 208, 208, 207, 207, 1001, 1010, 999, 1240, + 77, 1068, 1002, 1068, 1071, 1004, 1071, 1005, 546, 516, + 1007, 1070, 765, 1068, 551, 519, 1024, 1246, 1022, 1073, + 1071, 1041, 1050, 1056, 751, 526, 1020, 571, 1261, 1240, + 536, 1060, 575, 713, 1282, 1246, 1302, 1063, -1, -1, + -1, 1240, -1, -1, -1, 1240, -1, 1197, -1, -1, + 1261, 1246, -1, -1, -1, 1240, -1, 1240, -1, -1, + -1, 1246, -1, 1246, -1, -1, 1261, -1, -1, 1240, + 1240, -1, 1240, 1240, 1240, -1, 1261, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1240, -1, 1240, -1, + -1, -1, 1246, -1, 1246, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 1240, -1, -1, -1, -1, 1261, + 1246, -1, 1240, -1, -1, -1, 1240, -1, 1246, 1240, + 1240, -1, 1246, -1, -1, -1, 1246, -1, -1, -1, + -1, -1, -1, 1240, 1240, -1, -1, 1240, 1240, 1246, + -1, 1240, -1, -1, -1, -1, -1, -1, -1, 1240, + -1, -1, 1240, -1, 1240, 1240, 1240, -1, -1, 1240, + -1, -1, 1240, -1, -1, -1, 1240, -1, -1, 1240, + 1240, -1, 1240, 1240, -1, 1240 }; const short Dhcp6Parser::yystos_[] = { - 0, 201, 202, 203, 204, 205, 206, 207, 208, 209, - 210, 211, 212, 213, 214, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, - 0, 5, 7, 9, 215, 216, 217, 218, 235, 236, - 237, 242, 7, 251, 7, 256, 7, 303, 7, 420, - 7, 500, 7, 516, 7, 533, 7, 452, 7, 458, - 7, 482, 7, 396, 7, 602, 7, 633, 243, 238, - 252, 257, 304, 421, 501, 517, 534, 453, 459, 483, - 397, 603, 634, 235, 244, 245, 215, 240, 241, 10, - 253, 255, 11, 12, 15, 18, 19, 20, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 90, 91, 100, - 101, 107, 112, 113, 114, 115, 116, 117, 118, 120, - 125, 134, 137, 144, 152, 153, 157, 160, 164, 185, - 186, 187, 188, 189, 190, 199, 215, 250, 258, 259, - 260, 262, 263, 264, 265, 266, 267, 268, 269, 270, - 271, 272, 273, 274, 275, 276, 277, 278, 279, 282, - 284, 286, 287, 288, 290, 292, 293, 294, 295, 297, - 298, 299, 300, 301, 310, 312, 314, 363, 369, 375, - 381, 383, 390, 404, 414, 434, 435, 436, 437, 442, - 450, 476, 506, 508, 527, 557, 569, 581, 582, 590, - 600, 631, 640, 664, 16, 17, 250, 305, 306, 307, - 309, 506, 508, 92, 94, 102, 103, 104, 105, 106, - 121, 124, 132, 250, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 276, 277, 278, - 279, 282, 284, 286, 287, 288, 290, 292, 422, 423, - 424, 426, 428, 430, 432, 434, 435, 436, 437, 440, - 441, 476, 494, 506, 508, 510, 527, 552, 93, 250, - 430, 432, 476, 502, 503, 504, 506, 508, 95, 96, - 97, 98, 99, 250, 430, 432, 476, 506, 508, 518, - 519, 520, 522, 523, 525, 526, 120, 126, 127, 128, - 129, 130, 131, 250, 476, 506, 508, 535, 536, 537, - 538, 540, 542, 544, 546, 548, 550, 450, 21, 81, - 83, 84, 87, 88, 89, 250, 332, 460, 461, 462, - 463, 464, 465, 466, 468, 470, 472, 473, 475, 506, - 508, 82, 85, 86, 250, 332, 464, 470, 484, 485, - 486, 487, 488, 490, 491, 492, 493, 506, 508, 135, - 136, 250, 398, 399, 400, 402, 165, 166, 167, 168, - 169, 170, 171, 172, 173, 174, 175, 176, 177, 185, - 186, 250, 506, 508, 604, 605, 606, 607, 609, 611, - 612, 614, 615, 616, 619, 621, 622, 623, 625, 627, - 629, 13, 14, 635, 636, 637, 639, 6, 3, 4, - 8, 3, 254, 3, 8, 261, 632, 302, 311, 313, - 315, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 296, 4, 4, 4, 4, - 4, 280, 283, 285, 4, 4, 4, 415, 451, 477, - 4, 443, 507, 509, 438, 4, 4, 4, 370, 382, - 376, 364, 558, 528, 391, 405, 570, 4, 384, 583, - 591, 601, 289, 291, 4, 4, 4, 641, 665, 4, - 3, 8, 308, 4, 3, 8, 495, 511, 425, 427, - 429, 4, 4, 433, 431, 553, 3, 8, 505, 3, - 8, 521, 4, 524, 4, 4, 3, 8, 551, 539, - 541, 543, 545, 547, 549, 8, 3, 8, 467, 333, - 4, 471, 469, 474, 4, 8, 3, 489, 4, 4, - 8, 3, 401, 403, 3, 8, 4, 608, 610, 4, - 613, 4, 4, 617, 620, 4, 4, 624, 626, 628, - 630, 3, 8, 638, 4, 3, 8, 235, 235, 215, - 4, 4, 4, 4, 4, 4, 4, 216, 216, 216, - 216, 216, 216, 216, 216, 218, 217, 217, 217, 216, - 216, 4, 216, 216, 218, 218, 218, 4, 4, 4, - 218, 218, 218, 4, 4, 4, 216, 4, 4, 4, - 4, 218, 218, 218, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 216, 4, 4, 4, 4, 4, 4, - 218, 218, 218, 4, 4, 259, 4, 218, 306, 4, - 4, 4, 4, 4, 216, 218, 4, 4, 4, 423, - 4, 503, 4, 216, 4, 216, 216, 519, 4, 4, - 4, 4, 4, 4, 4, 537, 4, 4, 216, 4, - 4, 4, 218, 462, 4, 218, 218, 486, 4, 4, - 399, 218, 4, 4, 216, 4, 216, 216, 4, 4, - 218, 218, 4, 4, 4, 4, 605, 4, 216, 636, - 4, 7, 215, 7, 7, 7, 7, 5, 215, 181, - 182, 183, 184, 218, 281, 215, 215, 5, 5, 5, - 5, 237, 239, 215, 108, 109, 110, 111, 439, 5, + 0, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 0, 5, 7, 9, 207, 208, 209, 210, 227, 228, + 229, 234, 7, 243, 7, 248, 7, 295, 7, 401, + 7, 481, 7, 497, 7, 514, 7, 433, 7, 439, + 7, 463, 7, 377, 7, 583, 7, 614, 235, 230, + 244, 249, 296, 402, 482, 498, 515, 434, 440, 464, + 378, 584, 615, 227, 236, 237, 207, 232, 233, 10, + 245, 247, 11, 12, 15, 18, 19, 20, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 82, 83, 92, + 93, 99, 104, 105, 106, 107, 108, 109, 110, 112, + 117, 126, 129, 136, 144, 145, 149, 152, 156, 177, + 178, 179, 180, 181, 182, 191, 207, 242, 250, 251, + 252, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 274, + 276, 278, 279, 280, 282, 284, 285, 286, 287, 289, + 290, 291, 292, 293, 302, 304, 306, 344, 350, 356, + 362, 364, 371, 385, 395, 415, 416, 417, 418, 423, + 431, 457, 487, 489, 508, 538, 550, 562, 563, 571, + 581, 612, 621, 645, 16, 17, 242, 297, 298, 299, + 301, 487, 489, 84, 86, 94, 95, 96, 97, 98, + 113, 116, 124, 242, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 268, 269, 270, + 271, 274, 276, 278, 279, 280, 282, 284, 403, 404, + 405, 407, 409, 411, 413, 415, 416, 417, 418, 421, + 422, 457, 475, 487, 489, 491, 508, 533, 85, 242, + 411, 413, 457, 483, 484, 485, 487, 489, 87, 88, + 89, 90, 91, 242, 411, 413, 457, 487, 489, 499, + 500, 501, 503, 504, 506, 507, 112, 118, 119, 120, + 121, 122, 123, 242, 457, 487, 489, 516, 517, 518, + 519, 521, 523, 525, 527, 529, 531, 431, 21, 73, + 75, 76, 79, 80, 81, 242, 324, 441, 442, 443, + 444, 445, 446, 447, 449, 451, 453, 454, 456, 487, + 489, 74, 77, 78, 242, 324, 445, 451, 465, 466, + 467, 468, 469, 471, 472, 473, 474, 487, 489, 127, + 128, 242, 379, 380, 381, 383, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 177, + 178, 242, 487, 489, 585, 586, 587, 588, 590, 592, + 593, 595, 596, 597, 600, 602, 603, 604, 606, 608, + 610, 13, 14, 616, 617, 618, 620, 6, 3, 4, + 8, 3, 246, 3, 8, 253, 613, 294, 303, 305, + 307, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 288, 4, 4, 4, 4, + 4, 272, 275, 277, 4, 4, 4, 396, 432, 458, + 4, 424, 488, 490, 419, 4, 4, 4, 351, 363, + 357, 345, 539, 509, 372, 386, 551, 4, 365, 564, + 572, 582, 281, 283, 4, 4, 4, 622, 646, 4, + 3, 8, 300, 4, 3, 8, 476, 492, 406, 408, + 410, 4, 4, 414, 412, 534, 3, 8, 486, 3, + 8, 502, 4, 505, 4, 4, 3, 8, 532, 520, + 522, 524, 526, 528, 530, 8, 3, 8, 448, 325, + 4, 452, 450, 455, 4, 8, 3, 470, 4, 4, + 8, 3, 382, 384, 3, 8, 4, 589, 591, 4, + 594, 4, 4, 598, 601, 4, 4, 605, 607, 609, + 611, 3, 8, 619, 4, 3, 8, 227, 227, 207, + 4, 4, 4, 4, 4, 4, 4, 208, 208, 208, + 208, 208, 208, 208, 208, 210, 209, 209, 209, 208, + 208, 4, 208, 208, 210, 210, 210, 4, 4, 4, + 210, 210, 210, 4, 4, 4, 208, 4, 4, 4, + 4, 210, 210, 210, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 208, 4, 4, 4, 4, 4, 4, + 210, 210, 210, 4, 4, 251, 4, 210, 298, 4, + 4, 4, 4, 4, 208, 210, 4, 4, 4, 404, + 4, 484, 4, 208, 4, 208, 208, 500, 4, 4, + 4, 4, 4, 4, 4, 518, 4, 4, 208, 4, + 4, 4, 210, 443, 4, 210, 210, 467, 4, 4, + 380, 210, 4, 4, 208, 4, 208, 208, 4, 4, + 210, 210, 4, 4, 4, 4, 586, 4, 208, 617, + 4, 7, 207, 7, 7, 7, 7, 5, 207, 173, + 174, 175, 176, 210, 273, 207, 207, 5, 5, 5, + 5, 229, 231, 207, 100, 101, 102, 103, 420, 5, 5, 5, 7, 5, 5, 5, 7, 7, 7, 7, - 7, 7, 215, 215, 5, 7, 5, 246, 5, 5, - 215, 215, 215, 246, 215, 7, 215, 215, 215, 246, - 246, 246, 215, 215, 215, 215, 215, 215, 215, 215, - 215, 215, 215, 239, 215, 215, 215, 178, 179, 618, - 180, 281, 215, 215, 215, 5, 235, 258, 635, 305, - 21, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 250, 320, 321, 322, 325, 327, - 329, 331, 332, 334, 335, 336, 337, 338, 339, 342, - 343, 344, 345, 346, 348, 349, 351, 353, 355, 357, - 359, 361, 320, 7, 316, 317, 318, 7, 416, 417, - 418, 7, 454, 455, 456, 7, 478, 479, 480, 7, - 444, 445, 446, 128, 215, 371, 372, 373, 374, 244, - 129, 131, 373, 377, 378, 379, 380, 119, 365, 366, - 367, 7, 559, 560, 7, 529, 530, 531, 7, 392, - 393, 394, 138, 139, 140, 141, 142, 143, 406, 407, - 408, 409, 410, 411, 412, 413, 21, 148, 149, 150, - 151, 250, 334, 506, 508, 571, 572, 573, 576, 577, - 579, 580, 154, 155, 156, 250, 385, 386, 387, 388, - 389, 506, 508, 158, 159, 250, 506, 508, 584, 585, - 586, 588, 161, 162, 163, 215, 506, 508, 592, 593, - 594, 595, 597, 598, 604, 7, 642, 643, 200, 250, - 666, 667, 668, 247, 7, 496, 497, 498, 7, 512, - 513, 514, 133, 538, 554, 555, 316, 8, 8, 8, - 323, 326, 328, 330, 4, 4, 4, 4, 4, 347, - 4, 4, 340, 350, 352, 354, 4, 4, 4, 4, - 356, 358, 360, 362, 3, 8, 8, 319, 6, 3, - 419, 6, 3, 457, 6, 3, 481, 6, 3, 447, - 6, 3, 3, 6, 6, 3, 6, 368, 3, 8, - 561, 3, 6, 532, 6, 3, 395, 6, 3, 4, - 4, 4, 4, 4, 4, 3, 8, 574, 578, 4, - 4, 4, 3, 8, 4, 4, 4, 3, 8, 587, - 589, 3, 8, 4, 596, 4, 599, 3, 8, 8, - 644, 3, 6, 4, 3, 8, 215, 248, 249, 499, - 6, 3, 515, 6, 3, 556, 8, 6, 4, 4, - 4, 4, 216, 218, 216, 218, 216, 4, 216, 216, - 4, 4, 4, 4, 216, 216, 218, 216, 4, 4, - 4, 4, 321, 320, 318, 422, 418, 460, 456, 484, - 480, 250, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, 273, 274, 276, 277, 278, 279, 282, - 284, 286, 287, 288, 290, 292, 332, 414, 426, 428, - 430, 432, 434, 435, 436, 437, 441, 448, 449, 476, - 506, 508, 552, 446, 372, 378, 4, 366, 122, 123, - 250, 262, 263, 264, 265, 266, 267, 332, 476, 506, - 508, 562, 563, 564, 565, 566, 568, 560, 535, 531, - 398, 394, 216, 216, 216, 216, 216, 216, 407, 4, - 4, 216, 216, 216, 572, 218, 216, 216, 386, 4, - 4, 585, 218, 4, 216, 4, 593, 191, 193, 194, - 250, 332, 506, 508, 645, 646, 647, 648, 650, 643, - 218, 667, 6, 3, 502, 498, 518, 514, 4, 22, - 23, 24, 25, 324, 215, 215, 215, 215, 38, 39, - 40, 341, 215, 215, 215, 215, 215, 215, 215, 8, - 8, 8, 8, 3, 8, 215, 567, 4, 8, 3, - 8, 8, 145, 146, 147, 575, 215, 215, 215, 215, - 235, 651, 4, 649, 3, 8, 215, 8, 8, 215, - 449, 4, 218, 564, 4, 216, 4, 646, 215, 5, - 215, 7, 652, 653, 654, 3, 6, 192, 195, 196, - 197, 198, 655, 656, 657, 659, 660, 661, 662, 653, - 658, 4, 4, 4, 663, 3, 8, 4, 218, 216, - 216, 4, 656, 215, 215 + 7, 7, 207, 207, 5, 7, 5, 238, 5, 5, + 207, 207, 207, 238, 207, 7, 207, 207, 207, 238, + 238, 238, 207, 207, 207, 207, 207, 207, 207, 207, + 207, 207, 207, 231, 207, 207, 207, 170, 171, 599, + 172, 273, 207, 207, 207, 5, 227, 250, 616, 297, + 21, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 39, 40, 41, 42, 43, 242, 312, 313, + 314, 317, 319, 321, 323, 324, 326, 327, 328, 329, + 330, 331, 334, 335, 336, 338, 340, 342, 312, 7, + 308, 309, 310, 7, 397, 398, 399, 7, 435, 436, + 437, 7, 459, 460, 461, 7, 425, 426, 427, 120, + 207, 352, 353, 354, 355, 236, 121, 123, 354, 358, + 359, 360, 361, 111, 346, 347, 348, 7, 540, 541, + 7, 510, 511, 512, 7, 373, 374, 375, 130, 131, + 132, 133, 134, 135, 387, 388, 389, 390, 391, 392, + 393, 394, 21, 140, 141, 142, 143, 242, 326, 487, + 489, 552, 553, 554, 557, 558, 560, 561, 146, 147, + 148, 242, 366, 367, 368, 369, 370, 487, 489, 150, + 151, 242, 487, 489, 565, 566, 567, 569, 153, 154, + 155, 207, 487, 489, 573, 574, 575, 576, 578, 579, + 585, 7, 623, 624, 192, 242, 647, 648, 649, 239, + 7, 477, 478, 479, 7, 493, 494, 495, 125, 519, + 535, 536, 308, 8, 8, 8, 315, 318, 320, 322, + 4, 4, 4, 4, 4, 4, 4, 332, 4, 337, + 339, 341, 343, 3, 8, 8, 311, 6, 3, 400, + 6, 3, 438, 6, 3, 462, 6, 3, 428, 6, + 3, 3, 6, 6, 3, 6, 349, 3, 8, 542, + 3, 6, 513, 6, 3, 376, 6, 3, 4, 4, + 4, 4, 4, 4, 3, 8, 555, 559, 4, 4, + 4, 3, 8, 4, 4, 4, 3, 8, 568, 570, + 3, 8, 4, 577, 4, 580, 3, 8, 8, 625, + 3, 6, 4, 3, 8, 207, 240, 241, 480, 6, + 3, 496, 6, 3, 537, 8, 6, 4, 4, 4, + 4, 208, 210, 208, 210, 208, 208, 208, 4, 208, + 4, 4, 4, 4, 313, 312, 310, 403, 399, 441, + 437, 465, 461, 242, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 268, 269, 270, + 271, 274, 276, 278, 279, 280, 282, 284, 324, 395, + 407, 409, 411, 413, 415, 416, 417, 418, 422, 429, + 430, 457, 487, 489, 533, 427, 353, 359, 4, 347, + 114, 115, 242, 254, 255, 256, 257, 258, 259, 324, + 457, 487, 489, 543, 544, 545, 546, 547, 549, 541, + 516, 512, 379, 375, 208, 208, 208, 208, 208, 208, + 388, 4, 4, 208, 208, 208, 553, 210, 208, 208, + 367, 4, 4, 566, 210, 4, 208, 4, 574, 183, + 185, 186, 242, 324, 487, 489, 626, 627, 628, 629, + 631, 624, 210, 648, 6, 3, 483, 479, 499, 495, + 4, 22, 23, 24, 316, 207, 207, 207, 36, 37, + 38, 333, 207, 207, 207, 207, 8, 8, 8, 8, + 3, 8, 207, 548, 4, 8, 3, 8, 8, 137, + 138, 139, 556, 207, 207, 207, 207, 227, 632, 4, + 630, 3, 8, 207, 8, 8, 207, 430, 4, 210, + 545, 4, 208, 4, 627, 207, 5, 207, 7, 633, + 634, 635, 3, 6, 184, 187, 188, 189, 190, 636, + 637, 638, 640, 641, 642, 643, 634, 639, 4, 4, + 4, 644, 3, 8, 4, 210, 208, 208, 4, 637, + 207, 207 }; const short Dhcp6Parser::yyr1_[] = { - 0, 219, 221, 220, 222, 220, 223, 220, 224, 220, - 225, 220, 226, 220, 227, 220, 228, 220, 229, 220, - 230, 220, 231, 220, 232, 220, 233, 220, 234, 220, - 235, 235, 235, 235, 235, 235, 235, 236, 238, 237, - 239, 240, 240, 241, 241, 241, 243, 242, 244, 244, - 245, 245, 245, 247, 246, 248, 248, 249, 249, 249, - 250, 252, 251, 254, 253, 253, 255, 257, 256, 258, - 258, 258, 259, 259, 259, 259, 259, 259, 259, 259, - 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, - 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, - 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, - 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, - 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, - 259, 259, 259, 259, 259, 259, 259, 261, 260, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - 273, 274, 275, 276, 277, 278, 280, 279, 281, 281, - 281, 281, 281, 283, 282, 285, 284, 286, 287, 289, - 288, 291, 290, 292, 293, 294, 296, 295, 297, 298, - 299, 300, 302, 301, 304, 303, 305, 305, 305, 306, - 306, 306, 306, 306, 308, 307, 309, 311, 310, 313, - 312, 315, 314, 316, 316, 317, 317, 317, 319, 318, - 320, 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, 321, 321, 321, 323, - 322, 324, 324, 324, 324, 326, 325, 328, 327, 330, - 329, 331, 333, 332, 334, 335, 336, 337, 338, 340, - 339, 341, 341, 341, 342, 343, 344, 345, 347, 346, - 348, 350, 349, 352, 351, 354, 353, 356, 355, 358, - 357, 360, 359, 362, 361, 364, 363, 365, 365, 365, - 366, 368, 367, 370, 369, 371, 371, 371, 372, 372, - 373, 374, 376, 375, 377, 377, 377, 378, 378, 378, - 379, 380, 382, 381, 384, 383, 385, 385, 385, 386, - 386, 386, 386, 386, 386, 387, 388, 389, 391, 390, - 392, 392, 393, 393, 393, 395, 394, 397, 396, 398, - 398, 398, 398, 399, 399, 401, 400, 403, 402, 405, - 404, 406, 406, 406, 407, 407, 407, 407, 407, 407, - 408, 409, 410, 411, 412, 413, 415, 414, 416, 416, - 417, 417, 417, 419, 418, 421, 420, 422, 422, 422, - 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, - 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, - 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, - 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, - 423, 423, 423, 425, 424, 427, 426, 429, 428, 431, - 430, 433, 432, 434, 435, 436, 438, 437, 439, 439, - 439, 439, 440, 441, 443, 442, 444, 444, 445, 445, - 445, 447, 446, 448, 448, 448, 449, 449, 449, 449, - 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, - 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, - 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, - 449, 449, 449, 449, 449, 449, 451, 450, 453, 452, - 454, 454, 455, 455, 455, 457, 456, 459, 458, 460, - 460, 461, 461, 461, 462, 462, 462, 462, 462, 462, - 462, 462, 462, 462, 463, 464, 465, 467, 466, 469, - 468, 471, 470, 472, 474, 473, 475, 477, 476, 478, - 478, 479, 479, 479, 481, 480, 483, 482, 484, 484, - 485, 485, 485, 486, 486, 486, 486, 486, 486, 486, - 486, 486, 487, 489, 488, 490, 491, 492, 493, 495, - 494, 496, 496, 497, 497, 497, 499, 498, 501, 500, - 502, 502, 502, 503, 503, 503, 503, 503, 503, 503, - 505, 504, 507, 506, 509, 508, 511, 510, 512, 512, - 513, 513, 513, 515, 514, 517, 516, 518, 518, 518, - 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, - 519, 521, 520, 522, 524, 523, 525, 526, 528, 527, - 529, 529, 530, 530, 530, 532, 531, 534, 533, 535, - 535, 536, 536, 536, 537, 537, 537, 537, 537, 537, - 537, 537, 537, 537, 537, 539, 538, 541, 540, 543, - 542, 545, 544, 547, 546, 549, 548, 551, 550, 553, - 552, 554, 554, 556, 555, 558, 557, 559, 559, 559, - 561, 560, 562, 562, 563, 563, 563, 564, 564, 564, - 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, - 565, 567, 566, 568, 570, 569, 571, 571, 571, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 574, 573, - 575, 575, 575, 576, 578, 577, 579, 580, 581, 583, - 582, 584, 584, 584, 585, 585, 585, 585, 585, 587, - 586, 589, 588, 591, 590, 592, 592, 592, 593, 593, - 593, 593, 593, 593, 594, 596, 595, 597, 599, 598, - 601, 600, 603, 602, 604, 604, 604, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 606, 608, 607, 610, 609, - 611, 613, 612, 614, 615, 617, 616, 618, 618, 620, - 619, 621, 622, 624, 623, 626, 625, 628, 627, 630, - 629, 632, 631, 634, 633, 635, 635, 635, 636, 636, - 638, 637, 639, 641, 640, 642, 642, 642, 644, 643, - 645, 645, 645, 646, 646, 646, 646, 646, 646, 646, - 647, 649, 648, 651, 650, 652, 652, 652, 654, 653, - 655, 655, 655, 656, 656, 656, 656, 656, 658, 657, - 659, 660, 661, 663, 662, 665, 664, 666, 666, 666, - 667, 667, 668 + 0, 211, 213, 212, 214, 212, 215, 212, 216, 212, + 217, 212, 218, 212, 219, 212, 220, 212, 221, 212, + 222, 212, 223, 212, 224, 212, 225, 212, 226, 212, + 227, 227, 227, 227, 227, 227, 227, 228, 230, 229, + 231, 232, 232, 233, 233, 233, 235, 234, 236, 236, + 237, 237, 237, 239, 238, 240, 240, 241, 241, 241, + 242, 244, 243, 246, 245, 245, 247, 249, 248, 250, + 250, 250, 251, 251, 251, 251, 251, 251, 251, 251, + 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, + 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, + 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, + 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, + 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, + 251, 251, 251, 251, 251, 251, 251, 253, 252, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 272, 271, 273, 273, + 273, 273, 273, 275, 274, 277, 276, 278, 279, 281, + 280, 283, 282, 284, 285, 286, 288, 287, 289, 290, + 291, 292, 294, 293, 296, 295, 297, 297, 297, 298, + 298, 298, 298, 298, 300, 299, 301, 303, 302, 305, + 304, 307, 306, 308, 308, 309, 309, 309, 311, 310, + 312, 312, 312, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 315, 314, 316, 316, 316, 318, 317, 320, + 319, 322, 321, 323, 325, 324, 326, 327, 328, 329, + 330, 332, 331, 333, 333, 333, 334, 335, 337, 336, + 339, 338, 341, 340, 343, 342, 345, 344, 346, 346, + 346, 347, 349, 348, 351, 350, 352, 352, 352, 353, + 353, 354, 355, 357, 356, 358, 358, 358, 359, 359, + 359, 360, 361, 363, 362, 365, 364, 366, 366, 366, + 367, 367, 367, 367, 367, 367, 368, 369, 370, 372, + 371, 373, 373, 374, 374, 374, 376, 375, 378, 377, + 379, 379, 379, 379, 380, 380, 382, 381, 384, 383, + 386, 385, 387, 387, 387, 388, 388, 388, 388, 388, + 388, 389, 390, 391, 392, 393, 394, 396, 395, 397, + 397, 398, 398, 398, 400, 399, 402, 401, 403, 403, + 403, 404, 404, 404, 404, 404, 404, 404, 404, 404, + 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, + 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, + 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, + 404, 404, 404, 404, 406, 405, 408, 407, 410, 409, + 412, 411, 414, 413, 415, 416, 417, 419, 418, 420, + 420, 420, 420, 421, 422, 424, 423, 425, 425, 426, + 426, 426, 428, 427, 429, 429, 429, 430, 430, 430, + 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, + 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, + 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, + 430, 430, 430, 430, 430, 430, 430, 432, 431, 434, + 433, 435, 435, 436, 436, 436, 438, 437, 440, 439, + 441, 441, 442, 442, 442, 443, 443, 443, 443, 443, + 443, 443, 443, 443, 443, 444, 445, 446, 448, 447, + 450, 449, 452, 451, 453, 455, 454, 456, 458, 457, + 459, 459, 460, 460, 460, 462, 461, 464, 463, 465, + 465, 466, 466, 466, 467, 467, 467, 467, 467, 467, + 467, 467, 467, 468, 470, 469, 471, 472, 473, 474, + 476, 475, 477, 477, 478, 478, 478, 480, 479, 482, + 481, 483, 483, 483, 484, 484, 484, 484, 484, 484, + 484, 486, 485, 488, 487, 490, 489, 492, 491, 493, + 493, 494, 494, 494, 496, 495, 498, 497, 499, 499, + 499, 500, 500, 500, 500, 500, 500, 500, 500, 500, + 500, 500, 502, 501, 503, 505, 504, 506, 507, 509, + 508, 510, 510, 511, 511, 511, 513, 512, 515, 514, + 516, 516, 517, 517, 517, 518, 518, 518, 518, 518, + 518, 518, 518, 518, 518, 518, 520, 519, 522, 521, + 524, 523, 526, 525, 528, 527, 530, 529, 532, 531, + 534, 533, 535, 535, 537, 536, 539, 538, 540, 540, + 540, 542, 541, 543, 543, 544, 544, 544, 545, 545, + 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, + 545, 546, 548, 547, 549, 551, 550, 552, 552, 552, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 555, + 554, 556, 556, 556, 557, 559, 558, 560, 561, 562, + 564, 563, 565, 565, 565, 566, 566, 566, 566, 566, + 568, 567, 570, 569, 572, 571, 573, 573, 573, 574, + 574, 574, 574, 574, 574, 575, 577, 576, 578, 580, + 579, 582, 581, 584, 583, 585, 585, 585, 586, 586, + 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, + 586, 586, 586, 586, 586, 586, 587, 589, 588, 591, + 590, 592, 594, 593, 595, 596, 598, 597, 599, 599, + 601, 600, 602, 603, 605, 604, 607, 606, 609, 608, + 611, 610, 613, 612, 615, 614, 616, 616, 616, 617, + 617, 619, 618, 620, 622, 621, 623, 623, 623, 625, + 624, 626, 626, 626, 627, 627, 627, 627, 627, 627, + 627, 628, 630, 629, 632, 631, 633, 633, 633, 635, + 634, 636, 636, 636, 637, 637, 637, 637, 637, 639, + 638, 640, 641, 642, 644, 643, 646, 645, 647, 647, + 647, 648, 648, 649 }; const signed char @@ -6062,94 +5881,90 @@ namespace isc { namespace dhcp { 6, 0, 6, 0, 1, 1, 3, 2, 0, 4, 1, 3, 2, 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, 0, - 4, 1, 1, 1, 1, 0, 4, 0, 4, 0, - 4, 3, 0, 4, 3, 3, 3, 3, 3, 0, - 4, 1, 1, 1, 3, 3, 3, 3, 0, 4, - 3, 0, 4, 0, 4, 0, 4, 0, 4, 0, - 4, 0, 4, 0, 4, 0, 6, 1, 3, 2, - 1, 0, 4, 0, 6, 1, 3, 2, 1, 1, - 1, 1, 0, 6, 1, 3, 2, 1, 1, 1, - 1, 1, 0, 6, 0, 6, 1, 3, 2, 1, - 1, 1, 1, 1, 1, 3, 3, 3, 0, 6, - 0, 1, 1, 3, 2, 0, 4, 0, 4, 1, - 3, 2, 1, 1, 1, 0, 4, 0, 4, 0, - 6, 1, 3, 2, 1, 1, 1, 1, 1, 1, - 3, 3, 3, 3, 3, 3, 0, 6, 0, 1, - 1, 3, 2, 0, 4, 0, 4, 1, 3, 2, - 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, 0, 4, 0, 4, 0, 4, 0, - 4, 0, 4, 3, 3, 3, 0, 4, 1, 1, - 1, 1, 3, 3, 0, 6, 0, 1, 1, 3, - 2, 0, 4, 1, 3, 2, 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, 0, 6, 0, 4, - 0, 1, 1, 3, 2, 0, 4, 0, 4, 0, - 1, 1, 3, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 3, 1, 0, 4, 0, - 4, 0, 4, 1, 0, 4, 3, 0, 6, 0, - 1, 1, 3, 2, 0, 4, 0, 4, 0, 1, - 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 4, 1, 1, 3, 3, 0, + 1, 1, 0, 4, 1, 1, 1, 0, 4, 0, + 4, 0, 4, 3, 0, 4, 3, 3, 3, 3, + 3, 0, 4, 1, 1, 1, 3, 3, 0, 4, + 0, 4, 0, 4, 0, 4, 0, 6, 1, 3, + 2, 1, 0, 4, 0, 6, 1, 3, 2, 1, + 1, 1, 1, 0, 6, 1, 3, 2, 1, 1, + 1, 1, 1, 0, 6, 0, 6, 1, 3, 2, + 1, 1, 1, 1, 1, 1, 3, 3, 3, 0, 6, 0, 1, 1, 3, 2, 0, 4, 0, 4, - 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, - 0, 4, 0, 4, 0, 4, 0, 6, 0, 1, - 1, 3, 2, 0, 4, 0, 4, 1, 3, 2, + 1, 3, 2, 1, 1, 1, 0, 4, 0, 4, + 0, 6, 1, 3, 2, 1, 1, 1, 1, 1, + 1, 3, 3, 3, 3, 3, 3, 0, 6, 0, + 1, 1, 3, 2, 0, 4, 0, 4, 1, 3, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 0, 4, 3, 0, 4, 3, 3, 0, 6, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 4, 0, 4, 0, 4, + 0, 4, 0, 4, 3, 3, 3, 0, 4, 1, + 1, 1, 1, 3, 3, 0, 6, 0, 1, 1, + 3, 2, 0, 4, 1, 3, 2, 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, 0, 6, 0, + 4, 0, 1, 1, 3, 2, 0, 4, 0, 4, + 0, 1, 1, 3, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 3, 1, 0, 4, + 0, 4, 0, 4, 1, 0, 4, 3, 0, 6, 0, 1, 1, 3, 2, 0, 4, 0, 4, 0, 1, 1, 3, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 4, 0, 4, 0, - 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, - 6, 1, 1, 0, 4, 0, 6, 1, 3, 2, - 0, 4, 0, 1, 1, 3, 2, 1, 1, 1, + 1, 1, 1, 1, 0, 4, 1, 1, 3, 3, + 0, 6, 0, 1, 1, 3, 2, 0, 4, 0, + 4, 1, 3, 2, 1, 1, 1, 1, 1, 1, + 1, 0, 4, 0, 4, 0, 4, 0, 6, 0, + 1, 1, 3, 2, 0, 4, 0, 4, 1, 3, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 4, 3, 0, 4, 3, 3, 0, + 6, 0, 1, 1, 3, 2, 0, 4, 0, 4, + 0, 1, 1, 3, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 4, 0, 4, + 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, + 0, 6, 1, 1, 0, 4, 0, 6, 1, 3, + 2, 0, 4, 0, 1, 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 0, 4, 3, 0, 6, 1, 3, 2, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, - 1, 1, 1, 3, 0, 4, 3, 3, 3, 0, - 6, 1, 3, 2, 1, 1, 1, 1, 1, 0, - 4, 0, 4, 0, 6, 1, 3, 2, 1, 1, - 1, 1, 1, 1, 3, 0, 4, 3, 0, 4, - 0, 6, 0, 4, 1, 3, 2, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 3, 0, 4, 0, 4, - 3, 0, 4, 3, 3, 0, 4, 1, 1, 0, - 4, 3, 3, 0, 4, 0, 4, 0, 4, 0, + 1, 1, 0, 4, 3, 0, 6, 1, 3, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 4, 1, 1, 1, 3, 0, 4, 3, 3, 3, + 0, 6, 1, 3, 2, 1, 1, 1, 1, 1, + 0, 4, 0, 4, 0, 6, 1, 3, 2, 1, + 1, 1, 1, 1, 1, 3, 0, 4, 3, 0, 4, 0, 6, 0, 4, 1, 3, 2, 1, 1, - 0, 6, 3, 0, 6, 1, 3, 2, 0, 4, - 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, - 3, 0, 4, 0, 6, 1, 3, 2, 0, 4, - 1, 3, 2, 1, 1, 1, 1, 1, 0, 4, - 3, 3, 3, 0, 4, 0, 6, 1, 3, 2, - 1, 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, 0, 4, 0, 4, 0, 4, + 0, 4, 0, 6, 0, 4, 1, 3, 2, 1, + 1, 0, 6, 3, 0, 6, 1, 3, 2, 0, + 4, 1, 3, 2, 1, 1, 1, 1, 1, 1, + 1, 3, 0, 4, 0, 6, 1, 3, 2, 0, + 4, 1, 3, 2, 1, 1, 1, 1, 1, 0, + 4, 3, 3, 3, 0, 4, 0, 6, 1, 3, + 2, 1, 1, 3 }; -#if PARSER6_DEBUG || 1 + // YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - // First, the terminals, then, starting at \a YYNTOKENS, nonterminals. + // First, the terminals, then, starting at \a yyntokens_, nonterminals. const char* const Dhcp6Parser::yytname_[] = { - "\"end of file\"", "error", "\"invalid token\"", "\",\"", "\":\"", - "\"[\"", "\"]\"", "\"{\"", "\"}\"", "\"null\"", "\"Dhcp6\"", - "\"data-directory\"", "\"config-control\"", "\"config-databases\"", + "\"end of file\"", "error", "$undefined", "\",\"", "\":\"", "\"[\"", + "\"]\"", "\"{\"", "\"}\"", "\"null\"", "\"Dhcp6\"", "\"data-directory\"", + "\"config-control\"", "\"config-databases\"", "\"config-fetch-wait-time\"", "\"interfaces-config\"", "\"interfaces\"", "\"re-detect\"", "\"lease-database\"", "\"hosts-database\"", "\"hosts-databases\"", "\"type\"", "\"memfile\"", "\"mysql\"", - "\"postgresql\"", "\"cql\"", "\"user\"", "\"password\"", "\"host\"", - "\"port\"", "\"persist\"", "\"lfc-interval\"", "\"readonly\"", - "\"connect-timeout\"", "\"contact-points\"", "\"max-reconnect-tries\"", - "\"reconnect-wait-time\"", "\"on-fail\"", "\"stop-retry-exit\"", - "\"serve-retry-exit\"", "\"serve-retry-continue\"", "\"keyspace\"", - "\"consistency\"", "\"serial-consistency\"", "\"request-timeout\"", - "\"tcp-keepalive\"", "\"tcp-nodelay\"", "\"max-row-errors\"", - "\"trust-anchor\"", "\"cert-file\"", "\"key-file\"", "\"cipher-list\"", + "\"postgresql\"", "\"user\"", "\"password\"", "\"host\"", "\"port\"", + "\"persist\"", "\"lfc-interval\"", "\"readonly\"", "\"connect-timeout\"", + "\"max-reconnect-tries\"", "\"reconnect-wait-time\"", "\"on-fail\"", + "\"stop-retry-exit\"", "\"serve-retry-exit\"", + "\"serve-retry-continue\"", "\"max-row-errors\"", "\"trust-anchor\"", + "\"cert-file\"", "\"key-file\"", "\"cipher-list\"", "\"preferred-lifetime\"", "\"min-preferred-lifetime\"", "\"max-preferred-lifetime\"", "\"valid-lifetime\"", "\"min-valid-lifetime\"", "\"max-valid-lifetime\"", "\"renew-timer\"", @@ -6234,188 +6049,183 @@ namespace isc { namespace dhcp { "database_type", "$@35", "db_type", "user", "$@36", "password", "$@37", "host", "$@38", "port", "name", "$@39", "persist", "lfc_interval", "readonly", "connect_timeout", "reconnect_wait_time", "on_fail", "$@40", - "on_fail_mode", "max_row_errors", "request_timeout", "tcp_keepalive", - "tcp_nodelay", "contact_points", "$@41", "max_reconnect_tries", - "keyspace", "$@42", "consistency", "$@43", "serial_consistency", "$@44", - "trust_anchor", "$@45", "cert_file", "$@46", "key_file", "$@47", - "cipher_list", "$@48", "sanity_checks", "$@49", "sanity_checks_params", - "sanity_checks_param", "lease_checks", "$@50", "mac_sources", "$@51", - "mac_sources_list", "mac_sources_value", "duid_id", "string_id", - "host_reservation_identifiers", "$@52", + "on_fail_mode", "max_row_errors", "max_reconnect_tries", "trust_anchor", + "$@41", "cert_file", "$@42", "key_file", "$@43", "cipher_list", "$@44", + "sanity_checks", "$@45", "sanity_checks_params", "sanity_checks_param", + "lease_checks", "$@46", "mac_sources", "$@47", "mac_sources_list", + "mac_sources_value", "duid_id", "string_id", + "host_reservation_identifiers", "$@48", "host_reservation_identifiers_list", "host_reservation_identifier", - "hw_address_id", "flex_id", "relay_supplied_options", "$@53", - "dhcp_multi_threading", "$@54", "multi_threading_params", + "hw_address_id", "flex_id", "relay_supplied_options", "$@49", + "dhcp_multi_threading", "$@50", "multi_threading_params", "multi_threading_param", "enable_multi_threading", "thread_pool_size", - "packet_queue_size", "hooks_libraries", "$@55", "hooks_libraries_list", - "not_empty_hooks_libraries_list", "hooks_library", "$@56", - "sub_hooks_library", "$@57", "hooks_params", "hooks_param", "library", - "$@58", "parameters", "$@59", "expired_leases_processing", "$@60", + "packet_queue_size", "hooks_libraries", "$@51", "hooks_libraries_list", + "not_empty_hooks_libraries_list", "hooks_library", "$@52", + "sub_hooks_library", "$@53", "hooks_params", "hooks_param", "library", + "$@54", "parameters", "$@55", "expired_leases_processing", "$@56", "expired_leases_params", "expired_leases_param", "reclaim_timer_wait_time", "flush_reclaimed_timer_wait_time", "hold_reclaimed_time", "max_reclaim_leases", "max_reclaim_time", - "unwarned_reclaim_cycles", "subnet6_list", "$@61", - "subnet6_list_content", "not_empty_subnet6_list", "subnet6", "$@62", - "sub_subnet6", "$@63", "subnet6_params", "subnet6_param", "subnet", - "$@64", "interface", "$@65", "interface_id", "$@66", "client_class", - "$@67", "require_client_classes", "$@68", "reservations_global", + "unwarned_reclaim_cycles", "subnet6_list", "$@57", + "subnet6_list_content", "not_empty_subnet6_list", "subnet6", "$@58", + "sub_subnet6", "$@59", "subnet6_params", "subnet6_param", "subnet", + "$@60", "interface", "$@61", "interface_id", "$@62", "client_class", + "$@63", "require_client_classes", "$@64", "reservations_global", "reservations_in_subnet", "reservations_out_of_pool", "reservation_mode", - "$@69", "hr_mode", "id", "rapid_commit", "shared_networks", "$@70", + "$@65", "hr_mode", "id", "rapid_commit", "shared_networks", "$@66", "shared_networks_content", "shared_networks_list", "shared_network", - "$@71", "shared_network_params", "shared_network_param", - "option_def_list", "$@72", "sub_option_def_list", "$@73", + "$@67", "shared_network_params", "shared_network_param", + "option_def_list", "$@68", "sub_option_def_list", "$@69", "option_def_list_content", "not_empty_option_def_list", - "option_def_entry", "$@74", "sub_option_def", "$@75", + "option_def_entry", "$@70", "sub_option_def", "$@71", "option_def_params", "not_empty_option_def_params", "option_def_param", - "option_def_name", "code", "option_def_code", "option_def_type", "$@76", - "option_def_record_types", "$@77", "space", "$@78", "option_def_space", - "option_def_encapsulate", "$@79", "option_def_array", "option_data_list", - "$@80", "option_data_list_content", "not_empty_option_data_list", - "option_data_entry", "$@81", "sub_option_data", "$@82", + "option_def_name", "code", "option_def_code", "option_def_type", "$@72", + "option_def_record_types", "$@73", "space", "$@74", "option_def_space", + "option_def_encapsulate", "$@75", "option_def_array", "option_data_list", + "$@76", "option_data_list_content", "not_empty_option_data_list", + "option_data_entry", "$@77", "sub_option_data", "$@78", "option_data_params", "not_empty_option_data_params", - "option_data_param", "option_data_name", "option_data_data", "$@83", + "option_data_param", "option_data_name", "option_data_data", "$@79", "option_data_code", "option_data_space", "option_data_csv_format", - "option_data_always_send", "pools_list", "$@84", "pools_list_content", - "not_empty_pools_list", "pool_list_entry", "$@85", "sub_pool6", "$@86", - "pool_params", "pool_param", "pool_entry", "$@87", "user_context", - "$@88", "comment", "$@89", "pd_pools_list", "$@90", + "option_data_always_send", "pools_list", "$@80", "pools_list_content", + "not_empty_pools_list", "pool_list_entry", "$@81", "sub_pool6", "$@82", + "pool_params", "pool_param", "pool_entry", "$@83", "user_context", + "$@84", "comment", "$@85", "pd_pools_list", "$@86", "pd_pools_list_content", "not_empty_pd_pools_list", "pd_pool_entry", - "$@91", "sub_pd_pool", "$@92", "pd_pool_params", "pd_pool_param", - "pd_prefix", "$@93", "pd_prefix_len", "excluded_prefix", "$@94", - "excluded_prefix_len", "pd_delegated_len", "reservations", "$@95", + "$@87", "sub_pd_pool", "$@88", "pd_pool_params", "pd_pool_param", + "pd_prefix", "$@89", "pd_prefix_len", "excluded_prefix", "$@90", + "excluded_prefix_len", "pd_delegated_len", "reservations", "$@91", "reservations_list", "not_empty_reservations_list", "reservation", - "$@96", "sub_reservation", "$@97", "reservation_params", + "$@92", "sub_reservation", "$@93", "reservation_params", "not_empty_reservation_params", "reservation_param", "ip_addresses", - "$@98", "prefixes", "$@99", "duid", "$@100", "hw_address", "$@101", - "hostname", "$@102", "flex_id_value", "$@103", - "reservation_client_classes", "$@104", "relay", "$@105", "relay_map", - "ip_address", "$@106", "client_classes", "$@107", "client_classes_list", - "client_class_entry", "$@108", "client_class_params", + "$@94", "prefixes", "$@95", "duid", "$@96", "hw_address", "$@97", + "hostname", "$@98", "flex_id_value", "$@99", + "reservation_client_classes", "$@100", "relay", "$@101", "relay_map", + "ip_address", "$@102", "client_classes", "$@103", "client_classes_list", + "client_class_entry", "$@104", "client_class_params", "not_empty_client_class_params", "client_class_param", - "client_class_name", "client_class_test", "$@109", "only_if_required", - "server_id", "$@110", "server_id_params", "server_id_param", - "server_id_type", "$@111", "duid_type", "htype", "identifier", "$@112", - "time", "enterprise_id", "dhcp4o6_port", "control_socket", "$@113", - "control_socket_params", "control_socket_param", "socket_type", "$@114", - "socket_name", "$@115", "dhcp_queue_control", "$@116", + "client_class_name", "client_class_test", "$@105", "only_if_required", + "server_id", "$@106", "server_id_params", "server_id_param", + "server_id_type", "$@107", "duid_type", "htype", "identifier", "$@108", + "time", "enterprise_id", "dhcp4o6_port", "control_socket", "$@109", + "control_socket_params", "control_socket_param", "socket_type", "$@110", + "socket_name", "$@111", "dhcp_queue_control", "$@112", "queue_control_params", "queue_control_param", "enable_queue", - "queue_type", "$@117", "capacity", "arbitrary_map_entry", "$@118", - "dhcp_ddns", "$@119", "sub_dhcp_ddns", "$@120", "dhcp_ddns_params", - "dhcp_ddns_param", "enable_updates", "dep_qualifying_suffix", "$@121", - "server_ip", "$@122", "server_port", "sender_ip", "$@123", "sender_port", - "max_queue_size", "ncr_protocol", "$@124", "ncr_protocol_value", - "ncr_format", "$@125", "dep_override_no_update", - "dep_override_client_update", "dep_replace_client_name", "$@126", - "dep_generated_prefix", "$@127", "dep_hostname_char_set", "$@128", - "dep_hostname_char_replacement", "$@129", "config_control", "$@130", - "sub_config_control", "$@131", "config_control_params", - "config_control_param", "config_databases", "$@132", - "config_fetch_wait_time", "loggers", "$@133", "loggers_entries", - "logger_entry", "$@134", "logger_params", "logger_param", "debuglevel", - "severity", "$@135", "output_options_list", "$@136", - "output_options_list_content", "output_entry", "$@137", - "output_params_list", "output_params", "output", "$@138", "flush", - "maxsize", "maxver", "pattern", "$@139", "compatibility", "$@140", + "queue_type", "$@113", "capacity", "arbitrary_map_entry", "$@114", + "dhcp_ddns", "$@115", "sub_dhcp_ddns", "$@116", "dhcp_ddns_params", + "dhcp_ddns_param", "enable_updates", "dep_qualifying_suffix", "$@117", + "server_ip", "$@118", "server_port", "sender_ip", "$@119", "sender_port", + "max_queue_size", "ncr_protocol", "$@120", "ncr_protocol_value", + "ncr_format", "$@121", "dep_override_no_update", + "dep_override_client_update", "dep_replace_client_name", "$@122", + "dep_generated_prefix", "$@123", "dep_hostname_char_set", "$@124", + "dep_hostname_char_replacement", "$@125", "config_control", "$@126", + "sub_config_control", "$@127", "config_control_params", + "config_control_param", "config_databases", "$@128", + "config_fetch_wait_time", "loggers", "$@129", "loggers_entries", + "logger_entry", "$@130", "logger_params", "logger_param", "debuglevel", + "severity", "$@131", "output_options_list", "$@132", + "output_options_list_content", "output_entry", "$@133", + "output_params_list", "output_params", "output", "$@134", "flush", + "maxsize", "maxver", "pattern", "$@135", "compatibility", "$@136", "compatibility_params", "compatibility_param", "lenient_option_parsing", YY_NULLPTR }; -#endif - #if PARSER6_DEBUG const short Dhcp6Parser::yyrline_[] = { - 0, 307, 307, 307, 308, 308, 309, 309, 310, 310, - 311, 311, 312, 312, 313, 313, 314, 314, 315, 315, - 316, 316, 317, 317, 318, 318, 319, 319, 320, 320, - 328, 329, 330, 331, 332, 333, 334, 337, 342, 342, - 353, 356, 357, 360, 365, 371, 376, 376, 383, 384, - 387, 391, 395, 401, 401, 408, 409, 412, 416, 420, - 430, 439, 439, 454, 454, 468, 471, 477, 477, 486, - 487, 488, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, - 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, - 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, - 553, 554, 555, 556, 557, 558, 559, 562, 562, 571, - 577, 583, 589, 595, 601, 607, 613, 619, 625, 631, - 637, 643, 649, 655, 661, 667, 673, 673, 682, 685, - 688, 691, 694, 700, 700, 709, 709, 718, 724, 730, - 730, 739, 739, 748, 754, 760, 766, 766, 775, 781, - 787, 793, 799, 799, 811, 811, 820, 821, 822, 827, - 828, 829, 830, 831, 834, 834, 845, 851, 851, 864, - 864, 877, 877, 888, 889, 892, 893, 894, 899, 899, - 909, 910, 911, 916, 917, 918, 919, 920, 921, 922, - 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, - 933, 934, 935, 936, 937, 938, 939, 940, 941, 944, - 944, 952, 953, 954, 955, 958, 958, 967, 967, 976, - 976, 985, 991, 991, 1000, 1006, 1012, 1018, 1024, 1030, - 1030, 1038, 1039, 1040, 1043, 1049, 1055, 1061, 1067, 1067, - 1076, 1082, 1082, 1091, 1091, 1100, 1100, 1109, 1109, 1118, - 1118, 1127, 1127, 1136, 1136, 1145, 1145, 1156, 1157, 1158, - 1163, 1165, 1165, 1184, 1184, 1195, 1196, 1197, 1202, 1203, - 1206, 1211, 1216, 1216, 1227, 1228, 1229, 1234, 1235, 1236, - 1239, 1244, 1251, 1251, 1264, 1264, 1277, 1278, 1279, 1284, - 1285, 1286, 1287, 1288, 1289, 1292, 1298, 1304, 1310, 1310, - 1321, 1322, 1325, 1326, 1327, 1332, 1332, 1342, 1342, 1352, - 1353, 1354, 1357, 1360, 1361, 1364, 1364, 1373, 1373, 1382, - 1382, 1394, 1395, 1396, 1401, 1402, 1403, 1404, 1405, 1406, - 1409, 1415, 1421, 1427, 1433, 1439, 1448, 1448, 1462, 1463, - 1466, 1467, 1468, 1477, 1477, 1503, 1503, 1514, 1515, 1516, - 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, - 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, - 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, - 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, - 1562, 1563, 1564, 1567, 1567, 1576, 1576, 1585, 1585, 1594, - 1594, 1603, 1603, 1614, 1620, 1626, 1632, 1632, 1640, 1641, - 1642, 1643, 1646, 1652, 1660, 1660, 1672, 1673, 1677, 1678, - 1679, 1684, 1684, 1692, 1693, 1694, 1699, 1700, 1701, 1702, - 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, - 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, - 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, - 1733, 1734, 1735, 1736, 1737, 1738, 1745, 1745, 1759, 1759, - 1768, 1769, 1772, 1773, 1774, 1781, 1781, 1796, 1796, 1810, - 1811, 1814, 1815, 1816, 1821, 1822, 1823, 1824, 1825, 1826, - 1827, 1828, 1829, 1830, 1833, 1835, 1841, 1843, 1843, 1852, - 1852, 1861, 1861, 1870, 1872, 1872, 1881, 1891, 1891, 1904, - 1905, 1910, 1911, 1912, 1919, 1919, 1931, 1931, 1943, 1944, - 1949, 1950, 1951, 1958, 1959, 1960, 1961, 1962, 1963, 1964, - 1965, 1966, 1969, 1971, 1971, 1980, 1982, 1984, 1990, 1999, - 1999, 2012, 2013, 2016, 2017, 2018, 2023, 2023, 2033, 2033, - 2043, 2044, 2045, 2050, 2051, 2052, 2053, 2054, 2055, 2056, - 2059, 2059, 2068, 2068, 2093, 2093, 2123, 2123, 2136, 2137, - 2140, 2141, 2142, 2147, 2147, 2159, 2159, 2171, 2172, 2173, - 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, - 2188, 2191, 2191, 2200, 2206, 2206, 2215, 2221, 2230, 2230, - 2241, 2242, 2245, 2246, 2247, 2252, 2252, 2261, 2261, 2270, - 2271, 2274, 2275, 2276, 2282, 2283, 2284, 2285, 2286, 2287, - 2288, 2289, 2290, 2291, 2292, 2295, 2295, 2306, 2306, 2317, - 2317, 2326, 2326, 2335, 2335, 2344, 2344, 2353, 2353, 2367, - 2367, 2378, 2379, 2382, 2382, 2394, 2394, 2405, 2406, 2407, - 2412, 2412, 2422, 2423, 2426, 2427, 2428, 2433, 2434, 2435, - 2436, 2437, 2438, 2439, 2440, 2441, 2442, 2443, 2444, 2445, - 2448, 2450, 2450, 2459, 2468, 2468, 2481, 2482, 2483, 2488, - 2489, 2490, 2491, 2492, 2493, 2494, 2495, 2496, 2499, 2499, - 2507, 2508, 2509, 2512, 2518, 2518, 2527, 2533, 2541, 2549, - 2549, 2560, 2561, 2562, 2567, 2568, 2569, 2570, 2571, 2574, - 2574, 2583, 2583, 2595, 2595, 2608, 2609, 2610, 2615, 2616, - 2617, 2618, 2619, 2620, 2623, 2629, 2629, 2638, 2644, 2644, - 2654, 2654, 2667, 2667, 2677, 2678, 2679, 2684, 2685, 2686, - 2687, 2688, 2689, 2690, 2691, 2692, 2693, 2694, 2695, 2696, - 2697, 2698, 2699, 2700, 2701, 2704, 2711, 2711, 2720, 2720, - 2729, 2735, 2735, 2744, 2750, 2756, 2756, 2765, 2766, 2769, - 2769, 2779, 2786, 2793, 2793, 2802, 2802, 2812, 2812, 2822, - 2822, 2834, 2834, 2846, 2846, 2856, 2857, 2858, 2864, 2865, - 2868, 2868, 2879, 2887, 2887, 2900, 2901, 2902, 2908, 2908, - 2916, 2917, 2918, 2923, 2924, 2925, 2926, 2927, 2928, 2929, - 2932, 2938, 2938, 2947, 2947, 2958, 2959, 2960, 2965, 2965, - 2973, 2974, 2975, 2980, 2981, 2982, 2983, 2984, 2987, 2987, - 2996, 3002, 3008, 3014, 3014, 3023, 3023, 3034, 3035, 3036, - 3041, 3042, 3045 + 0, 299, 299, 299, 300, 300, 301, 301, 302, 302, + 303, 303, 304, 304, 305, 305, 306, 306, 307, 307, + 308, 308, 309, 309, 310, 310, 311, 311, 312, 312, + 320, 321, 322, 323, 324, 325, 326, 329, 334, 334, + 345, 348, 349, 352, 357, 363, 368, 368, 375, 376, + 379, 383, 387, 393, 393, 400, 401, 404, 408, 412, + 422, 431, 431, 446, 446, 460, 463, 469, 469, 478, + 479, 480, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 554, 554, 563, + 569, 575, 581, 587, 593, 599, 605, 611, 617, 623, + 629, 635, 641, 647, 653, 659, 665, 665, 674, 677, + 680, 683, 686, 692, 692, 701, 701, 710, 716, 722, + 722, 731, 731, 740, 746, 752, 758, 758, 767, 773, + 779, 785, 791, 791, 803, 803, 812, 813, 814, 819, + 820, 821, 822, 823, 826, 826, 837, 843, 843, 856, + 856, 869, 869, 880, 881, 884, 885, 886, 891, 891, + 901, 902, 903, 908, 909, 910, 911, 912, 913, 914, + 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, + 925, 926, 929, 929, 937, 938, 939, 942, 942, 951, + 951, 960, 960, 969, 975, 975, 984, 990, 996, 1002, + 1008, 1014, 1014, 1022, 1023, 1024, 1027, 1033, 1039, 1039, + 1048, 1048, 1057, 1057, 1066, 1066, 1075, 1075, 1086, 1087, + 1088, 1093, 1095, 1095, 1114, 1114, 1125, 1126, 1127, 1132, + 1133, 1136, 1141, 1146, 1146, 1157, 1158, 1159, 1164, 1165, + 1166, 1169, 1174, 1181, 1181, 1194, 1194, 1207, 1208, 1209, + 1214, 1215, 1216, 1217, 1218, 1219, 1222, 1228, 1234, 1240, + 1240, 1251, 1252, 1255, 1256, 1257, 1262, 1262, 1272, 1272, + 1282, 1283, 1284, 1287, 1290, 1291, 1294, 1294, 1303, 1303, + 1312, 1312, 1324, 1325, 1326, 1331, 1332, 1333, 1334, 1335, + 1336, 1339, 1345, 1351, 1357, 1363, 1369, 1378, 1378, 1392, + 1393, 1396, 1397, 1398, 1407, 1407, 1433, 1433, 1444, 1445, + 1446, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, + 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, + 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, + 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, + 1491, 1492, 1493, 1494, 1497, 1497, 1506, 1506, 1515, 1515, + 1524, 1524, 1533, 1533, 1544, 1550, 1556, 1562, 1562, 1570, + 1571, 1572, 1573, 1576, 1582, 1590, 1590, 1602, 1603, 1607, + 1608, 1609, 1614, 1614, 1622, 1623, 1624, 1629, 1630, 1631, + 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, + 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, + 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, + 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1675, 1675, 1689, + 1689, 1698, 1699, 1702, 1703, 1704, 1711, 1711, 1726, 1726, + 1740, 1741, 1744, 1745, 1746, 1751, 1752, 1753, 1754, 1755, + 1756, 1757, 1758, 1759, 1760, 1763, 1765, 1771, 1773, 1773, + 1782, 1782, 1791, 1791, 1800, 1802, 1802, 1811, 1821, 1821, + 1834, 1835, 1840, 1841, 1842, 1849, 1849, 1861, 1861, 1873, + 1874, 1879, 1880, 1881, 1888, 1889, 1890, 1891, 1892, 1893, + 1894, 1895, 1896, 1899, 1901, 1901, 1910, 1912, 1914, 1920, + 1929, 1929, 1942, 1943, 1946, 1947, 1948, 1953, 1953, 1963, + 1963, 1973, 1974, 1975, 1980, 1981, 1982, 1983, 1984, 1985, + 1986, 1989, 1989, 1998, 1998, 2023, 2023, 2053, 2053, 2066, + 2067, 2070, 2071, 2072, 2077, 2077, 2089, 2089, 2101, 2102, + 2103, 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2116, + 2117, 2118, 2121, 2121, 2130, 2136, 2136, 2145, 2151, 2160, + 2160, 2171, 2172, 2175, 2176, 2177, 2182, 2182, 2191, 2191, + 2200, 2201, 2204, 2205, 2206, 2212, 2213, 2214, 2215, 2216, + 2217, 2218, 2219, 2220, 2221, 2222, 2225, 2225, 2236, 2236, + 2247, 2247, 2256, 2256, 2265, 2265, 2274, 2274, 2283, 2283, + 2297, 2297, 2308, 2309, 2312, 2312, 2324, 2324, 2335, 2336, + 2337, 2342, 2342, 2352, 2353, 2356, 2357, 2358, 2363, 2364, + 2365, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, + 2375, 2378, 2380, 2380, 2389, 2398, 2398, 2411, 2412, 2413, + 2418, 2419, 2420, 2421, 2422, 2423, 2424, 2425, 2426, 2429, + 2429, 2437, 2438, 2439, 2442, 2448, 2448, 2457, 2463, 2471, + 2479, 2479, 2490, 2491, 2492, 2497, 2498, 2499, 2500, 2501, + 2504, 2504, 2513, 2513, 2525, 2525, 2538, 2539, 2540, 2545, + 2546, 2547, 2548, 2549, 2550, 2553, 2559, 2559, 2568, 2574, + 2574, 2584, 2584, 2597, 2597, 2607, 2608, 2609, 2614, 2615, + 2616, 2617, 2618, 2619, 2620, 2621, 2622, 2623, 2624, 2625, + 2626, 2627, 2628, 2629, 2630, 2631, 2634, 2641, 2641, 2650, + 2650, 2659, 2665, 2665, 2674, 2680, 2686, 2686, 2695, 2696, + 2699, 2699, 2709, 2716, 2723, 2723, 2732, 2732, 2742, 2742, + 2752, 2752, 2764, 2764, 2776, 2776, 2786, 2787, 2788, 2794, + 2795, 2798, 2798, 2809, 2817, 2817, 2830, 2831, 2832, 2838, + 2838, 2846, 2847, 2848, 2853, 2854, 2855, 2856, 2857, 2858, + 2859, 2862, 2868, 2868, 2877, 2877, 2888, 2889, 2890, 2895, + 2895, 2903, 2904, 2905, 2910, 2911, 2912, 2913, 2914, 2917, + 2917, 2926, 2932, 2938, 2944, 2944, 2953, 2953, 2964, 2965, + 2966, 2971, 2972, 2975 }; + // Print the state stack on the debug stream. void - Dhcp6Parser::yy_stack_print_ () const + Dhcp6Parser::yystack_print_ () { *yycdebug_ << "Stack now"; for (stack_type::const_iterator @@ -6426,8 +6236,9 @@ namespace isc { namespace dhcp { *yycdebug_ << '\n'; } + // Report on the debug stream that the rule \a yyrule is going to be reduced. void - Dhcp6Parser::yy_reduce_print_ (int yyrule) const + Dhcp6Parser::yy_reduce_print_ (int yyrule) { int yylno = yyrline_[yyrule]; int yynrhs = yyr2_[yyrule]; @@ -6444,9 +6255,9 @@ namespace isc { namespace dhcp { #line 14 "dhcp6_parser.yy" } } // isc::dhcp -#line 6448 "dhcp6_parser.cc" +#line 6259 "dhcp6_parser.cc" -#line 3051 "dhcp6_parser.yy" +#line 2981 "dhcp6_parser.yy" void diff --git a/src/bin/dhcp6/dhcp6_parser.h b/src/bin/dhcp6/dhcp6_parser.h index 3fc2410591..2128519cd3 100644 --- a/src/bin/dhcp6/dhcp6_parser.h +++ b/src/bin/dhcp6/dhcp6_parser.h @@ -1,8 +1,8 @@ -// A Bison parser, made by GNU Bison 3.8.2. +// A Bison parser, made by GNU Bison 3.5.1. // Skeleton interface for Bison LALR(1) parsers in C++ -// Copyright (C) 2002-2015, 2018-2021 Free Software Foundation, Inc. +// Copyright (C) 2002-2015, 2018-2020 Free Software Foundation, Inc. // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ // GNU General Public License for more details. // You should have received a copy of the GNU General Public License -// along with this program. If not, see . +// along with this program. If not, see . // As a special exception, you may create a larger work that contains // part or all of the Bison parser skeleton and distribute that work @@ -38,9 +38,8 @@ // C++ LALR(1) parser skeleton written by Akim Demaille. -// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, -// especially those whose name start with YY_ or yy_. They are -// private implementation details that can be changed or removed. +// Undocumented macros, especially those whose name start with YY_, +// are private implementation details. Do not rely on them. #ifndef YY_PARSER6_DHCP6_PARSER_H_INCLUDED # define YY_PARSER6_DHCP6_PARSER_H_INCLUDED @@ -57,7 +56,7 @@ using namespace isc::dhcp; using namespace isc::data; using namespace std; -#line 61 "dhcp6_parser.h" +#line 60 "dhcp6_parser.h" # include # include // std::abort @@ -104,9 +103,9 @@ using namespace std; #endif # include "location.hh" #include -#ifndef PARSER6__ASSERT +#ifndef YY_ASSERT # include -# define PARSER6__ASSERT assert +# define YY_ASSERT assert #endif @@ -128,23 +127,17 @@ using namespace std; /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ -# define YY_USE(E) ((void) (E)) +# define YYUSE(E) ((void) (E)) #else -# define YY_USE(E) /* empty */ +# define YYUSE(E) /* empty */ #endif +#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ -#if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__ -# if __GNUC__ * 100 + __GNUC_MINOR__ < 407 -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") -# else -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# endif # define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else @@ -206,7 +199,7 @@ using namespace std; #line 14 "dhcp6_parser.yy" namespace isc { namespace dhcp { -#line 210 "dhcp6_parser.h" +#line 203 "dhcp6_parser.h" @@ -215,49 +208,37 @@ namespace isc { namespace dhcp { class Dhcp6Parser { public: -#ifdef PARSER6_STYPE -# ifdef __GNUC__ -# pragma GCC message "bison: do not #define PARSER6_STYPE in C++, use %define api.value.type" -# endif - typedef PARSER6_STYPE value_type; -#else +#ifndef PARSER6_STYPE /// A buffer to store and retrieve objects. /// /// Sort of a variant, but does not keep track of the nature /// of the stored data, since that knowledge is available /// via the current parser state. - class value_type + class semantic_type { public: /// Type of *this. - typedef value_type self_type; + typedef semantic_type self_type; /// Empty construction. - value_type () YY_NOEXCEPT - : yyraw_ () + semantic_type () YY_NOEXCEPT + : yybuffer_ () , yytypeid_ (YY_NULLPTR) {} /// Construct and fill. template - value_type (YY_RVREF (T) t) + semantic_type (YY_RVREF (T) t) : yytypeid_ (&typeid (T)) { - PARSER6__ASSERT (sizeof (T) <= size); + YY_ASSERT (sizeof (T) <= size); new (yyas_ ()) T (YY_MOVE (t)); } -#if 201103L <= YY_CPLUSPLUS - /// Non copyable. - value_type (const self_type&) = delete; - /// Non copyable. - self_type& operator= (const self_type&) = delete; -#endif - /// Destruction, allowed only if empty. - ~value_type () YY_NOEXCEPT + ~semantic_type () YY_NOEXCEPT { - PARSER6__ASSERT (!yytypeid_); + YY_ASSERT (!yytypeid_); } # if 201103L <= YY_CPLUSPLUS @@ -266,8 +247,8 @@ namespace isc { namespace dhcp { T& emplace (U&&... u) { - PARSER6__ASSERT (!yytypeid_); - PARSER6__ASSERT (sizeof (T) <= size); + YY_ASSERT (!yytypeid_); + YY_ASSERT (sizeof (T) <= size); yytypeid_ = & typeid (T); return *new (yyas_ ()) T (std::forward (u)...); } @@ -277,8 +258,8 @@ namespace isc { namespace dhcp { T& emplace () { - PARSER6__ASSERT (!yytypeid_); - PARSER6__ASSERT (sizeof (T) <= size); + YY_ASSERT (!yytypeid_); + YY_ASSERT (sizeof (T) <= size); yytypeid_ = & typeid (T); return *new (yyas_ ()) T (); } @@ -288,8 +269,8 @@ namespace isc { namespace dhcp { T& emplace (const T& t) { - PARSER6__ASSERT (!yytypeid_); - PARSER6__ASSERT (sizeof (T) <= size); + YY_ASSERT (!yytypeid_); + YY_ASSERT (sizeof (T) <= size); yytypeid_ = & typeid (T); return *new (yyas_ ()) T (t); } @@ -318,9 +299,9 @@ namespace isc { namespace dhcp { T& as () YY_NOEXCEPT { - PARSER6__ASSERT (yytypeid_); - PARSER6__ASSERT (*yytypeid_ == typeid (T)); - PARSER6__ASSERT (sizeof (T) <= size); + YY_ASSERT (yytypeid_); + YY_ASSERT (*yytypeid_ == typeid (T)); + YY_ASSERT (sizeof (T) <= size); return *yyas_ (); } @@ -329,9 +310,9 @@ namespace isc { namespace dhcp { const T& as () const YY_NOEXCEPT { - PARSER6__ASSERT (yytypeid_); - PARSER6__ASSERT (*yytypeid_ == typeid (T)); - PARSER6__ASSERT (sizeof (T) <= size); + YY_ASSERT (yytypeid_); + YY_ASSERT (*yytypeid_ == typeid (T)); + YY_ASSERT (sizeof (T) <= size); return *yyas_ (); } @@ -347,8 +328,8 @@ namespace isc { namespace dhcp { void swap (self_type& that) YY_NOEXCEPT { - PARSER6__ASSERT (yytypeid_); - PARSER6__ASSERT (*yytypeid_ == *that.yytypeid_); + YY_ASSERT (yytypeid_); + YY_ASSERT (*yytypeid_ == *that.yytypeid_); std::swap (as (), that.as ()); } @@ -397,19 +378,16 @@ namespace isc { namespace dhcp { } private: -#if YY_CPLUSPLUS < 201103L - /// Non copyable. - value_type (const self_type&); - /// Non copyable. + /// Prohibit blind copies. self_type& operator= (const self_type&); -#endif + semantic_type (const self_type&); /// Accessor to raw memory as \a T. template T* yyas_ () YY_NOEXCEPT { - void *yyp = yyraw_; + void *yyp = yybuffer_.yyraw; return static_cast (yyp); } @@ -418,7 +396,7 @@ namespace isc { namespace dhcp { const T* yyas_ () const YY_NOEXCEPT { - const void *yyp = yyraw_; + const void *yyp = yybuffer_.yyraw; return static_cast (yyp); } @@ -455,19 +433,18 @@ namespace isc { namespace dhcp { union { /// Strongest alignment constraints. - long double yyalign_me_; + long double yyalign_me; /// A buffer large enough to store any of the semantic values. - char yyraw_[size]; - }; + char yyraw[size]; + } yybuffer_; /// Whether the content is built: if defined, the name of the stored type. const std::type_info *yytypeid_; }; +#else + typedef PARSER6_STYPE semantic_type; #endif - /// Backward compatibility (Bison 3.8). - typedef value_type semantic_type; - /// Symbol locations. typedef location location_type; @@ -489,931 +466,239 @@ namespace isc { namespace dhcp { location_type location; }; - /// Token kinds. + /// Tokens. struct token { - enum token_kind_type + enum yytokentype { - TOKEN_PARSER6_EMPTY = -2, - TOKEN_END = 0, // "end of file" - TOKEN_PARSER6_error = 256, // error - TOKEN_PARSER6_UNDEF = 257, // "invalid token" - TOKEN_COMMA = 258, // "," - TOKEN_COLON = 259, // ":" - TOKEN_LSQUARE_BRACKET = 260, // "[" - TOKEN_RSQUARE_BRACKET = 261, // "]" - TOKEN_LCURLY_BRACKET = 262, // "{" - TOKEN_RCURLY_BRACKET = 263, // "}" - TOKEN_NULL_TYPE = 264, // "null" - TOKEN_DHCP6 = 265, // "Dhcp6" - TOKEN_DATA_DIRECTORY = 266, // "data-directory" - TOKEN_CONFIG_CONTROL = 267, // "config-control" - TOKEN_CONFIG_DATABASES = 268, // "config-databases" - TOKEN_CONFIG_FETCH_WAIT_TIME = 269, // "config-fetch-wait-time" - TOKEN_INTERFACES_CONFIG = 270, // "interfaces-config" - TOKEN_INTERFACES = 271, // "interfaces" - TOKEN_RE_DETECT = 272, // "re-detect" - TOKEN_LEASE_DATABASE = 273, // "lease-database" - TOKEN_HOSTS_DATABASE = 274, // "hosts-database" - TOKEN_HOSTS_DATABASES = 275, // "hosts-databases" - TOKEN_TYPE = 276, // "type" - TOKEN_MEMFILE = 277, // "memfile" - TOKEN_MYSQL = 278, // "mysql" - TOKEN_POSTGRESQL = 279, // "postgresql" - TOKEN_CQL = 280, // "cql" - TOKEN_USER = 281, // "user" - TOKEN_PASSWORD = 282, // "password" - TOKEN_HOST = 283, // "host" - TOKEN_PORT = 284, // "port" - TOKEN_PERSIST = 285, // "persist" - TOKEN_LFC_INTERVAL = 286, // "lfc-interval" - TOKEN_READONLY = 287, // "readonly" - TOKEN_CONNECT_TIMEOUT = 288, // "connect-timeout" - TOKEN_CONTACT_POINTS = 289, // "contact-points" - TOKEN_MAX_RECONNECT_TRIES = 290, // "max-reconnect-tries" - TOKEN_RECONNECT_WAIT_TIME = 291, // "reconnect-wait-time" - TOKEN_ON_FAIL = 292, // "on-fail" - TOKEN_STOP_RETRY_EXIT = 293, // "stop-retry-exit" - TOKEN_SERVE_RETRY_EXIT = 294, // "serve-retry-exit" - TOKEN_SERVE_RETRY_CONTINUE = 295, // "serve-retry-continue" - TOKEN_KEYSPACE = 296, // "keyspace" - TOKEN_CONSISTENCY = 297, // "consistency" - TOKEN_SERIAL_CONSISTENCY = 298, // "serial-consistency" - TOKEN_REQUEST_TIMEOUT = 299, // "request-timeout" - TOKEN_TCP_KEEPALIVE = 300, // "tcp-keepalive" - TOKEN_TCP_NODELAY = 301, // "tcp-nodelay" - TOKEN_MAX_ROW_ERRORS = 302, // "max-row-errors" - TOKEN_TRUST_ANCHOR = 303, // "trust-anchor" - TOKEN_CERT_FILE = 304, // "cert-file" - TOKEN_KEY_FILE = 305, // "key-file" - TOKEN_CIPHER_LIST = 306, // "cipher-list" - TOKEN_PREFERRED_LIFETIME = 307, // "preferred-lifetime" - TOKEN_MIN_PREFERRED_LIFETIME = 308, // "min-preferred-lifetime" - TOKEN_MAX_PREFERRED_LIFETIME = 309, // "max-preferred-lifetime" - TOKEN_VALID_LIFETIME = 310, // "valid-lifetime" - TOKEN_MIN_VALID_LIFETIME = 311, // "min-valid-lifetime" - TOKEN_MAX_VALID_LIFETIME = 312, // "max-valid-lifetime" - TOKEN_RENEW_TIMER = 313, // "renew-timer" - TOKEN_REBIND_TIMER = 314, // "rebind-timer" - TOKEN_CALCULATE_TEE_TIMES = 315, // "calculate-tee-times" - TOKEN_T1_PERCENT = 316, // "t1-percent" - TOKEN_T2_PERCENT = 317, // "t2-percent" - TOKEN_CACHE_THRESHOLD = 318, // "cache-threshold" - TOKEN_CACHE_MAX_AGE = 319, // "cache-max-age" - TOKEN_DECLINE_PROBATION_PERIOD = 320, // "decline-probation-period" - TOKEN_SERVER_TAG = 321, // "server-tag" - TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT = 322, // "statistic-default-sample-count" - TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE = 323, // "statistic-default-sample-age" - TOKEN_DDNS_SEND_UPDATES = 324, // "ddns-send-updates" - TOKEN_DDNS_OVERRIDE_NO_UPDATE = 325, // "ddns-override-no-update" - TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE = 326, // "ddns-override-client-update" - TOKEN_DDNS_REPLACE_CLIENT_NAME = 327, // "ddns-replace-client-name" - TOKEN_DDNS_GENERATED_PREFIX = 328, // "ddns-generated-prefix" - TOKEN_DDNS_QUALIFYING_SUFFIX = 329, // "ddns-qualifying-suffix" - TOKEN_DDNS_UPDATE_ON_RENEW = 330, // "ddns-update-on-renew" - TOKEN_DDNS_USE_CONFLICT_RESOLUTION = 331, // "ddns-use-conflict-resolution" - TOKEN_STORE_EXTENDED_INFO = 332, // "store-extended-info" - TOKEN_SUBNET6 = 333, // "subnet6" - TOKEN_OPTION_DEF = 334, // "option-def" - TOKEN_OPTION_DATA = 335, // "option-data" - TOKEN_NAME = 336, // "name" - TOKEN_DATA = 337, // "data" - TOKEN_CODE = 338, // "code" - TOKEN_SPACE = 339, // "space" - TOKEN_CSV_FORMAT = 340, // "csv-format" - TOKEN_ALWAYS_SEND = 341, // "always-send" - TOKEN_RECORD_TYPES = 342, // "record-types" - TOKEN_ENCAPSULATE = 343, // "encapsulate" - TOKEN_ARRAY = 344, // "array" - TOKEN_PARKED_PACKET_LIMIT = 345, // "parked-packet-limit" - TOKEN_SHARED_NETWORKS = 346, // "shared-networks" - TOKEN_POOLS = 347, // "pools" - TOKEN_POOL = 348, // "pool" - TOKEN_PD_POOLS = 349, // "pd-pools" - TOKEN_PREFIX = 350, // "prefix" - TOKEN_PREFIX_LEN = 351, // "prefix-len" - TOKEN_EXCLUDED_PREFIX = 352, // "excluded-prefix" - TOKEN_EXCLUDED_PREFIX_LEN = 353, // "excluded-prefix-len" - TOKEN_DELEGATED_LEN = 354, // "delegated-len" - TOKEN_USER_CONTEXT = 355, // "user-context" - TOKEN_COMMENT = 356, // "comment" - TOKEN_SUBNET = 357, // "subnet" - TOKEN_INTERFACE = 358, // "interface" - TOKEN_INTERFACE_ID = 359, // "interface-id" - TOKEN_ID = 360, // "id" - TOKEN_RAPID_COMMIT = 361, // "rapid-commit" - TOKEN_RESERVATION_MODE = 362, // "reservation-mode" - TOKEN_DISABLED = 363, // "disabled" - TOKEN_OUT_OF_POOL = 364, // "out-of-pool" - TOKEN_GLOBAL = 365, // "global" - TOKEN_ALL = 366, // "all" - TOKEN_RESERVATIONS_GLOBAL = 367, // "reservations-global" - TOKEN_RESERVATIONS_IN_SUBNET = 368, // "reservations-in-subnet" - TOKEN_RESERVATIONS_OUT_OF_POOL = 369, // "reservations-out-of-pool" - TOKEN_MAC_SOURCES = 370, // "mac-sources" - TOKEN_RELAY_SUPPLIED_OPTIONS = 371, // "relay-supplied-options" - TOKEN_HOST_RESERVATION_IDENTIFIERS = 372, // "host-reservation-identifiers" - TOKEN_SANITY_CHECKS = 373, // "sanity-checks" - TOKEN_LEASE_CHECKS = 374, // "lease-checks" - TOKEN_CLIENT_CLASSES = 375, // "client-classes" - TOKEN_REQUIRE_CLIENT_CLASSES = 376, // "require-client-classes" - TOKEN_TEST = 377, // "test" - TOKEN_ONLY_IF_REQUIRED = 378, // "only-if-required" - TOKEN_CLIENT_CLASS = 379, // "client-class" - TOKEN_RESERVATIONS = 380, // "reservations" - TOKEN_IP_ADDRESSES = 381, // "ip-addresses" - TOKEN_PREFIXES = 382, // "prefixes" - TOKEN_DUID = 383, // "duid" - TOKEN_HW_ADDRESS = 384, // "hw-address" - TOKEN_HOSTNAME = 385, // "hostname" - TOKEN_FLEX_ID = 386, // "flex-id" - TOKEN_RELAY = 387, // "relay" - TOKEN_IP_ADDRESS = 388, // "ip-address" - TOKEN_HOOKS_LIBRARIES = 389, // "hooks-libraries" - TOKEN_LIBRARY = 390, // "library" - TOKEN_PARAMETERS = 391, // "parameters" - TOKEN_EXPIRED_LEASES_PROCESSING = 392, // "expired-leases-processing" - TOKEN_RECLAIM_TIMER_WAIT_TIME = 393, // "reclaim-timer-wait-time" - TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 394, // "flush-reclaimed-timer-wait-time" - TOKEN_HOLD_RECLAIMED_TIME = 395, // "hold-reclaimed-time" - TOKEN_MAX_RECLAIM_LEASES = 396, // "max-reclaim-leases" - TOKEN_MAX_RECLAIM_TIME = 397, // "max-reclaim-time" - TOKEN_UNWARNED_RECLAIM_CYCLES = 398, // "unwarned-reclaim-cycles" - TOKEN_SERVER_ID = 399, // "server-id" - TOKEN_LLT = 400, // "LLT" - TOKEN_EN = 401, // "EN" - TOKEN_LL = 402, // "LL" - TOKEN_IDENTIFIER = 403, // "identifier" - TOKEN_HTYPE = 404, // "htype" - TOKEN_TIME = 405, // "time" - TOKEN_ENTERPRISE_ID = 406, // "enterprise-id" - TOKEN_DHCP4O6_PORT = 407, // "dhcp4o6-port" - TOKEN_DHCP_MULTI_THREADING = 408, // "multi-threading" - TOKEN_ENABLE_MULTI_THREADING = 409, // "enable-multi-threading" - TOKEN_THREAD_POOL_SIZE = 410, // "thread-pool-size" - TOKEN_PACKET_QUEUE_SIZE = 411, // "packet-queue-size" - TOKEN_CONTROL_SOCKET = 412, // "control-socket" - TOKEN_SOCKET_TYPE = 413, // "socket-type" - TOKEN_SOCKET_NAME = 414, // "socket-name" - TOKEN_DHCP_QUEUE_CONTROL = 415, // "dhcp-queue-control" - TOKEN_ENABLE_QUEUE = 416, // "enable-queue" - TOKEN_QUEUE_TYPE = 417, // "queue-type" - TOKEN_CAPACITY = 418, // "capacity" - TOKEN_DHCP_DDNS = 419, // "dhcp-ddns" - TOKEN_ENABLE_UPDATES = 420, // "enable-updates" - TOKEN_QUALIFYING_SUFFIX = 421, // "qualifying-suffix" - TOKEN_SERVER_IP = 422, // "server-ip" - TOKEN_SERVER_PORT = 423, // "server-port" - TOKEN_SENDER_IP = 424, // "sender-ip" - TOKEN_SENDER_PORT = 425, // "sender-port" - TOKEN_MAX_QUEUE_SIZE = 426, // "max-queue-size" - TOKEN_NCR_PROTOCOL = 427, // "ncr-protocol" - TOKEN_NCR_FORMAT = 428, // "ncr-format" - TOKEN_OVERRIDE_NO_UPDATE = 429, // "override-no-update" - TOKEN_OVERRIDE_CLIENT_UPDATE = 430, // "override-client-update" - TOKEN_REPLACE_CLIENT_NAME = 431, // "replace-client-name" - TOKEN_GENERATED_PREFIX = 432, // "generated-prefix" - TOKEN_UDP = 433, // "UDP" - TOKEN_TCP = 434, // "TCP" - TOKEN_JSON = 435, // "JSON" - TOKEN_WHEN_PRESENT = 436, // "when-present" - TOKEN_NEVER = 437, // "never" - TOKEN_ALWAYS = 438, // "always" - TOKEN_WHEN_NOT_PRESENT = 439, // "when-not-present" - TOKEN_HOSTNAME_CHAR_SET = 440, // "hostname-char-set" - TOKEN_HOSTNAME_CHAR_REPLACEMENT = 441, // "hostname-char-replacement" - TOKEN_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 442, // "early-global-reservations-lookup" - TOKEN_IP_RESERVATIONS_UNIQUE = 443, // "ip-reservations-unique" - TOKEN_RESERVATIONS_LOOKUP_FIRST = 444, // "reservations-lookup-first" - TOKEN_LOGGERS = 445, // "loggers" - TOKEN_OUTPUT_OPTIONS = 446, // "output_options" - TOKEN_OUTPUT = 447, // "output" - TOKEN_DEBUGLEVEL = 448, // "debuglevel" - TOKEN_SEVERITY = 449, // "severity" - TOKEN_FLUSH = 450, // "flush" - TOKEN_MAXSIZE = 451, // "maxsize" - TOKEN_MAXVER = 452, // "maxver" - TOKEN_PATTERN = 453, // "pattern" - TOKEN_COMPATIBILITY = 454, // "compatibility" - TOKEN_LENIENT_OPTION_PARSING = 455, // "lenient-option-parsing" - TOKEN_TOPLEVEL_JSON = 456, // TOPLEVEL_JSON - TOKEN_TOPLEVEL_DHCP6 = 457, // TOPLEVEL_DHCP6 - TOKEN_SUB_DHCP6 = 458, // SUB_DHCP6 - TOKEN_SUB_INTERFACES6 = 459, // SUB_INTERFACES6 - TOKEN_SUB_SUBNET6 = 460, // SUB_SUBNET6 - TOKEN_SUB_POOL6 = 461, // SUB_POOL6 - TOKEN_SUB_PD_POOL = 462, // SUB_PD_POOL - TOKEN_SUB_RESERVATION = 463, // SUB_RESERVATION - TOKEN_SUB_OPTION_DEFS = 464, // SUB_OPTION_DEFS - TOKEN_SUB_OPTION_DEF = 465, // SUB_OPTION_DEF - TOKEN_SUB_OPTION_DATA = 466, // SUB_OPTION_DATA - TOKEN_SUB_HOOKS_LIBRARY = 467, // SUB_HOOKS_LIBRARY - TOKEN_SUB_DHCP_DDNS = 468, // SUB_DHCP_DDNS - TOKEN_SUB_CONFIG_CONTROL = 469, // SUB_CONFIG_CONTROL - TOKEN_STRING = 470, // "constant string" - TOKEN_INTEGER = 471, // "integer" - TOKEN_FLOAT = 472, // "floating point" - TOKEN_BOOLEAN = 473 // "boolean" - }; - /// Backward compatibility alias (Bison 3.6). - typedef token_kind_type yytokentype; - }; - - /// Token kind, as returned by yylex. - typedef token::token_kind_type token_kind_type; - - /// Backward compatibility alias (Bison 3.6). - typedef token_kind_type token_type; - - /// Symbol kinds. - struct symbol_kind - { - enum symbol_kind_type - { - YYNTOKENS = 219, ///< Number of tokens. - S_YYEMPTY = -2, - S_YYEOF = 0, // "end of file" - S_YYerror = 1, // error - S_YYUNDEF = 2, // "invalid token" - S_COMMA = 3, // "," - S_COLON = 4, // ":" - S_LSQUARE_BRACKET = 5, // "[" - S_RSQUARE_BRACKET = 6, // "]" - S_LCURLY_BRACKET = 7, // "{" - S_RCURLY_BRACKET = 8, // "}" - S_NULL_TYPE = 9, // "null" - S_DHCP6 = 10, // "Dhcp6" - S_DATA_DIRECTORY = 11, // "data-directory" - S_CONFIG_CONTROL = 12, // "config-control" - S_CONFIG_DATABASES = 13, // "config-databases" - S_CONFIG_FETCH_WAIT_TIME = 14, // "config-fetch-wait-time" - S_INTERFACES_CONFIG = 15, // "interfaces-config" - S_INTERFACES = 16, // "interfaces" - S_RE_DETECT = 17, // "re-detect" - S_LEASE_DATABASE = 18, // "lease-database" - S_HOSTS_DATABASE = 19, // "hosts-database" - S_HOSTS_DATABASES = 20, // "hosts-databases" - S_TYPE = 21, // "type" - S_MEMFILE = 22, // "memfile" - S_MYSQL = 23, // "mysql" - S_POSTGRESQL = 24, // "postgresql" - S_CQL = 25, // "cql" - S_USER = 26, // "user" - S_PASSWORD = 27, // "password" - S_HOST = 28, // "host" - S_PORT = 29, // "port" - S_PERSIST = 30, // "persist" - S_LFC_INTERVAL = 31, // "lfc-interval" - S_READONLY = 32, // "readonly" - S_CONNECT_TIMEOUT = 33, // "connect-timeout" - S_CONTACT_POINTS = 34, // "contact-points" - S_MAX_RECONNECT_TRIES = 35, // "max-reconnect-tries" - S_RECONNECT_WAIT_TIME = 36, // "reconnect-wait-time" - S_ON_FAIL = 37, // "on-fail" - S_STOP_RETRY_EXIT = 38, // "stop-retry-exit" - S_SERVE_RETRY_EXIT = 39, // "serve-retry-exit" - S_SERVE_RETRY_CONTINUE = 40, // "serve-retry-continue" - S_KEYSPACE = 41, // "keyspace" - S_CONSISTENCY = 42, // "consistency" - S_SERIAL_CONSISTENCY = 43, // "serial-consistency" - S_REQUEST_TIMEOUT = 44, // "request-timeout" - S_TCP_KEEPALIVE = 45, // "tcp-keepalive" - S_TCP_NODELAY = 46, // "tcp-nodelay" - S_MAX_ROW_ERRORS = 47, // "max-row-errors" - S_TRUST_ANCHOR = 48, // "trust-anchor" - S_CERT_FILE = 49, // "cert-file" - S_KEY_FILE = 50, // "key-file" - S_CIPHER_LIST = 51, // "cipher-list" - S_PREFERRED_LIFETIME = 52, // "preferred-lifetime" - S_MIN_PREFERRED_LIFETIME = 53, // "min-preferred-lifetime" - S_MAX_PREFERRED_LIFETIME = 54, // "max-preferred-lifetime" - S_VALID_LIFETIME = 55, // "valid-lifetime" - S_MIN_VALID_LIFETIME = 56, // "min-valid-lifetime" - S_MAX_VALID_LIFETIME = 57, // "max-valid-lifetime" - S_RENEW_TIMER = 58, // "renew-timer" - S_REBIND_TIMER = 59, // "rebind-timer" - S_CALCULATE_TEE_TIMES = 60, // "calculate-tee-times" - S_T1_PERCENT = 61, // "t1-percent" - S_T2_PERCENT = 62, // "t2-percent" - S_CACHE_THRESHOLD = 63, // "cache-threshold" - S_CACHE_MAX_AGE = 64, // "cache-max-age" - S_DECLINE_PROBATION_PERIOD = 65, // "decline-probation-period" - S_SERVER_TAG = 66, // "server-tag" - S_STATISTIC_DEFAULT_SAMPLE_COUNT = 67, // "statistic-default-sample-count" - S_STATISTIC_DEFAULT_SAMPLE_AGE = 68, // "statistic-default-sample-age" - S_DDNS_SEND_UPDATES = 69, // "ddns-send-updates" - S_DDNS_OVERRIDE_NO_UPDATE = 70, // "ddns-override-no-update" - S_DDNS_OVERRIDE_CLIENT_UPDATE = 71, // "ddns-override-client-update" - S_DDNS_REPLACE_CLIENT_NAME = 72, // "ddns-replace-client-name" - S_DDNS_GENERATED_PREFIX = 73, // "ddns-generated-prefix" - S_DDNS_QUALIFYING_SUFFIX = 74, // "ddns-qualifying-suffix" - S_DDNS_UPDATE_ON_RENEW = 75, // "ddns-update-on-renew" - S_DDNS_USE_CONFLICT_RESOLUTION = 76, // "ddns-use-conflict-resolution" - S_STORE_EXTENDED_INFO = 77, // "store-extended-info" - S_SUBNET6 = 78, // "subnet6" - S_OPTION_DEF = 79, // "option-def" - S_OPTION_DATA = 80, // "option-data" - S_NAME = 81, // "name" - S_DATA = 82, // "data" - S_CODE = 83, // "code" - S_SPACE = 84, // "space" - S_CSV_FORMAT = 85, // "csv-format" - S_ALWAYS_SEND = 86, // "always-send" - S_RECORD_TYPES = 87, // "record-types" - S_ENCAPSULATE = 88, // "encapsulate" - S_ARRAY = 89, // "array" - S_PARKED_PACKET_LIMIT = 90, // "parked-packet-limit" - S_SHARED_NETWORKS = 91, // "shared-networks" - S_POOLS = 92, // "pools" - S_POOL = 93, // "pool" - S_PD_POOLS = 94, // "pd-pools" - S_PREFIX = 95, // "prefix" - S_PREFIX_LEN = 96, // "prefix-len" - S_EXCLUDED_PREFIX = 97, // "excluded-prefix" - S_EXCLUDED_PREFIX_LEN = 98, // "excluded-prefix-len" - S_DELEGATED_LEN = 99, // "delegated-len" - S_USER_CONTEXT = 100, // "user-context" - S_COMMENT = 101, // "comment" - S_SUBNET = 102, // "subnet" - S_INTERFACE = 103, // "interface" - S_INTERFACE_ID = 104, // "interface-id" - S_ID = 105, // "id" - S_RAPID_COMMIT = 106, // "rapid-commit" - S_RESERVATION_MODE = 107, // "reservation-mode" - S_DISABLED = 108, // "disabled" - S_OUT_OF_POOL = 109, // "out-of-pool" - S_GLOBAL = 110, // "global" - S_ALL = 111, // "all" - S_RESERVATIONS_GLOBAL = 112, // "reservations-global" - S_RESERVATIONS_IN_SUBNET = 113, // "reservations-in-subnet" - S_RESERVATIONS_OUT_OF_POOL = 114, // "reservations-out-of-pool" - S_MAC_SOURCES = 115, // "mac-sources" - S_RELAY_SUPPLIED_OPTIONS = 116, // "relay-supplied-options" - S_HOST_RESERVATION_IDENTIFIERS = 117, // "host-reservation-identifiers" - S_SANITY_CHECKS = 118, // "sanity-checks" - S_LEASE_CHECKS = 119, // "lease-checks" - S_CLIENT_CLASSES = 120, // "client-classes" - S_REQUIRE_CLIENT_CLASSES = 121, // "require-client-classes" - S_TEST = 122, // "test" - S_ONLY_IF_REQUIRED = 123, // "only-if-required" - S_CLIENT_CLASS = 124, // "client-class" - S_RESERVATIONS = 125, // "reservations" - S_IP_ADDRESSES = 126, // "ip-addresses" - S_PREFIXES = 127, // "prefixes" - S_DUID = 128, // "duid" - S_HW_ADDRESS = 129, // "hw-address" - S_HOSTNAME = 130, // "hostname" - S_FLEX_ID = 131, // "flex-id" - S_RELAY = 132, // "relay" - S_IP_ADDRESS = 133, // "ip-address" - S_HOOKS_LIBRARIES = 134, // "hooks-libraries" - S_LIBRARY = 135, // "library" - S_PARAMETERS = 136, // "parameters" - S_EXPIRED_LEASES_PROCESSING = 137, // "expired-leases-processing" - S_RECLAIM_TIMER_WAIT_TIME = 138, // "reclaim-timer-wait-time" - S_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 139, // "flush-reclaimed-timer-wait-time" - S_HOLD_RECLAIMED_TIME = 140, // "hold-reclaimed-time" - S_MAX_RECLAIM_LEASES = 141, // "max-reclaim-leases" - S_MAX_RECLAIM_TIME = 142, // "max-reclaim-time" - S_UNWARNED_RECLAIM_CYCLES = 143, // "unwarned-reclaim-cycles" - S_SERVER_ID = 144, // "server-id" - S_LLT = 145, // "LLT" - S_EN = 146, // "EN" - S_LL = 147, // "LL" - S_IDENTIFIER = 148, // "identifier" - S_HTYPE = 149, // "htype" - S_TIME = 150, // "time" - S_ENTERPRISE_ID = 151, // "enterprise-id" - S_DHCP4O6_PORT = 152, // "dhcp4o6-port" - S_DHCP_MULTI_THREADING = 153, // "multi-threading" - S_ENABLE_MULTI_THREADING = 154, // "enable-multi-threading" - S_THREAD_POOL_SIZE = 155, // "thread-pool-size" - S_PACKET_QUEUE_SIZE = 156, // "packet-queue-size" - S_CONTROL_SOCKET = 157, // "control-socket" - S_SOCKET_TYPE = 158, // "socket-type" - S_SOCKET_NAME = 159, // "socket-name" - S_DHCP_QUEUE_CONTROL = 160, // "dhcp-queue-control" - S_ENABLE_QUEUE = 161, // "enable-queue" - S_QUEUE_TYPE = 162, // "queue-type" - S_CAPACITY = 163, // "capacity" - S_DHCP_DDNS = 164, // "dhcp-ddns" - S_ENABLE_UPDATES = 165, // "enable-updates" - S_QUALIFYING_SUFFIX = 166, // "qualifying-suffix" - S_SERVER_IP = 167, // "server-ip" - S_SERVER_PORT = 168, // "server-port" - S_SENDER_IP = 169, // "sender-ip" - S_SENDER_PORT = 170, // "sender-port" - S_MAX_QUEUE_SIZE = 171, // "max-queue-size" - S_NCR_PROTOCOL = 172, // "ncr-protocol" - S_NCR_FORMAT = 173, // "ncr-format" - S_OVERRIDE_NO_UPDATE = 174, // "override-no-update" - S_OVERRIDE_CLIENT_UPDATE = 175, // "override-client-update" - S_REPLACE_CLIENT_NAME = 176, // "replace-client-name" - S_GENERATED_PREFIX = 177, // "generated-prefix" - S_UDP = 178, // "UDP" - S_TCP = 179, // "TCP" - S_JSON = 180, // "JSON" - S_WHEN_PRESENT = 181, // "when-present" - S_NEVER = 182, // "never" - S_ALWAYS = 183, // "always" - S_WHEN_NOT_PRESENT = 184, // "when-not-present" - S_HOSTNAME_CHAR_SET = 185, // "hostname-char-set" - S_HOSTNAME_CHAR_REPLACEMENT = 186, // "hostname-char-replacement" - S_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 187, // "early-global-reservations-lookup" - S_IP_RESERVATIONS_UNIQUE = 188, // "ip-reservations-unique" - S_RESERVATIONS_LOOKUP_FIRST = 189, // "reservations-lookup-first" - S_LOGGERS = 190, // "loggers" - S_OUTPUT_OPTIONS = 191, // "output_options" - S_OUTPUT = 192, // "output" - S_DEBUGLEVEL = 193, // "debuglevel" - S_SEVERITY = 194, // "severity" - S_FLUSH = 195, // "flush" - S_MAXSIZE = 196, // "maxsize" - S_MAXVER = 197, // "maxver" - S_PATTERN = 198, // "pattern" - S_COMPATIBILITY = 199, // "compatibility" - S_LENIENT_OPTION_PARSING = 200, // "lenient-option-parsing" - S_TOPLEVEL_JSON = 201, // TOPLEVEL_JSON - S_TOPLEVEL_DHCP6 = 202, // TOPLEVEL_DHCP6 - S_SUB_DHCP6 = 203, // SUB_DHCP6 - S_SUB_INTERFACES6 = 204, // SUB_INTERFACES6 - S_SUB_SUBNET6 = 205, // SUB_SUBNET6 - S_SUB_POOL6 = 206, // SUB_POOL6 - S_SUB_PD_POOL = 207, // SUB_PD_POOL - S_SUB_RESERVATION = 208, // SUB_RESERVATION - S_SUB_OPTION_DEFS = 209, // SUB_OPTION_DEFS - S_SUB_OPTION_DEF = 210, // SUB_OPTION_DEF - S_SUB_OPTION_DATA = 211, // SUB_OPTION_DATA - S_SUB_HOOKS_LIBRARY = 212, // SUB_HOOKS_LIBRARY - S_SUB_DHCP_DDNS = 213, // SUB_DHCP_DDNS - S_SUB_CONFIG_CONTROL = 214, // SUB_CONFIG_CONTROL - S_STRING = 215, // "constant string" - S_INTEGER = 216, // "integer" - S_FLOAT = 217, // "floating point" - S_BOOLEAN = 218, // "boolean" - S_YYACCEPT = 219, // $accept - S_start = 220, // start - S_221_1 = 221, // $@1 - S_222_2 = 222, // $@2 - S_223_3 = 223, // $@3 - S_224_4 = 224, // $@4 - S_225_5 = 225, // $@5 - S_226_6 = 226, // $@6 - S_227_7 = 227, // $@7 - S_228_8 = 228, // $@8 - S_229_9 = 229, // $@9 - S_230_10 = 230, // $@10 - S_231_11 = 231, // $@11 - S_232_12 = 232, // $@12 - S_233_13 = 233, // $@13 - S_234_14 = 234, // $@14 - S_value = 235, // value - S_sub_json = 236, // sub_json - S_map2 = 237, // map2 - S_238_15 = 238, // $@15 - S_map_value = 239, // map_value - S_map_content = 240, // map_content - S_not_empty_map = 241, // not_empty_map - S_list_generic = 242, // list_generic - S_243_16 = 243, // $@16 - S_list_content = 244, // list_content - S_not_empty_list = 245, // not_empty_list - S_list_strings = 246, // list_strings - S_247_17 = 247, // $@17 - S_list_strings_content = 248, // list_strings_content - S_not_empty_list_strings = 249, // not_empty_list_strings - S_unknown_map_entry = 250, // unknown_map_entry - S_syntax_map = 251, // syntax_map - S_252_18 = 252, // $@18 - S_global_object = 253, // global_object - S_254_19 = 254, // $@19 - S_global_object_comma = 255, // global_object_comma - S_sub_dhcp6 = 256, // sub_dhcp6 - S_257_20 = 257, // $@20 - S_global_params = 258, // global_params - S_global_param = 259, // global_param - S_data_directory = 260, // data_directory - S_261_21 = 261, // $@21 - S_preferred_lifetime = 262, // preferred_lifetime - S_min_preferred_lifetime = 263, // min_preferred_lifetime - S_max_preferred_lifetime = 264, // max_preferred_lifetime - S_valid_lifetime = 265, // valid_lifetime - S_min_valid_lifetime = 266, // min_valid_lifetime - S_max_valid_lifetime = 267, // max_valid_lifetime - S_renew_timer = 268, // renew_timer - S_rebind_timer = 269, // rebind_timer - S_calculate_tee_times = 270, // calculate_tee_times - S_t1_percent = 271, // t1_percent - S_t2_percent = 272, // t2_percent - S_cache_threshold = 273, // cache_threshold - S_cache_max_age = 274, // cache_max_age - S_decline_probation_period = 275, // decline_probation_period - S_ddns_send_updates = 276, // ddns_send_updates - S_ddns_override_no_update = 277, // ddns_override_no_update - S_ddns_override_client_update = 278, // ddns_override_client_update - S_ddns_replace_client_name = 279, // ddns_replace_client_name - S_280_22 = 280, // $@22 - S_ddns_replace_client_name_value = 281, // ddns_replace_client_name_value - S_ddns_generated_prefix = 282, // ddns_generated_prefix - S_283_23 = 283, // $@23 - S_ddns_qualifying_suffix = 284, // ddns_qualifying_suffix - S_285_24 = 285, // $@24 - S_ddns_update_on_renew = 286, // ddns_update_on_renew - S_ddns_use_conflict_resolution = 287, // ddns_use_conflict_resolution - S_hostname_char_set = 288, // hostname_char_set - S_289_25 = 289, // $@25 - S_hostname_char_replacement = 290, // hostname_char_replacement - S_291_26 = 291, // $@26 - S_store_extended_info = 292, // store_extended_info - S_statistic_default_sample_count = 293, // statistic_default_sample_count - S_statistic_default_sample_age = 294, // statistic_default_sample_age - S_server_tag = 295, // server_tag - S_296_27 = 296, // $@27 - S_parked_packet_limit = 297, // parked_packet_limit - S_early_global_reservations_lookup = 298, // early_global_reservations_lookup - S_ip_reservations_unique = 299, // ip_reservations_unique - S_reservations_lookup_first = 300, // reservations_lookup_first - S_interfaces_config = 301, // interfaces_config - S_302_28 = 302, // $@28 - S_sub_interfaces6 = 303, // sub_interfaces6 - S_304_29 = 304, // $@29 - S_interfaces_config_params = 305, // interfaces_config_params - S_interfaces_config_param = 306, // interfaces_config_param - S_interfaces_list = 307, // interfaces_list - S_308_30 = 308, // $@30 - S_re_detect = 309, // re_detect - S_lease_database = 310, // lease_database - S_311_31 = 311, // $@31 - S_hosts_database = 312, // hosts_database - S_313_32 = 313, // $@32 - S_hosts_databases = 314, // hosts_databases - S_315_33 = 315, // $@33 - S_database_list = 316, // database_list - S_not_empty_database_list = 317, // not_empty_database_list - S_database = 318, // database - S_319_34 = 319, // $@34 - S_database_map_params = 320, // database_map_params - S_database_map_param = 321, // database_map_param - S_database_type = 322, // database_type - S_323_35 = 323, // $@35 - S_db_type = 324, // db_type - S_user = 325, // user - S_326_36 = 326, // $@36 - S_password = 327, // password - S_328_37 = 328, // $@37 - S_host = 329, // host - S_330_38 = 330, // $@38 - S_port = 331, // port - S_name = 332, // name - S_333_39 = 333, // $@39 - S_persist = 334, // persist - S_lfc_interval = 335, // lfc_interval - S_readonly = 336, // readonly - S_connect_timeout = 337, // connect_timeout - S_reconnect_wait_time = 338, // reconnect_wait_time - S_on_fail = 339, // on_fail - S_340_40 = 340, // $@40 - S_on_fail_mode = 341, // on_fail_mode - S_max_row_errors = 342, // max_row_errors - S_request_timeout = 343, // request_timeout - S_tcp_keepalive = 344, // tcp_keepalive - S_tcp_nodelay = 345, // tcp_nodelay - S_contact_points = 346, // contact_points - S_347_41 = 347, // $@41 - S_max_reconnect_tries = 348, // max_reconnect_tries - S_keyspace = 349, // keyspace - S_350_42 = 350, // $@42 - S_consistency = 351, // consistency - S_352_43 = 352, // $@43 - S_serial_consistency = 353, // serial_consistency - S_354_44 = 354, // $@44 - S_trust_anchor = 355, // trust_anchor - S_356_45 = 356, // $@45 - S_cert_file = 357, // cert_file - S_358_46 = 358, // $@46 - S_key_file = 359, // key_file - S_360_47 = 360, // $@47 - S_cipher_list = 361, // cipher_list - S_362_48 = 362, // $@48 - S_sanity_checks = 363, // sanity_checks - S_364_49 = 364, // $@49 - S_sanity_checks_params = 365, // sanity_checks_params - S_sanity_checks_param = 366, // sanity_checks_param - S_lease_checks = 367, // lease_checks - S_368_50 = 368, // $@50 - S_mac_sources = 369, // mac_sources - S_370_51 = 370, // $@51 - S_mac_sources_list = 371, // mac_sources_list - S_mac_sources_value = 372, // mac_sources_value - S_duid_id = 373, // duid_id - S_string_id = 374, // string_id - S_host_reservation_identifiers = 375, // host_reservation_identifiers - S_376_52 = 376, // $@52 - S_host_reservation_identifiers_list = 377, // host_reservation_identifiers_list - S_host_reservation_identifier = 378, // host_reservation_identifier - S_hw_address_id = 379, // hw_address_id - S_flex_id = 380, // flex_id - S_relay_supplied_options = 381, // relay_supplied_options - S_382_53 = 382, // $@53 - S_dhcp_multi_threading = 383, // dhcp_multi_threading - S_384_54 = 384, // $@54 - S_multi_threading_params = 385, // multi_threading_params - S_multi_threading_param = 386, // multi_threading_param - S_enable_multi_threading = 387, // enable_multi_threading - S_thread_pool_size = 388, // thread_pool_size - S_packet_queue_size = 389, // packet_queue_size - S_hooks_libraries = 390, // hooks_libraries - S_391_55 = 391, // $@55 - S_hooks_libraries_list = 392, // hooks_libraries_list - S_not_empty_hooks_libraries_list = 393, // not_empty_hooks_libraries_list - S_hooks_library = 394, // hooks_library - S_395_56 = 395, // $@56 - S_sub_hooks_library = 396, // sub_hooks_library - S_397_57 = 397, // $@57 - S_hooks_params = 398, // hooks_params - S_hooks_param = 399, // hooks_param - S_library = 400, // library - S_401_58 = 401, // $@58 - S_parameters = 402, // parameters - S_403_59 = 403, // $@59 - S_expired_leases_processing = 404, // expired_leases_processing - S_405_60 = 405, // $@60 - S_expired_leases_params = 406, // expired_leases_params - S_expired_leases_param = 407, // expired_leases_param - S_reclaim_timer_wait_time = 408, // reclaim_timer_wait_time - S_flush_reclaimed_timer_wait_time = 409, // flush_reclaimed_timer_wait_time - S_hold_reclaimed_time = 410, // hold_reclaimed_time - S_max_reclaim_leases = 411, // max_reclaim_leases - S_max_reclaim_time = 412, // max_reclaim_time - S_unwarned_reclaim_cycles = 413, // unwarned_reclaim_cycles - S_subnet6_list = 414, // subnet6_list - S_415_61 = 415, // $@61 - S_subnet6_list_content = 416, // subnet6_list_content - S_not_empty_subnet6_list = 417, // not_empty_subnet6_list - S_subnet6 = 418, // subnet6 - S_419_62 = 419, // $@62 - S_sub_subnet6 = 420, // sub_subnet6 - S_421_63 = 421, // $@63 - S_subnet6_params = 422, // subnet6_params - S_subnet6_param = 423, // subnet6_param - S_subnet = 424, // subnet - S_425_64 = 425, // $@64 - S_interface = 426, // interface - S_427_65 = 427, // $@65 - S_interface_id = 428, // interface_id - S_429_66 = 429, // $@66 - S_client_class = 430, // client_class - S_431_67 = 431, // $@67 - S_require_client_classes = 432, // require_client_classes - S_433_68 = 433, // $@68 - S_reservations_global = 434, // reservations_global - S_reservations_in_subnet = 435, // reservations_in_subnet - S_reservations_out_of_pool = 436, // reservations_out_of_pool - S_reservation_mode = 437, // reservation_mode - S_438_69 = 438, // $@69 - S_hr_mode = 439, // hr_mode - S_id = 440, // id - S_rapid_commit = 441, // rapid_commit - S_shared_networks = 442, // shared_networks - S_443_70 = 443, // $@70 - S_shared_networks_content = 444, // shared_networks_content - S_shared_networks_list = 445, // shared_networks_list - S_shared_network = 446, // shared_network - S_447_71 = 447, // $@71 - S_shared_network_params = 448, // shared_network_params - S_shared_network_param = 449, // shared_network_param - S_option_def_list = 450, // option_def_list - S_451_72 = 451, // $@72 - S_sub_option_def_list = 452, // sub_option_def_list - S_453_73 = 453, // $@73 - S_option_def_list_content = 454, // option_def_list_content - S_not_empty_option_def_list = 455, // not_empty_option_def_list - S_option_def_entry = 456, // option_def_entry - S_457_74 = 457, // $@74 - S_sub_option_def = 458, // sub_option_def - S_459_75 = 459, // $@75 - S_option_def_params = 460, // option_def_params - S_not_empty_option_def_params = 461, // not_empty_option_def_params - S_option_def_param = 462, // option_def_param - S_option_def_name = 463, // option_def_name - S_code = 464, // code - S_option_def_code = 465, // option_def_code - S_option_def_type = 466, // option_def_type - S_467_76 = 467, // $@76 - S_option_def_record_types = 468, // option_def_record_types - S_469_77 = 469, // $@77 - S_space = 470, // space - S_471_78 = 471, // $@78 - S_option_def_space = 472, // option_def_space - S_option_def_encapsulate = 473, // option_def_encapsulate - S_474_79 = 474, // $@79 - S_option_def_array = 475, // option_def_array - S_option_data_list = 476, // option_data_list - S_477_80 = 477, // $@80 - S_option_data_list_content = 478, // option_data_list_content - S_not_empty_option_data_list = 479, // not_empty_option_data_list - S_option_data_entry = 480, // option_data_entry - S_481_81 = 481, // $@81 - S_sub_option_data = 482, // sub_option_data - S_483_82 = 483, // $@82 - S_option_data_params = 484, // option_data_params - S_not_empty_option_data_params = 485, // not_empty_option_data_params - S_option_data_param = 486, // option_data_param - S_option_data_name = 487, // option_data_name - S_option_data_data = 488, // option_data_data - S_489_83 = 489, // $@83 - S_option_data_code = 490, // option_data_code - S_option_data_space = 491, // option_data_space - S_option_data_csv_format = 492, // option_data_csv_format - S_option_data_always_send = 493, // option_data_always_send - S_pools_list = 494, // pools_list - S_495_84 = 495, // $@84 - S_pools_list_content = 496, // pools_list_content - S_not_empty_pools_list = 497, // not_empty_pools_list - S_pool_list_entry = 498, // pool_list_entry - S_499_85 = 499, // $@85 - S_sub_pool6 = 500, // sub_pool6 - S_501_86 = 501, // $@86 - S_pool_params = 502, // pool_params - S_pool_param = 503, // pool_param - S_pool_entry = 504, // pool_entry - S_505_87 = 505, // $@87 - S_user_context = 506, // user_context - S_507_88 = 507, // $@88 - S_comment = 508, // comment - S_509_89 = 509, // $@89 - S_pd_pools_list = 510, // pd_pools_list - S_511_90 = 511, // $@90 - S_pd_pools_list_content = 512, // pd_pools_list_content - S_not_empty_pd_pools_list = 513, // not_empty_pd_pools_list - S_pd_pool_entry = 514, // pd_pool_entry - S_515_91 = 515, // $@91 - S_sub_pd_pool = 516, // sub_pd_pool - S_517_92 = 517, // $@92 - S_pd_pool_params = 518, // pd_pool_params - S_pd_pool_param = 519, // pd_pool_param - S_pd_prefix = 520, // pd_prefix - S_521_93 = 521, // $@93 - S_pd_prefix_len = 522, // pd_prefix_len - S_excluded_prefix = 523, // excluded_prefix - S_524_94 = 524, // $@94 - S_excluded_prefix_len = 525, // excluded_prefix_len - S_pd_delegated_len = 526, // pd_delegated_len - S_reservations = 527, // reservations - S_528_95 = 528, // $@95 - S_reservations_list = 529, // reservations_list - S_not_empty_reservations_list = 530, // not_empty_reservations_list - S_reservation = 531, // reservation - S_532_96 = 532, // $@96 - S_sub_reservation = 533, // sub_reservation - S_534_97 = 534, // $@97 - S_reservation_params = 535, // reservation_params - S_not_empty_reservation_params = 536, // not_empty_reservation_params - S_reservation_param = 537, // reservation_param - S_ip_addresses = 538, // ip_addresses - S_539_98 = 539, // $@98 - S_prefixes = 540, // prefixes - S_541_99 = 541, // $@99 - S_duid = 542, // duid - S_543_100 = 543, // $@100 - S_hw_address = 544, // hw_address - S_545_101 = 545, // $@101 - S_hostname = 546, // hostname - S_547_102 = 547, // $@102 - S_flex_id_value = 548, // flex_id_value - S_549_103 = 549, // $@103 - S_reservation_client_classes = 550, // reservation_client_classes - S_551_104 = 551, // $@104 - S_relay = 552, // relay - S_553_105 = 553, // $@105 - S_relay_map = 554, // relay_map - S_ip_address = 555, // ip_address - S_556_106 = 556, // $@106 - S_client_classes = 557, // client_classes - S_558_107 = 558, // $@107 - S_client_classes_list = 559, // client_classes_list - S_client_class_entry = 560, // client_class_entry - S_561_108 = 561, // $@108 - S_client_class_params = 562, // client_class_params - S_not_empty_client_class_params = 563, // not_empty_client_class_params - S_client_class_param = 564, // client_class_param - S_client_class_name = 565, // client_class_name - S_client_class_test = 566, // client_class_test - S_567_109 = 567, // $@109 - S_only_if_required = 568, // only_if_required - S_server_id = 569, // server_id - S_570_110 = 570, // $@110 - S_server_id_params = 571, // server_id_params - S_server_id_param = 572, // server_id_param - S_server_id_type = 573, // server_id_type - S_574_111 = 574, // $@111 - S_duid_type = 575, // duid_type - S_htype = 576, // htype - S_identifier = 577, // identifier - S_578_112 = 578, // $@112 - S_time = 579, // time - S_enterprise_id = 580, // enterprise_id - S_dhcp4o6_port = 581, // dhcp4o6_port - S_control_socket = 582, // control_socket - S_583_113 = 583, // $@113 - S_control_socket_params = 584, // control_socket_params - S_control_socket_param = 585, // control_socket_param - S_socket_type = 586, // socket_type - S_587_114 = 587, // $@114 - S_socket_name = 588, // socket_name - S_589_115 = 589, // $@115 - S_dhcp_queue_control = 590, // dhcp_queue_control - S_591_116 = 591, // $@116 - S_queue_control_params = 592, // queue_control_params - S_queue_control_param = 593, // queue_control_param - S_enable_queue = 594, // enable_queue - S_queue_type = 595, // queue_type - S_596_117 = 596, // $@117 - S_capacity = 597, // capacity - S_arbitrary_map_entry = 598, // arbitrary_map_entry - S_599_118 = 599, // $@118 - S_dhcp_ddns = 600, // dhcp_ddns - S_601_119 = 601, // $@119 - S_sub_dhcp_ddns = 602, // sub_dhcp_ddns - S_603_120 = 603, // $@120 - S_dhcp_ddns_params = 604, // dhcp_ddns_params - S_dhcp_ddns_param = 605, // dhcp_ddns_param - S_enable_updates = 606, // enable_updates - S_dep_qualifying_suffix = 607, // dep_qualifying_suffix - S_608_121 = 608, // $@121 - S_server_ip = 609, // server_ip - S_610_122 = 610, // $@122 - S_server_port = 611, // server_port - S_sender_ip = 612, // sender_ip - S_613_123 = 613, // $@123 - S_sender_port = 614, // sender_port - S_max_queue_size = 615, // max_queue_size - S_ncr_protocol = 616, // ncr_protocol - S_617_124 = 617, // $@124 - S_ncr_protocol_value = 618, // ncr_protocol_value - S_ncr_format = 619, // ncr_format - S_620_125 = 620, // $@125 - S_dep_override_no_update = 621, // dep_override_no_update - S_dep_override_client_update = 622, // dep_override_client_update - S_dep_replace_client_name = 623, // dep_replace_client_name - S_624_126 = 624, // $@126 - S_dep_generated_prefix = 625, // dep_generated_prefix - S_626_127 = 626, // $@127 - S_dep_hostname_char_set = 627, // dep_hostname_char_set - S_628_128 = 628, // $@128 - S_dep_hostname_char_replacement = 629, // dep_hostname_char_replacement - S_630_129 = 630, // $@129 - S_config_control = 631, // config_control - S_632_130 = 632, // $@130 - S_sub_config_control = 633, // sub_config_control - S_634_131 = 634, // $@131 - S_config_control_params = 635, // config_control_params - S_config_control_param = 636, // config_control_param - S_config_databases = 637, // config_databases - S_638_132 = 638, // $@132 - S_config_fetch_wait_time = 639, // config_fetch_wait_time - S_loggers = 640, // loggers - S_641_133 = 641, // $@133 - S_loggers_entries = 642, // loggers_entries - S_logger_entry = 643, // logger_entry - S_644_134 = 644, // $@134 - S_logger_params = 645, // logger_params - S_logger_param = 646, // logger_param - S_debuglevel = 647, // debuglevel - S_severity = 648, // severity - S_649_135 = 649, // $@135 - S_output_options_list = 650, // output_options_list - S_651_136 = 651, // $@136 - S_output_options_list_content = 652, // output_options_list_content - S_output_entry = 653, // output_entry - S_654_137 = 654, // $@137 - S_output_params_list = 655, // output_params_list - S_output_params = 656, // output_params - S_output = 657, // output - S_658_138 = 658, // $@138 - S_flush = 659, // flush - S_maxsize = 660, // maxsize - S_maxver = 661, // maxver - S_pattern = 662, // pattern - S_663_139 = 663, // $@139 - S_compatibility = 664, // compatibility - S_665_140 = 665, // $@140 - S_compatibility_params = 666, // compatibility_params - S_compatibility_param = 667, // compatibility_param - S_lenient_option_parsing = 668 // lenient_option_parsing + TOKEN_END = 0, + TOKEN_COMMA = 258, + TOKEN_COLON = 259, + TOKEN_LSQUARE_BRACKET = 260, + TOKEN_RSQUARE_BRACKET = 261, + TOKEN_LCURLY_BRACKET = 262, + TOKEN_RCURLY_BRACKET = 263, + TOKEN_NULL_TYPE = 264, + TOKEN_DHCP6 = 265, + TOKEN_DATA_DIRECTORY = 266, + TOKEN_CONFIG_CONTROL = 267, + TOKEN_CONFIG_DATABASES = 268, + TOKEN_CONFIG_FETCH_WAIT_TIME = 269, + TOKEN_INTERFACES_CONFIG = 270, + TOKEN_INTERFACES = 271, + TOKEN_RE_DETECT = 272, + TOKEN_LEASE_DATABASE = 273, + TOKEN_HOSTS_DATABASE = 274, + TOKEN_HOSTS_DATABASES = 275, + TOKEN_TYPE = 276, + TOKEN_MEMFILE = 277, + TOKEN_MYSQL = 278, + TOKEN_POSTGRESQL = 279, + TOKEN_USER = 280, + TOKEN_PASSWORD = 281, + TOKEN_HOST = 282, + TOKEN_PORT = 283, + TOKEN_PERSIST = 284, + TOKEN_LFC_INTERVAL = 285, + TOKEN_READONLY = 286, + TOKEN_CONNECT_TIMEOUT = 287, + TOKEN_MAX_RECONNECT_TRIES = 288, + TOKEN_RECONNECT_WAIT_TIME = 289, + TOKEN_ON_FAIL = 290, + TOKEN_STOP_RETRY_EXIT = 291, + TOKEN_SERVE_RETRY_EXIT = 292, + TOKEN_SERVE_RETRY_CONTINUE = 293, + TOKEN_MAX_ROW_ERRORS = 294, + TOKEN_TRUST_ANCHOR = 295, + TOKEN_CERT_FILE = 296, + TOKEN_KEY_FILE = 297, + TOKEN_CIPHER_LIST = 298, + TOKEN_PREFERRED_LIFETIME = 299, + TOKEN_MIN_PREFERRED_LIFETIME = 300, + TOKEN_MAX_PREFERRED_LIFETIME = 301, + TOKEN_VALID_LIFETIME = 302, + TOKEN_MIN_VALID_LIFETIME = 303, + TOKEN_MAX_VALID_LIFETIME = 304, + TOKEN_RENEW_TIMER = 305, + TOKEN_REBIND_TIMER = 306, + TOKEN_CALCULATE_TEE_TIMES = 307, + TOKEN_T1_PERCENT = 308, + TOKEN_T2_PERCENT = 309, + TOKEN_CACHE_THRESHOLD = 310, + TOKEN_CACHE_MAX_AGE = 311, + TOKEN_DECLINE_PROBATION_PERIOD = 312, + TOKEN_SERVER_TAG = 313, + TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT = 314, + TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE = 315, + TOKEN_DDNS_SEND_UPDATES = 316, + TOKEN_DDNS_OVERRIDE_NO_UPDATE = 317, + TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE = 318, + TOKEN_DDNS_REPLACE_CLIENT_NAME = 319, + TOKEN_DDNS_GENERATED_PREFIX = 320, + TOKEN_DDNS_QUALIFYING_SUFFIX = 321, + TOKEN_DDNS_UPDATE_ON_RENEW = 322, + TOKEN_DDNS_USE_CONFLICT_RESOLUTION = 323, + TOKEN_STORE_EXTENDED_INFO = 324, + TOKEN_SUBNET6 = 325, + TOKEN_OPTION_DEF = 326, + TOKEN_OPTION_DATA = 327, + TOKEN_NAME = 328, + TOKEN_DATA = 329, + TOKEN_CODE = 330, + TOKEN_SPACE = 331, + TOKEN_CSV_FORMAT = 332, + TOKEN_ALWAYS_SEND = 333, + TOKEN_RECORD_TYPES = 334, + TOKEN_ENCAPSULATE = 335, + TOKEN_ARRAY = 336, + TOKEN_PARKED_PACKET_LIMIT = 337, + TOKEN_SHARED_NETWORKS = 338, + TOKEN_POOLS = 339, + TOKEN_POOL = 340, + TOKEN_PD_POOLS = 341, + TOKEN_PREFIX = 342, + TOKEN_PREFIX_LEN = 343, + TOKEN_EXCLUDED_PREFIX = 344, + TOKEN_EXCLUDED_PREFIX_LEN = 345, + TOKEN_DELEGATED_LEN = 346, + TOKEN_USER_CONTEXT = 347, + TOKEN_COMMENT = 348, + TOKEN_SUBNET = 349, + TOKEN_INTERFACE = 350, + TOKEN_INTERFACE_ID = 351, + TOKEN_ID = 352, + TOKEN_RAPID_COMMIT = 353, + TOKEN_RESERVATION_MODE = 354, + TOKEN_DISABLED = 355, + TOKEN_OUT_OF_POOL = 356, + TOKEN_GLOBAL = 357, + TOKEN_ALL = 358, + TOKEN_RESERVATIONS_GLOBAL = 359, + TOKEN_RESERVATIONS_IN_SUBNET = 360, + TOKEN_RESERVATIONS_OUT_OF_POOL = 361, + TOKEN_MAC_SOURCES = 362, + TOKEN_RELAY_SUPPLIED_OPTIONS = 363, + TOKEN_HOST_RESERVATION_IDENTIFIERS = 364, + TOKEN_SANITY_CHECKS = 365, + TOKEN_LEASE_CHECKS = 366, + TOKEN_CLIENT_CLASSES = 367, + TOKEN_REQUIRE_CLIENT_CLASSES = 368, + TOKEN_TEST = 369, + TOKEN_ONLY_IF_REQUIRED = 370, + TOKEN_CLIENT_CLASS = 371, + TOKEN_RESERVATIONS = 372, + TOKEN_IP_ADDRESSES = 373, + TOKEN_PREFIXES = 374, + TOKEN_DUID = 375, + TOKEN_HW_ADDRESS = 376, + TOKEN_HOSTNAME = 377, + TOKEN_FLEX_ID = 378, + TOKEN_RELAY = 379, + TOKEN_IP_ADDRESS = 380, + TOKEN_HOOKS_LIBRARIES = 381, + TOKEN_LIBRARY = 382, + TOKEN_PARAMETERS = 383, + TOKEN_EXPIRED_LEASES_PROCESSING = 384, + TOKEN_RECLAIM_TIMER_WAIT_TIME = 385, + TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 386, + TOKEN_HOLD_RECLAIMED_TIME = 387, + TOKEN_MAX_RECLAIM_LEASES = 388, + TOKEN_MAX_RECLAIM_TIME = 389, + TOKEN_UNWARNED_RECLAIM_CYCLES = 390, + TOKEN_SERVER_ID = 391, + TOKEN_LLT = 392, + TOKEN_EN = 393, + TOKEN_LL = 394, + TOKEN_IDENTIFIER = 395, + TOKEN_HTYPE = 396, + TOKEN_TIME = 397, + TOKEN_ENTERPRISE_ID = 398, + TOKEN_DHCP4O6_PORT = 399, + TOKEN_DHCP_MULTI_THREADING = 400, + TOKEN_ENABLE_MULTI_THREADING = 401, + TOKEN_THREAD_POOL_SIZE = 402, + TOKEN_PACKET_QUEUE_SIZE = 403, + TOKEN_CONTROL_SOCKET = 404, + TOKEN_SOCKET_TYPE = 405, + TOKEN_SOCKET_NAME = 406, + TOKEN_DHCP_QUEUE_CONTROL = 407, + TOKEN_ENABLE_QUEUE = 408, + TOKEN_QUEUE_TYPE = 409, + TOKEN_CAPACITY = 410, + TOKEN_DHCP_DDNS = 411, + TOKEN_ENABLE_UPDATES = 412, + TOKEN_QUALIFYING_SUFFIX = 413, + TOKEN_SERVER_IP = 414, + TOKEN_SERVER_PORT = 415, + TOKEN_SENDER_IP = 416, + TOKEN_SENDER_PORT = 417, + TOKEN_MAX_QUEUE_SIZE = 418, + TOKEN_NCR_PROTOCOL = 419, + TOKEN_NCR_FORMAT = 420, + TOKEN_OVERRIDE_NO_UPDATE = 421, + TOKEN_OVERRIDE_CLIENT_UPDATE = 422, + TOKEN_REPLACE_CLIENT_NAME = 423, + TOKEN_GENERATED_PREFIX = 424, + TOKEN_UDP = 425, + TOKEN_TCP = 426, + TOKEN_JSON = 427, + TOKEN_WHEN_PRESENT = 428, + TOKEN_NEVER = 429, + TOKEN_ALWAYS = 430, + TOKEN_WHEN_NOT_PRESENT = 431, + TOKEN_HOSTNAME_CHAR_SET = 432, + TOKEN_HOSTNAME_CHAR_REPLACEMENT = 433, + TOKEN_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 434, + TOKEN_IP_RESERVATIONS_UNIQUE = 435, + TOKEN_RESERVATIONS_LOOKUP_FIRST = 436, + TOKEN_LOGGERS = 437, + TOKEN_OUTPUT_OPTIONS = 438, + TOKEN_OUTPUT = 439, + TOKEN_DEBUGLEVEL = 440, + TOKEN_SEVERITY = 441, + TOKEN_FLUSH = 442, + TOKEN_MAXSIZE = 443, + TOKEN_MAXVER = 444, + TOKEN_PATTERN = 445, + TOKEN_COMPATIBILITY = 446, + TOKEN_LENIENT_OPTION_PARSING = 447, + TOKEN_TOPLEVEL_JSON = 448, + TOKEN_TOPLEVEL_DHCP6 = 449, + TOKEN_SUB_DHCP6 = 450, + TOKEN_SUB_INTERFACES6 = 451, + TOKEN_SUB_SUBNET6 = 452, + TOKEN_SUB_POOL6 = 453, + TOKEN_SUB_PD_POOL = 454, + TOKEN_SUB_RESERVATION = 455, + TOKEN_SUB_OPTION_DEFS = 456, + TOKEN_SUB_OPTION_DEF = 457, + TOKEN_SUB_OPTION_DATA = 458, + TOKEN_SUB_HOOKS_LIBRARY = 459, + TOKEN_SUB_DHCP_DDNS = 460, + TOKEN_SUB_CONFIG_CONTROL = 461, + TOKEN_STRING = 462, + TOKEN_INTEGER = 463, + TOKEN_FLOAT = 464, + TOKEN_BOOLEAN = 465 }; }; - /// (Internal) symbol kind. - typedef symbol_kind::symbol_kind_type symbol_kind_type; + /// (External) token type, as returned by yylex. + typedef token::yytokentype token_type; - /// The number of tokens. - static const symbol_kind_type YYNTOKENS = symbol_kind::YYNTOKENS; + /// Symbol type: an internal symbol number. + typedef int symbol_number_type; + + /// The symbol type number to denote an empty symbol. + enum { empty_symbol = -2 }; + + /// Internal symbol number for tokens (subsumed by symbol_number_type). + typedef unsigned char token_number_type; /// A complete symbol. /// - /// Expects its Base type to provide access to the symbol kind - /// via kind (). + /// Expects its Base type to provide access to the symbol type + /// via type_get (). /// /// Provide access to semantic value and location. template @@ -1423,58 +708,20 @@ namespace isc { namespace dhcp { typedef Base super_type; /// Default constructor. - basic_symbol () YY_NOEXCEPT + basic_symbol () : value () , location () {} #if 201103L <= YY_CPLUSPLUS /// Move constructor. - basic_symbol (basic_symbol&& that) - : Base (std::move (that)) - , value () - , location (std::move (that.location)) - { - switch (this->kind ()) - { - case symbol_kind::S_value: // value - case symbol_kind::S_map_value: // map_value - case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value - case symbol_kind::S_db_type: // db_type - case symbol_kind::S_on_fail_mode: // on_fail_mode - case symbol_kind::S_hr_mode: // hr_mode - case symbol_kind::S_duid_type: // duid_type - case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value - value.move< ElementPtr > (std::move (that.value)); - break; - - case symbol_kind::S_BOOLEAN: // "boolean" - value.move< bool > (std::move (that.value)); - break; - - case symbol_kind::S_FLOAT: // "floating point" - value.move< double > (std::move (that.value)); - break; - - case symbol_kind::S_INTEGER: // "integer" - value.move< int64_t > (std::move (that.value)); - break; - - case symbol_kind::S_STRING: // "constant string" - value.move< std::string > (std::move (that.value)); - break; - - default: - break; - } - - } + basic_symbol (basic_symbol&& that); #endif /// Copy constructor. basic_symbol (const basic_symbol& that); - /// Constructors for typed symbols. + /// Constructor for valueless symbols, and symbols from each type. #if 201103L <= YY_CPLUSPLUS basic_symbol (typename Base::kind_type t, location_type&& l) : Base (t) @@ -1486,7 +733,6 @@ namespace isc { namespace dhcp { , location (l) {} #endif - #if 201103L <= YY_CPLUSPLUS basic_symbol (typename Base::kind_type t, ElementPtr&& v, location_type&& l) : Base (t) @@ -1500,7 +746,6 @@ namespace isc { namespace dhcp { , location (l) {} #endif - #if 201103L <= YY_CPLUSPLUS basic_symbol (typename Base::kind_type t, bool&& v, location_type&& l) : Base (t) @@ -1514,7 +759,6 @@ namespace isc { namespace dhcp { , location (l) {} #endif - #if 201103L <= YY_CPLUSPLUS basic_symbol (typename Base::kind_type t, double&& v, location_type&& l) : Base (t) @@ -1528,7 +772,6 @@ namespace isc { namespace dhcp { , location (l) {} #endif - #if 201103L <= YY_CPLUSPLUS basic_symbol (typename Base::kind_type t, int64_t&& v, location_type&& l) : Base (t) @@ -1542,7 +785,6 @@ namespace isc { namespace dhcp { , location (l) {} #endif - #if 201103L <= YY_CPLUSPLUS basic_symbol (typename Base::kind_type t, std::string&& v, location_type&& l) : Base (t) @@ -1563,48 +805,46 @@ namespace isc { namespace dhcp { clear (); } - - /// Destroy contents, and record that is empty. - void clear () YY_NOEXCEPT + void clear () { // User destructor. - symbol_kind_type yykind = this->kind (); + symbol_number_type yytype = this->type_get (); basic_symbol& yysym = *this; (void) yysym; - switch (yykind) + switch (yytype) { default: break; } - // Value type destructor. -switch (yykind) + // Type destructor. +switch (yytype) { - case symbol_kind::S_value: // value - case symbol_kind::S_map_value: // map_value - case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value - case symbol_kind::S_db_type: // db_type - case symbol_kind::S_on_fail_mode: // on_fail_mode - case symbol_kind::S_hr_mode: // hr_mode - case symbol_kind::S_duid_type: // duid_type - case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value + case 227: // value + case 231: // map_value + case 273: // ddns_replace_client_name_value + case 316: // db_type + case 333: // on_fail_mode + case 420: // hr_mode + case 556: // duid_type + case 599: // ncr_protocol_value value.template destroy< ElementPtr > (); break; - case symbol_kind::S_BOOLEAN: // "boolean" + case 210: // "boolean" value.template destroy< bool > (); break; - case symbol_kind::S_FLOAT: // "floating point" + case 209: // "floating point" value.template destroy< double > (); break; - case symbol_kind::S_INTEGER: // "integer" + case 208: // "integer" value.template destroy< int64_t > (); break; - case symbol_kind::S_STRING: // "constant string" + case 207: // "constant string" value.template destroy< std::string > (); break; @@ -1615,15 +855,6 @@ switch (yykind) Base::clear (); } - /// The user-facing name of this symbol. - std::string name () const YY_NOEXCEPT - { - return Dhcp6Parser::symbol_name (this->kind ()); - } - - /// Backward compatibility (Bison 3.6). - symbol_kind_type type_get () const YY_NOEXCEPT; - /// Whether empty. bool empty () const YY_NOEXCEPT; @@ -1631,7 +862,7 @@ switch (yykind) void move (basic_symbol& s); /// The semantic value. - value_type value; + semantic_type value; /// The location. location_type location; @@ -1644,132 +875,122 @@ switch (yykind) }; /// Type access provider for token (enum) based symbols. - struct by_kind + struct by_type { - /// The symbol kind as needed by the constructor. - typedef token_kind_type kind_type; - /// Default constructor. - by_kind () YY_NOEXCEPT; + by_type (); #if 201103L <= YY_CPLUSPLUS /// Move constructor. - by_kind (by_kind&& that) YY_NOEXCEPT; + by_type (by_type&& that); #endif /// Copy constructor. - by_kind (const by_kind& that) YY_NOEXCEPT; + by_type (const by_type& that); + + /// The symbol type as needed by the constructor. + typedef token_type kind_type; /// Constructor from (external) token numbers. - by_kind (kind_type t) YY_NOEXCEPT; - - + by_type (kind_type t); /// Record that this symbol is empty. - void clear () YY_NOEXCEPT; + void clear (); - /// Steal the symbol kind from \a that. - void move (by_kind& that); + /// Steal the symbol type from \a that. + void move (by_type& that); /// The (internal) type number (corresponding to \a type). /// \a empty when empty. - symbol_kind_type kind () const YY_NOEXCEPT; + symbol_number_type type_get () const YY_NOEXCEPT; - /// Backward compatibility (Bison 3.6). - symbol_kind_type type_get () const YY_NOEXCEPT; - - /// The symbol kind. - /// \a S_YYEMPTY when empty. - symbol_kind_type kind_; + /// The symbol type. + /// \a empty_symbol when empty. + /// An int, not token_number_type, to be able to store empty_symbol. + int type; }; - /// Backward compatibility for a private implementation detail (Bison 3.6). - typedef by_kind by_type; - /// "External" symbols: returned by the scanner. - struct symbol_type : basic_symbol + struct symbol_type : basic_symbol { /// Superclass. - typedef basic_symbol super_type; + typedef basic_symbol super_type; /// Empty symbol. - symbol_type () YY_NOEXCEPT {} + symbol_type () {} /// Constructor for valueless symbols, and symbols from each type. #if 201103L <= YY_CPLUSPLUS symbol_type (int tok, location_type l) - : super_type (token_kind_type (tok), std::move (l)) + : super_type(token_type (tok), std::move (l)) + { + YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DATA_DIRECTORY || tok == token::TOKEN_CONFIG_CONTROL || tok == token::TOKEN_CONFIG_DATABASES || tok == token::TOKEN_CONFIG_FETCH_WAIT_TIME || tok == token::TOKEN_INTERFACES_CONFIG || tok == token::TOKEN_INTERFACES || tok == token::TOKEN_RE_DETECT || tok == token::TOKEN_LEASE_DATABASE || tok == token::TOKEN_HOSTS_DATABASE || tok == token::TOKEN_HOSTS_DATABASES || tok == token::TOKEN_TYPE || tok == token::TOKEN_MEMFILE || tok == token::TOKEN_MYSQL || tok == token::TOKEN_POSTGRESQL || tok == token::TOKEN_USER || tok == token::TOKEN_PASSWORD || tok == token::TOKEN_HOST || tok == token::TOKEN_PORT || tok == token::TOKEN_PERSIST || tok == token::TOKEN_LFC_INTERVAL || tok == token::TOKEN_READONLY || tok == token::TOKEN_CONNECT_TIMEOUT || tok == token::TOKEN_MAX_RECONNECT_TRIES || tok == token::TOKEN_RECONNECT_WAIT_TIME || tok == token::TOKEN_ON_FAIL || tok == token::TOKEN_STOP_RETRY_EXIT || tok == token::TOKEN_SERVE_RETRY_EXIT || tok == token::TOKEN_SERVE_RETRY_CONTINUE || tok == token::TOKEN_MAX_ROW_ERRORS || tok == token::TOKEN_TRUST_ANCHOR || tok == token::TOKEN_CERT_FILE || tok == token::TOKEN_KEY_FILE || tok == token::TOKEN_CIPHER_LIST || tok == token::TOKEN_PREFERRED_LIFETIME || tok == token::TOKEN_MIN_PREFERRED_LIFETIME || tok == token::TOKEN_MAX_PREFERRED_LIFETIME || tok == token::TOKEN_VALID_LIFETIME || tok == token::TOKEN_MIN_VALID_LIFETIME || tok == token::TOKEN_MAX_VALID_LIFETIME || tok == token::TOKEN_RENEW_TIMER || tok == token::TOKEN_REBIND_TIMER || tok == token::TOKEN_CALCULATE_TEE_TIMES || tok == token::TOKEN_T1_PERCENT || tok == token::TOKEN_T2_PERCENT || tok == token::TOKEN_CACHE_THRESHOLD || tok == token::TOKEN_CACHE_MAX_AGE || tok == token::TOKEN_DECLINE_PROBATION_PERIOD || tok == token::TOKEN_SERVER_TAG || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE || tok == token::TOKEN_DDNS_SEND_UPDATES || tok == token::TOKEN_DDNS_OVERRIDE_NO_UPDATE || tok == token::TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_DDNS_REPLACE_CLIENT_NAME || tok == token::TOKEN_DDNS_GENERATED_PREFIX || tok == token::TOKEN_DDNS_QUALIFYING_SUFFIX || tok == token::TOKEN_DDNS_UPDATE_ON_RENEW || tok == token::TOKEN_DDNS_USE_CONFLICT_RESOLUTION || tok == token::TOKEN_STORE_EXTENDED_INFO || tok == token::TOKEN_SUBNET6 || tok == token::TOKEN_OPTION_DEF || tok == token::TOKEN_OPTION_DATA || tok == token::TOKEN_NAME || tok == token::TOKEN_DATA || tok == token::TOKEN_CODE || tok == token::TOKEN_SPACE || tok == token::TOKEN_CSV_FORMAT || tok == token::TOKEN_ALWAYS_SEND || tok == token::TOKEN_RECORD_TYPES || tok == token::TOKEN_ENCAPSULATE || tok == token::TOKEN_ARRAY || tok == token::TOKEN_PARKED_PACKET_LIMIT || tok == token::TOKEN_SHARED_NETWORKS || tok == token::TOKEN_POOLS || tok == token::TOKEN_POOL || tok == token::TOKEN_PD_POOLS || tok == token::TOKEN_PREFIX || tok == token::TOKEN_PREFIX_LEN || tok == token::TOKEN_EXCLUDED_PREFIX || tok == token::TOKEN_EXCLUDED_PREFIX_LEN || tok == token::TOKEN_DELEGATED_LEN || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_SUBNET || tok == token::TOKEN_INTERFACE || tok == token::TOKEN_INTERFACE_ID || tok == token::TOKEN_ID || tok == token::TOKEN_RAPID_COMMIT || tok == token::TOKEN_RESERVATION_MODE || tok == token::TOKEN_DISABLED || tok == token::TOKEN_OUT_OF_POOL || tok == token::TOKEN_GLOBAL || tok == token::TOKEN_ALL || tok == token::TOKEN_RESERVATIONS_GLOBAL || tok == token::TOKEN_RESERVATIONS_IN_SUBNET || tok == token::TOKEN_RESERVATIONS_OUT_OF_POOL || tok == token::TOKEN_MAC_SOURCES || tok == token::TOKEN_RELAY_SUPPLIED_OPTIONS || tok == token::TOKEN_HOST_RESERVATION_IDENTIFIERS || tok == token::TOKEN_SANITY_CHECKS || tok == token::TOKEN_LEASE_CHECKS || tok == token::TOKEN_CLIENT_CLASSES || tok == token::TOKEN_REQUIRE_CLIENT_CLASSES || tok == token::TOKEN_TEST || tok == token::TOKEN_ONLY_IF_REQUIRED || tok == token::TOKEN_CLIENT_CLASS || tok == token::TOKEN_RESERVATIONS || tok == token::TOKEN_IP_ADDRESSES || tok == token::TOKEN_PREFIXES || tok == token::TOKEN_DUID || tok == token::TOKEN_HW_ADDRESS || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_FLEX_ID || tok == token::TOKEN_RELAY || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_EXPIRED_LEASES_PROCESSING || tok == token::TOKEN_RECLAIM_TIMER_WAIT_TIME || tok == token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME || tok == token::TOKEN_HOLD_RECLAIMED_TIME || tok == token::TOKEN_MAX_RECLAIM_LEASES || tok == token::TOKEN_MAX_RECLAIM_TIME || tok == token::TOKEN_UNWARNED_RECLAIM_CYCLES || tok == token::TOKEN_SERVER_ID || tok == token::TOKEN_LLT || tok == token::TOKEN_EN || tok == token::TOKEN_LL || tok == token::TOKEN_IDENTIFIER || tok == token::TOKEN_HTYPE || tok == token::TOKEN_TIME || tok == token::TOKEN_ENTERPRISE_ID || tok == token::TOKEN_DHCP4O6_PORT || tok == token::TOKEN_DHCP_MULTI_THREADING || tok == token::TOKEN_ENABLE_MULTI_THREADING || tok == token::TOKEN_THREAD_POOL_SIZE || tok == token::TOKEN_PACKET_QUEUE_SIZE || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_DHCP_QUEUE_CONTROL || tok == token::TOKEN_ENABLE_QUEUE || tok == token::TOKEN_QUEUE_TYPE || tok == token::TOKEN_CAPACITY || tok == token::TOKEN_DHCP_DDNS || tok == token::TOKEN_ENABLE_UPDATES || tok == token::TOKEN_QUALIFYING_SUFFIX || tok == token::TOKEN_SERVER_IP || tok == token::TOKEN_SERVER_PORT || tok == token::TOKEN_SENDER_IP || tok == token::TOKEN_SENDER_PORT || tok == token::TOKEN_MAX_QUEUE_SIZE || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_OVERRIDE_NO_UPDATE || tok == token::TOKEN_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_REPLACE_CLIENT_NAME || tok == token::TOKEN_GENERATED_PREFIX || tok == token::TOKEN_UDP || tok == token::TOKEN_TCP || tok == token::TOKEN_JSON || tok == token::TOKEN_WHEN_PRESENT || tok == token::TOKEN_NEVER || tok == token::TOKEN_ALWAYS || tok == token::TOKEN_WHEN_NOT_PRESENT || tok == token::TOKEN_HOSTNAME_CHAR_SET || tok == token::TOKEN_HOSTNAME_CHAR_REPLACEMENT || tok == token::TOKEN_EARLY_GLOBAL_RESERVATIONS_LOOKUP || tok == token::TOKEN_IP_RESERVATIONS_UNIQUE || tok == token::TOKEN_RESERVATIONS_LOOKUP_FIRST || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_COMPATIBILITY || tok == token::TOKEN_LENIENT_OPTION_PARSING || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCP6 || tok == token::TOKEN_SUB_DHCP6 || tok == token::TOKEN_SUB_INTERFACES6 || tok == token::TOKEN_SUB_SUBNET6 || tok == token::TOKEN_SUB_POOL6 || tok == token::TOKEN_SUB_PD_POOL || tok == token::TOKEN_SUB_RESERVATION || tok == token::TOKEN_SUB_OPTION_DEFS || tok == token::TOKEN_SUB_OPTION_DEF || tok == token::TOKEN_SUB_OPTION_DATA || tok == token::TOKEN_SUB_HOOKS_LIBRARY || tok == token::TOKEN_SUB_DHCP_DDNS || tok == token::TOKEN_SUB_CONFIG_CONTROL); + } #else symbol_type (int tok, const location_type& l) - : super_type (token_kind_type (tok), l) -#endif + : super_type(token_type (tok), l) { -#if !defined _MSC_VER || defined __clang__ - PARSER6__ASSERT (tok == token::TOKEN_END - || (token::TOKEN_PARSER6_error <= tok && tok <= token::TOKEN_SUB_CONFIG_CONTROL)); -#endif + YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DATA_DIRECTORY || tok == token::TOKEN_CONFIG_CONTROL || tok == token::TOKEN_CONFIG_DATABASES || tok == token::TOKEN_CONFIG_FETCH_WAIT_TIME || tok == token::TOKEN_INTERFACES_CONFIG || tok == token::TOKEN_INTERFACES || tok == token::TOKEN_RE_DETECT || tok == token::TOKEN_LEASE_DATABASE || tok == token::TOKEN_HOSTS_DATABASE || tok == token::TOKEN_HOSTS_DATABASES || tok == token::TOKEN_TYPE || tok == token::TOKEN_MEMFILE || tok == token::TOKEN_MYSQL || tok == token::TOKEN_POSTGRESQL || tok == token::TOKEN_USER || tok == token::TOKEN_PASSWORD || tok == token::TOKEN_HOST || tok == token::TOKEN_PORT || tok == token::TOKEN_PERSIST || tok == token::TOKEN_LFC_INTERVAL || tok == token::TOKEN_READONLY || tok == token::TOKEN_CONNECT_TIMEOUT || tok == token::TOKEN_MAX_RECONNECT_TRIES || tok == token::TOKEN_RECONNECT_WAIT_TIME || tok == token::TOKEN_ON_FAIL || tok == token::TOKEN_STOP_RETRY_EXIT || tok == token::TOKEN_SERVE_RETRY_EXIT || tok == token::TOKEN_SERVE_RETRY_CONTINUE || tok == token::TOKEN_MAX_ROW_ERRORS || tok == token::TOKEN_TRUST_ANCHOR || tok == token::TOKEN_CERT_FILE || tok == token::TOKEN_KEY_FILE || tok == token::TOKEN_CIPHER_LIST || tok == token::TOKEN_PREFERRED_LIFETIME || tok == token::TOKEN_MIN_PREFERRED_LIFETIME || tok == token::TOKEN_MAX_PREFERRED_LIFETIME || tok == token::TOKEN_VALID_LIFETIME || tok == token::TOKEN_MIN_VALID_LIFETIME || tok == token::TOKEN_MAX_VALID_LIFETIME || tok == token::TOKEN_RENEW_TIMER || tok == token::TOKEN_REBIND_TIMER || tok == token::TOKEN_CALCULATE_TEE_TIMES || tok == token::TOKEN_T1_PERCENT || tok == token::TOKEN_T2_PERCENT || tok == token::TOKEN_CACHE_THRESHOLD || tok == token::TOKEN_CACHE_MAX_AGE || tok == token::TOKEN_DECLINE_PROBATION_PERIOD || tok == token::TOKEN_SERVER_TAG || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE || tok == token::TOKEN_DDNS_SEND_UPDATES || tok == token::TOKEN_DDNS_OVERRIDE_NO_UPDATE || tok == token::TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_DDNS_REPLACE_CLIENT_NAME || tok == token::TOKEN_DDNS_GENERATED_PREFIX || tok == token::TOKEN_DDNS_QUALIFYING_SUFFIX || tok == token::TOKEN_DDNS_UPDATE_ON_RENEW || tok == token::TOKEN_DDNS_USE_CONFLICT_RESOLUTION || tok == token::TOKEN_STORE_EXTENDED_INFO || tok == token::TOKEN_SUBNET6 || tok == token::TOKEN_OPTION_DEF || tok == token::TOKEN_OPTION_DATA || tok == token::TOKEN_NAME || tok == token::TOKEN_DATA || tok == token::TOKEN_CODE || tok == token::TOKEN_SPACE || tok == token::TOKEN_CSV_FORMAT || tok == token::TOKEN_ALWAYS_SEND || tok == token::TOKEN_RECORD_TYPES || tok == token::TOKEN_ENCAPSULATE || tok == token::TOKEN_ARRAY || tok == token::TOKEN_PARKED_PACKET_LIMIT || tok == token::TOKEN_SHARED_NETWORKS || tok == token::TOKEN_POOLS || tok == token::TOKEN_POOL || tok == token::TOKEN_PD_POOLS || tok == token::TOKEN_PREFIX || tok == token::TOKEN_PREFIX_LEN || tok == token::TOKEN_EXCLUDED_PREFIX || tok == token::TOKEN_EXCLUDED_PREFIX_LEN || tok == token::TOKEN_DELEGATED_LEN || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_SUBNET || tok == token::TOKEN_INTERFACE || tok == token::TOKEN_INTERFACE_ID || tok == token::TOKEN_ID || tok == token::TOKEN_RAPID_COMMIT || tok == token::TOKEN_RESERVATION_MODE || tok == token::TOKEN_DISABLED || tok == token::TOKEN_OUT_OF_POOL || tok == token::TOKEN_GLOBAL || tok == token::TOKEN_ALL || tok == token::TOKEN_RESERVATIONS_GLOBAL || tok == token::TOKEN_RESERVATIONS_IN_SUBNET || tok == token::TOKEN_RESERVATIONS_OUT_OF_POOL || tok == token::TOKEN_MAC_SOURCES || tok == token::TOKEN_RELAY_SUPPLIED_OPTIONS || tok == token::TOKEN_HOST_RESERVATION_IDENTIFIERS || tok == token::TOKEN_SANITY_CHECKS || tok == token::TOKEN_LEASE_CHECKS || tok == token::TOKEN_CLIENT_CLASSES || tok == token::TOKEN_REQUIRE_CLIENT_CLASSES || tok == token::TOKEN_TEST || tok == token::TOKEN_ONLY_IF_REQUIRED || tok == token::TOKEN_CLIENT_CLASS || tok == token::TOKEN_RESERVATIONS || tok == token::TOKEN_IP_ADDRESSES || tok == token::TOKEN_PREFIXES || tok == token::TOKEN_DUID || tok == token::TOKEN_HW_ADDRESS || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_FLEX_ID || tok == token::TOKEN_RELAY || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_EXPIRED_LEASES_PROCESSING || tok == token::TOKEN_RECLAIM_TIMER_WAIT_TIME || tok == token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME || tok == token::TOKEN_HOLD_RECLAIMED_TIME || tok == token::TOKEN_MAX_RECLAIM_LEASES || tok == token::TOKEN_MAX_RECLAIM_TIME || tok == token::TOKEN_UNWARNED_RECLAIM_CYCLES || tok == token::TOKEN_SERVER_ID || tok == token::TOKEN_LLT || tok == token::TOKEN_EN || tok == token::TOKEN_LL || tok == token::TOKEN_IDENTIFIER || tok == token::TOKEN_HTYPE || tok == token::TOKEN_TIME || tok == token::TOKEN_ENTERPRISE_ID || tok == token::TOKEN_DHCP4O6_PORT || tok == token::TOKEN_DHCP_MULTI_THREADING || tok == token::TOKEN_ENABLE_MULTI_THREADING || tok == token::TOKEN_THREAD_POOL_SIZE || tok == token::TOKEN_PACKET_QUEUE_SIZE || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_DHCP_QUEUE_CONTROL || tok == token::TOKEN_ENABLE_QUEUE || tok == token::TOKEN_QUEUE_TYPE || tok == token::TOKEN_CAPACITY || tok == token::TOKEN_DHCP_DDNS || tok == token::TOKEN_ENABLE_UPDATES || tok == token::TOKEN_QUALIFYING_SUFFIX || tok == token::TOKEN_SERVER_IP || tok == token::TOKEN_SERVER_PORT || tok == token::TOKEN_SENDER_IP || tok == token::TOKEN_SENDER_PORT || tok == token::TOKEN_MAX_QUEUE_SIZE || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_OVERRIDE_NO_UPDATE || tok == token::TOKEN_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_REPLACE_CLIENT_NAME || tok == token::TOKEN_GENERATED_PREFIX || tok == token::TOKEN_UDP || tok == token::TOKEN_TCP || tok == token::TOKEN_JSON || tok == token::TOKEN_WHEN_PRESENT || tok == token::TOKEN_NEVER || tok == token::TOKEN_ALWAYS || tok == token::TOKEN_WHEN_NOT_PRESENT || tok == token::TOKEN_HOSTNAME_CHAR_SET || tok == token::TOKEN_HOSTNAME_CHAR_REPLACEMENT || tok == token::TOKEN_EARLY_GLOBAL_RESERVATIONS_LOOKUP || tok == token::TOKEN_IP_RESERVATIONS_UNIQUE || tok == token::TOKEN_RESERVATIONS_LOOKUP_FIRST || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_COMPATIBILITY || tok == token::TOKEN_LENIENT_OPTION_PARSING || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCP6 || tok == token::TOKEN_SUB_DHCP6 || tok == token::TOKEN_SUB_INTERFACES6 || tok == token::TOKEN_SUB_SUBNET6 || tok == token::TOKEN_SUB_POOL6 || tok == token::TOKEN_SUB_PD_POOL || tok == token::TOKEN_SUB_RESERVATION || tok == token::TOKEN_SUB_OPTION_DEFS || tok == token::TOKEN_SUB_OPTION_DEF || tok == token::TOKEN_SUB_OPTION_DATA || tok == token::TOKEN_SUB_HOOKS_LIBRARY || tok == token::TOKEN_SUB_DHCP_DDNS || tok == token::TOKEN_SUB_CONFIG_CONTROL); } +#endif #if 201103L <= YY_CPLUSPLUS symbol_type (int tok, bool v, location_type l) - : super_type (token_kind_type (tok), std::move (v), std::move (l)) + : super_type(token_type (tok), std::move (v), std::move (l)) + { + YY_ASSERT (tok == token::TOKEN_BOOLEAN); + } #else symbol_type (int tok, const bool& v, const location_type& l) - : super_type (token_kind_type (tok), v, l) -#endif + : super_type(token_type (tok), v, l) { -#if !defined _MSC_VER || defined __clang__ - PARSER6__ASSERT (tok == token::TOKEN_BOOLEAN); -#endif + YY_ASSERT (tok == token::TOKEN_BOOLEAN); } +#endif #if 201103L <= YY_CPLUSPLUS symbol_type (int tok, double v, location_type l) - : super_type (token_kind_type (tok), std::move (v), std::move (l)) + : super_type(token_type (tok), std::move (v), std::move (l)) + { + YY_ASSERT (tok == token::TOKEN_FLOAT); + } #else symbol_type (int tok, const double& v, const location_type& l) - : super_type (token_kind_type (tok), v, l) -#endif + : super_type(token_type (tok), v, l) { -#if !defined _MSC_VER || defined __clang__ - PARSER6__ASSERT (tok == token::TOKEN_FLOAT); -#endif + YY_ASSERT (tok == token::TOKEN_FLOAT); } +#endif #if 201103L <= YY_CPLUSPLUS symbol_type (int tok, int64_t v, location_type l) - : super_type (token_kind_type (tok), std::move (v), std::move (l)) + : super_type(token_type (tok), std::move (v), std::move (l)) + { + YY_ASSERT (tok == token::TOKEN_INTEGER); + } #else symbol_type (int tok, const int64_t& v, const location_type& l) - : super_type (token_kind_type (tok), v, l) -#endif + : super_type(token_type (tok), v, l) { -#if !defined _MSC_VER || defined __clang__ - PARSER6__ASSERT (tok == token::TOKEN_INTEGER); -#endif + YY_ASSERT (tok == token::TOKEN_INTEGER); } +#endif #if 201103L <= YY_CPLUSPLUS symbol_type (int tok, std::string v, location_type l) - : super_type (token_kind_type (tok), std::move (v), std::move (l)) + : super_type(token_type (tok), std::move (v), std::move (l)) + { + YY_ASSERT (tok == token::TOKEN_STRING); + } #else symbol_type (int tok, const std::string& v, const location_type& l) - : super_type (token_kind_type (tok), v, l) -#endif + : super_type(token_type (tok), v, l) { -#if !defined _MSC_VER || defined __clang__ - PARSER6__ASSERT (tok == token::TOKEN_STRING); -#endif + YY_ASSERT (tok == token::TOKEN_STRING); } +#endif }; /// Build a parser object. Dhcp6Parser (isc::dhcp::Parser6Context& ctx_yyarg); virtual ~Dhcp6Parser (); -#if 201103L <= YY_CPLUSPLUS - /// Non copyable. - Dhcp6Parser (const Dhcp6Parser&) = delete; - /// Non copyable. - Dhcp6Parser& operator= (const Dhcp6Parser&) = delete; -#endif - /// Parse. An alias for parse (). /// \returns 0 iff parsing succeeded. int operator() (); @@ -1800,11 +1021,7 @@ switch (yykind) /// Report a syntax error. void error (const syntax_error& err); - /// The user-facing name of the symbol whose (internal) number is - /// YYSYMBOL. No bounds checking. - static std::string symbol_name (symbol_kind_type yysymbol); - - // Implementation of make_symbol for each token kind. + // Implementation of make_symbol for each symbol type. #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -1820,36 +1037,6 @@ switch (yykind) return symbol_type (token::TOKEN_END, l); } #endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_PARSER6_error (location_type l) - { - return symbol_type (token::TOKEN_PARSER6_error, std::move (l)); - } -#else - static - symbol_type - make_PARSER6_error (const location_type& l) - { - return symbol_type (token::TOKEN_PARSER6_error, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_PARSER6_UNDEF (location_type l) - { - return symbol_type (token::TOKEN_PARSER6_UNDEF, std::move (l)); - } -#else - static - symbol_type - make_PARSER6_UNDEF (const location_type& l) - { - return symbol_type (token::TOKEN_PARSER6_UNDEF, l); - } -#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -2180,21 +1367,6 @@ switch (yykind) return symbol_type (token::TOKEN_POSTGRESQL, l); } #endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_CQL (location_type l) - { - return symbol_type (token::TOKEN_CQL, std::move (l)); - } -#else - static - symbol_type - make_CQL (const location_type& l) - { - return symbol_type (token::TOKEN_CQL, l); - } -#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -2315,21 +1487,6 @@ switch (yykind) return symbol_type (token::TOKEN_CONNECT_TIMEOUT, l); } #endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_CONTACT_POINTS (location_type l) - { - return symbol_type (token::TOKEN_CONTACT_POINTS, std::move (l)); - } -#else - static - symbol_type - make_CONTACT_POINTS (const location_type& l) - { - return symbol_type (token::TOKEN_CONTACT_POINTS, l); - } -#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -2420,96 +1577,6 @@ switch (yykind) return symbol_type (token::TOKEN_SERVE_RETRY_CONTINUE, l); } #endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_KEYSPACE (location_type l) - { - return symbol_type (token::TOKEN_KEYSPACE, std::move (l)); - } -#else - static - symbol_type - make_KEYSPACE (const location_type& l) - { - return symbol_type (token::TOKEN_KEYSPACE, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_CONSISTENCY (location_type l) - { - return symbol_type (token::TOKEN_CONSISTENCY, std::move (l)); - } -#else - static - symbol_type - make_CONSISTENCY (const location_type& l) - { - return symbol_type (token::TOKEN_CONSISTENCY, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SERIAL_CONSISTENCY (location_type l) - { - return symbol_type (token::TOKEN_SERIAL_CONSISTENCY, std::move (l)); - } -#else - static - symbol_type - make_SERIAL_CONSISTENCY (const location_type& l) - { - return symbol_type (token::TOKEN_SERIAL_CONSISTENCY, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_REQUEST_TIMEOUT (location_type l) - { - return symbol_type (token::TOKEN_REQUEST_TIMEOUT, std::move (l)); - } -#else - static - symbol_type - make_REQUEST_TIMEOUT (const location_type& l) - { - return symbol_type (token::TOKEN_REQUEST_TIMEOUT, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_TCP_KEEPALIVE (location_type l) - { - return symbol_type (token::TOKEN_TCP_KEEPALIVE, std::move (l)); - } -#else - static - symbol_type - make_TCP_KEEPALIVE (const location_type& l) - { - return symbol_type (token::TOKEN_TCP_KEEPALIVE, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_TCP_NODELAY (location_type l) - { - return symbol_type (token::TOKEN_TCP_NODELAY, std::move (l)); - } -#else - static - symbol_type - make_TCP_NODELAY (const location_type& l) - { - return symbol_type (token::TOKEN_TCP_NODELAY, l); - } -#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -5092,43 +4159,20 @@ switch (yykind) #endif - class context - { - public: - context (const Dhcp6Parser& yyparser, const symbol_type& yyla); - const symbol_type& lookahead () const YY_NOEXCEPT { return yyla_; } - symbol_kind_type token () const YY_NOEXCEPT { return yyla_.kind (); } - const location_type& location () const YY_NOEXCEPT { return yyla_.location; } - - /// Put in YYARG at most YYARGN of the expected tokens, and return the - /// number of tokens stored in YYARG. If YYARG is null, return the - /// number of expected tokens (guaranteed to be less than YYNTOKENS). - int expected_tokens (symbol_kind_type yyarg[], int yyargn) const; - - private: - const Dhcp6Parser& yyparser_; - const symbol_type& yyla_; - }; - private: -#if YY_CPLUSPLUS < 201103L - /// Non copyable. + /// This class is not copyable. Dhcp6Parser (const Dhcp6Parser&); - /// Non copyable. Dhcp6Parser& operator= (const Dhcp6Parser&); -#endif - /// Stored state numbers (used for stacks). typedef short state_type; - /// The arguments of the error message. - int yy_syntax_error_arguments_ (const context& yyctx, - symbol_kind_type yyarg[], int yyargn) const; - /// Generate an error message. - /// \param yyctx the context in which the error occurred. - virtual std::string yysyntax_error_ (const context& yyctx) const; + /// \param yystate the state where the error occurred. + /// \param yyla the lookahead token. + virtual std::string yysyntax_error_ (state_type yystate, + const symbol_type& yyla) const; + /// Compute post-reduction state. /// \param yystate the current state /// \param yysym the nonterminal to push on the stack @@ -5136,26 +4180,19 @@ switch (yykind) /// Whether the given \c yypact_ value indicates a defaulted state. /// \param yyvalue the value to check - static bool yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT; + static bool yy_pact_value_is_default_ (int yyvalue); /// Whether the given \c yytable_ value indicates a syntax error. /// \param yyvalue the value to check - static bool yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT; + static bool yy_table_value_is_error_ (int yyvalue); static const short yypact_ninf_; static const signed char yytable_ninf_; - /// Convert a scanner token kind \a t to a symbol kind. - /// In theory \a t should be a token_kind_type, but character literals - /// are valid, yet not members of the token_kind_type enum. - static symbol_kind_type yytranslate_ (int t) YY_NOEXCEPT; - - /// Convert the symbol name \a n to a form suitable for a diagnostic. - static std::string yytnamerr_ (const char *yystr); - - /// For a symbol, its name in clear. - static const char* const yytname_[]; - + /// Convert a scanner token number \a t to a symbol number. + /// In theory \a t should be a token_type, but character literals + /// are valid, yet not members of the token_type enum. + static token_number_type yytranslate_ (int t); // Tables. // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing @@ -5180,31 +4217,37 @@ switch (yykind) static const short yycheck_[]; - // YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of - // state STATE-NUM. + // YYSTOS[STATE-NUM] -- The (internal number of the) accessing + // symbol of state STATE-NUM. static const short yystos_[]; - // YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. + // YYR1[YYN] -- Symbol number of symbol that rule YYN derives. static const short yyr1_[]; - // YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. + // YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. static const signed char yyr2_[]; + /// Convert the symbol name \a n to a form suitable for a diagnostic. + static std::string yytnamerr_ (const char *n); + + + /// For a symbol, its name in clear. + static const char* const yytname_[]; #if PARSER6_DEBUG // YYRLINE[YYN] -- Source line where rule number YYN was defined. static const short yyrline_[]; /// Report on the debug stream that the rule \a r is going to be reduced. - virtual void yy_reduce_print_ (int r) const; + virtual void yy_reduce_print_ (int r); /// Print the state stack on the debug stream. - virtual void yy_stack_print_ () const; + virtual void yystack_print_ (); /// Debugging level. int yydebug_; /// Debug stream. std::ostream* yycdebug_; - /// \brief Display a symbol kind, value and location. + /// \brief Display a symbol type, value and location. /// \param yyo The output stream. /// \param yysym The symbol. template @@ -5225,7 +4268,7 @@ switch (yykind) /// Default constructor. by_state () YY_NOEXCEPT; - /// The symbol kind as needed by the constructor. + /// The symbol type as needed by the constructor. typedef state_type kind_type; /// Constructor. @@ -5237,12 +4280,12 @@ switch (yykind) /// Record that this symbol is empty. void clear () YY_NOEXCEPT; - /// Steal the symbol kind from \a that. + /// Steal the symbol type from \a that. void move (by_state& that); - /// The symbol kind (corresponding to \a state). - /// \a symbol_kind::S_YYEMPTY when empty. - symbol_kind_type kind () const YY_NOEXCEPT; + /// The (internal) type number (corresponding to \a state). + /// \a empty_symbol when empty. + symbol_number_type type_get () const YY_NOEXCEPT; /// The state number used to denote an empty symbol. /// We use the initial state, as it does not have a value. @@ -5281,22 +4324,15 @@ switch (yykind) { public: // Hide our reversed order. - typedef typename S::iterator iterator; - typedef typename S::const_iterator const_iterator; + typedef typename S::reverse_iterator iterator; + typedef typename S::const_reverse_iterator const_iterator; typedef typename S::size_type size_type; typedef typename std::ptrdiff_t index_type; - stack (size_type n = 200) YY_NOEXCEPT + stack (size_type n = 200) : seq_ (n) {} -#if 201103L <= YY_CPLUSPLUS - /// Non copyable. - stack (const stack&) = delete; - /// Non copyable. - stack& operator= (const stack&) = delete; -#endif - /// Random access. /// /// Index 0 returns the topmost element. @@ -5347,25 +4383,31 @@ switch (yykind) return index_type (seq_.size ()); } + std::ptrdiff_t + ssize () const YY_NOEXCEPT + { + return std::ptrdiff_t (size ()); + } + /// Iterator on top of the stack (going downwards). const_iterator begin () const YY_NOEXCEPT { - return seq_.begin (); + return seq_.rbegin (); } /// Bottom of the stack. const_iterator end () const YY_NOEXCEPT { - return seq_.end (); + return seq_.rend (); } /// Present a slice of the top of a stack. class slice { public: - slice (const stack& stack, index_type range) YY_NOEXCEPT + slice (const stack& stack, index_type range) : stack_ (stack) , range_ (range) {} @@ -5382,12 +4424,8 @@ switch (yykind) }; private: -#if YY_CPLUSPLUS < 201103L - /// Non copyable. stack (const stack&); - /// Non copyable. stack& operator= (const stack&); -#endif /// The wrapped container. S seq_; }; @@ -5415,30 +4453,35 @@ switch (yykind) void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym); /// Pop \a n symbols from the stack. - void yypop_ (int n = 1) YY_NOEXCEPT; + void yypop_ (int n = 1); + + /// Some specific tokens. + static const token_number_type yy_error_token_ = 1; + static const token_number_type yy_undef_token_ = 2; /// Constants. enum { - yylast_ = 1348, ///< Last index in yytable_. - yynnts_ = 450, ///< Number of nonterminal symbols. - yyfinal_ = 30 ///< Termination state number. + yyeof_ = 0, + yylast_ = 1315, ///< Last index in yytable_. + yynnts_ = 439, ///< Number of nonterminal symbols. + yyfinal_ = 30, ///< Termination state number. + yyntokens_ = 211 ///< Number of tokens. }; // User arguments. isc::dhcp::Parser6Context& ctx; - }; inline - Dhcp6Parser::symbol_kind_type - Dhcp6Parser::yytranslate_ (int t) YY_NOEXCEPT + Dhcp6Parser::token_number_type + Dhcp6Parser::yytranslate_ (int t) { // YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to // TOKEN-NUM as returned by yylex. static - const unsigned char + const token_number_type translate_table[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -5487,53 +4530,94 @@ switch (yykind) 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, - 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 218 + 205, 206, 207, 208, 209, 210 }; - // Last valid token kind. - const int code_max = 473; + const int user_token_number_max_ = 465; if (t <= 0) - return symbol_kind::S_YYEOF; - else if (t <= code_max) - return static_cast (translate_table[t]); + return yyeof_; + else if (t <= user_token_number_max_) + return translate_table[t]; else - return symbol_kind::S_YYUNDEF; + return yy_undef_token_; } // basic_symbol. +#if 201103L <= YY_CPLUSPLUS + template + Dhcp6Parser::basic_symbol::basic_symbol (basic_symbol&& that) + : Base (std::move (that)) + , value () + , location (std::move (that.location)) + { + switch (this->type_get ()) + { + case 227: // value + case 231: // map_value + case 273: // ddns_replace_client_name_value + case 316: // db_type + case 333: // on_fail_mode + case 420: // hr_mode + case 556: // duid_type + case 599: // ncr_protocol_value + value.move< ElementPtr > (std::move (that.value)); + break; + + case 210: // "boolean" + value.move< bool > (std::move (that.value)); + break; + + case 209: // "floating point" + value.move< double > (std::move (that.value)); + break; + + case 208: // "integer" + value.move< int64_t > (std::move (that.value)); + break; + + case 207: // "constant string" + value.move< std::string > (std::move (that.value)); + break; + + default: + break; + } + + } +#endif + template Dhcp6Parser::basic_symbol::basic_symbol (const basic_symbol& that) : Base (that) , value () , location (that.location) { - switch (this->kind ()) + switch (this->type_get ()) { - case symbol_kind::S_value: // value - case symbol_kind::S_map_value: // map_value - case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value - case symbol_kind::S_db_type: // db_type - case symbol_kind::S_on_fail_mode: // on_fail_mode - case symbol_kind::S_hr_mode: // hr_mode - case symbol_kind::S_duid_type: // duid_type - case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value + case 227: // value + case 231: // map_value + case 273: // ddns_replace_client_name_value + case 316: // db_type + case 333: // on_fail_mode + case 420: // hr_mode + case 556: // duid_type + case 599: // ncr_protocol_value value.copy< ElementPtr > (YY_MOVE (that.value)); break; - case symbol_kind::S_BOOLEAN: // "boolean" + case 210: // "boolean" value.copy< bool > (YY_MOVE (that.value)); break; - case symbol_kind::S_FLOAT: // "floating point" + case 209: // "floating point" value.copy< double > (YY_MOVE (that.value)); break; - case symbol_kind::S_INTEGER: // "integer" + case 208: // "integer" value.copy< int64_t > (YY_MOVE (that.value)); break; - case symbol_kind::S_STRING: // "constant string" + case 207: // "constant string" value.copy< std::string > (YY_MOVE (that.value)); break; @@ -5545,20 +4629,11 @@ switch (yykind) - - template - Dhcp6Parser::symbol_kind_type - Dhcp6Parser::basic_symbol::type_get () const YY_NOEXCEPT - { - return this->kind (); - } - - template bool Dhcp6Parser::basic_symbol::empty () const YY_NOEXCEPT { - return this->kind () == symbol_kind::S_YYEMPTY; + return Base::type_get () == empty_symbol; } template @@ -5566,32 +4641,32 @@ switch (yykind) Dhcp6Parser::basic_symbol::move (basic_symbol& s) { super_type::move (s); - switch (this->kind ()) + switch (this->type_get ()) { - case symbol_kind::S_value: // value - case symbol_kind::S_map_value: // map_value - case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value - case symbol_kind::S_db_type: // db_type - case symbol_kind::S_on_fail_mode: // on_fail_mode - case symbol_kind::S_hr_mode: // hr_mode - case symbol_kind::S_duid_type: // duid_type - case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value + case 227: // value + case 231: // map_value + case 273: // ddns_replace_client_name_value + case 316: // db_type + case 333: // on_fail_mode + case 420: // hr_mode + case 556: // duid_type + case 599: // ncr_protocol_value value.move< ElementPtr > (YY_MOVE (s.value)); break; - case symbol_kind::S_BOOLEAN: // "boolean" + case 210: // "boolean" value.move< bool > (YY_MOVE (s.value)); break; - case symbol_kind::S_FLOAT: // "floating point" + case 209: // "floating point" value.move< double > (YY_MOVE (s.value)); break; - case symbol_kind::S_INTEGER: // "integer" + case 208: // "integer" value.move< int64_t > (YY_MOVE (s.value)); break; - case symbol_kind::S_STRING: // "constant string" + case 207: // "constant string" value.move< std::string > (YY_MOVE (s.value)); break; @@ -5602,67 +4677,57 @@ switch (yykind) location = YY_MOVE (s.location); } - // by_kind. + // by_type. inline - Dhcp6Parser::by_kind::by_kind () YY_NOEXCEPT - : kind_ (symbol_kind::S_YYEMPTY) + Dhcp6Parser::by_type::by_type () + : type (empty_symbol) {} #if 201103L <= YY_CPLUSPLUS inline - Dhcp6Parser::by_kind::by_kind (by_kind&& that) YY_NOEXCEPT - : kind_ (that.kind_) + Dhcp6Parser::by_type::by_type (by_type&& that) + : type (that.type) { that.clear (); } #endif inline - Dhcp6Parser::by_kind::by_kind (const by_kind& that) YY_NOEXCEPT - : kind_ (that.kind_) + Dhcp6Parser::by_type::by_type (const by_type& that) + : type (that.type) {} inline - Dhcp6Parser::by_kind::by_kind (token_kind_type t) YY_NOEXCEPT - : kind_ (yytranslate_ (t)) + Dhcp6Parser::by_type::by_type (token_type t) + : type (yytranslate_ (t)) {} - - inline void - Dhcp6Parser::by_kind::clear () YY_NOEXCEPT + Dhcp6Parser::by_type::clear () { - kind_ = symbol_kind::S_YYEMPTY; + type = empty_symbol; } inline void - Dhcp6Parser::by_kind::move (by_kind& that) + Dhcp6Parser::by_type::move (by_type& that) { - kind_ = that.kind_; + type = that.type; that.clear (); } inline - Dhcp6Parser::symbol_kind_type - Dhcp6Parser::by_kind::kind () const YY_NOEXCEPT + int + Dhcp6Parser::by_type::type_get () const YY_NOEXCEPT { - return kind_; + return type; } - - inline - Dhcp6Parser::symbol_kind_type - Dhcp6Parser::by_kind::type_get () const YY_NOEXCEPT - { - return this->kind (); - } - - #line 14 "dhcp6_parser.yy" } } // isc::dhcp -#line 5666 "dhcp6_parser.h" +#line 4730 "dhcp6_parser.h" + diff --git a/src/bin/dhcp6/dhcp6_parser.yy b/src/bin/dhcp6/dhcp6_parser.yy index e713fb4d13..a3143bb18f 100644 --- a/src/bin/dhcp6/dhcp6_parser.yy +++ b/src/bin/dhcp6/dhcp6_parser.yy @@ -67,7 +67,6 @@ using namespace std; MEMFILE "memfile" MYSQL "mysql" POSTGRESQL "postgresql" - CQL "cql" USER "user" PASSWORD "password" HOST "host" @@ -76,19 +75,12 @@ using namespace std; LFC_INTERVAL "lfc-interval" READONLY "readonly" CONNECT_TIMEOUT "connect-timeout" - CONTACT_POINTS "contact-points" MAX_RECONNECT_TRIES "max-reconnect-tries" RECONNECT_WAIT_TIME "reconnect-wait-time" ON_FAIL "on-fail" STOP_RETRY_EXIT "stop-retry-exit" SERVE_RETRY_EXIT "serve-retry-exit" SERVE_RETRY_CONTINUE "serve-retry-continue" - KEYSPACE "keyspace" - CONSISTENCY "consistency" - SERIAL_CONSISTENCY "serial-consistency" - REQUEST_TIMEOUT "request-timeout" - TCP_KEEPALIVE "tcp-keepalive" - TCP_NODELAY "tcp-nodelay" MAX_ROW_ERRORS "max-row-errors" TRUST_ANCHOR "trust-anchor" CERT_FILE "cert-file" @@ -923,16 +915,9 @@ database_map_param: database_type | lfc_interval | readonly | connect_timeout - | contact_points | max_reconnect_tries | reconnect_wait_time | on_fail - | request_timeout - | tcp_keepalive - | tcp_nodelay - | keyspace - | consistency - | serial_consistency | max_row_errors | trust_anchor | cert_file @@ -952,7 +937,6 @@ database_type: TYPE { db_type: MEMFILE { $$ = ElementPtr(new StringElement("memfile", ctx.loc2pos(@1))); } | MYSQL { $$ = ElementPtr(new StringElement("mysql", ctx.loc2pos(@1))); } | POSTGRESQL { $$ = ElementPtr(new StringElement("postgresql", ctx.loc2pos(@1))); } - | CQL { $$ = ElementPtr(new StringElement("cql", ctx.loc2pos(@1))); } ; user: USER { @@ -1046,66 +1030,12 @@ max_row_errors: MAX_ROW_ERRORS COLON INTEGER { ctx.stack_.back()->set("max-row-errors", n); }; -request_timeout: REQUEST_TIMEOUT COLON INTEGER { - ctx.unique("request-timeout", ctx.loc2pos(@1)); - ElementPtr n(new IntElement($3, ctx.loc2pos(@3))); - ctx.stack_.back()->set("request-timeout", n); -}; - -tcp_keepalive: TCP_KEEPALIVE COLON INTEGER { - ctx.unique("tcp-keepalive", ctx.loc2pos(@1)); - ElementPtr n(new IntElement($3, ctx.loc2pos(@3))); - ctx.stack_.back()->set("tcp-keepalive", n); -}; - -tcp_nodelay: TCP_NODELAY COLON BOOLEAN { - ctx.unique("tcp-nodelay", ctx.loc2pos(@1)); - ElementPtr n(new BoolElement($3, ctx.loc2pos(@3))); - ctx.stack_.back()->set("tcp-nodelay", n); -}; - -contact_points: CONTACT_POINTS { - ctx.unique("contact-points", ctx.loc2pos(@1)); - ctx.enter(ctx.NO_KEYWORD); -} COLON STRING { - ElementPtr cp(new StringElement($4, ctx.loc2pos(@4))); - ctx.stack_.back()->set("contact-points", cp); - ctx.leave(); -}; - max_reconnect_tries: MAX_RECONNECT_TRIES COLON INTEGER { ctx.unique("max-reconnect-tries", ctx.loc2pos(@1)); ElementPtr n(new IntElement($3, ctx.loc2pos(@3))); ctx.stack_.back()->set("max-reconnect-tries", n); }; -keyspace: KEYSPACE { - ctx.unique("keyspace", ctx.loc2pos(@1)); - ctx.enter(ctx.NO_KEYWORD); -} COLON STRING { - ElementPtr ks(new StringElement($4, ctx.loc2pos(@4))); - ctx.stack_.back()->set("keyspace", ks); - ctx.leave(); -}; - -consistency: CONSISTENCY { - ctx.unique("consistency", ctx.loc2pos(@1)); - ctx.enter(ctx.NO_KEYWORD); -} COLON STRING { - ElementPtr c(new StringElement($4, ctx.loc2pos(@4))); - ctx.stack_.back()->set("consistency", c); - ctx.leave(); -}; - -serial_consistency: SERIAL_CONSISTENCY { - ctx.unique("serial-consistency", ctx.loc2pos(@1)); - ctx.enter(ctx.NO_KEYWORD); -} COLON STRING { - ElementPtr c(new StringElement($4, ctx.loc2pos(@4))); - ctx.stack_.back()->set("serial-consistency", c); - ctx.leave(); -}; - trust_anchor: TRUST_ANCHOR { ctx.unique("trust-anchor", ctx.loc2pos(@1)); ctx.enter(ctx.NO_KEYWORD); diff --git a/src/bin/dhcp6/dhcp6_srv.cc b/src/bin/dhcp6/dhcp6_srv.cc index 98f5ce5ebe..96bdd4ea70 100644 --- a/src/bin/dhcp6/dhcp6_srv.cc +++ b/src/bin/dhcp6/dhcp6_srv.cc @@ -61,9 +61,6 @@ #ifdef HAVE_PGSQL #include #endif -#ifdef HAVE_CQL -#include -#endif #include #include @@ -4186,9 +4183,6 @@ Dhcpv6Srv::getVersion(bool extended) { #endif #ifdef HAVE_PGSQL tmp << PgSqlLeaseMgr::getDBVersion() << endl; -#endif -#ifdef HAVE_CQL - tmp << CqlLeaseMgr::getDBVersion() << endl; #endif tmp << Memfile_LeaseMgr::getDBVersion(Memfile_LeaseMgr::V6); diff --git a/src/bin/dhcp6/location.hh b/src/bin/dhcp6/location.hh index 4fb140a70e..bf5ebc3716 100644 --- a/src/bin/dhcp6/location.hh +++ b/src/bin/dhcp6/location.hh @@ -1,8 +1,8 @@ -// A Bison parser, made by GNU Bison 3.8.2. +// A Bison parser, made by GNU Bison 3.5.1. // Locations for Bison parsers in C++ -// Copyright (C) 2002-2015, 2018-2021 Free Software Foundation, Inc. +// Copyright (C) 2002-2015, 2018-2020 Free Software Foundation, Inc. // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ // GNU General Public License for more details. // You should have received a copy of the GNU General Public License -// along with this program. If not, see . +// along with this program. If not, see . // As a special exception, you may create a larger work that contains // part or all of the Bison parser skeleton and distribute that work @@ -61,13 +61,11 @@ namespace isc { namespace dhcp { class position { public: - /// Type for file name. - typedef const std::string filename_type; /// Type for line and column numbers. typedef int counter_type; /// Construct a position. - explicit position (filename_type* f = YY_NULLPTR, + explicit position (std::string* f = YY_NULLPTR, counter_type l = 1, counter_type c = 1) : filename (f) @@ -77,7 +75,7 @@ namespace isc { namespace dhcp { /// Initialization. - void initialize (filename_type* fn = YY_NULLPTR, + void initialize (std::string* fn = YY_NULLPTR, counter_type l = 1, counter_type c = 1) { @@ -106,7 +104,7 @@ namespace isc { namespace dhcp { /** \} */ /// File name to which this position refers. - filename_type* filename; + std::string* filename; /// Current line number. counter_type line; /// Current column number. @@ -149,6 +147,24 @@ namespace isc { namespace dhcp { return res -= width; } + /// Compare two position objects. + inline bool + operator== (const position& pos1, const position& pos2) + { + return (pos1.line == pos2.line + && pos1.column == pos2.column + && (pos1.filename == pos2.filename + || (pos1.filename && pos2.filename + && *pos1.filename == *pos2.filename))); + } + + /// Compare two position objects. + inline bool + operator!= (const position& pos1, const position& pos2) + { + return !(pos1 == pos2); + } + /** \brief Intercept output stream redirection. ** \param ostr the destination output stream ** \param pos a reference to the position to redirect @@ -166,8 +182,6 @@ namespace isc { namespace dhcp { class location { public: - /// Type for file name. - typedef position::filename_type filename_type; /// Type for line and column numbers. typedef position::counter_type counter_type; @@ -184,7 +198,7 @@ namespace isc { namespace dhcp { {} /// Construct a 0-width location in \a f, \a l, \a c. - explicit location (filename_type* f, + explicit location (std::string* f, counter_type l = 1, counter_type c = 1) : begin (f, l, c) @@ -193,7 +207,7 @@ namespace isc { namespace dhcp { /// Initialization. - void initialize (filename_type* f = YY_NULLPTR, + void initialize (std::string* f = YY_NULLPTR, counter_type l = 1, counter_type c = 1) { @@ -275,6 +289,20 @@ namespace isc { namespace dhcp { return res -= width; } + /// Compare two location objects. + inline bool + operator== (const location& loc1, const location& loc2) + { + return loc1.begin == loc2.begin && loc1.end == loc2.end; + } + + /// Compare two location objects. + inline bool + operator!= (const location& loc1, const location& loc2) + { + return !(loc1 == loc2); + } + /** \brief Intercept output stream redirection. ** \param ostr the destination output stream ** \param loc a reference to the location to redirect @@ -301,6 +329,6 @@ namespace isc { namespace dhcp { #line 14 "dhcp6_parser.yy" } } // isc::dhcp -#line 305 "location.hh" +#line 333 "location.hh" #endif // !YY_PARSER6_LOCATION_HH_INCLUDED diff --git a/src/bin/dhcp6/tests/Makefile.am b/src/bin/dhcp6/tests/Makefile.am index bb07e732ac..e3518f1ad4 100644 --- a/src/bin/dhcp6/tests/Makefile.am +++ b/src/bin/dhcp6/tests/Makefile.am @@ -121,9 +121,6 @@ endif if HAVE_PGSQL dhcp6_unittests_LDFLAGS += $(PGSQL_LIBS) endif -if HAVE_CQL -dhcp6_unittests_LDFLAGS += $(CQL_LIBS) -endif dhcp6_unittests_LDFLAGS += $(GTEST_LDFLAGS) dhcp6_unittests_LDADD = $(top_builddir)/src/bin/dhcp6/libdhcp6.la @@ -148,10 +145,6 @@ if HAVE_PGSQL dhcp6_unittests_LDADD += $(top_builddir)/src/lib/pgsql/testutils/libpgsqltest.la dhcp6_unittests_LDADD += $(top_builddir)/src/lib/pgsql/libkea-pgsql.la endif -if HAVE_CQL -dhcp6_unittests_LDADD += $(top_builddir)/src/lib/cql/testutils/libcqltest.la -dhcp6_unittests_LDADD += $(top_builddir)/src/lib/cql/libkea-cql.la -endif dhcp6_unittests_LDADD += $(top_builddir)/src/lib/database/testutils/libdatabasetest.la dhcp6_unittests_LDADD += $(top_builddir)/src/lib/database/libkea-database.la diff --git a/src/bin/dhcp6/tests/parser_unittest.cc b/src/bin/dhcp6/tests/parser_unittest.cc index 927f70a5af..47f60fafce 100644 --- a/src/bin/dhcp6/tests/parser_unittest.cc +++ b/src/bin/dhcp6/tests/parser_unittest.cc @@ -282,7 +282,6 @@ TEST(ParserTest, file) { configs.push_back("all-keys.json"); configs.push_back("all-options.json"); configs.push_back("backends.json"); - configs.push_back("cassandra.json"); configs.push_back("classify.json"); configs.push_back("classify2.json"); configs.push_back("comments.json"); diff --git a/src/bin/keactrl/kea-dhcp4.conf.pre b/src/bin/keactrl/kea-dhcp4.conf.pre index 6aa775c204..a2f00e77eb 100644 --- a/src/bin/keactrl/kea-dhcp4.conf.pre +++ b/src/bin/keactrl/kea-dhcp4.conf.pre @@ -54,8 +54,8 @@ // Use Memfile lease database backend to store leases in a CSV file. // Depending on how Kea was compiled, it may also support SQL databases - // (MySQL and/or PostgreSQL) and even Cassandra. Those database backends - // require more parameters, like name, host and possibly user and password. + // (MySQL and/or PostgreSQL). Those database backends require more + // parameters, like name, host and possibly user and password. // There are dedicated examples for each backend. See Section 7.2.2 "Lease // Storage" for details. "lease-database": { diff --git a/src/bin/keactrl/kea-dhcp6.conf.pre b/src/bin/keactrl/kea-dhcp6.conf.pre index 3ff62ec540..92ef1b76ad 100644 --- a/src/bin/keactrl/kea-dhcp6.conf.pre +++ b/src/bin/keactrl/kea-dhcp6.conf.pre @@ -48,8 +48,8 @@ // Use Memfile lease database backend to store leases in a CSV file. // Depending on how Kea was compiled, it may also support SQL databases - // (MySQL and/or PostgreSQL) and even Cassandra. Those database backends - // require more parameters, like name, host and possibly user and password. + // (MySQL and/or PostgreSQL). Those database backends require more + // parameters, like name, host and possibly user and password. // There are dedicated examples for each backend. See Section 8.2.2 "Lease // Storage" for details. "lease-database": { diff --git a/src/bin/lfc/Makefile.am b/src/bin/lfc/Makefile.am index bf6e95f456..bb7f96fa2d 100644 --- a/src/bin/lfc/Makefile.am +++ b/src/bin/lfc/Makefile.am @@ -43,9 +43,6 @@ endif if HAVE_PGSQL kea_lfc_LDADD += $(top_builddir)/src/lib/pgsql/libkea-pgsql.la endif -if HAVE_CQL -kea_lfc_LDADD += $(top_builddir)/src/lib/cql/libkea-cql.la -endif kea_lfc_LDADD += $(top_builddir)/src/lib/database/libkea-database.la @@ -66,9 +63,6 @@ endif if HAVE_PGSQL kea_lfc_LDFLAGS += $(PGSQL_LIBS) endif -if HAVE_CQL -kea_lfc_LDFLAGS += $(CQL_LIBS) -endif kea_lfcdir = $(pkgdatadir) diff --git a/src/bin/lfc/tests/Makefile.am b/src/bin/lfc/tests/Makefile.am index b991f8159c..65593436c0 100644 --- a/src/bin/lfc/tests/Makefile.am +++ b/src/bin/lfc/tests/Makefile.am @@ -33,9 +33,6 @@ endif if HAVE_PGSQL lfc_unittests_LDFLAGS += $(PGSQL_LIBS) endif -if HAVE_CQL -lfc_unittests_LDFLAGS += $(CQL_LIBS) -endif lfc_unittests_LDFLAGS += $(GTEST_LDFLAGS) lfc_unittests_LDADD = $(top_builddir)/src/bin/lfc/liblfc.la @@ -55,9 +52,6 @@ endif if HAVE_PGSQL lfc_unittests_LDADD += $(top_builddir)/src/lib/pgsql/libkea-pgsql.la endif -if HAVE_CQL -lfc_unittests_LDADD += $(top_builddir)/src/lib/cql/libkea-cql.la -endif lfc_unittests_LDADD += $(top_builddir)/src/lib/database/libkea-database.la lfc_unittests_LDADD += $(top_builddir)/src/lib/asiolink/libkea-asiolink.la diff --git a/src/hooks/dhcp/lease_cmds/lease_cmds.dox b/src/hooks/dhcp/lease_cmds/lease_cmds.dox index e112aa042e..8575ec697f 100644 --- a/src/hooks/dhcp/lease_cmds/lease_cmds.dox +++ b/src/hooks/dhcp/lease_cmds/lease_cmds.dox @@ -32,9 +32,9 @@ interface from control agent), the code receives a JSON command with parameters. Those are parsed and then actual operation commences. This operation always interacts with an instantiation of isc::dhcp::LeaseMgr instance, which is Kea's way of storing leases. At the time of writing this text -(Aug. 2017), Kea supports four types of lease managers: memfile, MySQL, -PostgreSQL or Cassandra. The lease commands provided by this library -provide a unified interface for those backends. +(Aug. 2017), Kea supports four types of lease managers: memfile, MySQL or +PostgreSQL. The lease commands provided by this library provide a unified +interface for those backends. As with other hooks, this one also keeps its code in a separate namespace which corresponds to the file name of the library: isc::lease_cmds. @@ -74,8 +74,8 @@ The lease manipulation commands were implemented to provide a convenient interfa for sysadmins. The primary goal was to offer a way to interact with the live lease database in unified way, regardless of the actual backend being used. -For some backends (MySQL, PostgreSQL and Cassandra) it is possible to interact -directly with the backend while Kea is running and possibly change its content. This +For some backends (MySQL and PostgreSQL) it is possible to interact directly +with the backend while Kea is running and possibly change its content. This ability is both powerful and dangerous. In particular, only rudimentary checks are enforced by the DB schemas (e.g. not possible to have two leases for the same address). However, it does not prevent sysadmins from making diff --git a/src/hooks/dhcp/lease_cmds/tests/Makefile.am b/src/hooks/dhcp/lease_cmds/tests/Makefile.am index e93ee42f61..e107bb72a6 100644 --- a/src/hooks/dhcp/lease_cmds/tests/Makefile.am +++ b/src/hooks/dhcp/lease_cmds/tests/Makefile.am @@ -57,9 +57,5 @@ lease_cmds_unittests_LDADD += $(CRYPTO_LIBS) lease_cmds_unittests_LDADD += $(BOOST_LIBS) lease_cmds_unittests_LDADD += $(GTEST_LDADD) -if HAVE_CQL -lease_cmds_unittests_LDFLAGS += $(CQL_LIBS) -endif - endif noinst_PROGRAMS = $(TESTS) diff --git a/src/hooks/dhcp/stat_cmds/stat_cmds.dox b/src/hooks/dhcp/stat_cmds/stat_cmds.dox index e8ead8d5d8..b67cb022ae 100644 --- a/src/hooks/dhcp/stat_cmds/stat_cmds.dox +++ b/src/hooks/dhcp/stat_cmds/stat_cmds.dox @@ -41,9 +41,9 @@ constructed and shipped back to the client. This lease statistics commands interact with both the isc::dhcp::StatsMgr and the isc::dhcp::LeaseMgr instance. At the time of writing this text -(May, 2018), Kea supports four types of lease managers: memfile, MySQL, -PostgreSQL or Cassandra. The lease statistics commands provided by this -library provide a unified interface supported by all four of these backends. +(May, 2018), Kea supports four types of lease managers: memfile, MySQL or +PostgreSQL. The lease statistics commands provided by this library provide a +unified interface supported by all four of these backends. As with other hooks, this one keeps its code in a separate namespace which corresponds to the file name of the library: isc::stat_cmds. diff --git a/src/hooks/dhcp/stat_cmds/tests/Makefile.am b/src/hooks/dhcp/stat_cmds/tests/Makefile.am index 44370a4860..a0116ae4d8 100644 --- a/src/hooks/dhcp/stat_cmds/tests/Makefile.am +++ b/src/hooks/dhcp/stat_cmds/tests/Makefile.am @@ -12,10 +12,6 @@ endif if HAVE_PGSQL AM_CPPFLAGS += $(PGSQL_CPPFLAGS) endif -if HAVE_CQL -AM_CPPFLAGS += $(CQL_CPPFLAGS) -endif - AM_CXXFLAGS = $(KEA_CXXFLAGS) @@ -73,9 +69,6 @@ endif if HAVE_PGSQL stat_cmds_unittests_LDFLAGS += $(PGSQL_LIBS) endif -if HAVE_CQL -stat_cmds_unittests_LDFLAGS += $(CQL_LIBS) -endif endif noinst_PROGRAMS = $(TESTS) diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am index d984df2115..f776adcffe 100644 --- a/src/lib/Makefile.am +++ b/src/lib/Makefile.am @@ -9,10 +9,6 @@ if HAVE_PGSQL SUBDIRS += pgsql endif -if HAVE_CQL -SUBDIRS += cql -endif - SUBDIRS += config_backend hooks dhcp http config stats if HAVE_SYSREPO diff --git a/src/lib/config_backend/base_config_backend.h b/src/lib/config_backend/base_config_backend.h index 5348b201e4..9e38919b7f 100644 --- a/src/lib/config_backend/base_config_backend.h +++ b/src/lib/config_backend/base_config_backend.h @@ -29,8 +29,8 @@ namespace cb { /// Such implementation is called configuration backend. Each /// configuration backend facilitates a single database type, e.g. MySQL /// database. In order to support multiple database types, i.e. MySQL, -/// Postgres, Cassandra, each Kea server will have to implement -/// 3 separate configuration backends, one for each database type. +/// PostgreSQL, each Kea server will have to implement 2 separate configuration +/// backends, one for each database type. class BaseConfigBackend { public: diff --git a/src/lib/config_backend/tests/config_backend_mgr_unittest.cc b/src/lib/config_backend/tests/config_backend_mgr_unittest.cc index 1449676361..0ccc88dd73 100644 --- a/src/lib/config_backend/tests/config_backend_mgr_unittest.cc +++ b/src/lib/config_backend/tests/config_backend_mgr_unittest.cc @@ -469,7 +469,7 @@ TEST_F(ConfigBackendMgrTest, getSingleProperty) { // Try to use the backend that is not present. EXPECT_THROW(config_mgr_.getPool()->getProperty("cats", - BackendSelector(BackendSelector::Type::CQL)), + BackendSelector(static_cast(-1))), NoSuchDatabase); } @@ -498,7 +498,7 @@ TEST_F(ConfigBackendMgrTest, getMultipleProperties) { // Try to use the backend that is not present. EXPECT_THROW(config_mgr_.getPool()->getProperties("cats", - BackendSelector(BackendSelector::Type::CQL)), + BackendSelector(static_cast(-1))), NoSuchDatabase); } @@ -521,7 +521,7 @@ TEST_F(ConfigBackendMgrTest, getAllProperties) { // Try to use the backend that is not present. EXPECT_THROW(config_mgr_.getPool()->getProperties("cats", - BackendSelector(BackendSelector::Type::CQL)), + BackendSelector(static_cast(-1))), NoSuchDatabase); } diff --git a/src/lib/cql/Makefile.am b/src/lib/cql/Makefile.am deleted file mode 100644 index 055b0e0ffb..0000000000 --- a/src/lib/cql/Makefile.am +++ /dev/null @@ -1,32 +0,0 @@ -SUBDIRS = . testutils tests - -AM_CPPFLAGS = -I$(top_srcdir)/src/lib -I$(top_builddir)/src/lib -AM_CPPFLAGS += $(BOOST_INCLUDES) $(CQL_CPPFLAGS) - -AM_CXXFLAGS = $(KEA_CXXFLAGS) - -CLEANFILES = *.gcno *.gcda - -lib_LTLIBRARIES = libkea-cql.la -libkea_cql_la_SOURCES = cql_connection.cc cql_connection.h -libkea_cql_la_SOURCES += cql_exchange.cc cql_exchange.h -libkea_cql_la_SOURCES += sql_common.h - -libkea_cql_la_LIBADD = $(top_builddir)/src/lib/database/libkea-database.la -libkea_cql_la_LIBADD += $(top_builddir)/src/lib/cc/libkea-cc.la -libkea_cql_la_LIBADD += $(top_builddir)/src/lib/asiolink/libkea-asiolink.la -libkea_cql_la_LIBADD += $(top_builddir)/src/lib/log/libkea-log.la -libkea_cql_la_LIBADD += $(top_builddir)/src/lib/util/libkea-util.la -libkea_cql_la_LIBADD += $(top_builddir)/src/lib/exceptions/libkea-exceptions.la -libkea_cql_la_LIBADD += $(LOG4CPLUS_LIBS) $(BOOST_LIBS) - -libkea_cql_la_LDFLAGS = -no-undefined -version-info 15:0:0 - -libkea_cql_la_LDFLAGS += $(CQL_LIBS) - -# Specify the headers for copying into the installation directory tree. -libkea_cql_includedir = $(pkgincludedir)/cql -libkea_cql_include_HEADERS = \ - cql_connection.h \ - cql_exchange.h \ - sql_common.h diff --git a/src/lib/cql/cql_connection.cc b/src/lib/cql/cql_connection.cc deleted file mode 100644 index e16a3fdc5d..0000000000 --- a/src/lib/cql/cql_connection.cc +++ /dev/null @@ -1,470 +0,0 @@ -// Copyright (C) 2018-2021 Internet Systems Consortium, Inc. ("ISC") -// Copyright (C) 2015-2018 Deutsche Telekom AG. -// -// Authors: Razvan Becheriu -// Andrei Pavel -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include - -#include -#include -#include -#include - -#include - -namespace isc { -namespace db { - -CqlConnection::CqlConnection(const ParameterMap& parameters) - : DatabaseConnection(parameters), statements_(), cluster_(NULL), - session_(NULL), consistency_(CASS_CONSISTENCY_QUORUM), - serial_consistency_(CASS_CONSISTENCY_UNKNOWN), schema_meta_(NULL), - keyspace_meta_(NULL), force_consistency_(true) { -} - -CqlConnection::~CqlConnection() { - // Free up the prepared statements, ignoring errors. Session and connection - // resources are deallocated. - CassError rc = CASS_OK; - std::string error; - - // Let's free the prepared statements. - for (StatementMapEntry s : statements_) { - CqlTaggedStatement statement = s.second; - if (statement.prepared_statement_) { - cass_prepared_free(statement.prepared_statement_); - } - } - - // If there's a session, tear it down and free the resources. - if (session_) { - cass_schema_meta_free(schema_meta_); - CassFuture* close_future = cass_session_close(session_); - cass_future_wait(close_future); - error = checkFutureError( - "CqlConnection::~CqlConnection(): cass_session_close() != CASS_OK", - close_future); - rc = cass_future_error_code(close_future); - cass_future_free(close_future); - cass_session_free(session_); - session_ = NULL; - } - - // Free the cluster if there's one. - if (cluster_) { - cass_cluster_free(cluster_); - cluster_ = NULL; - } - - if (rc != CASS_OK) { - // We're closing the connection anyway. Let's not throw at this stage. - DB_LOG_ERROR(CQL_DEALLOC_ERROR).arg(error); - } -} - -std::pair -CqlConnection::getVersion(const ParameterMap& parameters) { - // Get a connection. - CqlConnection conn(parameters); - - // Open the database. - conn.openDatabase(); - - // Prepare statement. - conn.prepareStatements(CqlVersionExchange::tagged_statements_); - - std::unique_ptr version_exchange(new CqlVersionExchange()); - return version_exchange->retrieveVersion(conn); -} - -CassConsistency CqlConnection::parseConsistency(std::string value) { - static std::map consistency_map { - {"any", CASS_CONSISTENCY_ANY}, - {"one", CASS_CONSISTENCY_ONE}, - {"two", CASS_CONSISTENCY_TWO}, - {"three", CASS_CONSISTENCY_THREE}, - {"quorum", CASS_CONSISTENCY_QUORUM}, - {"all", CASS_CONSISTENCY_ALL}, - {"local-quorum", CASS_CONSISTENCY_LOCAL_QUORUM}, - {"each-quorum", CASS_CONSISTENCY_EACH_QUORUM}, - {"serial", CASS_CONSISTENCY_SERIAL}, - {"local-serial", CASS_CONSISTENCY_LOCAL_SERIAL}, - {"local-one", CASS_CONSISTENCY_LOCAL_ONE} - }; - if (consistency_map.find(value) == consistency_map.end()) { - return CASS_CONSISTENCY_UNKNOWN; - } - return consistency_map[value]; -} - -void -CqlConnection::openDatabase() { - CassError rc; - // Set up the values of the parameters - const char* contact_points = "127.0.0.1"; - std::string scontact_points; - try { - scontact_points = getParameter("contact-points"); - contact_points = scontact_points.c_str(); - } catch (...) { - // No host. Fine, we'll use "127.0.0.1". - } - - const char* port = NULL; - std::string sport; - try { - sport = getParameter("port"); - port = sport.c_str(); - } catch (...) { - // No port. Fine, we'll use the default "9042". - } - - const char* user = NULL; - std::string suser; - try { - suser = getParameter("user"); - user = suser.c_str(); - } catch (...) { - // No user. Fine, we'll use NULL. - } - - const char* password = NULL; - std::string spassword; - try { - spassword = getParameter("password"); - password = spassword.c_str(); - } catch (...) { - // No password. Fine, we'll use NULL. - } - - const char* keyspace = "keatest"; - std::string skeyspace; - try { - skeyspace = getParameter("keyspace"); - keyspace = skeyspace.c_str(); - } catch (...) { - // No keyspace name. Fine, we'll use "keatest". - } - - const char* consistency = NULL; - std::string sconsistency; - try { - sconsistency = getParameter("consistency"); - consistency = sconsistency.c_str(); - } catch (...) { - // No consistency. Fine, we'll use "quorum". - } - - const char* serial_consistency = NULL; - std::string sserial_consistency; - try { - sserial_consistency = getParameter("serial-consistency"); - serial_consistency = sserial_consistency.c_str(); - } catch (...) { - // No serial consistency. Fine, we'll use "serial". - } - - const char* reconnect_wait_time = NULL; - std::string sreconnect_wait_time; - try { - sreconnect_wait_time = getParameter("reconnect-wait-time"); - reconnect_wait_time = sreconnect_wait_time.c_str(); - } catch (...) { - // No reconnect wait time. Fine, we'll use the default "2000". - } - - const char* connect_timeout = NULL; - std::string sconnect_timeout; - try { - sconnect_timeout = getParameter("connect-timeout"); - connect_timeout = sconnect_timeout.c_str(); - } catch (...) { - // No connect timeout. Fine, we'll use the default "5000". - } - - const char* request_timeout = NULL; - std::string srequest_timeout; - try { - srequest_timeout = getParameter("request-timeout"); - request_timeout = srequest_timeout.c_str(); - } catch (...) { - // No request timeout. Fine, we'll use the default "12000". - } - - const char* tcp_keepalive = NULL; - std::string stcp_keepalive; - try { - stcp_keepalive = getParameter("tcp-keepalive"); - tcp_keepalive = stcp_keepalive.c_str(); - } catch (...) { - // No tcp-keepalive. Fine, we'll not use TCP keepalive. - } - - std::string stcp_nodelay; - try { - stcp_nodelay = getParameter("tcp-nodelay"); - } catch (...) { - // No tcp-nodelay. Fine, we'll use the default false. - } - - cluster_ = cass_cluster_new(); - cass_cluster_set_contact_points(cluster_, contact_points); - - if (user && password) { - cass_cluster_set_credentials(cluster_, user, password); - } - - if (port) { - int32_t port_number; - try { - port_number = boost::lexical_cast(port); - if (port_number < 1 || port_number > 65535) { - isc_throw(DbOperationError, - "CqlConnection::openDatabase(): " - "port outside of range, expected " - "1-65535, instead got " - << port); - } - } catch (const boost::bad_lexical_cast& ex) { - isc_throw(DbOperationError, - "CqlConnection::openDatabase(): invalid " - "port, expected castable to int, instead got " - "\"" << port - << "\", " << ex.what()); - } - cass_cluster_set_port(cluster_, port_number); - } - - if (consistency) { - CassConsistency desired_consistency = CqlConnection::parseConsistency(sconsistency); - CassConsistency desired_serial_consistency = CASS_CONSISTENCY_UNKNOWN; - if (serial_consistency) { - desired_serial_consistency = CqlConnection::parseConsistency(sserial_consistency); - } - if (desired_consistency != CASS_CONSISTENCY_UNKNOWN) { - setConsistency(true, desired_consistency, desired_serial_consistency); - } - } - - if (reconnect_wait_time) { - int32_t reconnect_wait_time_number; - try { - reconnect_wait_time_number = - boost::lexical_cast(reconnect_wait_time); - if (reconnect_wait_time_number < 0) { - isc_throw(DbOperationError, - "CqlConnection::openDatabase(): invalid reconnect " - "wait time, expected positive number, instead got " - << reconnect_wait_time); - } - } catch (const boost::bad_lexical_cast& ex) { - isc_throw(DbOperationError, - "CqlConnection::openDatabase(): " - "invalid reconnect wait time, expected " - "castable to int, instead got \"" - << reconnect_wait_time << "\", " << ex.what()); - } -#if (CASS_VERSION_MAJOR > 2) || \ - ((CASS_VERSION_MAJOR == 2) && (CASS_VERSION_MINOR >= 13)) - cass_uint64_t delay_ms = - static_cast(reconnect_wait_time_number); - cass_cluster_set_constant_reconnect(cluster_, delay_ms); -#else - cass_cluster_set_reconnect_wait_time(cluster_, - reconnect_wait_time_number); -#endif - } - - if (connect_timeout) { - int32_t connect_timeout_number; - try { - connect_timeout_number = - boost::lexical_cast(connect_timeout); - if (connect_timeout_number < 0) { - isc_throw(DbOperationError, - "CqlConnection::openDatabase(): " - "invalid connect timeout, expected " - "positive number, instead got " - << connect_timeout); - } - } catch (const boost::bad_lexical_cast& ex) { - isc_throw(DbOperationError, - "CqlConnection::openDatabase(): invalid connect timeout, " - "expected castable to int, instead got \"" - << connect_timeout << "\", " << ex.what()); - } - cass_cluster_set_connect_timeout(cluster_, connect_timeout_number); - } - - if (request_timeout) { - int32_t request_timeout_number; - try { - request_timeout_number = - boost::lexical_cast(request_timeout); - if (request_timeout_number < 0) { - isc_throw(DbOperationError, - "CqlConnection::openDatabase(): " - "invalid request timeout, expected " - "positive number, instead got " - << request_timeout); - } - } catch (const boost::bad_lexical_cast& ex) { - isc_throw(DbOperationError, - "CqlConnection::openDatabase(): invalid request timeout, " - "expected castable to int, instead got \"" - << request_timeout << "\", " << ex.what()); - } - cass_cluster_set_request_timeout(cluster_, request_timeout_number); - } - - if (tcp_keepalive) { - int32_t tcp_keepalive_number; - try { - tcp_keepalive_number = boost::lexical_cast(tcp_keepalive); - if (tcp_keepalive_number < 0) { - isc_throw(DbOperationError, - "CqlConnection::openDatabase(): " - "invalid TCP keepalive, expected " - "positive number, instead got " - << tcp_keepalive); - } - } catch (const boost::bad_lexical_cast& ex) { - isc_throw(DbOperationError, - "CqlConnection::openDatabase(): invalid TCP keepalive, " - "expected castable to int, instead got \"" - << tcp_keepalive << "\", " << ex.what()); - } - cass_cluster_set_tcp_keepalive(cluster_, cass_true, - tcp_keepalive_number); - } - - if (stcp_nodelay == "true") { - cass_cluster_set_tcp_nodelay(cluster_, cass_true); - } - - session_ = cass_session_new(); - - CassFuture* connect_future = - cass_session_connect_keyspace(session_, cluster_, keyspace); - cass_future_wait(connect_future); - const std::string error = - checkFutureError("CqlConnection::openDatabase(): " - "cass_session_connect_keyspace() != CASS_OK", - connect_future); - rc = cass_future_error_code(connect_future); - cass_future_free(connect_future); - if (rc != CASS_OK) { - cass_session_free(session_); - session_ = NULL; - cass_cluster_free(cluster_); - cluster_ = NULL; - isc_throw(DbOpenError, error); - } - - // Get keyspace meta. - schema_meta_ = cass_session_get_schema_meta(session_); - keyspace_meta_ = cass_schema_meta_keyspace_by_name(schema_meta_, keyspace); - if (!keyspace_meta_) { - isc_throw(DbOpenError, "CqlConnection::openDatabase(): " - "!cass_schema_meta_keyspace_by_name()"); - } -} - -void -CqlConnection::prepareStatements(StatementMap& statements) { - CassError rc = CASS_OK; - for (StatementMapEntry it : statements) { - CqlTaggedStatement& tagged_statement = it.second; - if (statements_.find(tagged_statement.name_) != statements_.end()) { - isc_throw(DbOperationError, - "CqlConnection::prepareStatements(): " - "duplicate statement with name " - << tagged_statement.name_); - } - - CassFuture* future = - cass_session_prepare(session_, tagged_statement.text_); - cass_future_wait(future); - const std::string error = - checkFutureError("CqlConnection::prepareStatements():" - " cass_session_prepare() != CASS_OK", - future, tagged_statement.name_); - rc = cass_future_error_code(future); - if (rc != CASS_OK) { - cass_future_free(future); - isc_throw(DbOperationError, error); - } - - tagged_statement.prepared_statement_ = cass_future_get_prepared(future); - statements_.insert(it); - cass_future_free(future); - } -} - -void -CqlConnection::setConsistency(bool force, - CassConsistency consistency, - CassConsistency serial_consistency) { - force_consistency_ = force; - consistency_ = consistency; - serial_consistency_ = serial_consistency; -} - -void -CqlConnection::startTransaction() { - DB_LOG_DEBUG(DB_DBG_TRACE_DETAIL, CQL_CONNECTION_BEGIN_TRANSACTION); -} - -void -CqlConnection::commit() { - DB_LOG_DEBUG(DB_DBG_TRACE_DETAIL, CQL_CONNECTION_COMMIT); -} - -void -CqlConnection::rollback() { - DB_LOG_DEBUG(DB_DBG_TRACE_DETAIL, CQL_CONNECTION_ROLLBACK); -} - -const std::string -CqlConnection::checkFutureError(const std::string& what, - CassFuture* future, - StatementTag statement_tag /* = NULL */) { - CassError cass_error = cass_future_error_code(future); - const char* error_message; - size_t error_message_size; - cass_future_error_message(future, &error_message, &error_message_size); - - std::stringstream stream; - if (statement_tag && std::strlen(statement_tag) > 0) { - // future is from cass_session_execute() call. - stream << "Statement "; - stream << statement_tag; - } else { - // future is from cass_session_*() call. - stream << "Session action "; - } - if (cass_error == CASS_OK) { - stream << " executed successfully."; - } else { - stream << " failed, Kea error: " << what - << ", Cassandra error code: " << cass_error_desc(cass_error) - << ", Cassandra future error: " << error_message; - } - return stream.str(); -} - -} // namespace dhcp -} // namespace isc diff --git a/src/lib/cql/cql_connection.h b/src/lib/cql/cql_connection.h deleted file mode 100644 index 37fb0b296f..0000000000 --- a/src/lib/cql/cql_connection.h +++ /dev/null @@ -1,240 +0,0 @@ -// Copyright (C) 2018-2021 Internet Systems Consortium, Inc. ("ISC") -// Copyright (C) 2015-2017 Deutsche Telekom AG. -// -// Authors: Razvan Becheriu -// Andrei Pavel -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef CQL_CONNECTION_H -#define CQL_CONNECTION_H - -#include - -#include - -#include -#include -#include -#include -#include -#include -#include - -namespace isc { -namespace db { - -/// @brief Pair containing major and minor versions -/// @todo: This is already defined in lease_mgr.h. Need to have one -/// definition. May need to move it if necessary. -typedef std::pair VersionPair; - -/// @brief Statement index representing the statement name -typedef char const* const StatementTag; - -/// @brief Define CQL backend version. The CASS_VERSION_* constants -/// are defined in a header provided by cpp-driver. -/// @{ -constexpr uint32_t CQL_DRIVER_VERSION_MAJOR = CASS_VERSION_MAJOR; -constexpr uint32_t CQL_DRIVER_VERSION_MINOR = CASS_VERSION_MINOR; -/// @} - -/// Define CQL schema version: 5.0 -/// @{ -constexpr uint32_t CQL_SCHEMA_VERSION_MAJOR = 5u; -constexpr uint32_t CQL_SCHEMA_VERSION_MINOR = 0u; -/// @} - -/// @brief Defines a single statement or query -struct CqlTaggedStatement { - - /// Short description of the query - StatementTag name_; - - /// Text representation of the actual query - char const* const text_; - - /// Internal Cassandra object representing the prepared statement - const CassPrepared* prepared_statement_; - - /// Should the statement be executed raw or with binds? - bool is_raw_; - - /// @brief Constructor - /// @param name brief name of the query - /// @param text text (CQL) representation of the query - CqlTaggedStatement(StatementTag name, char const* const text) - : name_(name), text_(text), prepared_statement_(NULL), is_raw_(false) { - } - - /// @brief Constructor - /// @param name brief name of the query - /// @param text text (CQL) representation of the query - /// @param is_raw should the statement be executed raw? - CqlTaggedStatement(StatementTag name, char const* const text, bool const& is_raw) - : name_(name), text_(text), prepared_statement_(NULL), is_raw_(is_raw) { - } -}; - -/// @brief Hash function for StatementMap keys -/// -/// Delegates to std::hash. -struct StatementTagHash { - size_t operator()(StatementTag const& key) const { - return std::hash{}(std::string(key)); - } -}; - -/// @brief Equality function for StatementMap keys -struct StatementTagEqual { - bool operator()(StatementTag const& lhs, StatementTag const& rhs) const { - return std::strcmp(lhs, rhs) == 0; - } -}; - -/// @brief A container for all statements. -typedef std::unordered_map StatementMap; - -/// @brief A type for a single entry on the statements map -typedef std::pair StatementMapEntry; - -/// @brief Common CQL connector pool -/// -/// Provides common operations for the Cassandra database connection used by -/// CqlLeaseMgr, CqlHostDataSource and CqlSrvConfigMgr. Manages the connection -/// to the Cassandra database and preparing of compiled statements. Its fields -/// are public because they are used (both set and retrieved) in classes that -/// use instances of CqlConnection. -class CqlConnection : public db::DatabaseConnection { -public: - /// @brief Constructor - /// - /// Initialize CqlConnection object with parameters needed for connection. - /// @param parameters specify the connection details (username, ip addresses etc.) - explicit CqlConnection(const ParameterMap& parameters); - - /// @brief Destructor - virtual ~CqlConnection(); - - /// @brief Get the schema version. - /// - /// @param parameters A data structure relating keywords and values - /// concerned with the database. - /// - /// @return Version number as a pair of unsigned integers. "first" is the - /// major version number, "second" the minor number. - /// - /// @throw isc::db::DbOperationError An operation on the open database has - /// failed. - static std::pair - getVersion(const ParameterMap& parameters); - - /// @brief Prepare statements - /// - /// Creates the prepared statements for all of the CQL statements used - /// by the CQL backend. - /// @param statements statements to be prepared - /// - /// @throw isc::db::DbOperationError if an operation on the open database - /// has failed - /// @throw isc::InvalidParameter if there is an invalid access in the - /// vector. This represents an internal error within the code. - void prepareStatements(StatementMap& statements); - - /// @brief Open database - /// - /// Opens the database using the information supplied in the parameters - /// passed to the constructor. If no parameters are supplied, the default - /// values will be used. The parameters supported are as follows (default - /// values specified in parentheses): - /// - keyspace: name of the database to which to connect (keatest) - /// - contact-points: IP addresses of the nodes to connect to (127.0.0.1) - /// - consistency: consistency level (quorum) - /// - serial-consistency: serial consistency level (serial) - /// - port: The TCP port to use (9042) - /// - user - credentials to use when connecting (no username) - /// - password - credentials to use when connecting (no password) - /// - reconnect-wait-time 2000 - /// - connect-timeout 5000 - /// - request-timeout 12000 - /// - tcp-keepalive no - /// - tcp-nodelay no - /// - /// @throw DbOpenError error opening the database - void openDatabase(); - - /// @brief Set consistency - void setConsistency(bool force, - CassConsistency consistency, - CassConsistency serial_consistency); - - /// @brief Start transaction - void startTransaction(); - - /// @brief Commit Transactions - virtual void commit(); - - /// @brief Rollback Transactions - virtual void rollback(); - - /// @brief parse Consistency value - static CassConsistency parseConsistency(std::string value); - - /// @brief Check for errors - /// - /// Check for errors on the current database operation and returns text - /// description of what happened. In case of success, also returns - /// some logging friendly text. - /// - /// @param what text description of the operation - /// @param future the structure that holds the status of operation - /// @param statement_tag statement that was used (optional) - /// @return text description of the error - static const std::string - checkFutureError(const std::string& what, - CassFuture* future, - StatementTag statement_tag = NULL); - - /// @brief Pointer to external array of tagged statements containing - /// statement name, array of names of bind parameters and text query - StatementMap statements_; - - /// @brief CQL connection handle - CassCluster* cluster_; - - /// @brief CQL session handle - CassSession* session_; - - /// @brief CQL consistency - CassConsistency consistency_; - - /// @brief CQL serial consistency - CassConsistency serial_consistency_; - - // @brief Schema meta information, used for UDTs - const CassSchemaMeta* schema_meta_; - - /// @brief Keyspace meta information, used for UDTs - const CassKeyspaceMeta* keyspace_meta_; - - /// @brief CQL consistency enabled - bool force_consistency_; -}; - -typedef std::shared_ptr CqlConnectionPtr; - -} // namespace db -} // namespace isc - -#endif // CQL_CONNECTION_H diff --git a/src/lib/cql/cql_exchange.cc b/src/lib/cql/cql_exchange.cc deleted file mode 100644 index 1dd00c017a..0000000000 --- a/src/lib/cql/cql_exchange.cc +++ /dev/null @@ -1,1021 +0,0 @@ -// Copyright (C) 2018-2020 Internet Systems Consortium, Inc. ("ISC") -// Copyright (C) 2016-2017 Deutsche Telekom AG. -// -// Authors: Razvan Becheriu -// Andrei Pavel -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -namespace isc { -namespace db { - -/// @brief Macro to return directly from caller function -#define KEA_CASS_CHECK(cass_error) \ - { \ - if (cass_error != CASS_OK) { \ - return cass_error; \ - } \ - } - -/// @brief a helper structure with a function call operator that returns -/// key value in a format expected by std::hash. -struct ExchangeDataTypeHash { -public: - size_t operator()(const ExchangeDataType& key) const { - return std::hash{}(static_cast(key)); - } -}; - -/// @brief Defines a type for storing aux. Cassandra functions -typedef std::unordered_map - CqlFunctionMap; -extern CqlFunctionMap CQL_FUNCTIONS; - -/// @brief hash function for CassTypeMap -/// -/// Required by g++ versions 5 and below. -/// -/// @param key being hashed -/// -/// @return hash value -std::size_t -hash_value(const CassValueType& key) { - return key; -} - -/// @brief Map types used to determine exchange type -/// @{ - -/// @brief Defines type that maps specific type to an enum -typedef std::unordered_map AnyTypeMap; - -// Declare uint8_t as key here for compatibility with g++ version 5. Ideally, -// it would be CassValueType -typedef std::unordered_map CassTypeMap; -/// @} - -/// @brief Maps C++ type to exchange type -static AnyTypeMap ANY_TYPE_MAP = { - {typeid(NULL), EXCHANGE_DATA_TYPE_NONE}, - {typeid(cass_bool_t*), EXCHANGE_DATA_TYPE_BOOL}, - {typeid(cass_int8_t*), EXCHANGE_DATA_TYPE_INT8}, - {typeid(cass_int16_t*), EXCHANGE_DATA_TYPE_INT16}, - {typeid(cass_int32_t*), EXCHANGE_DATA_TYPE_INT32}, - {typeid(cass_int64_t*), EXCHANGE_DATA_TYPE_INT64}, - {typeid(std::string*), EXCHANGE_DATA_TYPE_STRING}, - {typeid(CassBlob*), EXCHANGE_DATA_TYPE_BYTES}, - {typeid(CassUuid*), EXCHANGE_DATA_TYPE_UUID}, - {typeid(Udt*), EXCHANGE_DATA_TYPE_UDT}, // user data type - {typeid(AnyCollection*), EXCHANGE_DATA_TYPE_COLLECTION}}; - -/// @brief Maps Cassandra type to exchange type -static CassTypeMap CASS_TYPE_MAP = { - {CASS_VALUE_TYPE_CUSTOM, EXCHANGE_DATA_TYPE_UDT}, - {CASS_VALUE_TYPE_ASCII, EXCHANGE_DATA_TYPE_STRING}, - {CASS_VALUE_TYPE_BIGINT, EXCHANGE_DATA_TYPE_INT64}, - {CASS_VALUE_TYPE_BLOB, EXCHANGE_DATA_TYPE_BYTES}, - {CASS_VALUE_TYPE_BOOLEAN, EXCHANGE_DATA_TYPE_BOOL}, - {CASS_VALUE_TYPE_COUNTER, EXCHANGE_DATA_TYPE_INT32}, - {CASS_VALUE_TYPE_DECIMAL, EXCHANGE_DATA_TYPE_INT32}, - {CASS_VALUE_TYPE_DOUBLE, EXCHANGE_DATA_TYPE_INT64}, - {CASS_VALUE_TYPE_FLOAT, EXCHANGE_DATA_TYPE_INT32}, - {CASS_VALUE_TYPE_INT, EXCHANGE_DATA_TYPE_INT32}, - {CASS_VALUE_TYPE_TEXT, EXCHANGE_DATA_TYPE_STRING}, - {CASS_VALUE_TYPE_TIMESTAMP, EXCHANGE_DATA_TYPE_INT64}, - {CASS_VALUE_TYPE_UUID, EXCHANGE_DATA_TYPE_UUID}, - {CASS_VALUE_TYPE_VARCHAR, EXCHANGE_DATA_TYPE_STRING}, - {CASS_VALUE_TYPE_VARINT, EXCHANGE_DATA_TYPE_INT32}, - {CASS_VALUE_TYPE_TIMEUUID, EXCHANGE_DATA_TYPE_INT64}, - {CASS_VALUE_TYPE_INET, EXCHANGE_DATA_TYPE_NONE}, - {CASS_VALUE_TYPE_DATE, EXCHANGE_DATA_TYPE_INT64}, - {CASS_VALUE_TYPE_TIME, EXCHANGE_DATA_TYPE_INT64}, - {CASS_VALUE_TYPE_SMALL_INT, EXCHANGE_DATA_TYPE_INT16}, - {CASS_VALUE_TYPE_TINY_INT, EXCHANGE_DATA_TYPE_INT8}, - {CASS_VALUE_TYPE_LIST, EXCHANGE_DATA_TYPE_COLLECTION}, - {CASS_VALUE_TYPE_MAP, EXCHANGE_DATA_TYPE_COLLECTION}, - {CASS_VALUE_TYPE_SET, EXCHANGE_DATA_TYPE_COLLECTION}, - {CASS_VALUE_TYPE_UDT, EXCHANGE_DATA_TYPE_UDT}, - {CASS_VALUE_TYPE_TUPLE, EXCHANGE_DATA_TYPE_UDT}}; - -/// @brief Udt (user data type) method implementations -/// @{ -Udt::Udt(const CqlConnection& connection, const std::string& name) - : AnyArray(), connection_(connection), name_(name) { - // Create type. - cass_data_type_ = cass_keyspace_meta_user_type_by_name( - connection_.keyspace_meta_, name_.c_str()); - if (!cass_data_type_) { - isc_throw(DbOperationError, - "Udt::Udt(): UDT " << name_ << " does not exist "); - } - // Create container. - cass_user_type_ = cass_user_type_new_from_data_type(cass_data_type_); - if (!cass_user_type_) { - isc_throw(DbOperationError, - "Udt::Udt(): Type " << name_ - << " is not a UDT as expected. "); - } -} - -Udt::~Udt() { - /// @todo: Need to get back to this issue. This is likely a memory leak. - // - // Bug: it seems that if there is no call to - // cass_user_type_set_*(cass_user_type_), then - // cass_user_type_free(cass_user_type_) might SIGSEGV, so we never - // free. Udt objects should have application scope though. - // cass_user_type_free(cass_user_type_); -} -/// @} - -/// @brief AnyArray method implementations -/// @{ -void -AnyArray::add(const boost::any& value) { - push_back(value); -} - -void -AnyArray::remove(const size_t& index) { - if (size() <= index) { - isc_throw(BadValue, - "AnyArray::remove(): index " - << index << " out of bounds: [0, " << (size() - 1) - << "]"); - } - erase(begin() + index); -} -/// @} - -/// @name CqlBind functions for binding data into Cassandra format for -/// insertion: -/// @{ -static CassError -CqlBindNone(const boost::any& /* value */, - const size_t& index, - CassStatement* statement) { - return cass_statement_bind_null(statement, index); -} - -static CassError -CqlBindBool(const boost::any& value, - const size_t& index, - CassStatement* statement) { - return cass_statement_bind_bool(statement, index, - *boost::any_cast(value)); -} - -static CassError -CqlBindInt8(const boost::any& value, - const size_t& index, - CassStatement* statement) { - return cass_statement_bind_int8(statement, index, - *boost::any_cast(value)); -} - -static CassError -CqlBindInt16(const boost::any& value, - const size_t& index, - CassStatement* statement) { - return cass_statement_bind_int16(statement, index, - *boost::any_cast(value)); -} - -static CassError -CqlBindInt32(const boost::any& value, - const size_t& index, - CassStatement* statement) { - return cass_statement_bind_int32(statement, index, - *boost::any_cast(value)); -} - -static CassError -CqlBindInt64(const boost::any& value, - const size_t& index, - CassStatement* statement) { - return cass_statement_bind_int64(statement, index, - *boost::any_cast(value)); -} - -static CassError -CqlBindString(const boost::any& value, - const size_t& index, - CassStatement* statement) { - return cass_statement_bind_string( - statement, index, boost::any_cast(value)->c_str()); -} - -static CassError -CqlBindBytes(const boost::any& value, - const size_t& index, - CassStatement* statement) { - CassBlob* blob_value = boost::any_cast(value); - return cass_statement_bind_bytes(statement, index, blob_value->data(), - blob_value->size()); -} - -static CassError -CqlBindUuid(const boost::any& value, - const size_t& index, - CassStatement* statement) { - return cass_statement_bind_uuid(statement, index, - *boost::any_cast(value)); -} - -static CassError -CqlBindUdt(const boost::any& value, - const size_t& index, - CassStatement* statement) { - Udt* udt = boost::any_cast(value); - - if (!udt) { - isc_throw(BadValue, "Invalid value specified, not an Udt object"); - } - - size_t i = 0u; - - // Let's iterate over all elements in udt and check that we indeed - // can assign the set function for each specified type. - for (boost::any& element : *udt) { - try { - KEA_CASS_CHECK( - CQL_FUNCTIONS[exchangeType(element)].cqlUdtSetFunction_( - element, i, udt->cass_user_type_)); - } catch (const boost::bad_any_cast& exception) { - isc_throw(DbOperationError, - "CqlCommon::udtSetData(): " - << exception.what() - << " when binding parameter of type " - << element.type().name() - << "in UDT with function CQL_FUNCTIONS[" - << exchangeType(element) << "].cqlUdtSetFunction_"); - } - ++i; - } - - return cass_statement_bind_user_type(statement, index, - udt->cass_user_type_); -} - -static CassError -CqlBindCollection(const boost::any& value, - const size_t& index, - CassStatement* statement) { - AnyCollection* elements = boost::any_cast(value); - - CassCollection* collection = - cass_collection_new(CASS_COLLECTION_TYPE_SET, elements->size()); - - // Iterate over all elements and assign appropriate append function - // for each. - for (boost::any& element : *elements) { - ExchangeDataType type = exchangeType(element); - KEA_CASS_CHECK(CQL_FUNCTIONS[type].cqlCollectionAppendFunction_( - element, collection)); - } - - const CassError cass_error = - cass_statement_bind_collection(statement, index, collection); - cass_collection_free(collection); - - return cass_error; -} -/// @} - -/// @name CqlUdtSet functions for binding data into Cassandra format for -/// insertion of a UDT: -/// @{ -static CassError -CqlUdtSetNone(const boost::any& /* udt_member */, - const size_t& position, - CassUserType* cass_user_type) { - return cass_user_type_set_null(cass_user_type, position); -} - -static CassError -CqlUdtSetBool(const boost::any& udt_member, - const size_t& position, - CassUserType* cass_user_type) { - return cass_user_type_set_bool(cass_user_type, position, - *boost::any_cast(udt_member)); -} - -static CassError -CqlUdtSetInt8(const boost::any& udt_member, - const size_t& position, - CassUserType* cass_user_type) { - return cass_user_type_set_int8(cass_user_type, position, - *boost::any_cast(udt_member)); -} - -static CassError -CqlUdtSetInt16(const boost::any& udt_member, - const size_t& position, - CassUserType* cass_user_type) { - return cass_user_type_set_int16( - cass_user_type, position, *boost::any_cast(udt_member)); -} - -static CassError -CqlUdtSetInt32(const boost::any& udt_member, - const size_t& position, - CassUserType* cass_user_type) { - return cass_user_type_set_int32( - cass_user_type, position, *boost::any_cast(udt_member)); -} - -static CassError -CqlUdtSetInt64(const boost::any& udt_member, - const size_t& position, - CassUserType* cass_user_type) { - return cass_user_type_set_int64( - cass_user_type, position, *boost::any_cast(udt_member)); -} - -static CassError -CqlUdtSetString(const boost::any& udt_member, - const size_t& position, - CassUserType* cass_user_type) { - return cass_user_type_set_string( - cass_user_type, position, - boost::any_cast(udt_member)->c_str()); -} - -static CassError -CqlUdtSetBytes(const boost::any& udt_member, - const size_t& position, - CassUserType* cass_user_type) { - CassBlob* blob_value = boost::any_cast(udt_member); - return cass_user_type_set_bytes(cass_user_type, position, - blob_value->data(), blob_value->size()); -} - -static CassError -CqlUdtSetUuid(const boost::any& udt_member, - const size_t& position, - CassUserType* cass_user_type) { - return cass_user_type_set_uuid(cass_user_type, position, - *boost::any_cast(udt_member)); -} - -static CassError -CqlUdtSetUdt(const boost::any& udt_member, - const size_t& position, - CassUserType* cass_user_type) { - return cass_user_type_set_user_type( - cass_user_type, position, - boost::any_cast(udt_member)->cass_user_type_); -} - -static CassError -CqlUdtSetCollection(const boost::any& udt_member, - const size_t& position, - CassUserType* cass_user_type) { - return cass_user_type_set_collection( - cass_user_type, position, boost::any_cast(udt_member)); -} -/// @} - -/// @name CqlCollectionAppend functions for binding data into Cassandra format -/// for insertion of a collection: -/// @{ -static CassError -CqlCollectionAppendNone(const boost::any& /* value */, - CassCollection* /* collection */) { - return CASS_OK; -} - -static CassError -CqlCollectionAppendBool(const boost::any& value, CassCollection* collection) { - return cass_collection_append_bool(collection, - *boost::any_cast(value)); -} - -static CassError -CqlCollectionAppendInt8(const boost::any& value, CassCollection* collection) { - return cass_collection_append_int8(collection, - *boost::any_cast(value)); -} - -static CassError -CqlCollectionAppendInt16(const boost::any& value, CassCollection* collection) { - return cass_collection_append_int16(collection, - *boost::any_cast(value)); -} - -static CassError -CqlCollectionAppendInt32(const boost::any& value, CassCollection* collection) { - return cass_collection_append_int32(collection, - *boost::any_cast(value)); -} - -static CassError -CqlCollectionAppendInt64(const boost::any& value, CassCollection* collection) { - return cass_collection_append_int64(collection, - *boost::any_cast(value)); -} - -static CassError -CqlCollectionAppendString(const boost::any& value, CassCollection* collection) { - return cass_collection_append_string( - collection, boost::any_cast(value)->c_str()); -} - -static CassError -CqlCollectionAppendBytes(const boost::any& value, CassCollection* collection) { - CassBlob* blob_value = boost::any_cast(value); - return cass_collection_append_bytes(collection, blob_value->data(), - blob_value->size()); -} - -static CassError -CqlCollectionAppendUuid(const boost::any& value, CassCollection* collection) { - return cass_collection_append_uuid(collection, - *boost::any_cast(value)); -} - -static CassError -CqlCollectionAppendUdt(const boost::any& value, CassCollection* collection) { - Udt* udt = boost::any_cast(value); - size_t i = 0u; - for (boost::any& element : *udt) { - KEA_CASS_CHECK(CQL_FUNCTIONS[exchangeType(element)].cqlUdtSetFunction_( - element, i, udt->cass_user_type_)); - ++i; - } - return cass_collection_append_user_type(collection, udt->cass_user_type_); -} - -static CassError -CqlCollectionAppendCollection(const boost::any& value, - CassCollection* collection) { - return cass_collection_append_collection( - collection, boost::any_cast(value)); -} -// @} - -/// @name CqlGet functions for retrieving data of the proper Cassandra format: -/// @{ -static CassError -CqlGetNone(const boost::any& /* data */, const CassValue* /* value */) { - return CASS_OK; -} - -static CassError -CqlGetBool(const boost::any& data, const CassValue* value) { - return cass_value_get_bool(value, boost::any_cast(data)); -} - -static CassError -CqlGetInt8(const boost::any& data, const CassValue* value) { - return cass_value_get_int8(value, boost::any_cast(data)); -} - -static CassError -CqlGetInt16(const boost::any& data, const CassValue* value) { - return cass_value_get_int16(value, boost::any_cast(data)); -} - -static CassError -CqlGetInt32(const boost::any& data, const CassValue* value) { - return cass_value_get_int32(value, boost::any_cast(data)); -} - -static CassError -CqlGetInt64(const boost::any& data, const CassValue* value) { - return cass_value_get_int64(value, boost::any_cast(data)); -} - -static CassError -CqlGetString(const boost::any& data, const CassValue* value) { - char const* data_value; - size_t size_value; - CassError cass_error = cass_value_get_string( - value, static_cast(&data_value), &size_value); - boost::any_cast(data)->assign(data_value, - data_value + size_value); - return cass_error; -} - -static CassError -CqlGetBytes(const boost::any& data, const CassValue* value) { - const cass_byte_t* data_value; - size_t size_value; - CassError cass_error = cass_value_get_bytes( - value, static_cast(&data_value), &size_value); - boost::any_cast(data)->assign(data_value, - data_value + size_value); - return cass_error; -} - -static CassError -CqlGetUuid(const boost::any& data, const CassValue* value) { - return cass_value_get_uuid(value, boost::any_cast(data)); -} - -static CassError -CqlGetUdt(const boost::any& data, const CassValue* value) { - Udt* udt = boost::any_cast(data); - - CassIterator* fields = cass_iterator_fields_from_user_type(value); - if (!fields) { - isc_throw(DbOperationError, "CqlGetUdt(): column is not a UDT"); - } - Udt::const_iterator it = udt->begin(); - while (cass_iterator_next(fields)) { - const CassValue* field_value = - cass_iterator_get_user_type_field_value(fields); - if (cass_value_is_null(field_value)) { - isc_throw(DbOperationError, - "CqlGetUdt(): null value returned in UDT"); - } - const CassValueType& type = cass_value_type(field_value); - KEA_CASS_CHECK(CQL_FUNCTIONS[exchangeType(type)].cqlGetFunction_( - *it, field_value)); - ++it; - // If cqlGetFunction_() returns != CASS_OK, don't - // cass_iterator_free(items_iterator) because we're returning from this - // function and throwing from the callee. - } - cass_iterator_free(fields); - return CASS_OK; -} - -static CassError -CqlGetCollection(const boost::any& data, const CassValue* value) { - AnyCollection* collection = boost::any_cast(data); - if (!collection) { - isc_throw(DbOperationError, "CqlGetCollection(): column is not a collection"); - } - - BOOST_ASSERT(collection->size() == 1); - - /// @todo: Create a copy of the underlying object rather than referencing to - /// it. - boost::any underlying_object = *collection->begin(); - - collection->clear(); - - CassIterator* items = cass_iterator_from_collection(value); - if (!items) { - isc_throw(DbOperationError, - "CqlGetCollection(): column is not a collection"); - } - while (cass_iterator_next(items)) { - const CassValue* item_value = cass_iterator_get_value(items); - if (cass_value_is_null(item_value)) { - isc_throw(DbOperationError, - "CqlGetCollection(): null value returned in collection"); - } - const CassValueType& type = cass_value_type(item_value); - - collection->push_back(underlying_object); - KEA_CASS_CHECK(CQL_FUNCTIONS[exchangeType(type)].cqlGetFunction_( - *collection->rbegin(), item_value)); - // If cqlGetFunction_() returns != CASS_OK, don't call - // cass_iterator_free(items_iterator) because we're returning from this - // function and throwing from the callee. - } - cass_iterator_free(items); - return CASS_OK; -} -/// @} - -/// @brief Functions used to interface with the Cassandra C++ driver -CqlFunctionMap CQL_FUNCTIONS = // - {{EXCHANGE_DATA_TYPE_NONE, - {CqlBindNone, CqlUdtSetNone, CqlCollectionAppendNone, CqlGetNone}}, - {EXCHANGE_DATA_TYPE_BOOL, - {CqlBindBool, CqlUdtSetBool, CqlCollectionAppendBool, CqlGetBool}}, - {EXCHANGE_DATA_TYPE_INT8, - {CqlBindInt8, CqlUdtSetInt8, CqlCollectionAppendInt8, CqlGetInt8}}, - {EXCHANGE_DATA_TYPE_INT16, - {CqlBindInt16, CqlUdtSetInt16, CqlCollectionAppendInt16, CqlGetInt16}}, - {EXCHANGE_DATA_TYPE_INT32, - {CqlBindInt32, CqlUdtSetInt32, CqlCollectionAppendInt32, CqlGetInt32}}, - {EXCHANGE_DATA_TYPE_INT64, - {CqlBindInt64, CqlUdtSetInt64, CqlCollectionAppendInt64, CqlGetInt64}}, - {EXCHANGE_DATA_TYPE_STRING, - {CqlBindString, CqlUdtSetString, CqlCollectionAppendString, - CqlGetString}}, - {EXCHANGE_DATA_TYPE_BYTES, - {CqlBindBytes, CqlUdtSetBytes, CqlCollectionAppendBytes, CqlGetBytes}}, - {EXCHANGE_DATA_TYPE_UUID, - {CqlBindUuid, CqlUdtSetUuid, CqlCollectionAppendUuid, CqlGetUuid}}, - {EXCHANGE_DATA_TYPE_UDT, - {CqlBindUdt, CqlUdtSetUdt, CqlCollectionAppendUdt, CqlGetUdt}}, - {EXCHANGE_DATA_TYPE_COLLECTION, - {CqlBindCollection, CqlUdtSetCollection, CqlCollectionAppendCollection, - CqlGetCollection}}}; - -ExchangeDataType -exchangeType(const boost::any& object) { - const std::type_index type = object.type(); - AnyTypeMap::const_iterator exchange_type_it = ANY_TYPE_MAP.find(type); - if (exchange_type_it == ANY_TYPE_MAP.end()) { - isc_throw(DbOperationError, - "exchangeType(): boost::any type " - << type.name() << " does not map to any exchange type"); - } - const ExchangeDataType exchange_type = exchange_type_it->second; - if (exchange_type >= CQL_FUNCTIONS.size()) { - isc_throw(BadValue, - "exchangeType(): index " << exchange_type << " out of bounds " - << 0 << " - " - << (CQL_FUNCTIONS.size() - 1)); - } - return exchange_type; -} - -ExchangeDataType -exchangeType(const CassValueType& type) { - CassTypeMap::const_iterator exchange_type_it = CASS_TYPE_MAP.find(type); - if (exchange_type_it == CASS_TYPE_MAP.end()) { - isc_throw(DbOperationError, - "exchangeType(): Cassandra value type " - << type << " does not map to any exchange type"); - } - const ExchangeDataType exchange_type = exchange_type_it->second; - if (exchange_type >= CQL_FUNCTIONS.size()) { - isc_throw(BadValue, - "exchangeType(): index " << exchange_type << " out of bounds " - << 0 << " - " - << CQL_FUNCTIONS.size() - 1); - } - return exchange_type; -} - -void -CqlCommon::bindData(const AnyArray& data, CassStatement* statement) { - size_t i = 0u; - for (const boost::any& element : data) { - CassError cass_error; - try { - cass_error = CQL_FUNCTIONS[exchangeType(element)].cqlBindFunction_( - element, i, statement); - } catch (const boost::bad_any_cast& exception) { - isc_throw(DbOperationError, - "CqlCommon::bindData(): " - << exception.what() << " when binding parameter " << i - << " which is of type " << element.type().name() - << " with function CQL_FUNCTIONS[" - << exchangeType(element) << "].cqlBindFunction_()"); - } - if (cass_error != CASS_OK) { - isc_throw(DbOperationError, - "CqlCommon::bindData(): unable to bind parameter " - << i << " which is of type " << element.type().name() - << " with function CQL_FUNCTIONS[" - << exchangeType(element) - << "].cqlBindFunction_(), Cassandra error code: " - << cass_error_desc(cass_error)); - } - ++i; - } -} - -void -CqlCommon::getData(const CassRow* row, AnyArray& data) { - size_t i = 0u; - for (boost::any& element : data) { - const CassValue* value = cass_row_get_column(row, i); - CassError cass_error; - try { - cass_error = CQL_FUNCTIONS[exchangeType(element)].cqlGetFunction_( - element, value); - } catch (const boost::bad_any_cast& exception) { - isc_throw(DbOperationError, - "CqlCommon::getData(): " - << exception.what() << " when retrieving parameter " - << i << " which is of type " << element.type().name() - << " with function CQL_FUNCTIONS[" - << exchangeType(element) << "].cqlGetFunction_()"); - } - if (cass_error != CASS_OK) { - isc_throw( - DbOperationError, - "CqlCommon::getData(): Cassandra error when retrieving column " - << i << ", Cassandra error code: " - << cass_error_desc(cass_error)); - } - ++i; - } -} - -CqlExchange::CqlExchange() { -} - -CqlExchange::~CqlExchange() { -} - -void -CqlExchange::convertToDatabaseTime(const time_t& cltt, - const uint32_t& valid_lifetime, - cass_int64_t& expire) { - // Calculate expire time. - cass_int64_t expire_time = static_cast(cltt) + - static_cast(valid_lifetime); - - expire = expire_time; -} - -void -CqlExchange::convertFromDatabaseTime(const cass_int64_t& expire, - const cass_int64_t& valid_lifetime, - time_t& cltt) { - // Convert to local time. - cltt = static_cast(expire - valid_lifetime); -} - -AnyArray -CqlExchange::executeSelect(const CqlConnection& connection, const AnyArray& data, - StatementTag statement_tag, const bool& single /* = false */) { - CassError rc; - CassStatement* statement = NULL; - CassFuture* future = NULL; - AnyArray local_data = data; - - // Find the query statement first. - StatementMap::const_iterator it = connection.statements_.find(statement_tag); - if (it == connection.statements_.end()) { - isc_throw(DbOperationError, - "CqlExchange::executeSelect(): Statement " - << statement_tag << "has not been prepared."); - } - - // Bind the data before the query is executed. - CqlTaggedStatement tagged_statement = it->second; - if (tagged_statement.is_raw_) { - // The entire query is the first element in data. - std::string* query = boost::any_cast(local_data.back()); - local_data.pop_back(); - statement = cass_statement_new(query->c_str(), local_data.size()); - } else { - statement = cass_prepared_bind(tagged_statement.prepared_statement_); - if (!statement) { - isc_throw(DbOperationError, - "CqlExchange::executeSelect(): unable to bind statement " - << tagged_statement.name_); - } - } - - // Set specific level of consistency if we're told to do so. - if (connection.force_consistency_) { - rc = cass_statement_set_consistency(statement, connection.consistency_); - if (rc != CASS_OK) { - cass_statement_free(statement); - isc_throw(DbOperationError, - "CqlExchange::executeSelect(): unable to set statement " - "consistency for statement " - << tagged_statement.name_ - << ", Cassandra error code: " << cass_error_desc(rc)); - } - if (connection.serial_consistency_ != CASS_CONSISTENCY_UNKNOWN) { - rc = cass_statement_set_serial_consistency(statement, connection.serial_consistency_); - if (rc != CASS_OK) { - cass_statement_free(statement); - isc_throw(DbOperationError, - "CqlExchange::executeSelect(): unable to set statement " - "serial consistency for statement " - << tagged_statement.name_ - << ", Cassandra error code: " << cass_error_desc(rc)); - } - } - } - - CqlCommon::bindData(local_data, statement); - - // Everything's ready. Call the actual statement. - future = cass_session_execute(connection.session_, statement); - if (!future) { - cass_statement_free(statement); - isc_throw(DbOperationError, - "CqlExchange::executeSelect(): no CassFuture for statement " - << tagged_statement.name_); - } - - // Wait for the statement execution to complete. - cass_future_wait(future); - const std::string error = connection.checkFutureError( - "CqlExchange::executeSelect(): cass_session_execute() != CASS_OK", - future, statement_tag); - rc = cass_future_error_code(future); - if (rc != CASS_OK) { - cass_future_free(future); - cass_statement_free(statement); - isc_throw(DbOperationError, error); - } - - // Get column values. - const CassResult* result_collection = cass_future_get_result(future); - if (single && cass_result_row_count(result_collection) > 1) { - cass_result_free(result_collection); - cass_future_free(future); - cass_statement_free(statement); - isc_throw( - MultipleRecords, - "CqlExchange::executeSelect(): multiple records were found in " - "the database where only one was expected for statement " - << tagged_statement.name_); - } - - // Get results. - AnyArray return_values; - AnyArray collection; - CassIterator* rows = cass_iterator_from_result(result_collection); - while (cass_iterator_next(rows)) { - const CassRow* row = cass_iterator_get_row(rows); - createBindForSelect(return_values, statement_tag); - CqlCommon::getData(row, return_values); - collection.add(retrieve()); - } - - // Free resources. - cass_iterator_free(rows); - cass_result_free(result_collection); - cass_future_free(future); - cass_statement_free(statement); - - return collection; -} - -void -CqlExchange::executeMutation(const CqlConnection& connection, const AnyArray& data, - StatementTag statement_tag) { - CassError rc; - CassStatement* statement = NULL; - CassFuture* future = NULL; - - // Find the statement on a list of prepared statements. - StatementMap::const_iterator it = - connection.statements_.find(statement_tag); - if (it == connection.statements_.end()) { - isc_throw(DbOperationError, "CqlExchange::executeSelect(): Statement " - << statement_tag << "has not been prepared."); - } - // Bind the statement. - CqlTaggedStatement tagged_statement = it->second; - statement = cass_prepared_bind(tagged_statement.prepared_statement_); - if (!statement) { - isc_throw(DbOperationError, - "CqlExchange::executeMutation(): unable to bind statement " - << tagged_statement.name_); - } - - // Set specific level of consistency, if told to do so. - if (connection.force_consistency_) { - rc = cass_statement_set_consistency(statement, connection.consistency_); - if (rc != CASS_OK) { - cass_statement_free(statement); - isc_throw(DbOperationError, "CqlExchange::executeMutation(): unable to set" - " statement consistency for statement " << tagged_statement.name_ - << ", Cassandra error code: " << cass_error_desc(rc)); - } - if (connection.serial_consistency_ != CASS_CONSISTENCY_UNKNOWN) { - rc = cass_statement_set_serial_consistency(statement, connection.serial_consistency_); - if (rc != CASS_OK) { - cass_statement_free(statement); - isc_throw(DbOperationError, - "CqlExchange::executeMutation(): unable to set statement " - "serial consistency for statement " - << tagged_statement.name_ - << ", Cassandra error code: " << cass_error_desc(rc)); - } - } - } - - CqlCommon::bindData(data, statement); - - future = cass_session_execute(connection.session_, statement); - if (!future) { - cass_statement_free(statement); - isc_throw(DbOperationError, - "CqlExchange::executeMutation(): unable to execute statement " - << tagged_statement.name_); - } - cass_future_wait(future); - const std::string error = connection.checkFutureError("CqlExchange::executeMutation():" - "cass_session_execute() != CASS_OK", future, statement_tag); - rc = cass_future_error_code(future); - if (rc != CASS_OK) { - cass_future_free(future); - cass_statement_free(statement); - isc_throw(DbOperationError, error); - } - - // Check if statement has been applied. - bool applied = statementApplied(future); - - // Free resources. - cass_future_free(future); - cass_statement_free(statement); - - if (!applied) { - isc_throw( - StatementNotApplied, - "CqlExchange::executeMutation(): [applied] is false for statement " - << tagged_statement.name_); - } -} - -bool -CqlExchange::statementApplied(CassFuture* future, - size_t* row_count, - size_t* column_count) { - const CassResult* result_collection = cass_future_get_result(future); - if (!result_collection) { - isc_throw(DbOperationError, "CqlExchange::statementApplied(): unable to get" - " results collection"); - } - if (row_count) { - *row_count = cass_result_row_count(result_collection); - } - if (column_count) { - *column_count = cass_result_column_count(result_collection); - } - CassIterator* rows = cass_iterator_from_result(result_collection); - AnyArray data; - cass_bool_t applied = cass_true; - while (cass_iterator_next(rows)) { - const CassRow* row = cass_iterator_get_row(rows); - // [applied]: bool - data.add(&applied); - CqlCommon::getData(row, data); - } - cass_iterator_free(rows); - cass_result_free(result_collection); - return applied == cass_true; -} - -constexpr StatementTag CqlVersionExchange::GET_VERSION; - -StatementMap CqlVersionExchange::tagged_statements_ = { - {GET_VERSION, {GET_VERSION, "SELECT version, minor FROM schema_version "}} -}; - -CqlVersionExchange::CqlVersionExchange() { -} - -CqlVersionExchange::~CqlVersionExchange() { -} - -void -CqlVersionExchange::createBindForSelect(AnyArray& data, StatementTag) { - data.clear(); // Start with a fresh array. - data.add(&version_); // first column is a major version - data.add(&minor_); // second column is a minor version -} - -boost::any -CqlVersionExchange::retrieve() { - pair_ = VersionPair(version_, minor_); - return &pair_; -} - -VersionPair -CqlVersionExchange::retrieveVersion(const CqlConnection& connection) { - // Run statement. - const AnyArray where_values; - AnyArray version_collection = - executeSelect(connection, where_values, GET_VERSION, true); - - if (!version_collection.empty()) { - return *boost::any_cast(*version_collection.begin()); - } - - return VersionPair(); -} - -} // namespace db -} // namespace isc diff --git a/src/lib/cql/cql_exchange.h b/src/lib/cql/cql_exchange.h deleted file mode 100644 index 5bf8d6962b..0000000000 --- a/src/lib/cql/cql_exchange.h +++ /dev/null @@ -1,325 +0,0 @@ -// Copyright (C) 2018,2021 Internet Systems Consortium, Inc. ("ISC") -// Copyright (C) 2016-2017 Deutsche Telekom AG. -// -// Authors: Razvan Becheriu -// Andrei Pavel -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef CQL_EXCHANGE_H -#define CQL_EXCHANGE_H - -#include -#include - -#include // for boost::any - -#include -#include // for std::type_info -#include // for std::unordered_map -#include -#include - -namespace isc { -namespace db { - -/// @brief Host identifier converted to Cassandra data type -typedef std::vector CassBlob; - -/// @brief Forward declaration to @ref CqlExchange -class CqlExchange; - -/// @brief Structure used to bind C++ input values to dynamic CQL parameters -/// -/// The structure contains a vector which stores the input values. The vector is -/// passed directly into the CQL execute call. Note that the data values are -/// stored as pointers. These pointers need to be valid for the duration of the -/// CQL statement execution. In other words, populating them with pointers that -/// go out of scope before the statement is executed results in undefined -/// behaviour. -class AnyArray : public std::vector { -public: - /// @brief Add a value at the end of the vector. - void add(const boost::any& value); - - /// @brief Remove the void pointer to the data value from a specified - /// position inside the vector. - void remove(const size_t& index); -}; - -// @brief Representation of a Cassandra User Defined Type -class Udt : public AnyArray { -public: - /// @brief Parameterized constructor - Udt(const CqlConnection& connection, const std::string& name); - - /// @brief Destructor - ~Udt(); - - /// @brief Frees the underlying container. - void freeUserType(); - - /// @brief Creates the underlying container. - void newUserType(); - - /// @brief Connection to the Cassandra database - const CqlConnection& connection_; - - /// @brief Name of the UDT in the schema: CREATE TYPE ___ { ... } - const std::string name_; - - /// @brief Internal Cassandra driver object representing a Cassandra data - /// type - const CassDataType* cass_data_type_; - - /// @brief Internal Cassandra driver object representing a user defined type - CassUserType* cass_user_type_; -}; - -/// @brief Defines an array of arbitrary objects (used by Cassandra backend) -typedef AnyArray AnyCollection; - -/// @brief Binds a C++ object to a Cassandra statement's parameter. Used in all -/// statements. -/// @param value the value to be set or retrieved -/// @param index offset of the value being processed -/// @param statement pointer to the parent statement being used -typedef CassError (*CqlBindFunction)(const boost::any& value, - const size_t& index, - CassStatement* statement); - -/// @brief Sets a member in a UDT. Used in INSERT & UPDATE statements. -/// @param value the value to be set or retrieved -/// @param index offset of the value being processed -/// @param cass_user_type pointer to the user type that uses this member -typedef CassError (*CqlUdtSetFunction)(const boost::any& value, - const size_t& index, - CassUserType* cass_user_type); - -/// @brief Sets an item in a collection. Used in INSERT & UPDATE statements. -/// @param value pointer to a value to be inserted or updated -/// @param collection pointer to collection to be inserted or updated -typedef CassError (*CqlCollectionAppendFunction)(const boost::any& value, - CassCollection* collection); - -/// @brief Converts a single Cassandra column value to a C++ object. Used in -/// SELECT statements. -/// -/// @param data the result will be stored here (this pointer will be updated) -/// @param value this value will be converted -typedef CassError (*CqlGetFunction)(const boost::any& data, - const CassValue* value); - -/// @brief Wrapper over the bind and get functions that interface with Cassandra -struct CqlFunction { - /// @brief Binds a C++ object to a Cassandra statement's parameter. Used in - /// all statements. - CqlBindFunction cqlBindFunction_; - /// @brief Sets a member in a UDT. Used in INSERT & UPDATE statements. - CqlUdtSetFunction cqlUdtSetFunction_; - /// @brief Sets an item in a collection. Used in INSERT & UPDATE statements. - CqlCollectionAppendFunction cqlCollectionAppendFunction_; - /// @brief Converts a single Cassandra column value to a C++ object. Used in - /// SELECT statements. - CqlGetFunction cqlGetFunction_; -}; - -/// @brief Cassandra Exchange -/// -/// Used to convert between Cassandra CQL and C++ data types. A different -/// exchange is made for every distinct set of columns. Multiple tables may use -/// the same exchange if they have the same columns. -class CqlExchange : public virtual SqlExchange { -public: - /// @brief Constructor - /// - /// Empty body. Derived constructors specify table columns. - CqlExchange(); - - /// @brief Destructor - virtual ~CqlExchange(); - - /// @name Time conversion: - /// @{ - /// @brief Converts time to Cassandra format - /// - /// @param cltt timestamp of last client transmission time to be converted - /// @param valid_lifetime lifetime of a lease - /// @param expire expiration time (result will be stored here) - static void convertToDatabaseTime(const time_t& cltt, - const uint32_t& valid_lifetime, - cass_int64_t& expire); - - /// @brief Converts time from Cassandra format - /// @param expire expiration time in Cassandra format - /// @param valid_lifetime lifetime of a lease - /// @param cltt client last transmission time (result will be stored here) - static void convertFromDatabaseTime(const cass_int64_t& expire, - const cass_int64_t& valid_lifetime, - time_t& cltt); - /// @} - - /// @brief Create BIND array to receive C++ data. - /// - /// Used in executeSelect() to retrieve from database - /// - /// @param data array of bound objects representing data to be retrieved - /// @param statement_tag prepared statement being executed; defaults to an - /// invalid index - virtual void createBindForSelect(AnyArray& data, - StatementTag statement_tag = NULL) = 0; - - /// @brief Executes SELECT statements. - /// - /// @param connection connection used to communicate with the Cassandra - /// database - /// @param where_values array of bound objects used to filter the results - /// @param statement_tag prepared statement being executed - /// @param single true if a single row should be returned; by default, - /// multiple rows are allowed - /// - /// @return collection of boost::any objects - /// - /// @throw DbOperationError - /// @throw MultipleRecords - AnyArray executeSelect(const CqlConnection& connection, - const AnyArray& where_values, - StatementTag statement_tag, - const bool& single = false); - - /// @brief Executes INSERT, UPDATE or DELETE statements. - /// - /// @param connection connection used to communicate with the Cassandra - /// database - /// @param assigned_values array of bound objects to be used when inserting - /// values - /// @param statement_tag prepared statement being executed - /// applied, could be different for commit than it is for rollback - void executeMutation(const CqlConnection& connection, - const AnyArray& assigned_values, - StatementTag statement_tag); - - /// @brief Check if CQL statement has been applied. - /// - /// @param future structure used to wait on statement executions - /// @param row_count number of rows returned - /// @param column_count number of columns queried - /// - /// On insert, a false [applied] means there is a duplicate entry with the - /// same primary key. - /// - /// @return true if statement has been successfully applied, false otherwise - bool statementApplied(CassFuture* future, size_t* row_count = NULL, - size_t* column_count = NULL); - - /// @brief Copy received data into the derived class' object. - /// - /// Copies information about the entity to be retrieved into a holistic - /// object. Called in @ref executeSelect(). Not implemented for base class - /// CqlExchange. To be implemented in derived classes. - /// - /// @return a pointer to the object retrieved. - virtual boost::any retrieve() = 0; -}; - -/// @brief Exchange used to retrieve schema version from the keyspace. -class CqlVersionExchange : public virtual CqlExchange { -public: - /// @brief Constructor - /// - /// Specifies table columns. - CqlVersionExchange(); - - /// @brief Destructor - virtual ~CqlVersionExchange(); - - /// @brief Create BIND array to receive C++ data. - /// - /// Used in executeSelect() to retrieve from database - /// - /// @param data array of bound objects representing data to be retrieved - /// @param statement_tag prepared statement being executed; defaults to an - /// invalid index - virtual void - createBindForSelect(AnyArray& data, - StatementTag statement_tag = NULL) override; - - /// @brief Standalone method used to retrieve schema version - /// - /// @param connection array of bound objects representing data to be - /// retrieved - /// - /// @return version of schema specified in the prepared statement in the - /// @ref CqlConnection parameter - virtual VersionPair retrieveVersion(const CqlConnection& connection); - - /// @brief Copy received data into the pair. - /// - /// Copies information about the version to be retrieved into a pair. Called - /// in executeSelect(). - /// - /// @return a pointer to the object retrieved. - virtual boost::any retrieve() override; - - /// @brief Statement tags definitions - /// @{ - static constexpr StatementTag GET_VERSION = "GET_VERSION"; - /// @} - - /// @brief Cassandra statements - static StatementMap tagged_statements_; - -private: - /// @brief Major version - cass_int32_t version_; - /// @brief Minor version - cass_int32_t minor_; - /// @brief Pair containing major and minor version - VersionPair pair_; -}; - -/// @brief Common operations in Cassandra exchanges -class CqlCommon { -public: - /// @brief Assigns values to every column of an INSERT or an UPDATE statement. - /// - /// Calls cqlBindFunction_() for every column with its respective type. - /// - /// @param data array containing column values to be passed to the statement - /// being executed - /// @param statement internal Cassandra object representing the statement - /// being executed - static void bindData(const AnyArray& data, CassStatement* statement); - - /// @brief Retrieves data returned by Cassandra. - /// - /// Calls cqlGetFunction_() for every column with its respective type. - /// - /// @param row internal Cassandra object containing data returned by - /// Cassandra - /// @param data array containing objects to be populated with results - static void getData(const CassRow* row, AnyArray& data); -}; - -/// @brief Determine exchange type based on boost::any type. -ExchangeDataType -exchangeType(const boost::any& object); - -/// @brief Determine exchange type based on CassValueType. -ExchangeDataType -exchangeType(const CassValueType& type); - -} // namespace db -} // namespace isc - -#endif // CQL_EXCHANGE_H diff --git a/src/lib/cql/sql_common.h b/src/lib/cql/sql_common.h deleted file mode 100644 index a9e7e3865d..0000000000 --- a/src/lib/cql/sql_common.h +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (C) 2018 Internet Systems Consortium, Inc. ("ISC") -// Copyright (C) 2016-2017 Deutsche Telekom AG. -// -// Author: Cristian Secăreanu -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef SQL_COMMON_H -#define SQL_COMMON_H - -namespace isc { -namespace db { - -/// @brief Used to map server data types with internal backend storage data -/// types. -enum ExchangeDataType { - EXCHANGE_DATA_TYPE_NONE, - EXCHANGE_DATA_TYPE_BOOL, - EXCHANGE_DATA_TYPE_INT8, - EXCHANGE_DATA_TYPE_INT16, - EXCHANGE_DATA_TYPE_INT32, - EXCHANGE_DATA_TYPE_INT64, - EXCHANGE_DATA_TYPE_TIMESTAMP, - EXCHANGE_DATA_TYPE_STRING, - EXCHANGE_DATA_TYPE_BYTES, - EXCHANGE_DATA_TYPE_UUID, - EXCHANGE_DATA_TYPE_UDT, ///< User-Defined Type (used in Cassandra) - EXCHANGE_DATA_TYPE_COLLECTION ///< Collection (used in Cassandra) -}; - -/// @brief Base class for backend exchanges. -class SqlExchange { -public: - /// @brief Constructor - SqlExchange() { - } - - /// @brief Destructor - virtual ~SqlExchange() { - } -}; - -} // namespace db -} // namespace isc - -#endif // SQL_COMMON_H diff --git a/src/lib/cql/tests/.gitignore b/src/lib/cql/tests/.gitignore deleted file mode 100644 index 248092a24e..0000000000 --- a/src/lib/cql/tests/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/libcql_unittests diff --git a/src/lib/cql/tests/Makefile.am b/src/lib/cql/tests/Makefile.am deleted file mode 100644 index c3fb14f650..0000000000 --- a/src/lib/cql/tests/Makefile.am +++ /dev/null @@ -1,38 +0,0 @@ -SUBDIRS = . - -AM_CPPFLAGS = -I$(top_builddir)/src/lib -I$(top_srcdir)/src/lib -AM_CPPFLAGS += $(BOOST_INCLUDES) - -AM_CXXFLAGS = $(KEA_CXXFLAGS) - -if USE_STATIC_LINK -AM_LDFLAGS = -static -endif - -CLEANFILES = *.gcno *.gcda - -TESTS_ENVIRONMENT = \ - $(LIBTOOL) --mode=execute $(VALGRIND_COMMAND) - -TESTS = -if HAVE_GTEST -TESTS += libcql_unittests - -libcql_unittests_SOURCES = cql_connection_unittest.cc -libcql_unittests_SOURCES += run_unittests.cc - -libcql_unittests_CPPFLAGS = $(AM_CPPFLAGS) $(GTEST_INCLUDES) $(CQL_CPPFLAGS) -libcql_unittests_LDFLAGS = $(AM_LDFLAGS) $(CRYPTO_LDFLAGS) $(CQL_LIBS) $(GTEST_LDFLAGS) - -libcql_unittests_LDADD = $(top_builddir)/src/lib/cql/libkea-cql.la -libcql_unittests_LDADD += $(top_builddir)/src/lib/database/libkea-database.la -libcql_unittests_LDADD += $(top_builddir)/src/lib/cc/libkea-cc.la -libcql_unittests_LDADD += $(top_builddir)/src/lib/asiolink/libkea-asiolink.la -libcql_unittests_LDADD += $(top_builddir)/src/lib/log/libkea-log.la -libcql_unittests_LDADD += $(top_builddir)/src/lib/util/libkea-util.la -libcql_unittests_LDADD += $(top_builddir)/src/lib/exceptions/libkea-exceptions.la -libcql_unittests_LDADD += $(LOG4CPLUS_LIBS) $(CRYPTO_LIBS) $(CQL_LIBS) $(BOOST_LIBS) $(GTEST_LDADD) - -endif - -noinst_PROGRAMS = $(TESTS) diff --git a/src/lib/cql/tests/cql_connection_unittest.cc b/src/lib/cql/tests/cql_connection_unittest.cc deleted file mode 100644 index 4d7a323c30..0000000000 --- a/src/lib/cql/tests/cql_connection_unittest.cc +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (C) 2018-2019 Internet Systems Consortium, Inc. ("ISC") -// Copyright (C) 2017 Deutsche Telekom AG. -// -// 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 - -#include -#include - -#include - -#include - -#include - -namespace { - -using isc::db::CqlTaggedStatement; -using isc::db::StatementMap; -using isc::db::StatementTag; -using isc::db::StatementTagHash; -using isc::db::exchangeType; -using isc::db::CqlConnection; - -class CqlConnectionTest { -public: - /// @brief Constructor - CqlConnectionTest() { - } - - /// @brief Destructor - virtual ~CqlConnectionTest() { - } -}; - -/// @brief Check that the key is properly hashed for StatementMap. -TEST(CqlConnection, statementMapHash) { - // Build std::strings to prevent optimizations on underlying C string. - std::string tag1_s = "same"; - std::string tag2_s = "same"; - StatementTag tag1 = tag1_s.c_str(); - StatementTag tag2 = tag2_s.c_str(); - StatementMap map; - - // Make sure addresses are different. - EXPECT_NE(tag1, tag2); - - // Insert two entries with the same key value. - map.insert({tag1, CqlTaggedStatement(tag1, "your fancy select here")}); - map.insert({tag2, CqlTaggedStatement(tag2, "DELETE FROM world.evil")}); - - // Make sure the first one was overwritten. - char const* const tag1_text = map.find(tag1)->second.text_; - char const* const tag2_text = map.find(tag2)->second.text_; - EXPECT_TRUE(tag1_text); - EXPECT_TRUE(tag2_text); - ASSERT_EQ(std::strcmp(tag1_text, tag2_text), 0); - ASSERT_EQ(map.size(), 1u); -} - -/// @brief Check that the parseConsistency function return proper values. -TEST(CqlConnection, parseConsistency) { - std::string consistency; - consistency = "quorum"; - ASSERT_EQ(CqlConnection::parseConsistency(consistency), CASS_CONSISTENCY_QUORUM); - consistency = "serial"; - ASSERT_EQ(CqlConnection::parseConsistency(consistency), CASS_CONSISTENCY_SERIAL); - consistency = ""; - ASSERT_EQ(CqlConnection::parseConsistency(consistency), CASS_CONSISTENCY_UNKNOWN); - consistency = "unknown"; - ASSERT_EQ(CqlConnection::parseConsistency(consistency), CASS_CONSISTENCY_UNKNOWN); -} - -} // namespace - diff --git a/src/lib/cql/tests/run_unittests.cc b/src/lib/cql/tests/run_unittests.cc deleted file mode 100644 index 4e83d4bd6c..0000000000 --- a/src/lib/cql/tests/run_unittests.cc +++ /dev/null @@ -1,20 +0,0 @@ -// 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 - -#include -#include - -int -main(int argc, char* argv[]) { - ::testing::InitGoogleTest(&argc, argv); - isc::log::initLogger(); - - int result = RUN_ALL_TESTS(); - - return (result); -} diff --git a/src/lib/cql/testutils/Makefile.am b/src/lib/cql/testutils/Makefile.am deleted file mode 100644 index 81080726e1..0000000000 --- a/src/lib/cql/testutils/Makefile.am +++ /dev/null @@ -1,23 +0,0 @@ -SUBDIRS = . - -AM_CPPFLAGS = -I$(top_builddir)/src/lib -I$(top_srcdir)/src/lib -AM_CPPFLAGS += -DDATABASE_SCRIPTS_DIR=\"$(abs_top_srcdir)/src/share/database/scripts\" -AM_CPPFLAGS += $(BOOST_INCLUDES) - -AM_CXXFLAGS = $(KEA_CXXFLAGS) - -CLEANFILES = *.gcno *.gcda - -if HAVE_GTEST - -noinst_LTLIBRARIES = libcqltest.la - -libcqltest_la_SOURCES = cql_schema.cc cql_schema.h - -libcqltest_la_CXXFLAGS = $(AM_CXXFLAGS) -libcqltest_la_CPPFLAGS = $(AM_CPPFLAGS) $(GTEST_INCLUDES) $(CQL_CPPFLAGS) -libcqltest_la_LDFLAGS = $(AM_LDFLAGS) $(CQL_LIBS) - -libcqltest_la_LIBADD = $(top_builddir)/src/lib/database/testutils/libdatabasetest.la - -endif diff --git a/src/lib/cql/testutils/cql_schema.cc b/src/lib/cql/testutils/cql_schema.cc deleted file mode 100644 index dc525ec87b..0000000000 --- a/src/lib/cql/testutils/cql_schema.cc +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright (C) 2015-2021 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 - -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include - -namespace isc { -namespace db { -namespace test { - -const char* CQL_VALID_TYPE = "type=cql"; - -std::string -validCqlConnectionString() { - return (connectionString(CQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, - VALID_PASSWORD)); -} - -void -destroyCqlSchema(bool show_err, bool force) { - // If force is true or wipeCqlData() fails, destroy the schema. - if (force || (!softWipeEnabled()) || wipeCqlData(show_err)) { - runCqlScript(DATABASE_SCRIPTS_DIR, "cql/dhcpdb_drop.cql", show_err); - } -} - -void -createCqlSchema(bool show_err, bool force) { - // If force is true or wipeCqlData() fails, recreate the schema. - if (force || (!softWipeEnabled()) || wipeCqlData(show_err)) { - destroyCqlSchema(show_err, true); - runCqlScript(DATABASE_SCRIPTS_DIR, "cql/dhcpdb_create.cql", show_err); - } -} - -void -runCqlScript(const std::string& path, - const std::string& script_name, - bool show_err) { - std::ostringstream cmd; - cmd << "cqlsh -u keatest -p keatest -k keatest --request-timeout=6000"; - if (!show_err) { - cmd << " 2>/dev/null "; - } - - cmd << " -f"; - - if (!path.empty()) { - cmd << path << "/"; - } - - cmd << script_name; - - int32_t retval = ::system(cmd.str().c_str()); - if (retval) { - std::cerr << "runCqlSchema failed: " << cmd.str() << std::endl; - isc_throw(Unexpected, "runCqlSchema failed: " << cmd.str()); - } -} - -bool wipeCqlData(bool show_err) { - std::ostringstream cmd; - cmd << "sh " << DATABASE_SCRIPTS_DIR << "/"; - - std::ostringstream version; - version << CQL_SCHEMA_VERSION_MAJOR << "." << CQL_SCHEMA_VERSION_MINOR; - - cmd << "cql/wipe_data.sh " << version.str() - << " -u keatest -p keatest -k keatest --request-timeout=6000"; - - if (!show_err) { - cmd << " 2>/dev/null "; - } - - int retval = ::system(cmd.str().c_str()); - if (retval) { - std::cerr << "wipeCqlData failed:[" << cmd.str() << "]" << std::endl; - } - - return(retval); -} - -} // namespace test -} // namespace dhcp -} // namespace isc diff --git a/src/lib/cql/testutils/cql_schema.h b/src/lib/cql/testutils/cql_schema.h deleted file mode 100644 index dec6c70d2f..0000000000 --- a/src/lib/cql/testutils/cql_schema.h +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright (C) 2015-2019 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 TEST_CQL_SCHEMA_H -#define TEST_CQL_SCHEMA_H - -#include -#include -#include - -namespace isc { -namespace db { -namespace test { - -extern const char* CQL_VALID_TYPE; - -/// Return valid connection string -/// -/// @return valid CQL connection string. -std::string validCqlConnectionString(); - -/// @brief Clear the unit test database -/// -/// In order to reduce test execution time, this function -/// defaults to first attempting to delete transient data -/// from the database by calling @c wipeCqlData. If that -/// function fails it will then attempt to destroy the database -/// schema by running the SQL script: -/// -/// /cql/dhcpdb_drop.cql -/// -/// The default behavior of wiping the data only may be overridden -/// in one of two ways: -/// -/// -# Setting the force parameter to true -/// -# Defining the environment variable: -/// KEA_TEST_DB_WIPE_DATA_ONLY="false" -/// -/// @param show_err flag which governs whether or not stderr is suppressed. -/// @param force if true, the function will skip deleting the data and -/// destroy the schema. -void destroyCqlSchema(bool show_err = false, bool force = false); - -/// @brief Create the unit test Cql Schema -/// -/// Ensures the unit test database is a empty and version-correct. -/// Unless, the force parameter is true, it will first attempt -/// to wipe the data from the database by calling @c wipeCqlData. -/// If this call succeeds the function returns, otherwise it will -/// will call @c destroyCqlSchema to forcibly remove the -/// existing schema and then submits the SQL script: -/// -/// /cql/dhcpdb_create.cql -/// -/// to the unit test Cql database. -/// -/// The default behavior of wiping the data only may be overridden -/// in one of two ways: -/// -/// -# Setting the force parameter to true -/// -# Defining the environment variable: -/// KEA_TEST_DB_WIPE_DATA_ONLY="false" -/// -/// @param show_err flag which governs whether or not stderr is suppressed. -/// @param force flag when true, the function will recreate the database -/// schema. -void createCqlSchema(bool show_err = false, bool force = false); - -/// @brief Run a CQL script against the CQL unit test database -/// -/// Submits the given CQL script to CQL via cqlsh CLI. The output of -/// stderr is suppressed unless the parameter, show_err is true. The is done -/// to suppress warnings that might otherwise make test output needlessly -/// noisy. An exception is thrown if the script fails to execute. -/// -/// @param path - path (if not blank) of the script to execute -/// @param script_name - file name of the path to execute -/// @param show_err flag which governs whether or not stderr is suppressed. -/// @throw Unexpected when the script returns an error. -void runCqlScript(const std::string& path, const std::string& script_name, - bool show_err); - -/// @brief Attempts to wipe data from the Cql unit test database -/// -/// Runs the shell script -/// -/// /cql/wipe_data.sh -/// -/// This will fail if there is no schema, if the existing schema -/// version is incorrect (i.e. does not match CQL_SCHEMA_VERSION_MAJOR -/// and CQL_SCHEMA_VERSION_MINOR), or a SQL error occurs. Otherwise, -/// the script is should delete all transient data, leaving intact -/// reference tables. -/// -/// @param show_err flag which governs whether or not stderr is suppressed. -bool wipeCqlData(bool show_err); - -}; -}; -}; - -#endif diff --git a/src/lib/database/backend_selector.cc b/src/lib/database/backend_selector.cc index 91cac343a6..611017c9ce 100644 --- a/src/lib/database/backend_selector.cc +++ b/src/lib/database/backend_selector.cc @@ -135,9 +135,6 @@ BackendSelector::stringToBackendType(const std::string& type) { } else if (type == "postgresql") { return (BackendSelector::Type::POSTGRESQL); - } else if (type == "cql") { - return (BackendSelector::Type::CQL); - } else { isc_throw(BadValue, "unsupported configuration backend type '" << type << "'"); } @@ -150,8 +147,6 @@ BackendSelector::backendTypeToString(const BackendSelector::Type& type) { return ("mysql"); case BackendSelector::Type::POSTGRESQL: return ("postgresql"); - case BackendSelector::Type::CQL: - return ("cql"); default: ; } diff --git a/src/lib/database/backend_selector.h b/src/lib/database/backend_selector.h index cc2db1527b..a7bea9ba5f 100644 --- a/src/lib/database/backend_selector.h +++ b/src/lib/database/backend_selector.h @@ -62,7 +62,6 @@ public: enum class Type { MYSQL, POSTGRESQL, - CQL, UNSPEC }; diff --git a/src/lib/database/database.dox b/src/lib/database/database.dox index 63c78825bf..959471338f 100644 --- a/src/lib/database/database.dox +++ b/src/lib/database/database.dox @@ -10,8 +10,7 @@ @section databaseMTConsiderations Multi-Threading Consideration for Database MySQL and PostgreSQL provide connection pools which are used to make -lease, host and legal log backends thread safe. Cassandra/CQL is -thread safe by design. +lease, host and legal log backends thread safe. MySQL and PostgreSQL are inter-process safe only when transactions are used (including the MySQL auto-transaction mode which includes queries into diff --git a/src/lib/database/database_connection.cc b/src/lib/database/database_connection.cc index 2c133f3e14..ee940c6a6d 100644 --- a/src/lib/database/database_connection.cc +++ b/src/lib/database/database_connection.cc @@ -226,8 +226,6 @@ DatabaseConnection::toElement(const ParameterMap& params) { (keyword == "connect-timeout") || (keyword == "reconnect-wait-time") || (keyword == "max-reconnect-tries") || - (keyword == "request-timeout") || - (keyword == "tcp-keepalive") || (keyword == "port") || (keyword == "max-row-errors")) { // integer parameters @@ -240,7 +238,6 @@ DatabaseConnection::toElement(const ParameterMap& params) { .arg("integer").arg(keyword).arg(value); } } else if ((keyword == "persist") || - (keyword == "tcp-nodelay") || (keyword == "readonly")) { if (value == "true") { result->set(keyword, isc::data::Element::create(true)); @@ -255,10 +252,6 @@ DatabaseConnection::toElement(const ParameterMap& params) { (keyword == "password") || (keyword == "host") || (keyword == "name") || - (keyword == "contact-points") || - (keyword == "consistency") || - (keyword == "serial-consistency") || - (keyword == "keyspace") || (keyword == "on-fail") || (keyword == "trust-anchor") || (keyword == "cert-file") || diff --git a/src/lib/database/db_exceptions.h b/src/lib/database/db_exceptions.h index 6bc12247e0..e0995212ba 100644 --- a/src/lib/database/db_exceptions.h +++ b/src/lib/database/db_exceptions.h @@ -12,18 +12,6 @@ namespace isc { namespace db { -/// @brief Database statement not applied -/// -/// Cassandra have a concept of mutation (any statement that does change the -/// data, like INSERT, UPDATE or DELETE). Under certain conditions it may be -/// possible that those statements may fail to apply. -class StatementNotApplied : public Exception { -public: - StatementNotApplied(const char* file, size_t line, const char* what) - : isc::Exception(file, line, what) { - } -}; - /// @brief Multiple lease records found where one expected class MultipleRecords : public Exception { public: diff --git a/src/lib/database/db_log.cc b/src/lib/database/db_log.cc index 9f7743a735..8a9d1ab18b 100644 --- a/src/lib/database/db_log.cc +++ b/src/lib/database/db_log.cc @@ -36,12 +36,6 @@ const DbLogger::MessageMap db_message_map = { { MYSQL_START_TRANSACTION, DATABASE_MYSQL_START_TRANSACTION }, { MYSQL_COMMIT, DATABASE_MYSQL_COMMIT }, { MYSQL_ROLLBACK, DATABASE_MYSQL_ROLLBACK }, - - { CQL_DEALLOC_ERROR, DATABASE_CQL_DEALLOC_ERROR }, - { CQL_CONNECTION_BEGIN_TRANSACTION, - DATABASE_CQL_CONNECTION_BEGIN_TRANSACTION }, - { CQL_CONNECTION_COMMIT, DATABASE_CQL_CONNECTION_COMMIT }, - { CQL_CONNECTION_ROLLBACK, DATABASE_CQL_CONNECTION_ROLLBACK } }; isc::log::Logger database_logger("database"); diff --git a/src/lib/database/db_log.h b/src/lib/database/db_log.h index 7c9325acd2..048c885728 100644 --- a/src/lib/database/db_log.h +++ b/src/lib/database/db_log.h @@ -63,11 +63,6 @@ enum DbMessageID { MYSQL_START_TRANSACTION, MYSQL_COMMIT, MYSQL_ROLLBACK, - - CQL_DEALLOC_ERROR, - CQL_CONNECTION_BEGIN_TRANSACTION, - CQL_CONNECTION_COMMIT, - CQL_CONNECTION_ROLLBACK }; ///@} diff --git a/src/lib/database/db_messages.cc b/src/lib/database/db_messages.cc index b2cf7b08cd..6a25cf5b95 100644 --- a/src/lib/database/db_messages.cc +++ b/src/lib/database/db_messages.cc @@ -7,10 +7,6 @@ namespace isc { namespace db { -extern const isc::log::MessageID DATABASE_CQL_CONNECTION_BEGIN_TRANSACTION = "DATABASE_CQL_CONNECTION_BEGIN_TRANSACTION"; -extern const isc::log::MessageID DATABASE_CQL_CONNECTION_COMMIT = "DATABASE_CQL_CONNECTION_COMMIT"; -extern const isc::log::MessageID DATABASE_CQL_CONNECTION_ROLLBACK = "DATABASE_CQL_CONNECTION_ROLLBACK"; -extern const isc::log::MessageID DATABASE_CQL_DEALLOC_ERROR = "DATABASE_CQL_DEALLOC_ERROR"; extern const isc::log::MessageID DATABASE_INVALID_ACCESS = "DATABASE_INVALID_ACCESS"; extern const isc::log::MessageID DATABASE_MYSQL_COMMIT = "DATABASE_MYSQL_COMMIT"; extern const isc::log::MessageID DATABASE_MYSQL_FATAL_ERROR = "DATABASE_MYSQL_FATAL_ERROR"; @@ -31,10 +27,6 @@ extern const isc::log::MessageID DATABASE_TO_JSON_ERROR = "DATABASE_TO_JSON_ERRO namespace { const char* values[] = { - "DATABASE_CQL_CONNECTION_BEGIN_TRANSACTION", "begin transaction on current connection.", - "DATABASE_CQL_CONNECTION_COMMIT", "committing to Cassandra database on current connection.", - "DATABASE_CQL_CONNECTION_ROLLBACK", "rolling back Cassandra database on current connection.", - "DATABASE_CQL_DEALLOC_ERROR", "An error occurred while closing the CQL connection: %1", "DATABASE_INVALID_ACCESS", "invalid database access string: %1", "DATABASE_MYSQL_COMMIT", "committing to MySQL database", "DATABASE_MYSQL_FATAL_ERROR", "Unrecoverable MySQL error occurred: %1 for <%2>, reason: %3 (error code: %4).", diff --git a/src/lib/database/db_messages.h b/src/lib/database/db_messages.h index 4079879a7f..6cfad3189a 100644 --- a/src/lib/database/db_messages.h +++ b/src/lib/database/db_messages.h @@ -8,10 +8,6 @@ namespace isc { namespace db { -extern const isc::log::MessageID DATABASE_CQL_CONNECTION_BEGIN_TRANSACTION; -extern const isc::log::MessageID DATABASE_CQL_CONNECTION_COMMIT; -extern const isc::log::MessageID DATABASE_CQL_CONNECTION_ROLLBACK; -extern const isc::log::MessageID DATABASE_CQL_DEALLOC_ERROR; extern const isc::log::MessageID DATABASE_INVALID_ACCESS; extern const isc::log::MessageID DATABASE_MYSQL_COMMIT; extern const isc::log::MessageID DATABASE_MYSQL_FATAL_ERROR; diff --git a/src/lib/database/db_messages.mes b/src/lib/database/db_messages.mes index 58f0d934b5..d919320948 100644 --- a/src/lib/database/db_messages.mes +++ b/src/lib/database/db_messages.mes @@ -6,22 +6,6 @@ $NAMESPACE isc::db -% DATABASE_CQL_CONNECTION_BEGIN_TRANSACTION begin transaction on current connection. -The server has issued a begin transaction call. - -% DATABASE_CQL_CONNECTION_COMMIT committing to Cassandra database on current connection. -A commit call been issued on the server. For Cassandra, this is a no-op. - -% DATABASE_CQL_CONNECTION_ROLLBACK rolling back Cassandra database on current connection. -The code has issued a rollback call. For Cassandra, this is a no-op. - -% DATABASE_CQL_DEALLOC_ERROR An error occurred while closing the CQL connection: %1 -This is an error message issued when a DHCP server (either V4 or V6) experienced -and error freeing CQL database resources as part of closing its connection to -the Cassandra database. The connection is closed as part of normal server -shutdown. This error is most likely a programmatic issue that is highly -unlikely to occur or negatively impact server operation. - % DATABASE_INVALID_ACCESS invalid database access string: %1 This is logged when an attempt has been made to parse a database access string and the attempt ended in error. The access string in question - which diff --git a/src/lib/database/dbaccess_parser.cc b/src/lib/database/dbaccess_parser.cc index 288c8b931c..caee236282 100644 --- a/src/lib/database/dbaccess_parser.cc +++ b/src/lib/database/dbaccess_parser.cc @@ -52,15 +52,12 @@ DbAccessParser::parse(std::string& access_string, int64_t port = 0; int64_t max_reconnect_tries = 0; int64_t reconnect_wait_time = 0; - int64_t request_timeout = 0; - int64_t tcp_keepalive = 0; int64_t max_row_errors = 0; // 2. Update the copy with the passed keywords. for (std::pair param : database_config->mapValue()) { try { if ((param.first == "persist") || - (param.first == "tcp-nodelay") || (param.first == "readonly")) { values_copy[param.first] = (param.second->boolValue() ? "true" : "false"); @@ -85,16 +82,6 @@ DbAccessParser::parse(std::string& access_string, values_copy[param.first] = boost::lexical_cast(reconnect_wait_time); - } else if (param.first == "request-timeout") { - request_timeout = param.second->intValue(); - values_copy[param.first] = - boost::lexical_cast(request_timeout); - - } else if (param.first == "tcp-keepalive") { - tcp_keepalive = param.second->intValue(); - values_copy[param.first] = - boost::lexical_cast(tcp_keepalive); - } else if (param.first == "port") { port = param.second->intValue(); values_copy[param.first] = @@ -112,10 +99,6 @@ DbAccessParser::parse(std::string& access_string, // password // host // name - // contact-points - // keyspace - // consistency - // serial-consistency // on-fail // trust-anchor // cert-file @@ -149,8 +132,7 @@ DbAccessParser::parse(std::string& access_string, string dbtype = type_ptr->second; if ((dbtype != "memfile") && (dbtype != "mysql") && - (dbtype != "postgresql") && - (dbtype != "cql")) { + (dbtype != "postgresql")) { ConstElementPtr value = database_config->get("type"); isc_throw(DbConfigError, "unknown backend database type: " << dbtype << " (" << value->getPosition() << ")"); @@ -213,24 +195,6 @@ DbAccessParser::parse(std::string& access_string, << "(" << value->getPosition() << ")"); } - // Check that request_timeout value makes sense. - if ((request_timeout < 0) || - (request_timeout > std::numeric_limits::max())) { - ConstElementPtr value = database_config->get("request-timeout"); - isc_throw(DbConfigError, "request-timeout " << request_timeout - << " must be in range 0...MAX_UINT32 (4294967295) " - << "(" << value->getPosition() << ")"); - } - - // Check that tcp_keepalive value makes sense. - if ((tcp_keepalive < 0) || - (tcp_keepalive > std::numeric_limits::max())) { - ConstElementPtr value = database_config->get("tcp-keepalive"); - isc_throw(DbConfigError, "tcp-keepalive " << tcp_keepalive - << " must be in range 0...MAX_UINT32 (4294967295) " - << "(" << value->getPosition() << ")"); - } - // 4. If all is OK, update the stored keyword/value pairs. We do this by // swapping contents - values_copy is destroyed immediately after the // operation (when the method exits), so we are not interested in its new diff --git a/src/lib/database/tests/backend_selector_unittest.cc b/src/lib/database/tests/backend_selector_unittest.cc index d30941b069..d66ca78707 100644 --- a/src/lib/database/tests/backend_selector_unittest.cc +++ b/src/lib/database/tests/backend_selector_unittest.cc @@ -154,8 +154,6 @@ TEST(BackendSelectorTest, stringToBackendType) { BackendSelector::stringToBackendType("mysql")); EXPECT_EQ(BackendSelector::Type::POSTGRESQL, BackendSelector::stringToBackendType("postgresql")); - EXPECT_EQ(BackendSelector::Type::CQL, - BackendSelector::stringToBackendType("cql")); EXPECT_THROW(BackendSelector::stringToBackendType("unsupported"), BadValue); } @@ -166,8 +164,6 @@ TEST(BackendSelectorTest, backendTypeToString) { BackendSelector::backendTypeToString(BackendSelector::Type::MYSQL)); EXPECT_EQ("postgresql", BackendSelector::backendTypeToString(BackendSelector::Type::POSTGRESQL)); - EXPECT_EQ("cql", - BackendSelector::backendTypeToString(BackendSelector::Type::CQL)); } // Tests toElement from backend selectors. diff --git a/src/lib/database/tests/database_connection_unittest.cc b/src/lib/database/tests/database_connection_unittest.cc index 12a4b9bd40..dbd3cae9ed 100644 --- a/src/lib/database/tests/database_connection_unittest.cc +++ b/src/lib/database/tests/database_connection_unittest.cc @@ -525,11 +525,7 @@ TEST(DatabaseConnection, toElementDbAccessStringValid) { const char* configs[] = { "{\n" "\"connect-timeout\" : 200, \n" - "\"contact-points\": \"contact_str\", \n" - "\"consistency\": \"quorum\", \n" "\"on-fail\": \"stop-retry-exit\", \n" - "\"serial-consistency\": \"serial\", \n" - "\"keyspace\": \"keyspace_str\", \n" "\"lfc-interval\" : 100, \n" "\"host\": \"whatevah\", \n" "\"max-reconnect-tries\": 5, \n" @@ -539,9 +535,6 @@ TEST(DatabaseConnection, toElementDbAccessStringValid) { "\"port\" : 300, \n" "\"readonly\" : false, \n" "\"reconnect-wait-time\": 99, \n" - "\"request-timeout\" : 100, \n" - "\"tcp-keepalive\": 101, \n" - "\"tcp-nodelay\": false, \n" "\"type\": \"memfile\", \n" "\"user\": \"user_str\", \n" "\"max-row-errors\": 50, \n" diff --git a/src/lib/dhcpsrv/Makefile.am b/src/lib/dhcpsrv/Makefile.am index 1a4cb7805e..6bf83ccfcd 100644 --- a/src/lib/dhcpsrv/Makefile.am +++ b/src/lib/dhcpsrv/Makefile.am @@ -19,9 +19,6 @@ endif if HAVE_PGSQL AM_CPPFLAGS += $(PGSQL_CPPFLAGS) endif -if HAVE_CQL -AM_CPPFLAGS += $(CQL_CPPFLAGS) -endif AM_CXXFLAGS = $(KEA_CXXFLAGS) @@ -140,11 +137,6 @@ libkea_dhcpsrv_la_SOURCES += pgsql_host_data_source.cc pgsql_host_data_source.h libkea_dhcpsrv_la_SOURCES += pgsql_lease_mgr.cc pgsql_lease_mgr.h endif -if HAVE_CQL -libkea_dhcpsrv_la_SOURCES += cql_host_data_source.cc cql_host_data_source.h -libkea_dhcpsrv_la_SOURCES += cql_lease_mgr.cc cql_lease_mgr.h -endif - libkea_dhcpsrv_la_SOURCES += pool.cc pool.h libkea_dhcpsrv_la_SOURCES += resource_handler.cc resource_handler.h libkea_dhcpsrv_la_SOURCES += sanity_checker.cc sanity_checker.h @@ -211,9 +203,6 @@ endif if HAVE_PGSQL libkea_dhcpsrv_la_LIBADD += $(top_builddir)/src/lib/pgsql/libkea-pgsql.la endif -if HAVE_CQL -libkea_dhcpsrv_la_LIBADD += $(top_builddir)/src/lib/cql/libkea-cql.la -endif libkea_dhcpsrv_la_LIBADD += $(top_builddir)/src/lib/database/libkea-database.la libkea_dhcpsrv_la_LIBADD += $(top_builddir)/src/lib/asiolink/libkea-asiolink.la @@ -234,9 +223,6 @@ endif if HAVE_PGSQL libkea_dhcpsrv_la_LDFLAGS += $(PGSQL_LIBS) endif -if HAVE_CQL -libkea_dhcpsrv_la_LDFLAGS += $(CQL_LIBS) -endif # The message file should be in the distribution EXTRA_DIST += alloc_engine_messages.mes @@ -377,12 +363,6 @@ libkea_dhcpsrv_include_HEADERS = \ utils.h \ writable_host_data_source.h -if HAVE_CQL -libkea_dhcpsrv_include_HEADERS += \ - cql_host_data_source.h \ - cql_lease_mgr.h -endif - if HAVE_MYSQL libkea_dhcpsrv_include_HEADERS += \ mysql_host_data_source.h \ diff --git a/src/lib/dhcpsrv/benchmarks/Makefile.am b/src/lib/dhcpsrv/benchmarks/Makefile.am index b2b15bf4fb..cb61846f26 100644 --- a/src/lib/dhcpsrv/benchmarks/Makefile.am +++ b/src/lib/dhcpsrv/benchmarks/Makefile.am @@ -35,11 +35,6 @@ run_benchmarks_SOURCES += pgsql_lease_mgr_benchmark.cc run_benchmarks_SOURCES += pgsql_host_data_source_benchmark.cc endif -if HAVE_CQL -run_benchmarks_SOURCES += cql_lease_mgr_benchmark.cc -run_benchmarks_SOURCES += cql_host_data_source_benchmark.cc -endif - run_benchmarks_CPPFLAGS = $(AM_CPPFLAGS) $(BENCHMARK_INCLUDES) $(BENCHMARK_CPPFLAGS) if HAVE_MYSQL @@ -50,10 +45,6 @@ if HAVE_PGSQL run_benchmarks_CPPFLAGS += $(PGSQL_CPPFLAGS) endif -if HAVE_CQL -run_benchmarks_CPPFLAGS += $(CQL_CPPFLAGS) -endif - run_benchmarks_CXXFLAGS = $(AM_CXXFLAGS) run_benchmarks_LDFLAGS = $(AM_LDFLAGS) $(CRYPTO_LDFLAGS) $(BENCHMARK_LDFLAGS) @@ -66,10 +57,6 @@ if HAVE_PGSQL run_benchmarks_LDFLAGS += $(PGSQL_LIBS) endif -if HAVE_CQL -run_benchmarks_LDFLAGS += $(CQL_LIBS) -endif - run_benchmarks_LDADD = $(top_builddir)/src/lib/dhcpsrv/testutils/libdhcpsrvtest.la run_benchmarks_LDADD += $(top_builddir)/src/lib/dhcpsrv/libkea-dhcpsrv.la run_benchmarks_LDADD += $(top_builddir)/src/lib/process/libkea-process.la @@ -90,10 +77,6 @@ if HAVE_PGSQL run_benchmarks_LDADD += $(top_builddir)/src/lib/pgsql/testutils/libpgsqltest.la endif -if HAVE_CQL -run_benchmarks_LDADD += $(top_builddir)/src/lib/cql/testutils/libcqltest.la -endif - run_benchmarks_LDADD += $(top_builddir)/src/lib/database/libkea-database.la run_benchmarks_LDADD += $(top_builddir)/src/lib/cc/libkea-cc.la run_benchmarks_LDADD += $(top_builddir)/src/lib/asiolink/libkea-asiolink.la @@ -110,10 +93,6 @@ if HAVE_PGSQL run_benchmarks_LDADD += $(PGSQL_LIBS) endif -if HAVE_CQL -run_benchmarks_LDADD += $(CQL_LIBS) -endif - run_benchmarks_LDADD += $(LOG4CPLUS_LIBS) run_benchmarks_LDADD += $(CRYPTO_LIBS) run_benchmarks_LDADD += $(BOOST_LIBS) diff --git a/src/lib/dhcpsrv/benchmarks/benchmarks.dox b/src/lib/dhcpsrv/benchmarks/benchmarks.dox index 969d65ec2b..3582079f9e 100644 --- a/src/lib/dhcpsrv/benchmarks/benchmarks.dox +++ b/src/lib/dhcpsrv/benchmarks/benchmarks.dox @@ -22,15 +22,13 @@ $ make The benchmarks are built in @b src/lib/dhcpsrv/benchmarks directory. Note that the benchmarks are backend-specific, so please make sure you -enable the backends you want to measure (See --with-mysql, ---with-pgsql, --with-cql parameters for configure). Once the -benchmark is built, you can run specific benchmarks. Make sure you -have the environment ready for use, i.e. the actual database backend -is set up, the DB or keyspace is created. The setup is the same as for -running unit-tests. DB name or keyspace should be keatest, and -username keatest, password keatest should give you full write access -to the database. Any data present in the DB before the tests will be -removed. +enable the backends you want to measure (See --with-mysql and --with-pgsql +parameters for configure). Once the benchmark is built, you can run specific +benchmarks. Make sure you have the environment ready for use, i.e. the actual +database backend is set up, the DB is created. The setup is the same +as for running unit-tests. DB name should be keatest, and username +keatest, password keatest should give you full write access to the database. +Any data present in the DB before the tests will be removed. To get a list of available benchmarks, use the following command: @@ -47,8 +45,8 @@ specify its name. Wildcards are supported: # This will run one specific benchmark $ ./run-benchmarks --benchmark_filter=MemfileLeaseMgrBenchmark/insertLeases4/512 -# This will run all benchmarks related to Cassandra: -$ ./run-benchmarks --benchmark_filter=CqlHostDataSourceBenchmark +# This will run all benchmarks related to MySql: +$ ./run-benchmarks --benchmark_filter=MySqlHostDataSourceBenchmark @endcode diff --git a/src/lib/dhcpsrv/benchmarks/cql_host_data_source_benchmark.cc b/src/lib/dhcpsrv/benchmarks/cql_host_data_source_benchmark.cc deleted file mode 100644 index 91c644ef9f..0000000000 --- a/src/lib/dhcpsrv/benchmarks/cql_host_data_source_benchmark.cc +++ /dev/null @@ -1,200 +0,0 @@ -// Copyright (C) 2018-2019 Internet Systems Consortium, Inc. ("ISC") -// Copyright (C) 2017 Deutsche Telekom AG. -// -// Authors: Andrei Pavel -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include - -#include - -#include -#include -#include -#include - -#include - -using namespace isc::db::test; -using namespace isc::dhcp; -using namespace isc::dhcp::bench; -using namespace std; - -namespace { - -/// @brief This is a fixture class used for benchmarking Cassandra host backend -class CqlHostDataSourceBenchmark : public GenericHostDataSourceBenchmark { -public: - /// @brief Setup routine. - /// - /// It cleans up schema and recreates tables, then instantiates HostMgr - void SetUp(::benchmark::State const&) override { - // Ensure we have the proper schema with no transient data. - createCqlSchema(); - try { - HostMgr::create(); - HostMgr::addBackend(validCqlConnectionString()); - } catch (...) { - cerr << "ERROR: unable to open database" << endl; - throw; - } - hdsptr_ = HostMgr::instance().getHostDataSource(); - } - - void SetUp(::benchmark::State& s) override { - ::benchmark::State const& cs = s; - SetUp(cs); - } - - /// @brief Cleans up after the test. - void TearDown(::benchmark::State const&) override { - try { - hdsptr_->rollback(); - } catch (...) { - cerr << "WARNING: rollback has failed, this is expected if database" - " is opened in read-only mode, continuing..." - << endl; - } - HostMgr::delBackend("cql"); - // If data wipe enabled, delete transient data otherwise destroy the schema - destroyCqlSchema(false, true); - } - - void TearDown(::benchmark::State& s) override { - ::benchmark::State const& cs = s; - TearDown(cs); - } -}; - -/// Defines steps necessary for conducting a benchmark that measures -/// hosts insertion. -BENCHMARK_DEFINE_F(CqlHostDataSourceBenchmark, insertHosts)(benchmark::State& state) { - const size_t host_count = state.range(0); - while (state.KeepRunning()) { - setUp(state, host_count); - insertHosts(); - } -} - -/// Defines steps necessary for conducting a benchmark that measures -/// hosts retrieval by getAll4(hw-addr, duid) call. -BENCHMARK_DEFINE_F(CqlHostDataSourceBenchmark, getAll)(benchmark::State& state) { - const size_t host_count = state.range(0); - while (state.KeepRunning()) { - setUpWithInserts(state, host_count); - benchGetAll(); - } -} - -/// Defines steps necessary for conducting a benchmark that measures -/// hosts retrieval by getAll(v4-reservation) call. -BENCHMARK_DEFINE_F(CqlHostDataSourceBenchmark, getAllv4Resv)(benchmark::State& state) { - const size_t host_count = state.range(0); - while (state.KeepRunning()) { - setUpWithInserts(state, host_count); - getAllv4Resv(); - } -} - -/// Defines steps necessary for conducting a benchmark that measures -/// hosts retrieval by get4(identifier-type, identifier, subnet-id) call. -BENCHMARK_DEFINE_F(CqlHostDataSourceBenchmark, get4IdentifierSubnetId)(benchmark::State& state) { - const size_t host_count = state.range(0); - while (state.KeepRunning()) { - setUpWithInserts(state, host_count); - benchGet4IdentifierSubnetId(); - } -} - -/// Defines steps necessary for conducting a benchmark that measures -/// hosts retrieval by get4(subnet-id, v4-reservation) call. -BENCHMARK_DEFINE_F(CqlHostDataSourceBenchmark, get4SubnetIdv4Resrv)(benchmark::State& state) { - const size_t host_count = state.range(0); - while (state.KeepRunning()) { - setUpWithInserts(state, host_count); - benchGet4SubnetIdv4Resrv(); - } -} - -/// Defines steps necessary for conducting a benchmark that measures -/// hosts retrieval by get6(subnet-id, identifier-type, identifier) call. -BENCHMARK_DEFINE_F(CqlHostDataSourceBenchmark, get6IdentifierSubnetId)(benchmark::State& state) { - const size_t host_count = state.range(0); - while (state.KeepRunning()) { - setUpWithInserts(state, host_count); - benchGet6IdentifierSubnetId(); - } -} - -/// Defines steps necessary for conducting a benchmark that measures -/// hosts retrieval by get6(subnet-id, ip-address) call. -BENCHMARK_DEFINE_F(CqlHostDataSourceBenchmark, get6SubnetIdAddr)(benchmark::State& state) { - const size_t host_count = state.range(0); - while (state.KeepRunning()) { - setUpWithInserts(state, host_count); - benchGet6SubnetIdAddr(); - } -} - -/// Defines steps necessary for conducting a benchmark that measures -/// hosts retrieval by get6(ip-prefix, prefix-len) call. -BENCHMARK_DEFINE_F(CqlHostDataSourceBenchmark, get6Prefix)(benchmark::State& state) { - const size_t host_count = state.range(0); - while (state.KeepRunning()) { - setUpWithInserts(state, host_count); - benchGet6Prefix(); - } -} - -/// Defines parameters necessary for running a benchmark that measures -/// hosts insertion. -BENCHMARK_REGISTER_F(CqlHostDataSourceBenchmark, insertHosts) - ->Range(MIN_HOST_COUNT, MAX_HOST_COUNT)->Unit(UNIT); - -/// Defines parameters necessary for running a benchmark that measures -/// hosts retrieval by getAll4(hw-addr, duid) call. -BENCHMARK_REGISTER_F(CqlHostDataSourceBenchmark, getAll) - ->Range(MIN_HOST_COUNT, MAX_HOST_COUNT)->Unit(UNIT); - -/// Defines parameters necessary for running a benchmark that measures -/// hosts retrieval by getAll(v4-reservation) call. -BENCHMARK_REGISTER_F(CqlHostDataSourceBenchmark, getAllv4Resv) - ->Range(MIN_HOST_COUNT, MAX_HOST_COUNT)->Unit(UNIT); - -/// Defines parameters necessary for running a benchmark that measures -/// hosts retrieval by get4(identifier-type, identifier, subnet-id) call. -BENCHMARK_REGISTER_F(CqlHostDataSourceBenchmark, get4IdentifierSubnetId) - ->Range(MIN_HOST_COUNT, MAX_HOST_COUNT)->Unit(UNIT); - -/// Defines parameters necessary for running a benchmark that measures -/// hosts retrieval by get4(subnet-id, v4-reservation) call. -BENCHMARK_REGISTER_F(CqlHostDataSourceBenchmark, get4SubnetIdv4Resrv) - ->Range(MIN_HOST_COUNT, MAX_HOST_COUNT)->Unit(UNIT); - -/// Defines parameters necessary for running a benchmark that measures -/// hosts retrieval by get6(subnet-id, identifier-type, identifier) call. -BENCHMARK_REGISTER_F(CqlHostDataSourceBenchmark, get6IdentifierSubnetId) - ->Range(MIN_HOST_COUNT, MAX_HOST_COUNT)->Unit(UNIT); - -/// Defines parameters necessary for running a benchmark that measures -/// hosts retrieval by get6(subnet-id, ip-address) call. -BENCHMARK_REGISTER_F(CqlHostDataSourceBenchmark, get6SubnetIdAddr) - ->Range(MIN_HOST_COUNT, MAX_HOST_COUNT)->Unit(UNIT); - -/// Defines parameters necessary for running a benchmark that measures -/// hosts retrieval by get6(ip-prefix, prefix-len) call. -BENCHMARK_REGISTER_F(CqlHostDataSourceBenchmark, get6Prefix) - ->Range(MIN_HOST_COUNT, MAX_HOST_COUNT)->Unit(UNIT); - -} // namespace diff --git a/src/lib/dhcpsrv/benchmarks/cql_lease_mgr_benchmark.cc b/src/lib/dhcpsrv/benchmarks/cql_lease_mgr_benchmark.cc deleted file mode 100644 index 2466de6ffb..0000000000 --- a/src/lib/dhcpsrv/benchmarks/cql_lease_mgr_benchmark.cc +++ /dev/null @@ -1,268 +0,0 @@ -// Copyright (C) 2018-2019 Internet Systems Consortium, Inc. ("ISC") -// Copyright (C) 2017 Deutsche Telekom AG. -// -// Authors: Andrei Pavel -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include - -#include - -#include -#include -#include - -using namespace isc::db::test; -using namespace isc::dhcp; -using namespace isc::dhcp::bench; -using namespace std; - -namespace { - -/// @brief This is a fixture class used for benchmarking Cassandra lease backend -class CqlLeaseMgrBenchmark : public GenericLeaseMgrBenchmark { -public: - /// @brief Setup routine. - /// - /// It cleans up schema and recreates tables, then instantiates LeaseMgr - void SetUp(::benchmark::State const&) override { - // Ensure we have the proper schema with no transient data. - createCqlSchema(); - try { - LeaseMgrFactory::destroy(); - LeaseMgrFactory::create(validCqlConnectionString()); - } catch (...) { - cerr << "ERROR: unable to open database" << endl; - throw; - } - lmptr_ = &(LeaseMgrFactory::instance()); - } - - void SetUp(::benchmark::State& s) override { - ::benchmark::State const& cs = s; - SetUp(cs); - } - - /// @brief Cleans up after the test. - void TearDown(::benchmark::State const&) override { - try { - lmptr_->rollback(); - } catch (...) { - cerr << "WARNING: rollback has failed, this is expected if database" - " is opened in read-only mode, continuing..." - << endl; - } - LeaseMgrFactory::destroy(); - // If data wipe enabled, delete transient data otherwise destroy the schema - destroyCqlSchema(false, true); - } - - void TearDown(::benchmark::State& s) override { - ::benchmark::State const& cs = s; - TearDown(cs); - } -}; - -// Defines a benchmark that measures IPv4 leases insertion. -BENCHMARK_DEFINE_F(CqlLeaseMgrBenchmark, insertLeases4)(benchmark::State& state) { - const size_t lease_count = state.range(0); - while (state.KeepRunning()) { - setUp4(state, lease_count); - benchInsertLeases4(); - } -} - -// Defines a benchmark that measures IPv4 leases update. -BENCHMARK_DEFINE_F(CqlLeaseMgrBenchmark, updateLeases4)(benchmark::State& state) { - const size_t lease_count = state.range(0); - while (state.KeepRunning()) { - setUpWithInserts4(state, lease_count); - benchUpdateLeases4(); - } -} - -// Defines a benchmark that measures IPv4 leases retrieval by address. -BENCHMARK_DEFINE_F(CqlLeaseMgrBenchmark, getLease4_address)(benchmark::State& state) { - const size_t lease_count = state.range(0); - while (state.KeepRunning()) { - setUpWithInserts4(state, lease_count); - benchGetLease4_address(); - } -} - -// Defines a benchmark that measures IPv4 leases retrieval by hardware address. -BENCHMARK_DEFINE_F(CqlLeaseMgrBenchmark, getLease4_hwaddr)(benchmark::State& state) { - const size_t lease_count = state.range(0); - while (state.KeepRunning()) { - setUpWithInserts4(state, lease_count); - benchGetLease4_hwaddr(); - } -} - -// Defines a benchmark that measures IPv4 leases retrieval by hardware address -// and subnet-id. -BENCHMARK_DEFINE_F(CqlLeaseMgrBenchmark, getLease4_hwaddr_subnetid)(benchmark::State& state) { - const size_t lease_count = state.range(0); - while (state.KeepRunning()) { - setUpWithInserts4(state, lease_count); - benchGetLease4_hwaddr_subnetid(); - } -} - -// Defines a benchmark that measures IPv4 leases retrieval by client-id. -BENCHMARK_DEFINE_F(CqlLeaseMgrBenchmark, getLease4_clientid)(benchmark::State& state) { - const size_t lease_count = state.range(0); - while (state.KeepRunning()) { - setUpWithInserts4(state, lease_count); - benchGetLease4_clientid(); - } -} - -// Defines a benchmark that measures IPv4 leases retrieval by client-id and -// subnet-id. -BENCHMARK_DEFINE_F(CqlLeaseMgrBenchmark, getLease4_clientid_subnetid)(benchmark::State& state) { - const size_t lease_count = state.range(0); - while (state.KeepRunning()) { - setUpWithInserts4(state, lease_count); - benchGetLease4_clientid_subnetid(); - } -} - -// Defines a benchmark that measures retrieval of expired IPv4 leases. -BENCHMARK_DEFINE_F(CqlLeaseMgrBenchmark, getExpiredLeases4)(benchmark::State& state) { - const size_t lease_count = state.range(0); - while (state.KeepRunning()) { - setUpWithInserts4(state, lease_count); - benchGetExpiredLeases4(); - } -} - -// Defines a benchmark that measures IPv6 leases insertion. -BENCHMARK_DEFINE_F(CqlLeaseMgrBenchmark, insertLeases6)(benchmark::State& state) { - const size_t lease_count = state.range(0); - while (state.KeepRunning()) { - setUp6(state, lease_count); - benchInsertLeases6(); - } -} - -// Defines a benchmark that measures IPv6 leases update. -BENCHMARK_DEFINE_F(CqlLeaseMgrBenchmark, updateLeases6)(benchmark::State& state) { - const size_t lease_count = state.range(0); - while (state.KeepRunning()) { - setUpWithInserts6(state, lease_count); - benchUpdateLeases6(); - } -} - -// Defines a benchmark that measures IPv6 leases retrieval by type and address. -BENCHMARK_DEFINE_F(CqlLeaseMgrBenchmark, getLease6_type_address)(benchmark::State& state) { - const size_t lease_count = state.range(0); - while (state.KeepRunning()) { - setUpWithInserts6(state, lease_count); - benchGetLease6_type_address(); - } -} - -// Defines a benchmark that measures IPv6 leases retrieval by type, duid and iaid. -BENCHMARK_DEFINE_F(CqlLeaseMgrBenchmark, getLease6_type_duid_iaid)(benchmark::State& state) { - const size_t lease_count = state.range(0); - while (state.KeepRunning()) { - setUpWithInserts6(state, lease_count); - benchGetLease6_type_duid_iaid(); - } -} - -// Defines a benchmark that measures IPv6 leases retrieval by lease type, duid, iaid -// and subnet-id. -BENCHMARK_DEFINE_F(CqlLeaseMgrBenchmark, getLease6_type_duid_iaid_subnetid) - (benchmark::State& state) { - const size_t lease_count = state.range(0); - while (state.KeepRunning()) { - setUpWithInserts6(state, lease_count); - benchGetLease6_type_duid_iaid_subnetid(); - } -} - -// Defines a benchmark that measures retrieval of expired IPv6 leases. -BENCHMARK_DEFINE_F(CqlLeaseMgrBenchmark, getExpiredLeases6)(benchmark::State& state) { - const size_t lease_count = state.range(0); - while (state.KeepRunning()) { - setUpWithInserts6(state, lease_count); - benchGetExpiredLeases6(); - } -} - -/// The following macros define run parameters for previously defined -/// Cassandra benchmarks. - -/// A benchmark that measures IPv4 leases insertion. -BENCHMARK_REGISTER_F(CqlLeaseMgrBenchmark, insertLeases4) - ->Range(MIN_LEASE_COUNT, MAX_LEASE_COUNT)->Unit(UNIT); - -/// A benchmark that measures IPv4 leases update. -BENCHMARK_REGISTER_F(CqlLeaseMgrBenchmark, updateLeases4) - ->Range(MIN_LEASE_COUNT, MAX_LEASE_COUNT)->Unit(UNIT); - -/// A benchmark that measures IPv4 lease retrieval by IP address. -BENCHMARK_REGISTER_F(CqlLeaseMgrBenchmark, getLease4_address) - ->Range(MIN_LEASE_COUNT, MAX_LEASE_COUNT)->Unit(UNIT); - -/// A benchmark that measures IPv4 lease retrieval by hardware address. -BENCHMARK_REGISTER_F(CqlLeaseMgrBenchmark, getLease4_hwaddr) - ->Range(MIN_LEASE_COUNT, MAX_LEASE_COUNT)->Unit(UNIT); - -/// A benchmark that measures IPv4 lease retrieval by hardware address and a -/// subnet-id. -BENCHMARK_REGISTER_F(CqlLeaseMgrBenchmark, getLease4_hwaddr_subnetid) - ->Range(MIN_LEASE_COUNT, MAX_LEASE_COUNT)->Unit(UNIT); - -/// A benchmark that measures IPv4 lease retrieval by client-id. -BENCHMARK_REGISTER_F(CqlLeaseMgrBenchmark, getLease4_clientid) - ->Range(MIN_LEASE_COUNT, MAX_LEASE_COUNT)->Unit(UNIT); - -/// A benchmark that measures IPv4 lease retrieval by client-id and subnet-id. -BENCHMARK_REGISTER_F(CqlLeaseMgrBenchmark, getLease4_clientid_subnetid) - ->Range(MIN_LEASE_COUNT, MAX_LEASE_COUNT)->Unit(UNIT); - -/// A benchmark that measures expired IPv4 leases retrieval. -BENCHMARK_REGISTER_F(CqlLeaseMgrBenchmark, getExpiredLeases4) - ->Range(MIN_LEASE_COUNT, MAX_LEASE_COUNT)->Unit(UNIT); - -/// A benchmark that measures IPv6 leases insertion. -BENCHMARK_REGISTER_F(CqlLeaseMgrBenchmark, insertLeases6) - ->Range(MIN_LEASE_COUNT, MAX_LEASE_COUNT)->Unit(UNIT); - -/// A benchmark that measures IPv6 leases update. -BENCHMARK_REGISTER_F(CqlLeaseMgrBenchmark, updateLeases6) - ->Range(MIN_LEASE_COUNT, MAX_LEASE_COUNT)->Unit(UNIT); - -/// A benchmark that measures IPv6 lease retrieval by lease type and IP address. -BENCHMARK_REGISTER_F(CqlLeaseMgrBenchmark, getLease6_type_address) - ->Range(MIN_LEASE_COUNT, MAX_LEASE_COUNT)->Unit(UNIT); - -/// A benchmark that measures IPv6 lease retrieval by lease type, duid and iaid. -BENCHMARK_REGISTER_F(CqlLeaseMgrBenchmark, getLease6_type_duid_iaid) - ->Range(MIN_LEASE_COUNT, MAX_LEASE_COUNT)->Unit(UNIT); - -/// A benchmark that measures IPv6 lease retrieval by lease type, duid, iaid and -/// subnet-id. -BENCHMARK_REGISTER_F(CqlLeaseMgrBenchmark, getLease6_type_duid_iaid_subnetid) - ->Range(MIN_LEASE_COUNT, MAX_LEASE_COUNT)->Unit(UNIT); - -/// A benchmark that measures expired IPv6 leases retrieval. -BENCHMARK_REGISTER_F(CqlLeaseMgrBenchmark, getExpiredLeases6) - ->Range(MIN_LEASE_COUNT, MAX_LEASE_COUNT)->Unit(UNIT); - -} // namespace diff --git a/src/lib/dhcpsrv/cql_host_data_source.cc b/src/lib/dhcpsrv/cql_host_data_source.cc deleted file mode 100644 index 9ddfed6aaf..0000000000 --- a/src/lib/dhcpsrv/cql_host_data_source.cc +++ /dev/null @@ -1,3729 +0,0 @@ -// Copyright (C) 2018-2022 Internet Systems Consortium, Inc. ("ISC") -// Copyright (C) 2016-2017 Deutsche Telekom AG. -// -// Author: Andrei Pavel -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include // for uint64_t - -#include // for boost::is_any_of -#include // for split -#include // for BOOST_ASSERT -#include // for std::unordered_map - -#include // for size_t, std::stringstream -#include // for std::unique_ptr -#include // for std::string - -using namespace isc::asiolink; -using namespace isc::db; -using namespace isc::dhcp; -using namespace isc::util; -using namespace isc::data; - -namespace { - -/// @brief Host identifier consisting of DUID or hardware address -typedef std::vector HostIdentifier; - -/// @brief key for HostMap containing objects which uniquely identify a -/// host: host identifier, host identifier type, subnets for IPv4 and IPv6 -/// and the IPv4 reservation -typedef std:: - tuple HostKey; - -/// @brief Identifies components of the host key -enum HostKeyComponent { - HOST_IDENTIFIER, - HOST_IDENTIFIER_TYPE, - IPv4_SUBNET_ID, - IPv6_SUBNET_ID, - IPv4_RESERVATION -}; - -/// @brief Map used to merge reservations and options into a single host on -/// retrieve from database -typedef std::unordered_map> HostMap; - -/// @brief A pair of (host key and a pointer to a host) -typedef std::pair HostPair; - -/// @brief Wrapper used to specify option space alongside option descriptor -struct OptionWrapper { - OptionWrapper(OptionDescriptorPtr option_descriptor, std::string option_space) - : option_descriptor_(option_descriptor), option_space_(option_space) { - } - OptionDescriptorPtr option_descriptor_; - std::string option_space_; -}; - -/// @brief Numeric value representing the last supported identifier. This value -/// is used to validate whether the identifier type stored in a database is -/// within bounds of supported identifiers. -static constexpr cass_int32_t MAX_IDENTIFIER_TYPE = static_cast(Host::IDENT_FLEX); - -/// @{ -/// @brief Invalid values in the Cassandra database -static constexpr char NULL_DHCP4_SERVER_HOSTNAME[] = ""; -static constexpr char NULL_DHCP4_BOOT_FILE_NAME[] = ""; -static constexpr char NULL_USER_CONTEXT[] = ""; -static constexpr char NULL_RESERVED_IPV6_PREFIX_ADDRESS[] = "::"; -static constexpr cass_int32_t NULL_RESERVED_IPV6_PREFIX_LENGTH = 0; -static constexpr cass_int32_t NULL_RESERVED_IPV6_PREFIX_ADDRESS_TYPE = -1; -static constexpr cass_int32_t NULL_IAID = -1; -static constexpr cass_int32_t NULL_OPTION_UNIVERSE = -1; -static constexpr cass_int32_t NULL_OPTION_CODE = -1; -static const CassBlob NULL_OPTION_VALUE = CassBlob(); -static constexpr char NULL_OPTION_FORMATTED_VALUE[] = ""; -static constexpr char NULL_OPTION_SPACE[] = ""; -static constexpr cass_bool_t NULL_OPTION_IS_PERSISTENT = cass_false; -static constexpr char NULL_OPTION_CLIENT_CLASS[] = ""; -static constexpr cass_int32_t NULL_OPTION_SUBNET_ID = -1; -static constexpr char NULL_OPTION_USER_CONTEXT[] = ""; -static constexpr cass_int32_t NULL_OPTION_SCOPE_ID = -1; -/// @} - -/// @brief Invalid reservation used to check for an invalid IPv6Resrv formed -/// from database values. -static const IPv6Resrv NULL_IPV6_RESERVATION = - IPv6Resrv(IPv6Resrv::TYPE_NA, IOAddress("::"), 128); - -} // namespace - -namespace isc { -namespace dhcp { - -/// @brief Provides mechanisms for sending and retrieving data from the -/// hosts table. -class CqlHostExchange : public virtual CqlExchange { -public: - /// @brief Constructor - /// - /// Specifies table columns. - CqlHostExchange(); - - /// @brief Virtual destructor. - virtual ~CqlHostExchange(); - - /// @brief Binds member variables to data array to receive @ref Host data. - /// - /// Creates a bind array to receive @ref Host data from the Cassandra - /// database. After data is successfully received, @ref retrieve() can be - /// called to retrieve the @ref Host object. Called in @ref - /// db::CqlExchange::executeSelect(). - /// - /// @param data array of objects representing data being retrieved - /// @param statement_tag prepared statement being executed; defaults to an - /// invalid statement - virtual void - createBindForSelect(AnyArray& data, StatementTag statement_tag = NULL) override; - - /// @brief Sets the exchange members with data of @ref Host. - /// - /// Fills in the members of the exchange with data from @ref Host object. - /// - /// @param host @ref Host object being modified in the Cassandra database - /// @param subnet_id identifier of the subnet to which the host belongs - /// @param reservation IPv6 reservation belonging to the host - /// @param option_space option space - /// @param option_descriptor structure used to hold option information - void prepareExchange(const HostPtr& host, - const Optional& subnet_id, - const IPv6Resrv* const reservation, - const std::string& option_space, - const OptionDescriptor& option_descriptor); - - /// @brief Binds @ref Host to data array to send data to the Cassandra - /// database. - /// - /// Fills in the bind array for sending data stored in the @ref Host object - /// to the database. - /// - /// @param host @ref Host object being added to the Cassandra database - /// @param subnet_id identifier of the subnet to which the host belongs - /// @param reservation IPv6 reservation belonging to the host - /// @param option_space option space - /// @param option_descriptor structure used to hold option information - /// @param statement_tag tag of the statement being executed - /// @param data array being filled with data from to the Host object - void createBindForMutation(const HostPtr& host, - const Optional& subnet_id, - const IPv6Resrv* const reservation, - const std::string& option_space, - const OptionDescriptor& option_descriptor, - StatementTag statement_tag, - AnyArray& data); - - /// @brief Binds @ref Host to data array to send data to the Cassandra - /// database. - /// - /// Fills in the bind array for sending data stored in the @ref Host object - /// to the database. - /// - /// @param host @ref Host object being deleted from the Cassandra database - /// @param subnet_id identifier of the subnet to which the host belongs - /// @param reservation IPv6 reservation belonging to the host - /// @param option_space option space - /// @param option_descriptor structure used to hold option information - /// @param statement_tag tag of the statement being executed - /// @param data array being filled with data from to the Host object - void createBindForDelete(const HostPtr& host, - const Optional& subnet_id, - const IPv6Resrv* const reservation, - const std::string& option_space, - const OptionDescriptor& option_descriptor, - StatementTag statement_tag, - AnyArray& data); - - /// @brief Create unique hash for storage in table id. - /// - /// Hash function used for creating a pseudo-unique hash from member - /// values which uniquely determine an entry in the table. Uses FNV-1a - /// on 64 bits. - /// - /// The primary key clustering column aggregates: host_identifier, - /// host_identifier_type, host_ipv4_subnet_id, host_ipv6_subnet_id, - /// host_ipv4_address, reserved_ipv6_prefix_address, - /// reserved_ipv6_prefix_length, option_code, option_space. - uint64_t hashIntoId() const; - - /// @brief Create unique key for storage in table key. - /// - /// The primary key partition key aggregates: host_identifier, - /// host_identifier_type, host_ipv4_subnet_id, host_ipv6_subnet_id, - /// host_ipv4_address - uint64_t hashIntoKey() const; - - /// @brief Create unique key string for a host. - /// - /// The primary key partition key aggregates: host_identifier, - /// host_identifier_type, host_ipv4_subnet_id, host_ipv6_subnet_id, - /// host_ipv4_address - std::string hostKey() const; - - /// @brief Copy received data into Host object - /// - /// Copies information about the host into a newly created @ref Host object - /// Called in @ref executeSelect after @ref createBindForSelect(). - /// - /// @return Host Pointer to a @ref HostPtr object holding a pointer to the - /// @ref Host object returned. - virtual boost::any retrieve() override; - - /// @brief Creates IPv6 reservation from the data contained in the - /// currently processed row. - /// - /// Called after createBindForSelect(). - /// - /// @return IPv6Resrv object (containing IPv6 address or prefix reservation) - const IPv6Resrv retrieveReservation() const; - - /// @brief Retrieves option from members. - /// - /// Called after createBindForSelect(). - /// - /// @return OptionDescriptorPtr object (containing the option from the - /// database) - const OptionWrapper retrieveOption() const; - - /// @brief Statement tags - /// @{ - // Inserts all parameters belonging to any reservation from a single host. - static constexpr StatementTag INSERT_HOST = "INSERT_HOST"; - - // Retrieves host information, IPv6 reservations and both IPv4 and IPv6 - // options associated with it. - static constexpr StatementTag GET_HOST = "GET_HOST"; - - // Retrieves host information, IPv6 reservations and both IPv4 and IPv6 - // options associated with it. - static constexpr StatementTag GET_HOST_BY_HOST_ID = "GET_HOST_BY_HOST_ID"; - - // Retrieves host information along with the IPv4 options associated - // with it. - static constexpr StatementTag GET_HOST_BY_IPV4_ADDRESS = "GET_HOST_BY_IPV4_ADDRESS"; - - // Retrieves host information and IPv4 options using subnet identifier - // and client's identifier (i.e. hardware address or DUID). - static constexpr StatementTag GET_HOST_BY_IPV4_SUBNET_ID_AND_HOST_ID = - "GET_HOST_BY_IPV4_SUBNET_ID_AND_HOST_ID"; - - // Retrieves host information; IPv6 reservations and IPv6 options - // associated with it using subnet identifier and client's - // identifier (i.e. hardware address or DUID). - static constexpr StatementTag GET_HOST_BY_IPV6_SUBNET_ID_AND_HOST_ID = - "GET_HOST_BY_IPV6_SUBNET_ID_AND_HOST_ID"; - - // Retrieves host information and IPv4 options for the host using subnet - // identifier and IPv4 reservation. - static constexpr StatementTag GET_HOST_BY_IPV4_SUBNET_ID_AND_ADDRESS = - "GET_HOST_BY_IPV4_SUBNET_ID_AND_ADDRESS"; - - // Retrieves host information, IPv6 reservations and IPv6 options - // associated with it using prefix and prefix length. The query returns - // host information for a single host. However, multiple rows are returned - // due to left joining IPv6 reservations and IPv6 options. The number of - // rows returned is multiplication of number of existing IPv6 reservations - // and IPv6 options. - static constexpr StatementTag GET_HOST_BY_IPV6_PREFIX = "GET_HOST_BY_IPV6_PREFIX"; - - // Retrieves host information and IPv6 options for the host using subnet - // identifier and IPv6 reservation. - static constexpr StatementTag GET_HOST_BY_IPV6_SUBNET_ID_AND_ADDRESS = - "GET_HOST_BY_IPV6_SUBNET_ID_AND_ADDRESS"; - - // Deletes a host reservation. - static constexpr StatementTag DELETE_HOST = - "DELETE_HOST"; - - // Retrieves host information along with the IPv4 options associated - // with it using a subnet identifier. - static constexpr StatementTag GET_HOST_BY_IPV4_SUBNET_ID = - "GET_HOST_BY_IPV4_SUBNET_ID"; - - // Retrieves host information; IPv6 reservations and IPv6 options - // associated with a host using subnet identifier. - static constexpr StatementTag GET_HOST_BY_IPV6_SUBNET_ID = - "GET_HOST_BY_IPV6_SUBNET_ID"; - - // Retrieves host information, IPv6 reservations and both IPv4 and IPv6 - // options associated with it using hostname. - static constexpr StatementTag GET_HOST_BY_HOST_NAME = - "GET_HOST_BY_HOST_NAME"; - - // Retrieves host information along with the IPv4 options associated - // with it using hostname and subnet identifier. - static constexpr StatementTag GET_HOST_BY_HOST_NAME_AND_IPV4_SUBNET_ID = - "GET_HOST_BY_HOST_NAME_AND_IPV4_SUBNET_ID"; - - // Retrieves host information; IPv6 reservations and IPv6 options - // associated with it using hostname and subnet identifier. - static constexpr StatementTag GET_HOST_BY_HOST_NAME_AND_IPV6_SUBNET_ID = - "GET_HOST_BY_HOST_NAME_AND_IPV6_SUBNET_ID"; - - // Retrieves host information along with the IPv4 options associated - // with it using a subnet identifier from first host (paging). - static constexpr StatementTag GET_HOST_BY_IPV4_SUBNET_ID_LIMIT = - "GET_HOST_BY_IPV4_SUBNET_ID_LIMIT"; - - // Retrieves host information along with the IPv4 options associated - // with it using a subnet identifier from next host (paging). - static constexpr StatementTag GET_HOST_BY_IPV4_SUBNET_ID_NEXT_KEY = - "GET_HOST_BY_IPV4_SUBNET_ID_NEXT_KEY"; - - // Retrieves host information along with the IPv4 options associated - // with it using a subnet identifier from host with a limit (paging). - static constexpr StatementTag GET_HOST_BY_IPV4_SUBNET_ID_PAGE = - "GET_HOST_BY_IPV4_SUBNET_ID_PAGE"; - - // Retrieves host information; IPv6 reservations and IPv6 options - // associated with it using subnet identifier from first host (paging). - static constexpr StatementTag GET_HOST_BY_IPV6_SUBNET_ID_LIMIT = - "GET_HOST_BY_IPV6_SUBNET_ID_LIMIT"; - - // Retrieves host information; IPv6 reservations and IPv6 options - // associated with it using subnet identifier from next host (paging). - static constexpr StatementTag GET_HOST_BY_IPV6_SUBNET_ID_NEXT_KEY = - "GET_HOST_BY_IPV6_SUBNET_ID_NEXT_KEY"; - - // Retrieves host information; IPv6 reservations and IPv6 options - // associated with it using subnet identifier from host with a limit - // (paging). - static constexpr StatementTag GET_HOST_BY_IPV6_SUBNET_ID_PAGE = - "GET_HOST_BY_IPV6_SUBNET_ID_PAGE"; - - // Retrieves host information; reservations and options associated - // with it from first host (paging). - static constexpr StatementTag GET_HOST_LIMIT = "GET_HOST_LIMIT"; - - // Retrieves host information; reservations and options associated - // with it from host (paging). - static constexpr StatementTag GET_HOST_KEY = "GET_HOST_KEY"; - - // Retrieves host information; reservations and options associated - // with it from next host (paging). - static constexpr StatementTag GET_HOST_NEXT_KEY = "GET_HOST_NEXT_KEY"; - - // Retrieves host information; reservations and options associated - // with it from host with a limit (paging). - static constexpr StatementTag GET_HOST_PAGE = "GET_HOST_PAGE"; - /// @} - - /// @brief Cassandra statements - static StatementMap tagged_statements_; - -private: - /// Pointer to Host object holding information being inserted into database. - HostPtr host_; - - /// @brief Primary key. Partition key. Aggregates: host_identifier, - /// host_identifier_type, host_ipv4_subnet_id host_ipv6_subnet_id, - /// host_ipv4_address - cass_int64_t key_; - - /// @brief Primary key. Clustering key. Aggregates: host_identifier, - /// host_identifier_type, reserved_ipv6_prefix_address, - /// reserved_ipv6_prefix_length, option_code, option_space. - cass_int64_t id_; - - /// @brief Client's identifier (e.g. DUID, HW address) in binary format - CassBlob host_identifier_; - - /// @brief Type of the identifier in the host_identifier_ - /// This value corresponds to the @ref Host::IdentifierType value. - cass_int32_t host_identifier_type_; - - /// @brief IPv4 subnet identifier - cass_int32_t host_ipv4_subnet_id_; - - /// @brief IPv6 subnet identifier - cass_int32_t host_ipv6_subnet_id_; - - /// @brief Reserved IPv4 address - cass_int32_t host_ipv4_address_; - - /// @brief Next server address (siaddr). - cass_int32_t host_ipv4_next_server_; - - /// @brief Server hostname (sname). - std::string host_ipv4_server_hostname_; - - /// @brief Boot file name (file). - std::string host_ipv4_boot_file_name_; - - /// @brief Key for authentication - std::string auth_key_; - - /// @brief Name reserved for the host - std::string hostname_; - - /// @brief Lower case name reserved for the host - std::string lower_case_hostname_; - - /// @brief User context - std::string user_context_; - - /// @brief A string holding comma separated list of IPv4 client classes - std::string host_ipv4_client_classes_; - - /// @brief A string holding comma separated list of IPv6 client classes - std::string host_ipv6_client_classes_; - - /// @brief Address belonging to the reserved IPv6 prefix - std::string reserved_ipv6_prefix_address_; - - /// @brief Length of the reserved IPv6 prefix - cass_int32_t reserved_ipv6_prefix_length_; - - /// @brief Reserver IPv6 prefix type - /// This value corresponds to the @ref Host::IdentifierType value. - cass_int32_t reserved_ipv6_prefix_address_type_; - - /// @brief The reservation's IAID - cass_int32_t iaid_; - - /// @brief Version of DHCP (i.e. 0 for DHCPv4 and 1 for DHCPv6) to which the - /// option belongs. - cass_int32_t option_universe_; - - /// @brief Option code - cass_int32_t option_code_; - - /// @brief Option value - CassBlob option_value_; - - /// @brief The textual value of an option - std::string option_formatted_value_; - - /// @brief Option space name - std::string option_space_; - - /// @brief Flag indicating if option is always sent or only on request - cass_bool_t option_is_persistent_; - - /// @brief Option client class - std::string option_client_class_; - - /// @brief Subnet identifier - cass_int32_t option_subnet_id_; - - /// @brief Buffer holding textual user context of an option. - std::string option_user_context_; - - /// @brief Option scope id - cass_int32_t option_scope_id_; -}; // CqlHostExchange - -constexpr StatementTag CqlHostExchange::INSERT_HOST; -constexpr StatementTag CqlHostExchange::GET_HOST; -constexpr StatementTag CqlHostExchange::GET_HOST_BY_HOST_ID; -constexpr StatementTag CqlHostExchange::GET_HOST_BY_IPV4_ADDRESS; -constexpr StatementTag CqlHostExchange::GET_HOST_BY_IPV4_SUBNET_ID_AND_HOST_ID; -constexpr StatementTag CqlHostExchange::GET_HOST_BY_IPV6_SUBNET_ID_AND_HOST_ID; -constexpr StatementTag CqlHostExchange::GET_HOST_BY_IPV4_SUBNET_ID_AND_ADDRESS; -constexpr StatementTag CqlHostExchange::GET_HOST_BY_IPV6_PREFIX; -constexpr StatementTag CqlHostExchange::GET_HOST_BY_IPV6_SUBNET_ID_AND_ADDRESS; -constexpr StatementTag CqlHostExchange::GET_HOST_BY_IPV4_SUBNET_ID; -constexpr StatementTag CqlHostExchange::GET_HOST_BY_IPV6_SUBNET_ID; -constexpr StatementTag CqlHostExchange::GET_HOST_BY_HOST_NAME; -constexpr StatementTag CqlHostExchange::GET_HOST_BY_HOST_NAME_AND_IPV4_SUBNET_ID; -constexpr StatementTag CqlHostExchange::GET_HOST_BY_HOST_NAME_AND_IPV6_SUBNET_ID; -constexpr StatementTag CqlHostExchange::GET_HOST_BY_IPV4_SUBNET_ID_LIMIT; -constexpr StatementTag CqlHostExchange::GET_HOST_BY_IPV6_SUBNET_ID_LIMIT; -constexpr StatementTag CqlHostExchange::GET_HOST_BY_IPV4_SUBNET_ID_NEXT_KEY; -constexpr StatementTag CqlHostExchange::GET_HOST_BY_IPV6_SUBNET_ID_NEXT_KEY; -constexpr StatementTag CqlHostExchange::GET_HOST_BY_IPV4_SUBNET_ID_PAGE; -constexpr StatementTag CqlHostExchange::GET_HOST_BY_IPV6_SUBNET_ID_PAGE; -constexpr StatementTag CqlHostExchange::GET_HOST_LIMIT; -constexpr StatementTag CqlHostExchange::GET_HOST_NEXT_KEY; -constexpr StatementTag CqlHostExchange::GET_HOST_KEY; -constexpr StatementTag CqlHostExchange::GET_HOST_PAGE; -constexpr StatementTag CqlHostExchange::DELETE_HOST; - -StatementMap CqlHostExchange::tagged_statements_ = { - {INSERT_HOST, - {INSERT_HOST, - "INSERT INTO hosts ( " - "key, " - "id, " - "host_identifier, " - "host_identifier_type, " - "host_ipv4_subnet_id, " - "host_ipv6_subnet_id, " - "host_ipv4_address, " - "host_ipv4_next_server, " - "host_ipv4_server_hostname, " - "host_ipv4_boot_file_name, " - "auth_key, " - "hostname, " - "lower_case_hostname, " - "user_context, " - "host_ipv4_client_classes, " - "host_ipv6_client_classes, " - "reserved_ipv6_prefix_address, " - "reserved_ipv6_prefix_length, " - "reserved_ipv6_prefix_address_type, " - "iaid, " - "option_universe, " - "option_code, " - "option_value, " - "option_formatted_value, " - "option_space, " - "option_is_persistent, " - "option_client_class, " - "option_subnet_id, " - "option_user_context, " - "option_scope_id " - ") VALUES ( " - // key - "?, " - // id - "?, " - // host - "?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, " - // denormalized reservation, option - "?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? " - ") " - "IF NOT EXISTS " - }}, - - {GET_HOST, - {GET_HOST, - "SELECT " - "key, " - "id, " - "host_identifier, " - "host_identifier_type, " - "host_ipv4_subnet_id, " - "host_ipv6_subnet_id, " - "host_ipv4_address, " - "host_ipv4_next_server, " - "host_ipv4_server_hostname, " - "host_ipv4_boot_file_name, " - "auth_key, " - "hostname, " - "user_context, " - "host_ipv4_client_classes, " - "host_ipv6_client_classes, " - "reserved_ipv6_prefix_address, " - "reserved_ipv6_prefix_length, " - "reserved_ipv6_prefix_address_type, " - "iaid, " - "option_universe, " - "option_code, " - "option_value, " - "option_formatted_value, " - "option_space, " - "option_is_persistent, " - "option_client_class, " - "option_subnet_id, " - "option_user_context, " - "option_scope_id " - "FROM hosts " - }}, - - {GET_HOST_BY_HOST_ID, - {GET_HOST_BY_HOST_ID, - "SELECT " - "key, " - "id, " - "host_identifier, " - "host_identifier_type, " - "host_ipv4_subnet_id, " - "host_ipv6_subnet_id, " - "host_ipv4_address, " - "host_ipv4_next_server, " - "host_ipv4_server_hostname, " - "host_ipv4_boot_file_name, " - "auth_key, " - "hostname, " - "user_context, " - "host_ipv4_client_classes, " - "host_ipv6_client_classes, " - "reserved_ipv6_prefix_address, " - "reserved_ipv6_prefix_length, " - "reserved_ipv6_prefix_address_type, " - "iaid, " - "option_universe, " - "option_code, " - "option_value, " - "option_formatted_value, " - "option_space, " - "option_is_persistent, " - "option_client_class, " - "option_subnet_id, " - "option_user_context, " - "option_scope_id " - "FROM hosts " - "WHERE host_identifier = ? " - "AND host_identifier_type = ? " - "ALLOW FILTERING " - }}, - - {GET_HOST_BY_IPV4_ADDRESS, - {GET_HOST_BY_IPV4_ADDRESS, - "SELECT " - "key, " - "id, " - "host_identifier, " - "host_identifier_type, " - "host_ipv4_subnet_id, " - "host_ipv6_subnet_id, " - "host_ipv4_address, " - "host_ipv4_next_server, " - "host_ipv4_server_hostname, " - "host_ipv4_boot_file_name, " - "auth_key, " - "hostname, " - "user_context, " - "host_ipv4_client_classes, " - "host_ipv6_client_classes, " - "reserved_ipv6_prefix_address, " - "reserved_ipv6_prefix_length, " - "reserved_ipv6_prefix_address_type, " - "iaid, " - "option_universe, " - "option_code, " - "option_value, " - "option_formatted_value, " - "option_space, " - "option_is_persistent, " - "option_client_class, " - "option_subnet_id, " - "option_user_context, " - "option_scope_id " - "FROM hosts " - "WHERE host_ipv4_address = ? " - "ALLOW FILTERING " - }}, - - {GET_HOST_BY_IPV4_SUBNET_ID_AND_HOST_ID, - {GET_HOST_BY_IPV4_SUBNET_ID_AND_HOST_ID, - "SELECT " - "key, " - "id, " - "host_identifier, " - "host_identifier_type, " - "host_ipv4_subnet_id, " - "host_ipv6_subnet_id, " - "host_ipv4_address, " - "host_ipv4_next_server, " - "host_ipv4_server_hostname, " - "host_ipv4_boot_file_name, " - "auth_key, " - "hostname, " - "user_context, " - "host_ipv4_client_classes, " - "host_ipv6_client_classes, " - "reserved_ipv6_prefix_address, " - "reserved_ipv6_prefix_length, " - "reserved_ipv6_prefix_address_type, " - "iaid, " - "option_universe, " - "option_code, " - "option_value, " - "option_formatted_value, " - "option_space, " - "option_is_persistent, " - "option_client_class, " - "option_subnet_id, " - "option_user_context, " - "option_scope_id " - "FROM hosts " - "WHERE host_ipv4_subnet_id = ? " - "AND host_identifier = ? " - "AND host_identifier_type = ? " - "ALLOW FILTERING " - }}, - - {GET_HOST_BY_IPV6_SUBNET_ID_AND_HOST_ID, - {GET_HOST_BY_IPV6_SUBNET_ID_AND_HOST_ID, - "SELECT " - "key, " - "id, " - "host_identifier, " - "host_identifier_type, " - "host_ipv4_subnet_id, " - "host_ipv6_subnet_id, " - "host_ipv4_address, " - "host_ipv4_next_server, " - "host_ipv4_server_hostname, " - "host_ipv4_boot_file_name, " - "auth_key, " - "hostname, " - "user_context, " - "host_ipv4_client_classes, " - "host_ipv6_client_classes, " - "reserved_ipv6_prefix_address, " - "reserved_ipv6_prefix_length, " - "reserved_ipv6_prefix_address_type, " - "iaid, " - "option_universe, " - "option_code, " - "option_value, " - "option_formatted_value, " - "option_space, " - "option_is_persistent, " - "option_client_class, " - "option_subnet_id, " - "option_user_context, " - "option_scope_id " - "FROM hosts " - "WHERE host_ipv6_subnet_id = ? " - "AND host_identifier = ? " - "AND host_identifier_type = ? " - "ALLOW FILTERING " - }}, - - {GET_HOST_BY_IPV4_SUBNET_ID_AND_ADDRESS, - {GET_HOST_BY_IPV4_SUBNET_ID_AND_ADDRESS, - "SELECT " - "key, " - "id, " - "host_identifier, " - "host_identifier_type, " - "host_ipv4_subnet_id, " - "host_ipv6_subnet_id, " - "host_ipv4_address, " - "host_ipv4_next_server, " - "host_ipv4_server_hostname, " - "host_ipv4_boot_file_name, " - "auth_key, " - "hostname, " - "user_context, " - "host_ipv4_client_classes, " - "host_ipv6_client_classes, " - "reserved_ipv6_prefix_address, " - "reserved_ipv6_prefix_length, " - "reserved_ipv6_prefix_address_type, " - "iaid, " - "option_universe, " - "option_code, " - "option_value, " - "option_formatted_value, " - "option_space, " - "option_is_persistent, " - "option_client_class, " - "option_subnet_id, " - "option_user_context, " - "option_scope_id " - "FROM hosts " - "WHERE host_ipv4_subnet_id = ? " - "AND host_ipv4_address = ? " - "ALLOW FILTERING " - }}, - - {GET_HOST_BY_IPV6_PREFIX, - {GET_HOST_BY_IPV6_PREFIX, - "SELECT " - "key, " - "id, " - "host_identifier, " - "host_identifier_type, " - "host_ipv4_subnet_id, " - "host_ipv6_subnet_id, " - "host_ipv4_address, " - "host_ipv4_next_server, " - "host_ipv4_server_hostname, " - "host_ipv4_boot_file_name, " - "auth_key, " - "hostname, " - "user_context, " - "host_ipv4_client_classes, " - "host_ipv6_client_classes, " - "reserved_ipv6_prefix_address, " - "reserved_ipv6_prefix_length, " - "reserved_ipv6_prefix_address_type, " - "iaid, " - "option_universe, " - "option_code, " - "option_value, " - "option_formatted_value, " - "option_space, " - "option_is_persistent, " - "option_client_class, " - "option_subnet_id, " - "option_user_context, " - "option_scope_id " - "FROM hosts " - "WHERE reserved_ipv6_prefix_address = ? " - "AND reserved_ipv6_prefix_length = ? " - "ALLOW FILTERING " - }}, - - {GET_HOST_BY_IPV6_SUBNET_ID_AND_ADDRESS, - {GET_HOST_BY_IPV6_SUBNET_ID_AND_ADDRESS, - "SELECT " - "key, " - "id, " - "host_identifier, " - "host_identifier_type, " - "host_ipv4_subnet_id, " - "host_ipv6_subnet_id, " - "host_ipv4_address, " - "host_ipv4_next_server, " - "host_ipv4_server_hostname, " - "host_ipv4_boot_file_name, " - "auth_key, " - "hostname, " - "user_context, " - "host_ipv4_client_classes, " - "host_ipv6_client_classes, " - "reserved_ipv6_prefix_address, " - "reserved_ipv6_prefix_length, " - "reserved_ipv6_prefix_address_type, " - "iaid, " - "option_universe, " - "option_code, " - "option_value, " - "option_formatted_value, " - "option_space, " - "option_is_persistent, " - "option_client_class, " - "option_subnet_id, " - "option_user_context, " - "option_scope_id " - "FROM hosts " - "WHERE host_ipv6_subnet_id = ? " - "AND reserved_ipv6_prefix_address = ? " - "ALLOW FILTERING " - }}, - - {GET_HOST_BY_IPV4_SUBNET_ID, - {GET_HOST_BY_IPV4_SUBNET_ID, - "SELECT " - "key, " - "id, " - "host_identifier, " - "host_identifier_type, " - "host_ipv4_subnet_id, " - "host_ipv6_subnet_id, " - "host_ipv4_address, " - "host_ipv4_next_server, " - "host_ipv4_server_hostname, " - "host_ipv4_boot_file_name, " - "auth_key, " - "hostname, " - "user_context, " - "host_ipv4_client_classes, " - "host_ipv6_client_classes, " - "reserved_ipv6_prefix_address, " - "reserved_ipv6_prefix_length, " - "reserved_ipv6_prefix_address_type, " - "iaid, " - "option_universe, " - "option_code, " - "option_value, " - "option_formatted_value, " - "option_space, " - "option_is_persistent, " - "option_client_class, " - "option_subnet_id, " - "option_user_context, " - "option_scope_id " - "FROM hosts " - "WHERE host_ipv4_subnet_id = ? " - "ALLOW FILTERING " - }}, - - {GET_HOST_BY_IPV6_SUBNET_ID, - {GET_HOST_BY_IPV6_SUBNET_ID, - "SELECT " - "key, " - "id, " - "host_identifier, " - "host_identifier_type, " - "host_ipv4_subnet_id, " - "host_ipv6_subnet_id, " - "host_ipv4_address, " - "host_ipv4_next_server, " - "host_ipv4_server_hostname, " - "host_ipv4_boot_file_name, " - "auth_key, " - "hostname, " - "user_context, " - "host_ipv4_client_classes, " - "host_ipv6_client_classes, " - "reserved_ipv6_prefix_address, " - "reserved_ipv6_prefix_length, " - "reserved_ipv6_prefix_address_type, " - "iaid, " - "option_universe, " - "option_code, " - "option_value, " - "option_formatted_value, " - "option_space, " - "option_is_persistent, " - "option_client_class, " - "option_subnet_id, " - "option_user_context, " - "option_scope_id " - "FROM hosts " - "WHERE host_ipv6_subnet_id = ? " - "ALLOW FILTERING " - }}, - - {GET_HOST_BY_HOST_NAME, - {GET_HOST_BY_HOST_NAME, - "SELECT " - "key, " - "id, " - "host_identifier, " - "host_identifier_type, " - "host_ipv4_subnet_id, " - "host_ipv6_subnet_id, " - "host_ipv4_address, " - "host_ipv4_next_server, " - "host_ipv4_server_hostname, " - "host_ipv4_boot_file_name, " - "auth_key, " - "hostname, " - "user_context, " - "host_ipv4_client_classes, " - "host_ipv6_client_classes, " - "reserved_ipv6_prefix_address, " - "reserved_ipv6_prefix_length, " - "reserved_ipv6_prefix_address_type, " - "iaid, " - "option_universe, " - "option_code, " - "option_value, " - "option_formatted_value, " - "option_space, " - "option_is_persistent, " - "option_client_class, " - "option_subnet_id, " - "option_user_context, " - "option_scope_id " - "FROM hosts " - "WHERE lower_case_hostname = ? " - "ALLOW FILTERING " - }}, - - {GET_HOST_BY_HOST_NAME_AND_IPV4_SUBNET_ID, - {GET_HOST_BY_HOST_NAME_AND_IPV4_SUBNET_ID, - "SELECT " - "key, " - "id, " - "host_identifier, " - "host_identifier_type, " - "host_ipv4_subnet_id, " - "host_ipv6_subnet_id, " - "host_ipv4_address, " - "host_ipv4_next_server, " - "host_ipv4_server_hostname, " - "host_ipv4_boot_file_name, " - "auth_key, " - "hostname, " - "user_context, " - "host_ipv4_client_classes, " - "host_ipv6_client_classes, " - "reserved_ipv6_prefix_address, " - "reserved_ipv6_prefix_length, " - "reserved_ipv6_prefix_address_type, " - "iaid, " - "option_universe, " - "option_code, " - "option_value, " - "option_formatted_value, " - "option_space, " - "option_is_persistent, " - "option_client_class, " - "option_subnet_id, " - "option_user_context, " - "option_scope_id " - "FROM hosts " - "WHERE lower_case_hostname = ? " - "AND host_ipv4_subnet_id = ? " - "ALLOW FILTERING " - }}, - - {GET_HOST_BY_HOST_NAME_AND_IPV6_SUBNET_ID, - {GET_HOST_BY_HOST_NAME_AND_IPV6_SUBNET_ID, - "SELECT " - "key, " - "id, " - "host_identifier, " - "host_identifier_type, " - "host_ipv4_subnet_id, " - "host_ipv6_subnet_id, " - "host_ipv4_address, " - "host_ipv4_next_server, " - "host_ipv4_server_hostname, " - "host_ipv4_boot_file_name, " - "auth_key, " - "hostname, " - "user_context, " - "host_ipv4_client_classes, " - "host_ipv6_client_classes, " - "reserved_ipv6_prefix_address, " - "reserved_ipv6_prefix_length, " - "reserved_ipv6_prefix_address_type, " - "iaid, " - "option_universe, " - "option_code, " - "option_value, " - "option_formatted_value, " - "option_space, " - "option_is_persistent, " - "option_client_class, " - "option_subnet_id, " - "option_user_context, " - "option_scope_id " - "FROM hosts " - "WHERE lower_case_hostname = ? " - "AND host_ipv6_subnet_id = ? " - "ALLOW FILTERING " - }}, - - {GET_HOST_BY_IPV4_SUBNET_ID_LIMIT, - {GET_HOST_BY_IPV4_SUBNET_ID_LIMIT, - "SELECT " - "key, " - "id, " - "host_identifier, " - "host_identifier_type, " - "host_ipv4_subnet_id, " - "host_ipv6_subnet_id, " - "host_ipv4_address, " - "host_ipv4_next_server, " - "host_ipv4_server_hostname, " - "host_ipv4_boot_file_name, " - "auth_key, " - "hostname, " - "user_context, " - "host_ipv4_client_classes, " - "host_ipv6_client_classes, " - "reserved_ipv6_prefix_address, " - "reserved_ipv6_prefix_length, " - "reserved_ipv6_prefix_address_type, " - "iaid, " - "option_universe, " - "option_code, " - "option_value, " - "option_formatted_value, " - "option_space, " - "option_is_persistent, " - "option_client_class, " - "option_subnet_id, " - "option_user_context, " - "option_scope_id " - "FROM hosts " - "WHERE host_ipv4_subnet_id = ? " - "LIMIT 1 " - "ALLOW FILTERING " - }}, - - {GET_HOST_BY_IPV4_SUBNET_ID_NEXT_KEY, - {GET_HOST_BY_IPV4_SUBNET_ID_NEXT_KEY, - "SELECT " - "key, " - "id, " - "host_identifier, " - "host_identifier_type, " - "host_ipv4_subnet_id, " - "host_ipv6_subnet_id, " - "host_ipv4_address, " - "host_ipv4_next_server, " - "host_ipv4_server_hostname, " - "host_ipv4_boot_file_name, " - "auth_key, " - "hostname, " - "user_context, " - "host_ipv4_client_classes, " - "host_ipv6_client_classes, " - "reserved_ipv6_prefix_address, " - "reserved_ipv6_prefix_length, " - "reserved_ipv6_prefix_address_type, " - "iaid, " - "option_universe, " - "option_code, " - "option_value, " - "option_formatted_value, " - "option_space, " - "option_is_persistent, " - "option_client_class, " - "option_subnet_id, " - "option_user_context, " - "option_scope_id " - "FROM hosts " - "WHERE host_ipv4_subnet_id = ? " - "AND TOKEN(key) > TOKEN(?) " - "LIMIT 1 " - "ALLOW FILTERING " - }}, - - {GET_HOST_BY_IPV4_SUBNET_ID_PAGE, - {GET_HOST_BY_IPV4_SUBNET_ID_PAGE, - "SELECT " - "key, " - "id, " - "host_identifier, " - "host_identifier_type, " - "host_ipv4_subnet_id, " - "host_ipv6_subnet_id, " - "host_ipv4_address, " - "host_ipv4_next_server, " - "host_ipv4_server_hostname, " - "host_ipv4_boot_file_name, " - "auth_key, " - "hostname, " - "user_context, " - "host_ipv4_client_classes, " - "host_ipv6_client_classes, " - "reserved_ipv6_prefix_address, " - "reserved_ipv6_prefix_length, " - "reserved_ipv6_prefix_address_type, " - "iaid, " - "option_universe, " - "option_code, " - "option_value, " - "option_formatted_value, " - "option_space, " - "option_is_persistent, " - "option_client_class, " - "option_subnet_id, " - "option_user_context, " - "option_scope_id " - "FROM hosts " - "WHERE host_ipv4_subnet_id = ? " - "AND id = ? " - "LIMIT 1 " - "ALLOW FILTERING " - }}, - - {GET_HOST_BY_IPV6_SUBNET_ID_LIMIT, - {GET_HOST_BY_IPV6_SUBNET_ID_LIMIT, - "SELECT " - "key, " - "id, " - "host_identifier, " - "host_identifier_type, " - "host_ipv4_subnet_id, " - "host_ipv6_subnet_id, " - "host_ipv4_address, " - "host_ipv4_next_server, " - "host_ipv4_server_hostname, " - "host_ipv4_boot_file_name, " - "auth_key, " - "hostname, " - "user_context, " - "host_ipv4_client_classes, " - "host_ipv6_client_classes, " - "reserved_ipv6_prefix_address, " - "reserved_ipv6_prefix_length, " - "reserved_ipv6_prefix_address_type, " - "iaid, " - "option_universe, " - "option_code, " - "option_value, " - "option_formatted_value, " - "option_space, " - "option_is_persistent, " - "option_client_class, " - "option_subnet_id, " - "option_user_context, " - "option_scope_id " - "FROM hosts " - "WHERE host_ipv6_subnet_id = ? " - "LIMIT 1 " - "ALLOW FILTERING " - }}, - - {GET_HOST_BY_IPV6_SUBNET_ID_NEXT_KEY, - {GET_HOST_BY_IPV6_SUBNET_ID_NEXT_KEY, - "SELECT " - "key, " - "id, " - "host_identifier, " - "host_identifier_type, " - "host_ipv4_subnet_id, " - "host_ipv6_subnet_id, " - "host_ipv4_address, " - "host_ipv4_next_server, " - "host_ipv4_server_hostname, " - "host_ipv4_boot_file_name, " - "auth_key, " - "hostname, " - "user_context, " - "host_ipv4_client_classes, " - "host_ipv6_client_classes, " - "reserved_ipv6_prefix_address, " - "reserved_ipv6_prefix_length, " - "reserved_ipv6_prefix_address_type, " - "iaid, " - "option_universe, " - "option_code, " - "option_value, " - "option_formatted_value, " - "option_space, " - "option_is_persistent, " - "option_client_class, " - "option_subnet_id, " - "option_user_context, " - "option_scope_id " - "FROM hosts " - "WHERE host_ipv6_subnet_id = ? " - "AND TOKEN(key) > TOKEN(?) " - "LIMIT 1 " - "ALLOW FILTERING " - }}, - - {GET_HOST_BY_IPV6_SUBNET_ID_PAGE, - {GET_HOST_BY_IPV6_SUBNET_ID_PAGE, - "SELECT " - "key, " - "id, " - "host_identifier, " - "host_identifier_type, " - "host_ipv4_subnet_id, " - "host_ipv6_subnet_id, " - "host_ipv4_address, " - "host_ipv4_next_server, " - "host_ipv4_server_hostname, " - "host_ipv4_boot_file_name, " - "auth_key, " - "hostname, " - "user_context, " - "host_ipv4_client_classes, " - "host_ipv6_client_classes, " - "reserved_ipv6_prefix_address, " - "reserved_ipv6_prefix_length, " - "reserved_ipv6_prefix_address_type, " - "iaid, " - "option_universe, " - "option_code, " - "option_value, " - "option_formatted_value, " - "option_space, " - "option_is_persistent, " - "option_client_class, " - "option_subnet_id, " - "option_user_context, " - "option_scope_id " - "FROM hosts " - "WHERE host_ipv6_subnet_id = ? " - "AND id = ? " - "LIMIT 1 " - "ALLOW FILTERING " - }}, - - {GET_HOST_LIMIT, - {GET_HOST_LIMIT, - "SELECT " - "key, " - "id, " - "host_identifier, " - "host_identifier_type, " - "host_ipv4_subnet_id, " - "host_ipv6_subnet_id, " - "host_ipv4_address, " - "host_ipv4_next_server, " - "host_ipv4_server_hostname, " - "host_ipv4_boot_file_name, " - "auth_key, " - "hostname, " - "user_context, " - "host_ipv4_client_classes, " - "host_ipv6_client_classes, " - "reserved_ipv6_prefix_address, " - "reserved_ipv6_prefix_length, " - "reserved_ipv6_prefix_address_type, " - "iaid, " - "option_universe, " - "option_code, " - "option_value, " - "option_formatted_value, " - "option_space, " - "option_is_persistent, " - "option_client_class, " - "option_subnet_id, " - "option_user_context, " - "option_scope_id " - "FROM hosts " - "LIMIT 1 " - "ALLOW FILTERING " - }}, - - {GET_HOST_NEXT_KEY, - {GET_HOST_NEXT_KEY, - "SELECT " - "key, " - "id, " - "host_identifier, " - "host_identifier_type, " - "host_ipv4_subnet_id, " - "host_ipv6_subnet_id, " - "host_ipv4_address, " - "host_ipv4_next_server, " - "host_ipv4_server_hostname, " - "host_ipv4_boot_file_name, " - "auth_key, " - "hostname, " - "user_context, " - "host_ipv4_client_classes, " - "host_ipv6_client_classes, " - "reserved_ipv6_prefix_address, " - "reserved_ipv6_prefix_length, " - "reserved_ipv6_prefix_address_type, " - "iaid, " - "option_universe, " - "option_code, " - "option_value, " - "option_formatted_value, " - "option_space, " - "option_is_persistent, " - "option_client_class, " - "option_subnet_id, " - "option_user_context, " - "option_scope_id " - "FROM hosts " - "WHERE TOKEN(key) > TOKEN(?) " - "LIMIT 1 " - "ALLOW FILTERING " - }}, - - {GET_HOST_KEY, - {GET_HOST_KEY, - "SELECT " - "key, " - "id, " - "host_identifier, " - "host_identifier_type, " - "host_ipv4_subnet_id, " - "host_ipv6_subnet_id, " - "host_ipv4_address, " - "host_ipv4_next_server, " - "host_ipv4_server_hostname, " - "host_ipv4_boot_file_name, " - "auth_key, " - "hostname, " - "user_context, " - "host_ipv4_client_classes, " - "host_ipv6_client_classes, " - "reserved_ipv6_prefix_address, " - "reserved_ipv6_prefix_length, " - "reserved_ipv6_prefix_address_type, " - "iaid, " - "option_universe, " - "option_code, " - "option_value, " - "option_formatted_value, " - "option_space, " - "option_is_persistent, " - "option_client_class, " - "option_subnet_id, " - "option_user_context, " - "option_scope_id " - "FROM hosts " - "WHERE key = ? " - "ALLOW FILTERING " - }}, - - {GET_HOST_PAGE, - {GET_HOST_PAGE, - "SELECT " - "key, " - "id, " - "host_identifier, " - "host_identifier_type, " - "host_ipv4_subnet_id, " - "host_ipv6_subnet_id, " - "host_ipv4_address, " - "host_ipv4_next_server, " - "host_ipv4_server_hostname, " - "host_ipv4_boot_file_name, " - "auth_key, " - "hostname, " - "user_context, " - "host_ipv4_client_classes, " - "host_ipv6_client_classes, " - "reserved_ipv6_prefix_address, " - "reserved_ipv6_prefix_length, " - "reserved_ipv6_prefix_address_type, " - "iaid, " - "option_universe, " - "option_code, " - "option_value, " - "option_formatted_value, " - "option_space, " - "option_is_persistent, " - "option_client_class, " - "option_subnet_id, " - "option_user_context, " - "option_scope_id " - "FROM hosts " - "WHERE id = ? " - "LIMIT 1 " - "ALLOW FILTERING " - }}, - - {DELETE_HOST, - {DELETE_HOST, - "DELETE FROM hosts WHERE key = ? AND id = ? " - "IF EXISTS " - }} -}; - -CqlHostExchange::CqlHostExchange() - : host_(NULL), id_(0), host_identifier_type_(0), host_ipv4_subnet_id_(0), - host_ipv6_subnet_id_(0), host_ipv4_address_(0), host_ipv4_next_server_(0), - host_ipv4_server_hostname_(NULL_DHCP4_SERVER_HOSTNAME), - host_ipv4_boot_file_name_(NULL_DHCP4_BOOT_FILE_NAME), - auth_key_(""), - user_context_(NULL_USER_CONTEXT), - reserved_ipv6_prefix_length_(NULL_RESERVED_IPV6_PREFIX_LENGTH), - reserved_ipv6_prefix_address_type_(NULL_RESERVED_IPV6_PREFIX_ADDRESS_TYPE), - iaid_(NULL_IAID), option_universe_(NULL_OPTION_UNIVERSE), - option_code_(NULL_OPTION_CODE), - option_is_persistent_(NULL_OPTION_IS_PERSISTENT), - option_subnet_id_(NULL_OPTION_SUBNET_ID), - option_user_context_(NULL_OPTION_USER_CONTEXT), - option_scope_id_(NULL_OPTION_SCOPE_ID) { -} - -CqlHostExchange::~CqlHostExchange() { -} - -void -CqlHostExchange::createBindForSelect(AnyArray& data, StatementTag /* not used */) { - // Start with a fresh array. - data.clear(); - - // key: bigint - data.add(&key_); - // id: bigint - data.add(&id_); - // host_identifier: blob - data.add(&host_identifier_); - // host_identifier_type: int - data.add(&host_identifier_type_); - // host_ipv4_subnet_id: int - data.add(&host_ipv4_subnet_id_); - // host_ipv6_subnet_id: int - data.add(&host_ipv6_subnet_id_); - // host_ipv4_address: int - data.add(&host_ipv4_address_); - // host_ipv4_next_server: int - data.add(&host_ipv4_next_server_); - // host_ipv4_server_hostname: text - data.add(&host_ipv4_server_hostname_); - // host_ipv4_boot_file_name: text - data.add(&host_ipv4_boot_file_name_); - // auth_key: text - data.add(&auth_key_); - // hostname: text - data.add(&hostname_); - // user_context: text - data.add(&user_context_); - // host_ipv4_client_classes: text - data.add(&host_ipv4_client_classes_); - // host_ipv6_client_classes: text - data.add(&host_ipv6_client_classes_); - /// @brief Denormalized reservation columns - /// @{ - // reserved_ipv6_prefix_address: text - data.add(&reserved_ipv6_prefix_address_); - // reserved_ipv6_prefix_length: int - data.add(&reserved_ipv6_prefix_length_); - // reserved_ipv6_prefix_address_type: int - data.add(&reserved_ipv6_prefix_address_type_); - // iaid: int - data.add(&iaid_); - /// @} - /// @brief Denormalized option columns - /// @{ - // option_universe: int - data.add(&option_universe_); - // option_code: int - data.add(&option_code_); - // option_value: blob - data.add(&option_value_); - // option_formatted_value: text - data.add(&option_formatted_value_); - // option_space: text - data.add(&option_space_); - // option_is_persistent: boolean - data.add(&option_is_persistent_); - // option_client_class: text - data.add(&option_client_class_); - // option_subnet_id: int - data.add(&option_subnet_id_); - // option_user_context: text - data.add(&option_user_context_); - // option_scope_id: int - data.add(&option_scope_id_); - /// @} -} - -void -CqlHostExchange::prepareExchange(const HostPtr& host, - const Optional& subnet_id, - const IPv6Resrv* const reservation, - const std::string& option_space, - const OptionDescriptor& option_descriptor) { - - // Store host object to ensure it remains valid. - host_ = host; - - // Set up the structures for the various components of the host - // structure. - try { - // host_identifier: blob - // Convert from std::vector to - // std::vector. - HostIdentifier host_identifier = host->getIdentifier(); - host_identifier_ = CassBlob(host_identifier.begin(), host_identifier.end()); - if (host_identifier_.size() > DUID::MAX_DUID_LEN) { - isc_throw(BadValue, "CqlHostExchange::prepareExchange(): host identifier " - << host_identifier_.data() << " of length " << host_identifier_.size() - << " is greater than allowed of " << DUID::MAX_DUID_LEN); - } - - // host_identifier_type: tinyint - host_identifier_type_ = static_cast(host->getIdentifierType()); - if (host_identifier_type_ > MAX_IDENTIFIER_TYPE) { - isc_throw(BadValue, "CqlHostExchange::prepareExchange(): invalid " - "host identifier type returned: " << host_identifier_type_); - } - - // host_ipv4_subnet_id: int - host_ipv4_subnet_id_ = static_cast(host->getIPv4SubnetID()); - - // host_ipv6_subnet_id: int - host_ipv6_subnet_id_ = static_cast(host->getIPv6SubnetID()); - - // host_ipv4_address: int - host_ipv4_address_ = static_cast(host->getIPv4Reservation().toUint32()); - - // host_ipv4_next_server: int - host_ipv4_next_server_ = static_cast(host->getNextServer().toUint32()); - - // host_ipv4_server_hostname: text - host_ipv4_server_hostname_ = host->getServerHostname(); - - // host_ipv4_boot_file_name: text - host_ipv4_boot_file_name_ = host->getBootFileName(); - - // auth_key: varchar - auth_key_ = host->getKey().toText(); - - // hostname: text - hostname_ = host->getHostname(); - if (hostname_.size() > HOSTNAME_MAX_LEN) { - isc_throw(BadValue, "CqlHostExchange::prepareExchange(): hostname " - << hostname_ << " of length " << hostname_.size() - << " is greater than allowed of " << HOSTNAME_MAX_LEN); - } - - // lower_case_hostname: text - lower_case_hostname_ = host->getLowerHostname(); - if (lower_case_hostname_.size() > HOSTNAME_MAX_LEN) { - // Should never happen... - isc_throw(BadValue, "CqlHostExchange::prepareExchange(): lower " - "case hostname " << lower_case_hostname_ << " of length " - << lower_case_hostname_.size() - << " is greater than allowed of " << HOSTNAME_MAX_LEN); - } - - // user_context: text - ConstElementPtr ctx = host->getContext(); - if (ctx) { - user_context_ = ctx->str(); - } else { - user_context_ = NULL_USER_CONTEXT; - } - - // host_ipv4_client_classes: text - host_ipv4_client_classes_ = host->getClientClasses4().toText(","); - if (host_ipv4_client_classes_.size() > CLIENT_CLASSES_MAX_LEN) { - isc_throw(BadValue, "CqlHostExchange::prepareExchange(): " - "IPv4 client classes " << host_ipv4_client_classes_ << " of length " - << host_ipv4_client_classes_.size() << " is greater than allowed of " - << CLIENT_CLASSES_MAX_LEN); - } - - // host_ipv6_client_classes: text - host_ipv6_client_classes_ = host->getClientClasses6().toText(","); - if (host_ipv6_client_classes_.size() > CLIENT_CLASSES_MAX_LEN) { - isc_throw(BadValue, "CqlHostExchange::prepareExchange(): " - "IPv6 client classes " << host_ipv6_client_classes_ << " of length " - << host_ipv6_client_classes_.size() << " is greater than allowed of " - << CLIENT_CLASSES_MAX_LEN); - } - - if (reservation == NULL) { - // reserved_ipv6_prefix_address: text - reserved_ipv6_prefix_address_ = NULL_RESERVED_IPV6_PREFIX_ADDRESS; - // reserved_ipv6_prefix_length: int - reserved_ipv6_prefix_length_ = NULL_RESERVED_IPV6_PREFIX_LENGTH; - // reserved_ipv6_prefix_address_type: int - reserved_ipv6_prefix_address_type_ = NULL_RESERVED_IPV6_PREFIX_ADDRESS_TYPE; - iaid_ = NULL_IAID; - } else { - // reserved_ipv6_prefix_address: text - reserved_ipv6_prefix_address_ = reservation->getPrefix().toText(); - - // reserved_ipv6_prefix_length: int - reserved_ipv6_prefix_length_ = static_cast(reservation->getPrefixLen()); - - // reserved_ipv6_prefix_address_type: int - reserved_ipv6_prefix_address_type_ = - reservation->getType() == IPv6Resrv::TYPE_NA ? 0 : 2; - - // iaid: int - /// @todo: We don't support iaid in the IPv6Resrv yet. - iaid_ = 0; - } - - if (option_descriptor.option_ == NULL) { - option_universe_ = NULL_OPTION_UNIVERSE; - option_code_ = NULL_OPTION_CODE; - option_value_ = NULL_OPTION_VALUE; - option_formatted_value_ = NULL_OPTION_FORMATTED_VALUE; - option_space_ = NULL_OPTION_SPACE; - option_is_persistent_ = NULL_OPTION_IS_PERSISTENT; - option_client_class_ = NULL_OPTION_CLIENT_CLASS; - option_subnet_id_ = NULL_OPTION_SUBNET_ID; - option_user_context_ = NULL_OPTION_USER_CONTEXT; - option_scope_id_ = NULL_OPTION_SCOPE_ID; - } else { - // option_universe: int - option_universe_ = option_descriptor.option_->getUniverse(); - - // option_code: int - option_code_ = option_descriptor.option_->getType(); - - // option_value: blob - // option_formatted_value: text - if (option_descriptor.formatted_value_.empty()) { - if (option_descriptor.option_->len() > - option_descriptor.option_->getHeaderLen()) { - // The formatted_value is empty and the option value - // is not empty so we need to prepare on-wire format - // for the option and store it in the database as a - // blob. - OutputBuffer buffer(option_descriptor.option_->len()); - option_descriptor.option_->pack(buffer); - const char* buffer_ptr = static_cast(buffer.getData()); - option_value_.assign(buffer_ptr + option_descriptor.option_->getHeaderLen(), - buffer_ptr + buffer.getLength()); - } else { - option_value_.clear(); - } - option_formatted_value_.clear(); - } else { - option_value_.clear(); - option_formatted_value_ = option_descriptor.formatted_value_; - } - - // option_space: text - option_space_ = option_space; - - // option_is_persistent: boolean - option_is_persistent_ = option_descriptor.persistent_ ? cass_true : cass_false; - - // option_client_class: text - /// @todo Assign actual value to client class string. See #5503. - option_client_class_.clear(); - - // option_subnet_id: int - if (!subnet_id.unspecified()) { - option_subnet_id_ = subnet_id; - } else { - option_subnet_id_ = 0; - } - - // option_user_context: text - ConstElementPtr ctx = option_descriptor.getContext(); - if (ctx) { - option_user_context_ = ctx->str(); - } else { - option_user_context_ = NULL_OPTION_USER_CONTEXT; - } - - // option_scope_id: int - // Using fixed scope_id = 3, which associates an option with host. - option_scope_id_ = 3; - } - - // id: bigint - id_ = static_cast(hashIntoId()); - - // key: bigint - key_ = static_cast(hashIntoKey()); - } catch (const Exception& ex) { - isc_throw(DbOperationError, - "CqlHostExchange::prepareExchange(): " - "could not copy data from host " - << host->getHostname() << ", reason: " << ex.what()); - } -} - -void -CqlHostExchange::createBindForMutation(const HostPtr& host, - const Optional& subnet_id, - const IPv6Resrv* const reservation, - const std::string& option_space, - const OptionDescriptor& option_descriptor, - StatementTag statement_tag, AnyArray& data) { - prepareExchange(host, subnet_id, reservation, option_space, option_descriptor); - - try { - // Add all parameters to bind array. - data.clear(); - - if (statement_tag == CqlHostExchange::INSERT_HOST) { - data.add(&key_); - data.add(&id_); - data.add(&host_identifier_); - data.add(&host_identifier_type_); - data.add(&host_ipv4_subnet_id_); - data.add(&host_ipv6_subnet_id_); - data.add(&host_ipv4_address_); - data.add(&host_ipv4_next_server_); - data.add(&host_ipv4_server_hostname_); - data.add(&host_ipv4_boot_file_name_); - data.add(&auth_key_); - data.add(&hostname_); - data.add(&lower_case_hostname_); - data.add(&user_context_); - data.add(&host_ipv4_client_classes_); - data.add(&host_ipv6_client_classes_); - } - - // Reservation - data.add(&reserved_ipv6_prefix_address_); - data.add(&reserved_ipv6_prefix_length_); - data.add(&reserved_ipv6_prefix_address_type_); - data.add(&iaid_); - - // Option - data.add(&option_universe_); - data.add(&option_code_); - data.add(&option_value_); - data.add(&option_formatted_value_); - data.add(&option_space_); - data.add(&option_is_persistent_); - data.add(&option_client_class_); - data.add(&option_subnet_id_); - data.add(&option_user_context_); - data.add(&option_scope_id_); - - } catch (const Exception& ex) { - isc_throw(DbOperationError, - "CqlHostExchange::createBindForMutation(): " - "could not create bind array from host " - << host->getHostname() << ", reason: " << ex.what()); - } -} - -void -CqlHostExchange::createBindForDelete(const HostPtr& host, - const Optional& subnet_id, - const IPv6Resrv* const reservation, - const std::string& option_space, - const OptionDescriptor& option_descriptor, - StatementTag statement_tag, AnyArray& data) { - prepareExchange(host, subnet_id, reservation, option_space, option_descriptor); - - try { - // Add all parameters to bind array. - data.clear(); - - if (statement_tag == CqlHostExchange::DELETE_HOST) { - data.add(&key_); - data.add(&id_); - } - - } catch (const Exception& ex) { - isc_throw(DbOperationError, - "CqlHostExchange::createBindForDelete(): " - "could not create bind array from host " - << host->getHostname() << ", reason: " << ex.what()); - } -} - -uint64_t -CqlHostExchange::hashIntoId() const { - // Add a separator between aggregated field to avoid collisions - // between distinct entries. - - // Get key. - std::stringstream key_stream; - key_stream << hostKey(); - key_stream << std::setw(V6ADDRESS_TEXT_MAX_LEN) << std::setfill('-') - << reserved_ipv6_prefix_address_; - key_stream << std::setw(4) << std::setfill('-') - << reserved_ipv6_prefix_length_; - key_stream << std::setw(4) << std::setfill('-') << option_code_; - key_stream << std::setw(OPTION_SPACE_MAX_LEN) << std::setfill('-') - << option_space_; - const std::string key = key_stream.str(); - - return (Hash64::hash(key)); -} - -uint64_t -CqlHostExchange::hashIntoKey() const { - const std::string key = hostKey(); - - return (Hash64::hash(key)); -} - -std::string -CqlHostExchange::hostKey() const { - // Add a separator between aggregated field to avoid collisions - // between distinct entries. - // Get key. - std::stringstream key_stream; - if (host_ipv4_address_) { - key_stream << std::setw(3 * DUID::MAX_DUID_LEN - 1) << std::setfill('-') - << "-"; - key_stream << std::setw(10) << std::setfill('-') << "-"; - } else { - key_stream << std::setw(3 * DUID::MAX_DUID_LEN - 1) << std::setfill('-') - << DUID(host_identifier_).toText(); - key_stream << std::setw(10) << std::setfill('-') << host_identifier_type_; - } - key_stream << std::setw(10) << std::setfill('-') << host_ipv4_subnet_id_; - key_stream << std::setw(10) << std::setfill('-') << host_ipv6_subnet_id_; - key_stream << std::setw(V4ADDRESS_TEXT_MAX_LEN) << std::setfill('-') - << host_ipv4_address_; - return key_stream.str(); -} - -boost::any -CqlHostExchange::retrieve() { - const uint64_t id = static_cast(id_); - - HostIdentifier host_identifier = - HostIdentifier(host_identifier_.begin(), host_identifier_.end()); - - // Set the host identifier type in a variable of the appropriate - // data type. - Host::IdentifierType host_identifier_type = - static_cast(host_identifier_type_); - - // Set IPv4 subnet ID to the value returned. - SubnetID ipv4_subnet_id = static_cast(host_ipv4_subnet_id_); - - // Set IPv6 subnet ID to the value returned. - SubnetID ipv6_subnet_id = static_cast(host_ipv6_subnet_id_); - - // Set IPv4 address reservation. - asiolink::IOAddress ipv4_reservation = - asiolink::IOAddress(static_cast(host_ipv4_address_)); - - Host* host = new Host(host_identifier.data(), host_identifier.size(), - host_identifier_type, ipv4_subnet_id, ipv6_subnet_id, - ipv4_reservation, hostname_, - host_ipv4_client_classes_, host_ipv6_client_classes_, - static_cast(host_ipv4_next_server_), - host_ipv4_server_hostname_, host_ipv4_boot_file_name_, - AuthKey(auth_key_)); - - // Set the user context if there is one. - if (!user_context_.empty()) { - try { - ConstElementPtr ctx = Element::fromJSON(user_context_); - if (!ctx || (ctx->getType() != Element::map)) { - isc_throw(BadValue, "user context '" << user_context_ - << "' is not a JSON map"); - } - host->setContext(ctx); - } catch (const isc::data::JSONError& ex) { - isc_throw(BadValue, "user context '" << user_context_ - << "' is invalid JSON: " << ex.what()); - } - } - - host->setHostId(id); - - const IPv6Resrv reservation = retrieveReservation(); - if (reservation != NULL_IPV6_RESERVATION && - !host->hasReservation(reservation)) { - host->addReservation(reservation); - } - - OptionWrapper option_wrapper = retrieveOption(); - if (option_wrapper.option_descriptor_) { - if (option_wrapper.option_descriptor_->option_->getUniverse() == Option::V4) { - host->getCfgOption4()->add(*option_wrapper.option_descriptor_, - option_wrapper.option_space_); - } else if (option_wrapper.option_descriptor_->option_->getUniverse() == Option::V6) { - host->getCfgOption6()->add(*option_wrapper.option_descriptor_, - option_wrapper.option_space_); - } - } - - return (host); -} - -const IPv6Resrv -CqlHostExchange::retrieveReservation() const { - // Set the IPv6 Reservation type (0 = IA_NA, 2 = IA_PD). - IPv6Resrv::Type type; - switch (reserved_ipv6_prefix_address_type_) { - case 0: - type = IPv6Resrv::TYPE_NA; - break; - case 2: - type = IPv6Resrv::TYPE_PD; - break; - case NULL_RESERVED_IPV6_PREFIX_ADDRESS_TYPE: - return (NULL_IPV6_RESERVATION); - default: - isc_throw(BadValue, "CqlHostExchange::retrieveReservation(): invalid IPv6 " - "reservation type returned: " << reserved_ipv6_prefix_address_type_ - << ". Only 0 (IA_NA) or 2 (IA_PD) are allowed."); - } - - return (IPv6Resrv(type, IOAddress(reserved_ipv6_prefix_address_), - reserved_ipv6_prefix_length_)); -} - -const OptionWrapper -CqlHostExchange::retrieveOption() const { - // Options are held in a binary or textual format in the database. - // This is similar to having an option specified in a server - // configuration file. Such option is converted to appropriate C++ - // class, using option definition. Thus, we need to find the - // option definition for this option code and option space. - - // If the option space is a standard DHCPv4 or DHCPv6 option space, - // this is most likely a standard option, for which we have a - // definition created within libdhcp++. - if (option_space_.empty() || option_universe_ == NULL_OPTION_UNIVERSE) { - return (OptionWrapper(OptionDescriptorPtr(), "")); - } - - OptionDefinitionPtr option_definition_ptr = - LibDHCP::getOptionDef(option_space_, option_code_); - - // Otherwise, we may check if this an option encapsulated within the - // vendor space. - if (!option_definition_ptr && option_space_ != DHCP4_OPTION_SPACE && - option_space_ != DHCP6_OPTION_SPACE) { - uint32_t vendor_id = LibDHCP::optionSpaceToVendorId(option_space_); - if (vendor_id > 0) { - option_definition_ptr = LibDHCP::getVendorOptionDef( - static_cast(option_universe_), vendor_id, - option_code_); - } - } - - // In all other cases, we use runtime option definitions, which - // should be also registered within the libdhcp++. - if (!option_definition_ptr) { - option_definition_ptr = - LibDHCP::getRuntimeOptionDef(option_space_, option_code_); - } - - OptionPtr option; - if (!option_definition_ptr) { - // If no definition found, we use generic option type. - OptionBuffer option_buffer(option_value_.begin(), option_value_.end()); - option = boost::make_shared