summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRazvan Becheriu <razvan@isc.org>2022-03-30 11:46:28 +0200
committerRazvan Becheriu <razvan@isc.org>2022-03-31 10:11:37 +0200
commitd41571ce170bce6f9e87e01ebf9292f4372ce3c6 (patch)
treeb9be5bcb129cc3f16b9fe3d83019e08c928a8251
parent[#2371] update version in configure.ac (diff)
downloadkea-d41571ce170bce6f9e87e01ebf9292f4372ce3c6.tar.xz
kea-d41571ce170bce6f9e87e01ebf9292f4372ce3c6.zip
[#2116] remove cql code
-rw-r--r--.clang-format2
-rw-r--r--.gitlab-ci.yml7
-rw-r--r--CONTRIBUTING.md10
-rw-r--r--configure.ac96
-rw-r--r--doc/Makefile.am2
-rw-r--r--doc/devel/Doxyfile1
-rw-r--r--doc/devel/cross-compile.dox1
-rw-r--r--doc/devel/unit-tests.dox23
-rw-r--r--doc/examples/kea4/advanced.json2
-rw-r--r--doc/examples/kea4/all-keys-netconf.json41
-rw-r--r--doc/examples/kea4/all-keys.json41
-rw-r--r--doc/examples/kea4/backends.json16
-rw-r--r--doc/examples/kea4/cassandra.json121
-rw-r--r--doc/examples/kea4/global-reservations.json2
-rw-r--r--doc/examples/kea4/ha-load-balancing-primary.json4
-rw-r--r--doc/examples/kea4/leases-expiration.json2
-rw-r--r--doc/examples/kea4/multiple-options.json2
-rw-r--r--doc/examples/kea4/mysql-reservations.json2
-rw-r--r--doc/examples/kea4/pgsql-reservations.json2
-rw-r--r--doc/examples/kea4/reservations.json6
-rw-r--r--doc/examples/kea4/several-subnets.json2
-rw-r--r--doc/examples/kea4/single-subnet.json2
-rw-r--r--doc/examples/kea4/with-ddns.json2
-rw-r--r--doc/examples/kea6/advanced.json2
-rw-r--r--doc/examples/kea6/all-keys-netconf.json41
-rw-r--r--doc/examples/kea6/all-keys.json41
-rw-r--r--doc/examples/kea6/backends.json16
-rw-r--r--doc/examples/kea6/cassandra.json122
-rw-r--r--doc/examples/kea6/duid.json2
-rw-r--r--doc/examples/kea6/global-reservations.json2
-rw-r--r--doc/examples/kea6/ha-hot-standby.json4
-rw-r--r--doc/examples/kea6/leases-expiration.json2
-rw-r--r--doc/examples/kea6/multiple-options.json2
-rw-r--r--doc/examples/kea6/mysql-reservations.json2
-rw-r--r--doc/examples/kea6/pgsql-reservations.json2
-rw-r--r--doc/examples/kea6/reservations.json2
-rw-r--r--doc/examples/kea6/several-subnets.json2
-rw-r--r--doc/examples/kea6/simple.json2
-rw-r--r--doc/examples/kea6/tee-times.json2
-rw-r--r--doc/examples/kea6/with-ddns.json2
-rw-r--r--doc/examples/template-power-user-home/kea-dhcp4-1.conf4
-rw-r--r--doc/examples/template-power-user-home/kea-dhcp4-2.conf4
-rw-r--r--doc/sphinx/arm/admin.rst159
-rw-r--r--doc/sphinx/arm/database-connectivity.rst2
-rw-r--r--doc/sphinx/arm/dhcp4-srv.rst141
-rw-r--r--doc/sphinx/arm/dhcp6-srv.rst74
-rw-r--r--doc/sphinx/arm/hammer.rst2
-rw-r--r--doc/sphinx/arm/hooks-ha.rst6
-rw-r--r--doc/sphinx/arm/hooks-host-cache.rst5
-rw-r--r--doc/sphinx/arm/hooks-lease-cmds.rst8
-rw-r--r--doc/sphinx/arm/hooks-radius.rst2
-rw-r--r--doc/sphinx/arm/hooks.rst60
-rw-r--r--doc/sphinx/arm/install.rst96
-rw-r--r--doc/sphinx/arm/logging.rst3
-rw-r--r--doc/sphinx/arm/security.rst11
-rw-r--r--doc/sphinx/grammar/grammar-dhcp4-parser.rst22
-rw-r--r--doc/sphinx/grammar/grammar-dhcp6-parser.rst22
-rw-r--r--platforms.rst5
-rw-r--r--src/bin/admin/admin-utils.sh60
-rw-r--r--src/bin/admin/kea-admin.in124
-rw-r--r--src/bin/admin/tests/.gitignore1
-rw-r--r--src/bin/admin/tests/Makefile.am4
-rw-r--r--src/bin/admin/tests/cql_tests.sh.in507
-rw-r--r--src/bin/admin/tests/data/Makefile.am7
-rw-r--r--src/bin/admin/tests/data/cql.hosts_data_test.csv24
-rw-r--r--src/bin/admin/tests/data/cql.hosts_data_test.reference.csv24
-rw-r--r--src/bin/admin/tests/data/cql.lease4_dump_test.reference.csv4
-rw-r--r--src/bin/admin/tests/data/cql.lease6_dump_test.reference.csv4
-rw-r--r--src/bin/admin/tests/data/cql.subnet_id_test.reference.csv6
-rw-r--r--src/bin/admin/tests/dhcpdb_create_1.0.cql193
-rw-r--r--src/bin/d2/tests/Makefile.am3
-rw-r--r--src/bin/dhcp4/Makefile.am9
-rw-r--r--src/bin/dhcp4/dhcp4_lexer.cc2871
-rw-r--r--src/bin/dhcp4/dhcp4_lexer.ll86
-rw-r--r--src/bin/dhcp4/dhcp4_parser.cc5041
-rw-r--r--src/bin/dhcp4/dhcp4_parser.h1883
-rw-r--r--src/bin/dhcp4/dhcp4_parser.yy70
-rw-r--r--src/bin/dhcp4/dhcp4_srv.cc6
-rw-r--r--src/bin/dhcp4/location.hh54
-rw-r--r--src/bin/dhcp4/tests/Makefile.am7
-rw-r--r--src/bin/dhcp4/tests/dora_unittest.cc107
-rw-r--r--src/bin/dhcp4/tests/parser_unittest.cc1
-rw-r--r--src/bin/dhcp6/Makefile.am9
-rw-r--r--src/bin/dhcp6/dhcp6_lexer.cc2860
-rw-r--r--src/bin/dhcp6/dhcp6_lexer.ll86
-rw-r--r--src/bin/dhcp6/dhcp6_parser.cc5183
-rw-r--r--src/bin/dhcp6/dhcp6_parser.h1919
-rw-r--r--src/bin/dhcp6/dhcp6_parser.yy70
-rw-r--r--src/bin/dhcp6/dhcp6_srv.cc6
-rw-r--r--src/bin/dhcp6/location.hh54
-rw-r--r--src/bin/dhcp6/tests/Makefile.am7
-rw-r--r--src/bin/dhcp6/tests/parser_unittest.cc1
-rw-r--r--src/bin/keactrl/kea-dhcp4.conf.pre4
-rw-r--r--src/bin/keactrl/kea-dhcp6.conf.pre4
-rw-r--r--src/bin/lfc/Makefile.am6
-rw-r--r--src/bin/lfc/tests/Makefile.am6
-rw-r--r--src/hooks/dhcp/lease_cmds/lease_cmds.dox10
-rw-r--r--src/hooks/dhcp/lease_cmds/tests/Makefile.am4
-rw-r--r--src/hooks/dhcp/stat_cmds/stat_cmds.dox6
-rw-r--r--src/hooks/dhcp/stat_cmds/tests/Makefile.am7
-rw-r--r--src/lib/Makefile.am4
-rw-r--r--src/lib/config_backend/base_config_backend.h4
-rw-r--r--src/lib/config_backend/tests/config_backend_mgr_unittest.cc6
-rw-r--r--src/lib/cql/Makefile.am32
-rw-r--r--src/lib/cql/cql_connection.cc470
-rw-r--r--src/lib/cql/cql_connection.h240
-rw-r--r--src/lib/cql/cql_exchange.cc1021
-rw-r--r--src/lib/cql/cql_exchange.h325
-rw-r--r--src/lib/cql/sql_common.h56
-rw-r--r--src/lib/cql/tests/.gitignore1
-rw-r--r--src/lib/cql/tests/Makefile.am38
-rw-r--r--src/lib/cql/tests/cql_connection_unittest.cc78
-rw-r--r--src/lib/cql/tests/run_unittests.cc20
-rw-r--r--src/lib/cql/testutils/Makefile.am23
-rw-r--r--src/lib/cql/testutils/cql_schema.cc100
-rw-r--r--src/lib/cql/testutils/cql_schema.h105
-rw-r--r--src/lib/database/backend_selector.cc5
-rw-r--r--src/lib/database/backend_selector.h1
-rw-r--r--src/lib/database/database.dox3
-rw-r--r--src/lib/database/database_connection.cc7
-rw-r--r--src/lib/database/db_exceptions.h12
-rw-r--r--src/lib/database/db_log.cc6
-rw-r--r--src/lib/database/db_log.h5
-rw-r--r--src/lib/database/db_messages.cc8
-rw-r--r--src/lib/database/db_messages.h4
-rw-r--r--src/lib/database/db_messages.mes16
-rw-r--r--src/lib/database/dbaccess_parser.cc38
-rw-r--r--src/lib/database/tests/backend_selector_unittest.cc4
-rw-r--r--src/lib/database/tests/database_connection_unittest.cc7
-rw-r--r--src/lib/dhcpsrv/Makefile.am20
-rw-r--r--src/lib/dhcpsrv/benchmarks/Makefile.am21
-rw-r--r--src/lib/dhcpsrv/benchmarks/benchmarks.dox20
-rw-r--r--src/lib/dhcpsrv/benchmarks/cql_host_data_source_benchmark.cc200
-rw-r--r--src/lib/dhcpsrv/benchmarks/cql_lease_mgr_benchmark.cc268
-rw-r--r--src/lib/dhcpsrv/cql_host_data_source.cc3729
-rw-r--r--src/lib/dhcpsrv/cql_host_data_source.h470
-rw-r--r--src/lib/dhcpsrv/cql_lease_mgr.cc2884
-rw-r--r--src/lib/dhcpsrv/cql_lease_mgr.h617
-rw-r--r--src/lib/dhcpsrv/database_backends.dox16
-rw-r--r--src/lib/dhcpsrv/dhcpsrv_messages.cc80
-rw-r--r--src/lib/dhcpsrv/dhcpsrv_messages.h40
-rw-r--r--src/lib/dhcpsrv/dhcpsrv_messages.mes174
-rw-r--r--src/lib/dhcpsrv/host.h8
-rw-r--r--src/lib/dhcpsrv/host_data_source_factory.cc32
-rw-r--r--src/lib/dhcpsrv/lease_mgr_factory.cc14
-rw-r--r--src/lib/dhcpsrv/tests/Makefile.am14
-rw-r--r--src/lib/dhcpsrv/tests/alloc_engine4_unittest.cc175
-rw-r--r--src/lib/dhcpsrv/tests/cfg_db_access_unittest.cc78
-rw-r--r--src/lib/dhcpsrv/tests/cql_host_data_source_unittest.cc929
-rw-r--r--src/lib/dhcpsrv/tests/cql_lease_mgr_unittest.cc892
-rw-r--r--src/lib/dhcpsrv/testutils/Makefile.am8
-rw-r--r--src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.cc66
-rw-r--r--src/lib/process/config_ctl_info.h2
-rw-r--r--src/lib/process/tests/config_ctl_info_unittests.cc2
-rw-r--r--src/lib/yang/tests/adaptor_config_unittests.cc2
-rw-r--r--src/lib/yang/tests/config_unittests.cc6
-rw-r--r--src/lib/yang/translator_database.cc56
-rw-r--r--src/lib/yang/translator_database.h14
-rw-r--r--src/share/database/scripts/Makefile.am2
-rw-r--r--src/share/database/scripts/cql/.gitignore5
-rw-r--r--src/share/database/scripts/cql/Makefile.am20
-rw-r--r--src/share/database/scripts/cql/dhcpdb_create.cql386
-rw-r--r--src/share/database/scripts/cql/dhcpdb_drop.cql64
-rw-r--r--src/share/database/scripts/cql/upgrade_1.0_to_2.0.sh.in118
-rw-r--r--src/share/database/scripts/cql/upgrade_2.0_to_3.0.sh.in281
-rw-r--r--src/share/database/scripts/cql/upgrade_3.0_to_4.0.sh.in371
-rw-r--r--src/share/database/scripts/cql/upgrade_4.0_to_5.0.sh.in434
-rw-r--r--src/share/database/scripts/cql/wipe_data.sh.in62
-rw-r--r--tools/Makefile.am8
-rwxr-xr-xtools/cql_config101
-rwxr-xr-xtools/cql_config_defines.sh.sample9
171 files changed, 8967 insertions, 28971 deletions
diff --git a/.clang-format b/.clang-format
index 7166e2f123..a514955776 100644
--- a/.clang-format
+++ b/.clang-format
@@ -50,7 +50,7 @@ IncludeCategories:
- Regex: '^<config.h>$'
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 <cassandra.h>],
- [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 <a href="https://kea.readthedocs.io">Kea Administrator
Reference Manual</a>).
-
- @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 <https://docs.datastax.com/en/cassandra/3.0/cassandra/dml/dmlConfigConsistency.html>`__
- 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 <https://docs.datastax.com/en/cassandra/3.0/cassandra/dml/dmlConfigSerialConsistency.html>`__
- 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
<https://gitlab.isc.org/isc-projects/kea/wikis/designs/commands#23-host-reservations-hr-management>`__
@@ -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
<https://gitlab.isc.org/isc-projects/kea/wikis/designs/commands#23-host-reservations-hr-management>`__
@@ -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 <https://github.com/isc-projects/kea/pull/15>`_ and
-`SSL support for Cassandra <https://github.com/isc-projects/kea/pull/118>`_. 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 '<empty>')" -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 <razvan.becheriu@qualitance.com>
-
--- 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 <user> -p <password> -k <database> -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, 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, 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, 0, 0,
0, 0, 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, 96, 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,
- 17, 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, 18, 0, 0, 0, 0, 216, 213, 0, 0,
- 0, 0, 0, 0, 179, 0, 181, 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,
- 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, 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, 84, 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,
- 88, 0, 39, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 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, 114, 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, 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, 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, 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, 98, 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, 0, 0, 0, 0, 0, 0, 0, 0, 116,
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, 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, 91, 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, 90, 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, 129, 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, 0, 0, 0, 0, 0, 109, 39, 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, 71, 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, 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, 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, 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, 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,
- 58, 0, 0, 0, 127, 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, 161, 0, 0, 0, 0, 0, 0,
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, 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, 0, 0, 0, 23, 0, 0, 0, 0,
+ 0, 0, 180, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 120, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 166, 0, 0,
- 0, 0, 164, 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, 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, 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,
- 67, 0, 0, 0, 0, 0, 0, 106, 107, 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,
- 86, 0, 0, 0, 0, 0, 60, 0, 0, 0,
- 0, 0, 0, 44, 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, 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, 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, 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, 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, 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, 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, 149, 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, 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, 46, 0, 0, 0, 67, 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
+ 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, 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,
-
- 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,
-
- 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,
-
- 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, 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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
-
+ 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, 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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, 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, 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, 45, 45, 45,
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, 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,
- 2088, 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, 2088, 45, 45, 45, 45, 2088, 2088, 2088, 45,
- 45, 45, 45, 45, 2088, 45, 2088, 45, 114, 45,
+ 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,
- 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 2088, 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, 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, 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, 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, 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, 45, 45,
- 45, 45, 45, 45, 45, 2088, 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, 45, 45, 45, 45, 45, 2010, 2010, 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, 2010, 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, 2010, 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, 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, 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, 2010, 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, 2088, 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, 2088, 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,
- 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, 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, 45, 45, 45, 2088, 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, 45, 45, 2088, 45, 45,
- 45, 45, 2088, 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, 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, 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,
- 2088, 45, 45, 45, 45, 45, 45, 2088, 2088, 45,
+ 45, 45, 45, 45, 2010, 45, 45, 45, 45, 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, 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, 45, 2088, 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, 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, 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,
- 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,
+ 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, 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, 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,
- 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,
+ 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,
- 45, 2088, 45, 45, 45, 2088, 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, 45, 45, 2088, 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, 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,
-
- 147, 45, 45, 189, 135, 187, 148, 45, 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,
+
+ 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,
-
- 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,
+ 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,
+
+ 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
+ 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, 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
-
- 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,
+ 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,
+
+ 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,
-
- 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,
+ 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,
+
+ 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,
-
- 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444,
+ 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,
+
+ 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,
-
- 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,
-
- 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,
+ 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,
+
+ 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,
+
+ 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,
-
- 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,
-
- 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,
-
- 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,
+ 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, 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,
+
+ 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,
+
+ 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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
+ 112, 112, 112, 184, 840, 184, 203, 203, 203, 836,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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, 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,
-
- 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,
-
- 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,
+ 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, 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,
+
+ 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,
+
+ 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,
-
- 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,
-
- 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,
+ 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,
+
+ 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,
+
+ 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
-
- 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
+ 43, 41, 39, 38, 24, 14, 11, 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, 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,
-
- 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,
-
- 2168, 2184, 2233, 2241, 2256, 2257, 2258, 2259, 2260, 2261,
- 2263, 2281, 2294, 2299, 2303, 2305, 2307, 2309
+ 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,
+
+ 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,
+
+ 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 );
@@ -2906,18 +2861,6 @@ 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:
case isc::dhcp::Parser4Context::HOSTS_DATABASE:
case isc::dhcp::Parser4Context::CONFIG_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:
-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:
+case 42:
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:
-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:
+case 47:
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 <https://www.gnu.org/licenses/>.
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
// 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 <dhcp4/parser_context.h>
-#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<void> (0)
# define YY_STACK_PRINT() static_cast<void> (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 <typename Base>
void
- Dhcp4Parser::yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const
+ Dhcp4Parser::yy_print_ (std::ostream& yyo,
+ const basic_symbol<Base>& 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"
- 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"
+#line 2033 "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. */
- 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;
- }
-
+ // Generate an error message.
std::string
- Dhcp4Parser::symbol_name (symbol_kind_type yysymbol)
+ Dhcp4Parser::yysyntax_error_ (state_type yystate, const symbol_type& yyla) const
{
- 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;
- }
-
-
-
-
-
+ // 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];
- 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, 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, 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, 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, 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,
- 0, 6, 0, 4, 0, 1, 1, 3, 2, 0,
+ 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, 3,
- 1, 0, 4, 0, 4, 0, 4, 1, 0, 4,
- 3, 0, 6, 0, 1, 1, 3, 2, 0, 4,
+ 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, 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, 0, 6, 0, 4, 1, 3, 2, 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 <https://www.gnu.org/licenses/>.
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
// 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 <cassert>
# include <cstdlib> // std::abort
@@ -104,9 +103,9 @@ using namespace std;
#endif
# include "location.hh"
#include <typeinfo>
-#ifndef PARSER4__ASSERT
+#ifndef YY_ASSERT
# include <cassert>
-# 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 <typename T>
- 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> ()) 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> ()) T (std::forward <U>(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> ()) 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 (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_<T> ();
}
@@ -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_<T> ();
}
@@ -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<T> (), that.as<T> ());
}
@@ -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 <typename T>
T*
yyas_ () YY_NOEXCEPT
{
- void *yyp = yyraw_;
+ void *yyp = yybuffer_.yyraw;
return static_cast<T*> (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<const T*> (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
- {
- 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"
+ enum yytokentype
+ {
+ 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
};
- /// 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;
+ /// (External) token type, as returned by yylex.
+ typedef token::yytokentype token_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
- };
- };
+ /// Symbol type: an internal symbol number.
+ typedef int symbol_number_type;
- /// (Internal) symbol kind.
- typedef symbol_kind::symbol_kind_type symbol_kind_type;
+ /// The symbol type number to denote an empty symbol.
+ enum { empty_symbol = -2 };
- /// The number of tokens.
- static const symbol_kind_type YYNTOKENS = symbol_kind::YYNTOKENS;
+ /// 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 <typename Base>
@@ -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<Base>& 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;
-
- /// Constructor from (external) token numbers.
- by_kind (kind_type t) 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_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<by_kind>
+ struct symbol_type : basic_symbol<by_type>
{
/// Superclass.
- typedef basic_symbol<by_kind> super_type;
+ typedef basic_symbol<by_type> 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
@@ -1790,36 +1034,6 @@ switch (yykind)
#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
make_COMMA (location_type l)
{
return symbol_type (token::TOKEN_COMMA, std::move (l));
@@ -2345,21 +1559,6 @@ switch (yykind)
#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
make_USER (location_type l)
{
return symbol_type (token::TOKEN_USER, std::move (l));
@@ -2480,66 +1679,6 @@ switch (yykind)
#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
make_MAX_RECONNECT_TRIES (location_type l)
{
return symbol_type (token::TOKEN_MAX_RECONNECT_TRIES, std::move (l));
@@ -2630,51 +1769,6 @@ switch (yykind)
#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
make_MAX_ROW_ERRORS (location_type l)
{
return symbol_type (token::TOKEN_MAX_ROW_ERRORS, std::move (l));
@@ -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 <typename Base>
@@ -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 <symbol_kind_type> (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 <typename Base>
+ Dhcp4Parser::basic_symbol<Base>::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 <typename Base>
Dhcp4Parser::basic_symbol<Base>::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 <typename Base>
- Dhcp4Parser::symbol_kind_type
- Dhcp4Parser::basic_symbol<Base>::type_get () const YY_NOEXCEPT
- {
- return this->kind ();
- }
-
-
template <typename Base>
bool
Dhcp4Parser::basic_symbol<Base>::empty () const YY_NOEXCEPT
{
- return this->kind () == symbol_kind::S_YYEMPTY;
+ return Base::type_get () == empty_symbol;
}
template <typename Base>
@@ -5413,33 +4516,33 @@ switch (yykind)
Dhcp4Parser::basic_symbol<Base>::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
- {
- return kind_;
- }
-
-
- inline
- Dhcp4Parser::symbol_kind_type
- Dhcp4Parser::by_kind::type_get () const YY_NOEXCEPT
+ int
+ Dhcp4Parser::by_type::type_get () const YY_NOEXCEPT
{
- return this->kind ();
+ return type;
}
-
#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 <dhcpsrv/pgsql_lease_mgr.h>
#endif
-#ifdef HAVE_CQL
-#include <dhcpsrv/cql_lease_mgr.h>
-#endif
#include <dhcpsrv/memfile_lease_mgr.h>
#include <boost/algorithm/string.hpp>
@@ -4130,9 +4127,6 @@ Dhcpv4Srv::getVersion(bool extended) {
#ifdef HAVE_PGSQL
tmp << PgSqlLeaseMgr::getDBVersion() << endl;
#endif
-#ifdef HAVE_CQL
- tmp << CqlLeaseMgr::getDBVersion() << endl;
-#endif
tmp << Memfile_LeaseMgr::getDBVersion(Memfile_LeaseMgr::V4);
// @todo: more details about database runtime
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 <https://www.gnu.org/licenses/>.
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
// 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 <dhcpsrv/subnet_id.h>
#include <testutils/gtest_utils.h>
-#ifdef HAVE_CQL
-#include <cql/testutils/cql_schema.h>
-#endif
-
#ifdef HAVE_MYSQL
#include <mysql/testutils/mysql_schema.h>
#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
@@ -417,24 +409,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\": [ \"*\" ]"
"},"
"\"host-reservation-identifiers\": [ \"circuit-id\" ],"
@@ -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<IOAddress> 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, 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,
- 55, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 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, 223, 220, 0, 0, 0, 0, 29, 0, 31,
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, 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,
+ 57, 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, 99, 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, 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, 0, 0, 0, 155, 0, 180, 0, 51, 0,
- 56, 0, 0, 0, 0, 37, 34, 33, 0, 0,
- 0, 168, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 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, 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,
- 0, 53, 0, 0, 32, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 110, 0,
+ 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, 161, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 156, 0, 0, 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, 7, 35, 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, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 129, 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, 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,
- 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, 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, 112, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 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, 119, 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,
- 0, 0, 0, 0, 0, 0, 163, 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, 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, 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, 102, 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, 200, 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, 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,
+ 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,
- 57, 111, 0, 0, 0, 159, 0, 0, 0, 0,
- 50, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 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, 0, 165, 0, 0, 0, 0, 0, 0,
- 0, 0, 150, 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, 161, 178, 0, 40, 0, 170, 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, 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, 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, 159, 0, 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, 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, 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, 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,
- 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, 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, 108, 0, 0, 0, 0, 173, 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, 0, 0, 0, 0, 0, 0, 42,
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, 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, 0, 0, 24, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 187, 0, 0, 0, 0, 156, 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,
- 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, 76, 0, 133, 0, 0, 0, 61,
0, 0, 0, 0, 0, 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, 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, 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, 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, 70, 0, 0, 0, 98, 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, 66, 0, 0, 0, 90, 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, 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, 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 2124, 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, 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,
- 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, 45, 45, 45, 45, 2124, 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, 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, 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,
+ 2046, 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, 2046, 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, 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, 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, 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, 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, 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, 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, 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, 45, 2046, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 2046, 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, 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, 45, 2124, 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, 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,
- 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, 2046, 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, 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, 45, 45, 45, 45, 45, 2124, 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, 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, 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, 2124, 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, 2124, 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,
- 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,
+ 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,
- 2124, 2124, 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, 2046,
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, 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, 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, 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, 2124, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 2124, 45, 45, 45, 2124, 2124,
+ 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, 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, 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, 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, 2046, 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, 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, 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, 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,
- 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, 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, 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, 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, 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, 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, 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, 45, 45, 2124, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 2124, 45, 45, 45, 45, 2124, 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,
- 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, 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, 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, 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, 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, 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, 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, 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,
-
- 154, 45, 155, 45, 45, 45, 45, 45, 45, 45,
+ 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,
+
+ 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
-
- 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246,
- 1247, 1248, 1250, 1249, 1251, 1252, 1253, 1254, 1255, 1256,
+ 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,
+
+ 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,
-
- 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,
-
- 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,
+ 1326, 1327, 1328, 1329, 1330, 1308, 1331, 1332, 1333, 1334,
+
+ 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,
+
+ 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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
+ 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, 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
+ 1206, 1207, 1208, 1209, 1210, 1211, 1213, 1214, 1215, 1216,
+ 1217, 1218, 1219, 1220, 1222, 1198, 1223, 1224, 1225, 1226,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
-
- 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,
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
+
+ 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,
-
- 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
+ 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,
+
+ 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,
-
- 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,
-
- 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
+ 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,
+
+ 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,
+
+ 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 );
@@ -3183,18 +3139,6 @@ 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:
case isc::dhcp::Parser6Context::HOSTS_DATABASE:
case isc::dhcp::Parser6Context::CONFIG_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:
-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:
+case 62:
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:
-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:
+case 67:
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 <https://www.gnu.org/licenses/>.
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
// 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 <dhcp6/parser_context.h>
-#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<void> (0)
# define YY_STACK_PRINT() static_cast<void> (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 <typename Base>
void
- Dhcp6Parser::yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const
+ Dhcp6Parser::yy_print_ (std::ostream& yyo,
+ const basic_symbol<Base>& 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"
- 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"
+#line 1981 "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"
- 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"
+#line 1991 "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. */
- 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;
- }
-
+ // Generate an error message.
std::string
- Dhcp6Parser::symbol_name (symbol_kind_type yysymbol)
+ Dhcp6Parser::yysyntax_error_ (state_type yystate, const symbol_type& yyla) const
{
- 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;
- }
-
-
-
-
-
+ // 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];
- 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, 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, 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, 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, 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, 0, 6, 0, 4,
+ 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, 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, 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,
- 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,
+ 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, 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,
- 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 <https://www.gnu.org/licenses/>.
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
// 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 <cassert>
# include <cstdlib> // std::abort
@@ -104,9 +103,9 @@ using namespace std;
#endif
# include "location.hh"
#include <typeinfo>
-#ifndef PARSER6__ASSERT
+#ifndef YY_ASSERT
# include <cassert>
-# 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 <typename T>
- 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> ()) 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> ()) T (std::forward <U>(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> ()) 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 (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_<T> ();
}
@@ -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_<T> ();
}
@@ -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<T> (), that.as<T> ());
}
@@ -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 <typename T>
T*
yyas_ () YY_NOEXCEPT
{
- void *yyp = yyraw_;
+ void *yyp = yybuffer_.yyraw;
return static_cast<T*> (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<const T*> (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
- {
- 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"
+ enum yytokentype
+ {
+ 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
};
- /// 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;
+ /// (External) token type, as returned by yylex.
+ typedef token::yytokentype token_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
- };
- };
+ /// Symbol type: an internal symbol number.
+ typedef int symbol_number_type;
- /// (Internal) symbol kind.
- typedef symbol_kind::symbol_kind_type symbol_kind_type;
+ /// The symbol type number to denote an empty symbol.
+ enum { empty_symbol = -2 };
- /// The number of tokens.
- static const symbol_kind_type YYNTOKENS = symbol_kind::YYNTOKENS;
+ /// 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 <typename Base>
@@ -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<Base>& 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;
-
- /// Constructor from (external) token numbers.
- by_kind (kind_type t) 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_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<by_kind>
+ struct symbol_type : basic_symbol<by_type>
{
/// Superclass.
- typedef basic_symbol<by_kind> super_type;
+ typedef basic_symbol<by_type> 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
@@ -1823,36 +1040,6 @@ switch (yykind)
#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
make_COMMA (location_type l)
{
return symbol_type (token::TOKEN_COMMA, std::move (l));
@@ -2183,21 +1370,6 @@ switch (yykind)
#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
make_USER (location_type l)
{
return symbol_type (token::TOKEN_USER, std::move (l));
@@ -2318,21 +1490,6 @@ switch (yykind)
#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_MAX_RECONNECT_TRIES (location_type l)
{
return symbol_type (token::TOKEN_MAX_RECONNECT_TRIES, std::move (l));
@@ -2423,96 +1580,6 @@ switch (yykind)
#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
make_MAX_ROW_ERRORS (location_type l)
{
return symbol_type (token::TOKEN_MAX_ROW_ERRORS, std::move (l));
@@ -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 <typename Base>
@@ -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 <symbol_kind_type> (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 <typename Base>
+ Dhcp6Parser::basic_symbol<Base>::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 <typename Base>
Dhcp6Parser::basic_symbol<Base>::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 <typename Base>
- Dhcp6Parser::symbol_kind_type
- Dhcp6Parser::basic_symbol<Base>::type_get () const YY_NOEXCEPT
- {
- return this->kind ();
- }
-
-
template <typename Base>
bool
Dhcp6Parser::basic_symbol<Base>::empty () const YY_NOEXCEPT
{
- return this->kind () == symbol_kind::S_YYEMPTY;
+ return Base::type_get () == empty_symbol;
}
template <typename Base>
@@ -5566,32 +4641,32 @@ switch (yykind)
Dhcp6Parser::basic_symbol<Base>::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
- {
- return kind_;
- }
-
-
- inline
- Dhcp6Parser::symbol_kind_type
- Dhcp6Parser::by_kind::type_get () const YY_NOEXCEPT
+ int
+ Dhcp6Parser::by_type::type_get () const YY_NOEXCEPT
{
- return this->kind ();
+ return type;
}
-
#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 <dhcpsrv/pgsql_lease_mgr.h>
#endif
-#ifdef HAVE_CQL
-#include <dhcpsrv/cql_lease_mgr.h>
-#endif
#include <dhcpsrv/memfile_lease_mgr.h>
#include <boost/foreach.hpp>
@@ -4187,9 +4184,6 @@ Dhcpv6Srv::getVersion(bool extended) {
#ifdef HAVE_PGSQL
tmp << PgSqlLeaseMgr::getDBVersion() << endl;
#endif
-#ifdef HAVE_CQL
- tmp << CqlLeaseMgr::getDBVersion() << endl;
-#endif
tmp << Memfile_LeaseMgr::getDBVersion(Memfile_LeaseMgr::V6);
// @todo: more details about database runtime
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 <https://www.gnu.org/licenses/>.
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
// 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<BackendSelector::Type>(-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<BackendSelector::Type>(-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<BackendSelector::Type>(-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 <razvan.becheriu@qualitance.com>
-// Andrei Pavel <andrei.pavel@qualitance.com>
-//
-// 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 <config.h>
-
-#include <cql/cql_connection.h>
-#include <cql/cql_exchange.h>
-#include <database/db_exceptions.h>
-#include <database/db_log.h>
-
-#include <string>
-
-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<uint32_t, uint32_t>
-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<CqlVersionExchange> version_exchange(new CqlVersionExchange());
- return version_exchange->retrieveVersion(conn);
-}
-
-CassConsistency CqlConnection::parseConsistency(std::string value) {
- static std::map<std::string, CassConsistency> 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<int32_t>(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<int32_t>(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<cass_uint64_t>(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<int32_t>(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<int32_t>(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<int32_t>(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 <razvan.becheriu@qualitance.com>
-// Andrei Pavel <andrei.pavel@qualitance.com>
-//
-// 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 <database/database_connection.h>
-
-#include <cassandra.h>
-
-#include <cstring>
-#include <map>
-#include <memory>
-#include <string>
-#include <unordered_map>
-#include <utility>
-#include <vector>
-
-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<uint32_t, uint32_t> 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<std::string>.
-struct StatementTagHash {
- size_t operator()(StatementTag const& key) const {
- return std::hash<std::string>{}(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<StatementTag, CqlTaggedStatement,
- StatementTagHash, StatementTagEqual> StatementMap;
-
-/// @brief A type for a single entry on the statements map
-typedef std::pair<StatementTag, CqlTaggedStatement> 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<uint32_t, uint32_t>
- 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<CqlConnection> 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 <razvan.becheriu@qualitance.com>
-// Andrei Pavel <andrei.pavel@qualitance.com>
-//
-// 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 <config.h>
-
-#include <cql/cql_connection.h>
-#include <cql/cql_exchange.h>
-#include <cql/sql_common.h>
-#include <database/db_exceptions.h>
-
-#include <boost/multi_index/hashed_index.hpp>
-#include <boost/multi_index/member.hpp>
-#include <boost/multi_index/sequenced_index.hpp>
-#include <boost/multi_index_container.hpp>
-#include <boost/noncopyable.hpp>
-#include <boost/shared_ptr.hpp>
-
-#include <fstream>
-#include <iostream>
-#include <map>
-#include <string>
-#include <utility>
-#include <vector>
-
-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<size_t>{}(static_cast<size_t>(key));
- }
-};
-
-/// @brief Defines a type for storing aux. Cassandra functions
-typedef std::unordered_map<ExchangeDataType, CqlFunction, ExchangeDataTypeHash>
- 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<std::type_index, ExchangeDataType> AnyTypeMap;
-
-// Declare uint8_t as key here for compatibility with g++ version 5. Ideally,
-// it would be CassValueType
-typedef std::unordered_map<uint8_t, ExchangeDataType> 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<cass_bool_t*>(value));
-}
-
-static CassError
-CqlBindInt8(const boost::any& value,
- const size_t& index,
- CassStatement* statement) {
- return cass_statement_bind_int8(statement, index,
- *boost::any_cast<cass_int8_t*>(value));
-}
-
-static CassError
-CqlBindInt16(const boost::any& value,
- const size_t& index,
- CassStatement* statement) {
- return cass_statement_bind_int16(statement, index,
- *boost::any_cast<cass_int16_t*>(value));
-}
-
-static CassError
-CqlBindInt32(const boost::any& value,
- const size_t& index,
- CassStatement* statement) {
- return cass_statement_bind_int32(statement, index,
- *boost::any_cast<cass_int32_t*>(value));
-}
-
-static CassError
-CqlBindInt64(const boost::any& value,
- const size_t& index,
- CassStatement* statement) {
- return cass_statement_bind_int64(statement, index,
- *boost::any_cast<cass_int64_t*>(value));
-}
-
-static CassError
-CqlBindString(const boost::any& value,
- const size_t& index,
- CassStatement* statement) {
- return cass_statement_bind_string(
- statement, index, boost::any_cast<std::string*>(value)->c_str());
-}
-
-static CassError
-CqlBindBytes(const boost::any& value,
- const size_t& index,
- CassStatement* statement) {
- CassBlob* blob_value = boost::any_cast<CassBlob*>(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<CassUuid*>(value));
-}
-
-static CassError
-CqlBindUdt(const boost::any& value,
- const size_t& index,
- CassStatement* statement) {
- Udt* udt = boost::any_cast<Udt*>(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<AnyCollection*>(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<cass_bool_t*>(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<cass_int8_t*>(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<cass_int16_t*>(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<cass_int32_t*>(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<cass_int64_t*>(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<std::string*>(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<CassBlob*>(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<CassUuid*>(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*>(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<CassCollection*>(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<cass_bool_t*>(value));
-}
-
-static CassError
-CqlCollectionAppendInt8(const boost::any& value, CassCollection* collection) {
- return cass_collection_append_int8(collection,
- *boost::any_cast<cass_int8_t*>(value));
-}
-
-static CassError
-CqlCollectionAppendInt16(const boost::any& value, CassCollection* collection) {
- return cass_collection_append_int16(collection,
- *boost::any_cast<cass_int16_t*>(value));
-}
-
-static CassError
-CqlCollectionAppendInt32(const boost::any& value, CassCollection* collection) {
- return cass_collection_append_int32(collection,
- *boost::any_cast<cass_int32_t*>(value));
-}
-
-static CassError
-CqlCollectionAppendInt64(const boost::any& value, CassCollection* collection) {
- return cass_collection_append_int64(collection,
- *boost::any_cast<cass_int64_t*>(value));
-}
-
-static CassError
-CqlCollectionAppendString(const boost::any& value, CassCollection* collection) {
- return cass_collection_append_string(
- collection, boost::any_cast<std::string*>(value)->c_str());
-}
-
-static CassError
-CqlCollectionAppendBytes(const boost::any& value, CassCollection* collection) {
- CassBlob* blob_value = boost::any_cast<CassBlob*>(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<CassUuid*>(value));
-}
-
-static CassError
-CqlCollectionAppendUdt(const boost::any& value, CassCollection* collection) {
- Udt* udt = boost::any_cast<Udt*>(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<CassCollection*>(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<cass_bool_t*>(data));
-}
-
-static CassError
-CqlGetInt8(const boost::any& data, const CassValue* value) {
- return cass_value_get_int8(value, boost::any_cast<cass_int8_t*>(data));
-}
-
-static CassError
-CqlGetInt16(const boost::any& data, const CassValue* value) {
- return cass_value_get_int16(value, boost::any_cast<cass_int16_t*>(data));
-}
-
-static CassError
-CqlGetInt32(const boost::any& data, const CassValue* value) {
- return cass_value_get_int32(value, boost::any_cast<cass_int32_t*>(data));
-}
-
-static CassError
-CqlGetInt64(const boost::any& data, const CassValue* value) {
- return cass_value_get_int64(value, boost::any_cast<cass_int64_t*>(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<char const**>(&data_value), &size_value);
- boost::any_cast<std::string*>(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<const cass_byte_t**>(&data_value), &size_value);
- boost::any_cast<CassBlob*>(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<CassUuid*>(data));
-}
-
-static CassError
-CqlGetUdt(const boost::any& data, const CassValue* value) {
- Udt* udt = boost::any_cast<Udt*>(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<AnyCollection*>(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<cass_int64_t>(cltt) +
- static_cast<cass_int64_t>(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<time_t>(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<std::string*>(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<VersionPair*>(*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 <razvan.becheriu@qualitance.com>
-// Andrei Pavel <andrei.pavel@qualitance.com>
-//
-// 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 <cql/cql_connection.h>
-#include <cql/sql_common.h>
-
-#include <boost/any.hpp> // for boost::any
-
-#include <string>
-#include <typeinfo> // for std::type_info
-#include <unordered_map> // for std::unordered_map
-#include <utility>
-#include <vector>
-
-namespace isc {
-namespace db {
-
-/// @brief Host identifier converted to Cassandra data type
-typedef std::vector<cass_byte_t> 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<boost::any> {
-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 <version,minor> 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 <cristian.secareanu@qualitance.com>
-//
-// 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 <config.h>
-
-#include <cql/cql_connection.h>
-#include <cql/cql_exchange.h>
-
-#include <cstring>
-
-#include <boost/any.hpp>
-
-#include <gtest/gtest.h>
-
-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 <config.h>
-
-#include <log/logger_support.h>
-#include <gtest/gtest.h>
-
-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 <config.h>
-
-#include <cassandra.h>
-
-#include <cql/cql_connection.h>
-#include <cql/testutils/cql_schema.h>
-#include <exceptions/exceptions.h>
-
-#include <stdlib.h>
-
-#include <fstream>
-#include <iostream>
-#include <sstream>
-#include <string>
-
-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 <config.h>
-#include <database/testutils/schema.h>
-#include <string>
-
-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:
-///
-/// <TEST_ADMIN_SCRIPTS_DIR>/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:
-///
-/// <TEST_ADMIN_SCRIPTS_DIR>/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
-///
-/// <TEST_ADMIN_SCRIPTS_DIR>/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<std::string, ConstElementPtr> 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<std::string>(reconnect_wait_time);
- } else if (param.first == "request-timeout") {
- request_timeout = param.second->intValue();
- values_copy[param.first] =
- boost::lexical_cast<std::string>(request_timeout);
-
- } else if (param.first == "tcp-keepalive") {
- tcp_keepalive = param.second->intValue();
- values_copy[param.first] =
- boost::lexical_cast<std::string>(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<uint32_t>::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<uint32_t>::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 <andrei.pavel@qualitance.com>
-//
-// 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 <config.h>
-
-#include <cql/testutils/cql_schema.h>
-
-#include <dhcpsrv/benchmarks/generic_host_data_source_benchmark.h>
-#include <dhcpsrv/benchmarks/parameters.h>
-#include <dhcpsrv/host_data_source_factory.h>
-#include <dhcpsrv/host_mgr.h>
-
-#include <iostream>
-
-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 <andrei.pavel@qualitance.com>
-//
-// 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 <config.h>
-
-#include <cql/testutils/cql_schema.h>
-
-#include <dhcpsrv/benchmarks/generic_lease_mgr_benchmark.h>
-#include <dhcpsrv/benchmarks/parameters.h>
-#include <dhcpsrv/lease_mgr_factory.h>
-
-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 <andrei.pavel@qualitance.com>
-//
-// 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 <config.h>
-
-#include <cql/cql_exchange.h>
-#include <database/db_exceptions.h>
-#include <dhcpsrv/cql_host_data_source.h>
-#include <dhcp/duid.h>
-#include <dhcp/libdhcp++.h>
-#include <dhcp/option.h>
-#include <dhcp/option_definition.h>
-#include <dhcpsrv/cfg_option.h>
-#include <dhcpsrv/cfgmgr.h>
-#include <dhcpsrv/dhcpsrv_log.h>
-#include <util/buffer.h>
-#include <util/hash.h>
-#include <util/optional.h>
-#include <asiolink/io_address.h>
-
-#include <stdint.h> // for uint64_t
-
-#include <boost/algorithm/string/classification.hpp> // for boost::is_any_of
-#include <boost/algorithm/string/split.hpp> // for split
-#include <boost/assert.hpp> // for BOOST_ASSERT
-#include <boost/unordered_map.hpp> // for std::unordered_map
-
-#include <iosfwd> // for size_t, std::stringstream
-#include <memory> // for std::unique_ptr
-#include <string> // 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<uint8_t> 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<HostIdentifier, Host::IdentifierType, SubnetID, SubnetID, IOAddress> 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<HostKey, HostPtr, boost::hash<HostKey>> HostMap;
-
-/// @brief A pair of (host key and a pointer to a host)
-typedef std::pair<HostKey, HostPtr> 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<cass_int32_t>(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<SubnetID>& 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<SubnetID>& 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<SubnetID>& 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<SubnetID>& 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<uint8_t> to
- // std::vector<cass_byte_t>.
- 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<cass_int32_t>(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<cass_int32_t>(host->getIPv4SubnetID());
-
- // host_ipv6_subnet_id: int
- host_ipv6_subnet_id_ = static_cast<cass_int32_t>(host->getIPv6SubnetID());
-
- // host_ipv4_address: int
- host_ipv4_address_ = static_cast<cass_int32_t>(host->getIPv4Reservation().toUint32());
-
- // host_ipv4_next_server: int
- host_ipv4_next_server_ = static_cast<cass_int32_t>(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<cass_int32_t>(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<const char*>(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<cass_int64_t>(hashIntoId());
-
- // key: bigint
- key_ = static_cast<cass_int64_t>(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<SubnetID>& 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<SubnetID>& 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<uint64_t>(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::IdentifierType>(host_identifier_type_);
-
- // Set IPv4 subnet ID to the value returned.
- SubnetID ipv4_subnet_id = static_cast<SubnetID>(host_ipv4_subnet_id_);
-
- // Set IPv6 subnet ID to the value returned.
- SubnetID ipv6_subnet_id = static_cast<SubnetID>(host_ipv6_subnet_id_);
-
- // Set IPv4 address reservation.
- asiolink::IOAddress ipv4_reservation =
- asiolink::IOAddress(static_cast<uint32_t>(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<uint32_t>(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>(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<Option>(static_cast<Option::Universe>(option_universe_),
- static_cast<uint16_t>(option_code_),
- option_buffer.begin(), option_buffer.end());
- } else {
- // The option value may be specified in textual or binary format
- // in the
- // database. If formatted_value is empty, the binary format is
- // used.
- // Depending on the format we use a different variant of @ref
- // optionFactory().
- if (option_formatted_value_.empty()) {
- OptionBuffer option_buffer(option_value_.begin(),
- option_value_.end());
- option = option_definition_ptr->optionFactory(
- static_cast<Option::Universe>(option_universe_),
- static_cast<uint16_t>(option_code_), option_buffer.begin(),
- option_buffer.end());
- } else {
- // Spit the value specified in comma separated values
- // format.
- std::vector<std::string> split_vector;
- boost::split(split_vector, option_formatted_value_,
- boost::is_any_of(","));
- option = option_definition_ptr->optionFactory(
- static_cast<Option::Universe>(option_universe_),
- static_cast<uint16_t>(option_code_), split_vector);
- }
- }
-
- OptionWrapper result(boost::make_shared<OptionDescriptor>(option, option_is_persistent_,
- option_formatted_value_),
- option_space_);
- // Set the user context if there is one into the option descriptor.
- if (!option_user_context_.empty()) {
- try {
- ConstElementPtr ctx = Element::fromJSON(option_user_context_);
- if (!ctx || (ctx->getType() != Element::map)) {
- isc_throw(BadValue, "option user context '" << option_user_context_
- << "' is no a JSON map");
- }
- result.option_descriptor_->setContext(ctx);
- } catch (const isc::data::JSONError& ex) {
- isc_throw(BadValue, "option user context '" << option_user_context_
- << "' is invalid JSON: " << ex.what());
- }
- }
-
- return result;
-}
-
-/// @brief Implementation of the @ref CqlHostDataSource.
-///
-/// This class is encapsulate all the Cassandra communication details.
-class CqlHostDataSourceImpl {
-public:
- /// @brief Constructor.
- ///
- /// This constructor opens database connection and initializes
- /// prepared statements used in the queries.
- /// @param parameters parameters passed to the CQL connection.
- explicit CqlHostDataSourceImpl(const DatabaseConnection::ParameterMap& parameters);
-
- /// @brief Destructor.
- virtual ~CqlHostDataSourceImpl();
-
- /// @brief Implementation of @ref CqlHostDataSource::add() and del()
- ///
- /// See @ref CqlHostDataSource::add() for parameter details.
- ///
- /// @param host host to be added or deleted
- /// @param insert insert (true) or delete (false) the host
- virtual bool insertOrDelete(const HostPtr& host, bool insert);
-
- /// @brief Implementation of @ref CqlHostDataSource::get4()
- ///
- /// See @ref CqlHostDataSource::get4() for parameter details.
- ///
- /// @param subnet_id Id of the subnet to look into
- /// @param address IPv4 address to be retrieved
- virtual ConstHostPtr get4(const SubnetID& subnet_id,
- const asiolink::IOAddress& address) const;
-
- /// @brief Implementation of @ref CqlHostDataSource::get4()
- ///
- /// See @ref CqlHostDataSource::get4() for parameter details.
- ///
- /// @param subnet_id Id of the subnet to look into
- /// @param identifier_type type of the identifier
- /// @param identifier_begin pointer to the first byte of the identifier
- /// @param identifier_len length of the identifier
- virtual ConstHostPtr get4(const SubnetID& subnet_id,
- const Host::IdentifierType& identifier_type,
- const uint8_t* identifier_begin,
- const size_t identifier_len) const;
-
- /// @brief Retrieves a host by its reserved IPv6 address or prefix
- ///
- /// See @ref CqlHostDataSource::get6() for parameter details.
- ///
- /// @param prefix IPv6 address or prefix
- /// @param prefix_len length of the prefix (or 128 for address)
- virtual ConstHostPtr get6(const asiolink::IOAddress& prefix,
- const uint8_t prefix_len) const;
-
- /// @brief Implementation of @ref CqlHostDataSource::get6()
- ///
- /// See @ref CqlHostDataSource::get6() for parameter details.
- ///
- /// @param subnet_id Id of the subnet to look into
- /// @param identifier_type type of the identifier (duid, hwaddr, flex, etc.)
- /// @param identifier_begin pointer to the first byte of the identifier
- /// @param identifier_len length of the identifier
- virtual ConstHostPtr get6(const SubnetID& subnet_id,
- const Host::IdentifierType& identifier_type,
- const uint8_t* identifier_begin,
- const size_t identifier_len) const;
-
- /// @brief Implementation of @ref CqlHostDataSource::get6()
- ///
- /// See @ref CqlHostDataSource::get6() for parameter details.
- ///
- /// @param subnet_id Id of the subnet to look into
- /// @param address IPv6 address to be retrieved
- virtual ConstHostPtr get6(const SubnetID& subnet_id,
- const asiolink::IOAddress& address) const;
-
- /// @brief Implementation of @ref CqlHostDataSource::getAll()
- ///
- /// See @ref CqlHostDataSource::getAll() for parameter details.
- ///
- /// @param identifier_type type of the identifier (duid, hwaddr, flex, etc.)
- /// @param identifier_begin pointer to the first byte of the identifier
- /// @param identifier_len length of the identifier
- virtual ConstHostCollection
- getAll(const Host::IdentifierType& identifier_type,
- const uint8_t* identifier_begin,
- const size_t identifier_len) const;
-
- /// @brief Implementation of @ref CqlHostDataSource::getAll4()
- ///
- /// See @ref CqlHostDataSource::getAll4() for parameter details.
- ///
- /// @param subnet_id identifier of the subnet to which hosts belong
- virtual ConstHostCollection getAll4(const SubnetID& subnet_id) const;
-
- /// @brief Implementation of @ref CqlHostDataSource::getAll6()
- ///
- /// See @ref CqlHostDataSource::getAll6() for parameter details.
- ///
- /// @param subnet_id identifier of the subnet to which hosts belong
- virtual ConstHostCollection getAll6(const SubnetID& subnet_id) const;
-
- /// @brief Implementation of @ref CqlHostDataSource::getAllbyHostname()
- ///
- /// See @ref CqlHostDataSource::getAllbyHostname() for parameter details.
- ///
- /// @param hostname The lower case hostname.
- virtual ConstHostCollection
- getAllbyHostname(const std::string& hostname) const;
-
- /// @brief Implementation of @ref CqlHostDataSource::getAllbyHostname4()
- ///
- /// See @ref CqlHostDataSource::getAllbyHostname4() for parameter details.
- ///
- /// @param hostname The lower case hostname.
- /// @param subnet_id Subnet identifier.
- virtual ConstHostCollection
- getAllbyHostname4(const std::string& hostname, const SubnetID& subnet_id) const;
-
- /// @brief Implementation of @ref CqlHostDataSource::getAllbyHostname6()
- ///
- /// See @ref CqlHostDataSource::getAllbyHostname6() for parameter details.
- ///
- /// @param hostname The lower case hostname.
- /// @param subnet_id Subnet identifier.
- virtual ConstHostCollection
- getAllbyHostname6(const std::string& hostname, const SubnetID& subnet_id) const;
-
- /// @brief Implementation of @ref CqlHostDataSource::getPage4()
- ///
- /// See @ref CqlHostDataSource::getPage4() for parameter details.
- ///
- /// @param subnet_id identifier of the subnet to which hosts belong
- /// @param lower_host_id Host identifier used as lower bound for the
- /// returned range.
- /// @param page_size maximum size of the page returned.
- virtual ConstHostCollection
- getPage4(const SubnetID& subnet_id,
- uint64_t lower_host_id,
- const HostPageSize& page_size) const;
-
- /// @brief Implementation of @ref CqlHostDataSource::getPage6()
- ///
- /// See @ref CqlHostDataSource::getPage6() for parameter details.
- ///
- /// @param subnet_id identifier of the subnet to which hosts belong
- /// @param lower_host_id Host identifier used as lower bound for the
- /// returned range.
- /// @param page_size maximum size of the page returned.
- virtual ConstHostCollection
- getPage6(const SubnetID& subnet_id,
- uint64_t lower_host_id,
- const HostPageSize& page_size) const;
-
- /// @brief Implementation of @ref CqlHostDataSource::getPage4()
- ///
- /// See @ref CqlHostDataSource::getPage4() for parameter details.
- ///
- /// @param lower_host_id Host identifier used as lower bound for the
- /// returned range.
- /// @param page_size maximum size of the page returned.
- virtual ConstHostCollection
- getPage4(uint64_t lower_host_id,
- const HostPageSize& page_size) const;
-
- /// @brief Implementation of @ref CqlHostDataSource::getPage6()
- ///
- /// See @ref CqlHostDataSource::getPage6() for parameter details.
- ///
- /// @param lower_host_id Host identifier used as lower bound for the
- /// returned range.
- /// @param page_size maximum size of the page returned.
- virtual ConstHostCollection
- getPage6(uint64_t lower_host_id,
- const HostPageSize& page_size) const;
-
- /// @brief Implementation of @ref CqlHostDataSource::getAll4()
- ///
- /// See @ref CqlHostDataSource::getAll4() for parameter details.
- ///
- /// @param address IPv4 address of the reservation to be retrieved
- virtual ConstHostCollection
- getAll4(const asiolink::IOAddress& address) const;
-
- /// @brief Implementation of @ref CqlHostDataSource::getAllHosts()
- ///
- /// See @ref CqlHostDataSource::getAllHosts() for parameter details.
- virtual ConstHostCollection
- getAllHosts() const;
-
- /// @brief Implementation of @ref CqlHostDataSource::getName()
- virtual std::string getName() const;
-
- /// @brief Implementation of @ref CqlHostDataSource::getVersion()
- virtual VersionPair getVersion() const;
-
-protected:
- /// @brief Adds/deletes any options found in the @ref Host object to/from a separate
- /// table entry.
- ///
- /// @param insert insert or delete a host with options
- /// @param host @ref Host object from which options are retrieved and
- /// inserted/deleted into/from the Cassandra database
- /// @param reservation reservation for the current denormalized table entry
- /// @param option_spaces list of option spaces to search for
- /// @param cfg_option option configuration used to match option spaces in
- /// order to obtain actual options
- virtual bool insertOrDeleteHostWithOptions(bool insert,
- const HostPtr& host,
- const IPv6Resrv* const reservation = NULL,
- const std::list<std::string>& option_spaces = std::list<std::string>(),
- const ConstCfgOptionPtr cfg_option = ConstCfgOptionPtr());
-
- /// @brief Adds/deletes any reservations found in the @ref Host object to/from a separate
- /// table entry.
- ///
- /// @param insert insert or deletes a host with reservations
- /// @param host @ref Host object from which reservations are retrieved and
- /// inserted/deleted into/from the Cassandra database
- /// @param reservation reservation for the current denormalized table entry
- /// @param option_spaces4 list of option spaces for universe Option::V4 to search in
- /// @param cfg_option4 option configuration for universe Option::V4 used to
- /// match option spaces in order to obtain actual options
- /// @param option_spaces6 list of option spaces for universe Option::V6 to
- /// search in
- /// @param cfg_option6 option configuration for universe Option::V6 used to
- /// match option spaces in order to obtain actual options
- virtual bool insertOrDeleteHostWithReservations(bool insert,
- const HostPtr& host,
- const IPv6Resrv* const reservation,
- const std::list<std::string>& option_spaces4,
- const ConstCfgOptionPtr cfg_option4,
- const std::list<std::string>& option_spaces6,
- const ConstCfgOptionPtr cfg_option6);
-
- /// @brief Retrieves a single host.
- ///
- /// Calls @ref getHostCollection() and checks if a single host was
- /// returned.
- ///
- /// @param where_values array of bound objects used to filter the results
- /// @param statement_tag prepared statement being executed
- ///
- /// @return one host or a null pointer to a host
- ///
- /// @throw MultipleRecords exception if two or more hosts are
- /// returned
- virtual ConstHostPtr getHost(StatementTag statement_tag,
- AnyArray& where_values) const;
-
- /// @brief Retrieves a collection of hosts.
- ///
- /// Calls @ref db::CqlExchange::executeSelect().
- ///
- /// @param where_values array of bound objects used to filter the results
- /// @param statement_tag prepared statement being executed
- ///
- /// @return a collection of hosts containing one or more hosts
- virtual ConstHostCollection getHostCollection(StatementTag statement_tag,
- AnyArray& where_values) const;
-
- /// @brief Retrieves a page of hosts.
- ///
- /// @param subnet_id identifier of the subnet to which hosts belong
- /// @param lower_host_id Host identifier used as lower bound for the
- /// returned range.
- /// @param count the size of the page
- ///
- /// @return a collection of hosts containing one or more hosts
- virtual ConstHostCollection getHostCollectionPage4(const SubnetID& subnet_id,
- uint64_t lower_host_id,
- size_t count = 0) const;
-
- /// @brief Retrieves a page of hosts.
- ///
- /// @param subnet_id identifier of the subnet to which hosts belong
- /// @param lower_host_id Host identifier used as lower bound for the
- /// returned range.
- /// @param count the size of the page
- ///
- /// @return a collection of hosts containing one or more hosts
- virtual ConstHostCollection getHostCollectionPage6(const SubnetID& subnet_id,
- uint64_t lower_host_id,
- size_t count = 0) const;
-
- /// @brief Retrieves a page of hosts.
- ///
- /// @param lower_host_id Host identifier used as lower bound for the
- /// returned range.
- /// @param count the size of the page
- ///
- /// @return a collection of hosts containing one or more hosts
- virtual ConstHostCollection getHostCollectionPage4(uint64_t lower_host_id,
- size_t count = 0) const;
-
- /// @brief Retrieves a page of hosts.
- ///
- /// @param lower_host_id Host identifier used as lower bound for the
- /// returned range.
- /// @param count the size of the page
- ///
- /// @return a collection of hosts containing one or more hosts
- virtual ConstHostCollection getHostCollectionPage6(uint64_t lower_host_id,
- size_t count = 0) const;
-
- /// @brief Retrieves a host by key.
- ///
- /// @param key identifier of the host
- ///
- /// @return a host for the specific key
- virtual ConstHostPtr getHostByKey(uint64_t key) const;
-
- /// @brief Retrieves a valid host key.
- /// if lower_host_id is 0 the key parameter will be updated with the key of
- /// the first host
- /// if lower_host_id is not 0 the key parameter will be updated with the
- /// next valid host key
- ///
- /// @param subnet_id identifier of the subnet to which hosts belong
- /// @param lower_host_id Host identifier used as lower bound for the
- /// returned range.
- /// @param key identifier of the host which will be updated
- ///
- /// @return true if there is such a host
- virtual bool getHostKey4(const SubnetID& subnet_id,
- uint64_t lower_host_id,
- uint64_t& key) const;
-
- /// @brief Retrieves a valid host key.
- /// if lower_host_id is 0 the key parameter will be updated with the key of
- /// the first host
- /// if lower_host_id is not 0 the key parameter will be updated with the
- /// next valid host key
- ///
- /// @param subnet_id identifier of the subnet to which hosts belong
- /// @param lower_host_id Host identifier used as lower bound for the
- /// returned range.
- /// @param key identifier of the host which will be updated
- ///
- /// @return true if there is such a host
- virtual bool getHostKey6(const SubnetID& subnet_id,
- uint64_t lower_host_id,
- uint64_t& key) const;
-
- /// @brief Retrieves a valid host key.
- /// if lower_host_id is 0 the key parameter will be updated with the key of
- /// the first host
- /// if lower_host_id is not 0 the key parameter will be updated with the
- /// next valid host key
- ///
- /// @param lower_host_id Host identifier used as lower bound for the
- /// returned range.
- /// @param key identifier of the host which will be updated
- ///
- /// @return true if there is such a host
- virtual bool getHostKey(uint64_t lower_host_id,
- uint64_t& key) const;
-
- /// @brief Retrieves next valid host key.
- ///
- /// @param subnet_id identifier of the subnet to which hosts belong
- /// @param key identifier of the host which will be updated with the next
- /// valid host key
- ///
- /// @return true if there is such a host
- virtual bool getNextHostKey4(const SubnetID& subnet_id,
- uint64_t& key) const;
-
- /// @brief Retrieves next valid host key.
- ///
- /// @param subnet_id identifier of the subnet to which hosts belong
- /// @param key identifier of the host which will be updated with the next
- /// valid host key
- ///
- /// @return true if there is such a host
- virtual bool getNextHostKey6(const SubnetID& subnet_id,
- uint64_t& key) const;
-
- /// @brief Retrieves next valid host key.
- ///
- /// @param key identifier of the host which will be updated with the next
- /// valid host key
- ///
- /// @return true if there is such a host
- virtual bool getNextHostKey(uint64_t& key) const;
-
- /// @brief Inserts or deletes a single host.
- ///
- /// All information is available here. Calls @ref
- /// db::CqlExchange::executeMutation().
- ///
- /// @param insert insert or delete a host
- /// @param host @ref Host object from which options are retrieved and
- /// inserted/deleted into/from the Cassandra database
- /// @param subnet_id identifier of the subnet to which the host belongs
- /// @param reservation reservation for the current denormalized table entry
- /// @param option_space option space for the current denormalized table
- /// entry's option
- /// @param option_descriptor option descriptor containing
- /// information for the current denormalized table entry's option
- virtual bool insertOrDeleteHost(bool insert,
- const HostPtr& host,
- const Optional<SubnetID>& subnet_id = Optional<SubnetID>(),
- const IPv6Resrv* const reservation = NULL,
- const std::string& option_space = NULL_OPTION_SPACE,
- const OptionDescriptor& option_descriptor = OptionDescriptor(false));
-
- /// @brief Merge denormalized table entries that belong to the same host
- /// into a single host, one by one.
- ///
- /// @param target_host host which can contain multiple reservations and
- /// options to which other distinct reservations and options are
- /// added.
- /// @param source_host host that is being search for new reservations and
- /// options that will be merged into the old host.
- virtual void mergeHosts(const ConstHostPtr& source_host,
- HostPtr& target_host) const;
-
-private:
- /// @brief Parameters
- db::DatabaseConnection::ParameterMap parameters_;
-
- /// @brief CQL connection
- mutable CqlConnection dbconn_;
-}; // class CqlHostDataSourceImpl
-
-/// @brief hash function for HostMap
-///
-/// Returns a 64-bits key value. The key is generated with FNV-1a 64 bit
-/// algorithm.
-///
-/// @param key being hashed
-///
-/// @return hash value
-std::size_t
-hash_value(const HostKey& key) {
- // Get key.
- std::stringstream key_stream;
- HostIdentifier host_identifier = std::get<HOST_IDENTIFIER>(key);
- key_stream << DUID(host_identifier).toText() << "-";
- key_stream << std::get<HOST_IDENTIFIER_TYPE>(key) << "-";
- key_stream << std::get<IPv4_SUBNET_ID>(key) << "-";
- key_stream << std::get<IPv6_SUBNET_ID>(key) << "-";
- key_stream << std::get<IPv4_RESERVATION>(key);
- const std::string key_string = key_stream.str();
-
- const uint64_t hash = Hash64::hash(key_string);
-
- return (static_cast<std::size_t>(hash));
-}
-
-/// @brief equals operator for HostKey
-///
-/// @param key1 left hand side operand
-/// @param key2 right hand side operand
-///
-/// @return true if keys are equal. Deep comparison is made.
-bool
-operator==(const HostKey& key1, const HostKey& key2) {
- return (std::get<HOST_IDENTIFIER>(key1) == std::get<HOST_IDENTIFIER>(key2) &&
- std::get<HOST_IDENTIFIER_TYPE>(key1) ==
- std::get<HOST_IDENTIFIER_TYPE>(key2) &&
- std::get<IPv4_SUBNET_ID>(key1) == std::get<IPv4_SUBNET_ID>(key2) &&
- std::get<IPv6_SUBNET_ID>(key1) == std::get<IPv6_SUBNET_ID>(key2) &&
- std::get<IPv4_RESERVATION>(key1) == std::get<IPv4_RESERVATION>(key2));
-}
-
-CqlHostDataSourceImpl::CqlHostDataSourceImpl(const DatabaseConnection::ParameterMap& parameters)
- : parameters_(parameters), dbconn_(parameters) {
- // Validate the schema version first.
- std::pair<uint32_t, uint32_t> code_version(CQL_SCHEMA_VERSION_MAJOR,
- CQL_SCHEMA_VERSION_MINOR);
- std::pair<uint32_t, uint32_t> db_version = getVersion();
- if (code_version != db_version) {
- isc_throw(DbOpenError, "Cassandra schema version mismatch: need version: "
- << code_version.first << "." << code_version.second
- << " found version: " << db_version.first << "."
- << db_version.second);
- }
-
- // Check TLS support.
- bool tls(false);
- try {
- dbconn_.getParameter("trust-anchor");
- tls = true;
- } catch (...) {
- // No trust anchor.
- }
- try {
- dbconn_.getParameter("cert-file");
- tls = true;
- } catch (...) {
- // No certificate file.
- }
- try {
- dbconn_.getParameter("key-file");
- tls = true;
- } catch (...) {
- // No private key file.
- }
- try {
- dbconn_.getParameter("cipher-list");
- tls = true;
- } catch (...) {
- // No cipher list.
- }
- if (tls) {
- LOG_ERROR(dhcpsrv_logger, DHCPSRV_CQL_NO_TLS_SUPPORT)
- .arg(DatabaseConnection::redactedAccessString(parameters));
- isc_throw(DbOpenError, "Attempt to configure TLS for CQL backend");
- }
-
- // Open the database.
- dbconn_.openDatabase();
-
- // Prepare all possible statements.
- dbconn_.prepareStatements(CqlHostExchange::tagged_statements_);
-}
-
-CqlHostDataSourceImpl::~CqlHostDataSourceImpl() {
- // There is no need to close the database in this destructor: it is
- // closed in the destructor of the dbconn_ member variable.
-}
-
-bool
-CqlHostDataSourceImpl::insertOrDelete(const HostPtr& host, bool insert) {
- // If there is no host, there is nothing to do.
- if (!host) {
- return (false);
- }
-
- // Get option space names and vendor space names and combine them within a
- // single list.
-
- // For IPv4:
- ConstCfgOptionPtr cfg_option4 = host->getCfgOption4();
- std::list<std::string> option_spaces4 = cfg_option4->getOptionSpaceNames();
- std::list<std::string> vendor_spaces4 = cfg_option4->getVendorIdsSpaceNames();
- option_spaces4.insert(option_spaces4.end(), vendor_spaces4.begin(),
- vendor_spaces4.end());
-
- // For IPv6:
- ConstCfgOptionPtr cfg_option6 = host->getCfgOption6();
- std::list<std::string> option_spaces6 = cfg_option6->getOptionSpaceNames();
- std::list<std::string> vendor_spaces6 = cfg_option6->getVendorIdsSpaceNames();
- option_spaces6.insert(option_spaces6.end(), vendor_spaces6.begin(),
- vendor_spaces6.end());
-
- bool result = true;
-
- // For every IPv6 reservation, add each of their options to the
- // database.
- IPv6ResrvRange reservations = host->getIPv6Reservations();
- if (std::distance(reservations.first, reservations.second) > 0) {
- for (IPv6ResrvIterator it = reservations.first; result && it != reservations.second; ++it) {
- result = insertOrDeleteHostWithReservations(insert, host, &it->second, option_spaces4, cfg_option4,
- option_spaces6, cfg_option6);
- }
- } else {
- // If host has no reservation, add entries with null
- // reservation. Options could still be present.
- result = insertOrDeleteHostWithReservations(insert, host, NULL, option_spaces4, cfg_option4,
- option_spaces6, cfg_option6);
- }
-
- return (result);
-}
-
-ConstHostPtr
-CqlHostDataSourceImpl::get4(const SubnetID& subnet_id, const asiolink::IOAddress& address) const {
- if (!address.isV4()) {
- isc_throw(BadValue, "CqlHostDataSource::get4(2): wrong address type, "
- "address supplied is not an IPv4 address");
- }
-
- // Convert to CQL data types.
- cass_int32_t host_ipv4_subnet_id = static_cast<cass_int32_t>(subnet_id);
- cass_int32_t host_ipv4_address = static_cast<cass_int32_t>(address.toUint32());
-
- // Bind to array.
- AnyArray where_values;
- where_values.add(&host_ipv4_subnet_id);
- where_values.add(&host_ipv4_address);
-
- // Run statement.
- ConstHostPtr result = getHost(CqlHostExchange::GET_HOST_BY_IPV4_SUBNET_ID_AND_ADDRESS,
- where_values);
-
- return (result);
-}
-
-ConstHostPtr
-CqlHostDataSourceImpl::get4(const SubnetID& subnet_id,
- const Host::IdentifierType& identifier_type,
- const uint8_t* identifier_begin,
- const size_t identifier_len) const {
- // Convert to CQL data types.
- CassBlob host_identifier(identifier_begin, identifier_begin + identifier_len);
- cass_int32_t host_identifier_type = static_cast<cass_int32_t>(identifier_type);
- cass_int32_t host_ipv4_subnet_id = static_cast<cass_int32_t>(subnet_id);
-
- // Bind to array.
- AnyArray where_values;
- where_values.add(&host_ipv4_subnet_id);
- where_values.add(&host_identifier);
- where_values.add(&host_identifier_type);
-
- // Run statement.
- ConstHostPtr result = getHost(CqlHostExchange::GET_HOST_BY_IPV4_SUBNET_ID_AND_HOST_ID,
- where_values);
-
- return (result);
-}
-
-ConstHostPtr
-CqlHostDataSourceImpl::get6(const asiolink::IOAddress& prefix,
- const uint8_t prefix_len) const {
- // Convert to CQL data types.
- std::string reserved_ipv6_prefix_address = prefix.toText();
- cass_int32_t reserved_ipv6_prefix_length = prefix_len;
-
- ConstHostPtr host;
- // Bind to array.
- AnyArray where_values;
- where_values.add(&reserved_ipv6_prefix_address);
- where_values.add(&reserved_ipv6_prefix_length);
-
- // Get host id.
- host = getHost(CqlHostExchange::GET_HOST_BY_IPV6_PREFIX, where_values);
-
- if (!host) {
- return ConstHostPtr();
- }
-
- // Get host.
- HostIdentifier host_identifier = host->getIdentifier();
- // Delegate to getAll(3).
- ConstHostCollection collection = getAll(host->getIdentifierType(), host_identifier.data(),
- host_identifier.size());
-
- if (collection.empty()) {
- return (ConstHostPtr());
- }
-
- if (collection.size() >= 2u) {
- isc_throw(MultipleRecords,
- "CqlHostDataSource::get6(2): multiple records were "
- "found in the "
- "database where only one was expected for statement "
- << CqlHostExchange::GET_HOST_BY_IPV6_PREFIX);
- }
-
- ConstHostPtr result = *collection.begin();
-
- return (result);
-}
-
-ConstHostPtr
-CqlHostDataSourceImpl::get6(const SubnetID& subnet_id,
- const Host::IdentifierType& identifier_type,
- const uint8_t* identifier_begin,
- const size_t identifier_len) const {
- // Convert to CQL data types.
- cass_int32_t host_ipv6_subnet_id = static_cast<cass_int32_t>(subnet_id);
- CassBlob host_identifier(identifier_begin, identifier_begin + identifier_len);
- cass_int32_t host_identifier_type = static_cast<cass_int32_t>(identifier_type);
-
- // Bind to array.
- AnyArray where_values;
- where_values.add(&host_ipv6_subnet_id);
- where_values.add(&host_identifier);
- where_values.add(&host_identifier_type);
-
- // Run statement.
- ConstHostPtr result = getHost(CqlHostExchange::GET_HOST_BY_IPV6_SUBNET_ID_AND_HOST_ID,
- where_values);
-
- return (result);
-}
-
-ConstHostPtr
-CqlHostDataSourceImpl::get6(const SubnetID& subnet_id, const IOAddress& address) const {
- // Convert to CQL data types.
- cass_int32_t host_ipv6_subnet_id = static_cast<cass_int32_t>(subnet_id);
- std::string reserved_ipv6_prefix_address = address.toText();
-
- // Bind to array.
- AnyArray where_values;
- where_values.add(&host_ipv6_subnet_id);
- where_values.add(&reserved_ipv6_prefix_address);
-
- // Run statement.
- ConstHostPtr result = getHost(CqlHostExchange::GET_HOST_BY_IPV6_SUBNET_ID_AND_ADDRESS,
- where_values);
-
- return (result);
-}
-
-ConstHostCollection
-CqlHostDataSourceImpl::getAll(const Host::IdentifierType& identifier_type,
- const uint8_t* identifier_begin,
- const size_t identifier_len) const {
- // Convert to CQL data types.
- CassBlob host_identifier(identifier_begin, identifier_begin + identifier_len);
- cass_int32_t host_identifier_type = static_cast<cass_int32_t>(identifier_type);
-
- // Bind to array.
- AnyArray where_values;
- where_values.add(&host_identifier);
- where_values.add(&host_identifier_type);
-
- // Run statement.
- ConstHostCollection result = getHostCollection(CqlHostExchange::GET_HOST_BY_HOST_ID,
- where_values);
-
- return (result);
-}
-
-ConstHostCollection
-CqlHostDataSourceImpl::getAll4(const SubnetID& subnet_id) const {
- // Convert to CQL data types.
- cass_int32_t host_ipv4_subnet_id = static_cast<cass_int32_t>(subnet_id);
-
- // Bind to array.
- AnyArray where_values;
- where_values.add(&host_ipv4_subnet_id);
-
- // Run statement.
- ConstHostCollection result =
- getHostCollection(CqlHostExchange::GET_HOST_BY_IPV4_SUBNET_ID,
- where_values);
-
- return (result);
-}
-
-ConstHostCollection
-CqlHostDataSourceImpl::getAll6(const SubnetID& subnet_id) const {
- // Convert to CQL data types.
- cass_int32_t host_ipv6_subnet_id = static_cast<cass_int32_t>(subnet_id);
-
- // Bind to array.
- AnyArray where_values;
- where_values.add(&host_ipv6_subnet_id);
-
- // Run statement.
- ConstHostCollection result =
- getHostCollection(CqlHostExchange::GET_HOST_BY_IPV6_SUBNET_ID,
- where_values);
-
- return (result);
-}
-
-ConstHostCollection
-CqlHostDataSourceImpl::getAllbyHostname(const std::string& hostname) const {
- // Convert to CQL data types.
- std::string hostname_ = hostname;
-
- // Bind to array.
- AnyArray where_values;
- where_values.add(&hostname_);
-
- // Run statement.
- ConstHostCollection result =
- getHostCollection(CqlHostExchange::GET_HOST_BY_HOST_NAME,
- where_values);
-
- return (result);
-}
-
-ConstHostCollection
-CqlHostDataSourceImpl::getAllbyHostname4(const std::string& hostname,
- const SubnetID& subnet_id) const {
- // Convert to CQL data types.
- std::string hostname_ = hostname;
- cass_int32_t host_ipv4_subnet_id = static_cast<cass_int32_t>(subnet_id);
-
- // Bind to array.
- AnyArray where_values;
- where_values.add(&hostname_);
- where_values.add(&host_ipv4_subnet_id);
-
- // Run statement.
- ConstHostCollection result =
- getHostCollection(CqlHostExchange::GET_HOST_BY_HOST_NAME_AND_IPV4_SUBNET_ID,
- where_values);
-
- return (result);
-}
-
-ConstHostCollection
-CqlHostDataSourceImpl::getAllbyHostname6(const std::string& hostname,
- const SubnetID& subnet_id) const {
- // Convert to CQL data types.
- std::string hostname_ = hostname;
- cass_int32_t host_ipv6_subnet_id = static_cast<cass_int32_t>(subnet_id);
-
- // Bind to array.
- AnyArray where_values;
- where_values.add(&hostname_);
- where_values.add(&host_ipv6_subnet_id);
-
- // Run statement.
- ConstHostCollection result =
- getHostCollection(CqlHostExchange::GET_HOST_BY_HOST_NAME_AND_IPV6_SUBNET_ID,
- where_values);
-
- return (result);
-}
-
-// There are some problems implementing this for Cassandra.
-// Attempts show the per page ordering does not work and
-// it is not possible to order by TOKEN(host_id).
-// If the issue solved by paging is the Kea API overhead then
-// a solution is to get and cache all reservations and to handle
-// paging at the API level.
-
-ConstHostCollection
-CqlHostDataSourceImpl::getPage4(const SubnetID& subnet_id,
- uint64_t lower_host_id,
- const HostPageSize& page_size) const {
- // Run statement.
- ConstHostCollection result =
- getHostCollectionPage4(subnet_id, lower_host_id, page_size.page_size_);
-
- return (result);
-}
-
-ConstHostCollection
-CqlHostDataSourceImpl::getPage6(const SubnetID& subnet_id,
- uint64_t lower_host_id,
- const HostPageSize& page_size) const {
- // Run statement.
- ConstHostCollection result =
- getHostCollectionPage6(subnet_id, lower_host_id, page_size.page_size_);
-
- return (result);
-}
-
-ConstHostCollection
-CqlHostDataSourceImpl::getPage4(uint64_t lower_host_id,
- const HostPageSize& page_size) const {
- // Run statement.
- ConstHostCollection result =
- getHostCollectionPage4(lower_host_id, page_size.page_size_);
-
- return (result);
-}
-
-ConstHostCollection
-CqlHostDataSourceImpl::getPage6(uint64_t lower_host_id,
- const HostPageSize& page_size) const {
- // Run statement.
- ConstHostCollection result =
- getHostCollectionPage6(lower_host_id, page_size.page_size_);
-
- return (result);
-}
-
-ConstHostCollection
-CqlHostDataSourceImpl::getAll4(const asiolink::IOAddress& address) const {
- // Convert to CQL data types.
- cass_int32_t host_ipv4_address = static_cast<cass_int32_t>(address.toUint32());
-
- // Bind to array.
- AnyArray where_values;
- where_values.add(&host_ipv4_address);
-
- // Run statement.
- ConstHostCollection result = getHostCollection(CqlHostExchange::GET_HOST_BY_IPV4_ADDRESS,
- where_values);
-
- return (result);
-}
-
-ConstHostCollection
-CqlHostDataSourceImpl::getAllHosts() const {
-
- // Bind to array.
- AnyArray where_values;
-
- // Run statement.
- ConstHostCollection result = getHostCollection(CqlHostExchange::GET_HOST, where_values);
-
- return (result);
-}
-
-std::string
-CqlHostDataSourceImpl::getName() const {
- std::string name;
- try {
- name = dbconn_.getParameter("name");
- } catch (...) {
- // Return an empty name.
- }
- return (name);
-}
-
-VersionPair
-CqlHostDataSourceImpl::getVersion() const {
- return CqlConnection::getVersion(parameters_);
-}
-
-bool
-CqlHostDataSourceImpl::insertOrDeleteHostWithOptions(bool insert,
- const HostPtr& host,
- const IPv6Resrv* const reservation,
- const std::list<std::string>& option_spaces,
- const ConstCfgOptionPtr cfg_option) {
- // If there is no host, there is nothing to do.
- if (!host) {
- return (false);
- }
-
- bool result = true;
-
- // For each option space retrieve all options and insert them into
- // the database.
- bool option_found = false;
- for (const std::string& space : option_spaces) {
- if (!result) {
- break;
- }
- OptionContainerPtr options = cfg_option->getAll(space);
- if (options && !options->empty()) {
- for (const OptionDescriptor& option : *options) {
- if (!result) {
- break;
- }
- option_found = true;
- /// @todo: Assign actual value to subnet id.
- result = insertOrDeleteHost(insert, host, Optional<SubnetID>(), reservation,
- space, option);
- }
- }
- }
- if (result && !option_found) {
- // @todo: Assign actual value to subnet id.
- result = insertOrDeleteHost(insert, host, Optional<SubnetID>(), reservation);
- }
-
- return (result);
-}
-
-bool
-CqlHostDataSourceImpl::insertOrDeleteHostWithReservations(bool insert,
- const HostPtr& host,
- const IPv6Resrv* const reservation,
- const std::list<std::string>& option_spaces4,
- const ConstCfgOptionPtr cfg_option4,
- const std::list<std::string>& option_spaces6,
- const ConstCfgOptionPtr cfg_option6) {
- // If there is no host, there is nothing to do.
- if (!host) {
- return (false);
- }
-
- bool result = true;
-
- // If host has no reservation, add entries with null reservation.
- // Options could still be present.
- if (result && cfg_option4 && !cfg_option4->empty()) {
- result = insertOrDeleteHostWithOptions(insert, host, reservation, option_spaces4, cfg_option4);
- }
- if (result && cfg_option6 && !cfg_option6->empty()) {
- result = insertOrDeleteHostWithOptions(insert, host, reservation, option_spaces6, cfg_option6);
- }
- if (result &&
- (!cfg_option4 || cfg_option4->empty()) &&
- (!cfg_option6 || cfg_option6->empty())) {
- result = insertOrDeleteHostWithOptions(insert, host, reservation);
- }
-
- return (result);
-}
-
-ConstHostPtr
-CqlHostDataSourceImpl::getHost(StatementTag statement_tag,
- AnyArray& where_values) const {
- ConstHostCollection collection = getHostCollection(statement_tag, where_values);
-
- if (collection.empty()) {
- return (ConstHostPtr());
- }
-
- if (collection.size() >= 2u) {
- isc_throw(MultipleRecords, "CqlHostDataSourceImpl::getHost(): multiple records were "
- "found in the database where only one was expected for statement "
- << statement_tag);
- }
-
- return (*collection.begin());
-}
-
-ConstHostCollection
-CqlHostDataSourceImpl::getHostCollection(StatementTag statement_tag,
- AnyArray& where_values) const {
- // Run statement.
- std::unique_ptr<CqlHostExchange> host_exchange(new CqlHostExchange());
- AnyArray collection = host_exchange->executeSelect(dbconn_, where_values,
- statement_tag, false);
-
- // Create HostPtr objects.
- HostCollection host_collection;
- for (boost::any& host : collection) {
- host_collection.push_back(HostPtr(boost::any_cast<Host*>(host)));
- }
-
- // Merge the denormalized table entries that belong to the same host into a single host.
- HostMap map;
- for (HostPtr& host : host_collection) {
- HostKey key = HostKey(host->getIdentifier(), host->getIdentifierType(),
- host->getIPv4SubnetID(), host->getIPv6SubnetID(),
- host->getIPv4Reservation());
- if (map.find(key) == map.end()) {
- map[key] = host;
- } else {
- mergeHosts(host, map[key]);
- }
- }
-
- ConstHostCollection result_collection;
-
- for (HostPtr& host : host_collection) {
- HostKey key = HostKey(host->getIdentifier(), host->getIdentifierType(),
- host->getIPv4SubnetID(), host->getIPv6SubnetID(),
- host->getIPv4Reservation());
- if (map.find(key) != map.end()) {
- result_collection.push_back(map[key]);
- map.erase(key);
- }
- }
- return (result_collection);
-}
-
-ConstHostPtr
-CqlHostDataSourceImpl::getHostByKey(uint64_t key) const {
- // Bind to array.
- AnyArray where_values;
- cass_int64_t key_data = static_cast<cass_int64_t>(key);
- where_values.add(&key_data);
-
- // Run statement.
- ConstHostCollection collection =
- getHostCollection(CqlHostExchange::GET_HOST_KEY,
- where_values);
-
- if (collection.empty()) {
- return (ConstHostPtr());
- }
-
- if (collection.size() >= 2u) {
- isc_throw(MultipleRecords, "CqlHostDataSourceImpl::getHost(): multiple records were "
- "found in the database where only one was expected for statement "
- << CqlHostExchange::GET_HOST_KEY);
- }
-
- return (*collection.begin());
-}
-
-ConstHostCollection
-CqlHostDataSourceImpl::getHostCollectionPage4(const SubnetID& subnet_id,
- uint64_t lower_host_id,
- size_t count) const {
- ConstHostCollection result_collection;
- for (; count; count--) {
- uint64_t key;
- bool valid_key = getHostKey4(subnet_id, lower_host_id, key);
-
- if (!valid_key) {
- break;
- }
-
- ConstHostPtr host = getHostByKey(key);
- result_collection.push_back(host);
- lower_host_id = host->getHostId();
- }
-
- return (result_collection);
-}
-
-ConstHostCollection
-CqlHostDataSourceImpl::getHostCollectionPage6(const SubnetID& subnet_id,
- uint64_t lower_host_id,
- size_t count) const {
- ConstHostCollection result_collection;
- for (; count; count--) {
- uint64_t key;
- bool valid_key = getHostKey6(subnet_id, lower_host_id, key);
-
- if (!valid_key) {
- break;
- }
-
- ConstHostPtr host = getHostByKey(key);
- result_collection.push_back(host);
- lower_host_id = host->getHostId();
- }
-
- return (result_collection);
-}
-
-ConstHostCollection
-CqlHostDataSourceImpl::getHostCollectionPage4(uint64_t lower_host_id,
- size_t count) const {
- ConstHostCollection result_collection;
- for (; count; count--) {
- uint64_t key;
- bool valid_key = getHostKey(lower_host_id, key);
-
- if (!valid_key) {
- break;
- }
-
- ConstHostPtr host = getHostByKey(key);
- result_collection.push_back(host);
- lower_host_id = host->getHostId();
- }
-
- return (result_collection);
-}
-
-ConstHostCollection
-CqlHostDataSourceImpl::getHostCollectionPage6(uint64_t lower_host_id,
- size_t count) const {
- ConstHostCollection result_collection;
- for (; count; count--) {
- uint64_t key;
- bool valid_key = getHostKey(lower_host_id, key);
-
- if (!valid_key) {
- break;
- }
-
- ConstHostPtr host = getHostByKey(key);
- result_collection.push_back(host);
- lower_host_id = host->getHostId();
- }
-
- return (result_collection);
-}
-
-bool
-CqlHostDataSourceImpl::getHostKey4(const SubnetID& subnet_id,
- uint64_t lower_host_id,
- uint64_t& key) const {
- // Convert to CQL data types.
- cass_int32_t host_subnet_id = static_cast<cass_int32_t>(subnet_id);
-
- // Bind to array.
- AnyArray where_values;
- where_values.add(&host_subnet_id);
-
- cass_int64_t host_data = 0;
- if (lower_host_id) {
- host_data = static_cast<cass_int64_t>(lower_host_id);
- where_values.add(&host_data);
- }
-
- // Run statement.
- // This will retrieve first row of the first host (lower_host_id == 0)
- // or the first row of the host (lower_host_id != 0)
- std::unique_ptr<CqlHostExchange> host_exchange(new CqlHostExchange());
- AnyArray collection;
- if (lower_host_id) {
- collection = host_exchange->executeSelect(dbconn_, where_values,
- CqlHostExchange::GET_HOST_BY_IPV4_SUBNET_ID_PAGE, false);
- } else {
- collection = host_exchange->executeSelect(dbconn_, where_values,
- CqlHostExchange::GET_HOST_BY_IPV4_SUBNET_ID_LIMIT, false);
- }
-
- // Create HostPtr objects.
- HostCollection host_collection;
- for (boost::any& host : collection) {
- host_collection.push_back(HostPtr(boost::any_cast<Host*>(host)));
- }
-
- // If there is no host, just exit
- if (host_collection.empty()) {
- return false;
- }
-
- key = host_exchange->hashIntoKey();
-
- if (lower_host_id) {
- return getNextHostKey4(subnet_id, key);
- }
-
- return true;
-}
-
-bool
-CqlHostDataSourceImpl::getHostKey6(const SubnetID& subnet_id,
- uint64_t lower_host_id,
- uint64_t& key) const {
- // Convert to CQL data types.
- cass_int32_t host_subnet_id = static_cast<cass_int32_t>(subnet_id);
-
- // Bind to array.
- AnyArray where_values;
- where_values.add(&host_subnet_id);
-
- cass_int64_t host_data = 0;
- if (lower_host_id) {
- host_data = static_cast<cass_int64_t>(lower_host_id);
- where_values.add(&host_data);
- }
-
- // Run statement.
- // This will retrieve first row of the first host (lower_host_id == 0)
- // or the first row of the host (lower_host_id != 0)
- std::unique_ptr<CqlHostExchange> host_exchange(new CqlHostExchange());
- AnyArray collection;
- if (lower_host_id) {
- collection = host_exchange->executeSelect(dbconn_, where_values,
- CqlHostExchange::GET_HOST_BY_IPV6_SUBNET_ID_PAGE, false);
- } else {
- collection = host_exchange->executeSelect(dbconn_, where_values,
- CqlHostExchange::GET_HOST_BY_IPV6_SUBNET_ID_LIMIT, false);
- }
-
- // Create HostPtr objects.
- HostCollection host_collection;
- for (boost::any& host : collection) {
- host_collection.push_back(HostPtr(boost::any_cast<Host*>(host)));
- }
-
- // If there is no host, just exit
- if (host_collection.empty()) {
- return false;
- }
-
- key = host_exchange->hashIntoKey();
-
- if (lower_host_id) {
- return getNextHostKey6(subnet_id, key);
- }
-
- return true;
-}
-
-bool
-CqlHostDataSourceImpl::getHostKey(uint64_t lower_host_id,
- uint64_t& key) const {
- // Bind to array.
- AnyArray where_values;
- cass_int64_t host_data = 0;
- if (lower_host_id) {
- host_data = static_cast<cass_int64_t>(lower_host_id);
- where_values.add(&host_data);
- }
-
- // Run statement.
- // This will retrieve first row of the first host (lower_host_id == 0)
- // or the first row of the host (lower_host_id != 0)
- std::unique_ptr<CqlHostExchange> host_exchange(new CqlHostExchange());
- AnyArray collection;
- if (lower_host_id) {
- collection = host_exchange->executeSelect(dbconn_, where_values,
- CqlHostExchange::GET_HOST_PAGE, false);
- } else {
- collection = host_exchange->executeSelect(dbconn_, where_values,
- CqlHostExchange::GET_HOST_LIMIT, false);
- }
-
- // Create HostPtr objects.
- HostCollection host_collection;
- for (boost::any& host : collection) {
- host_collection.push_back(HostPtr(boost::any_cast<Host*>(host)));
- }
-
- // If there is no host, just exit
- if (host_collection.empty()) {
- return false;
- }
-
- key = host_exchange->hashIntoKey();
-
- if (lower_host_id) {
- return getNextHostKey(key);
- }
-
- return true;
-}
-
-bool
-CqlHostDataSourceImpl::getNextHostKey4(const SubnetID& subnet_id,
- uint64_t& key) const {
- // Convert to CQL data types.
- cass_int32_t host_subnet_id = static_cast<cass_int32_t>(subnet_id);
- cass_int64_t key_data = static_cast<cass_int64_t>(key);
-
- // Bind to array.
- AnyArray where_values;
- where_values.add(&host_subnet_id);
- where_values.add(&key_data);
-
- // This will retrieve first row of the next host (lower_host_id != 0)
- std::unique_ptr<CqlHostExchange> host_exchange(new CqlHostExchange());
- AnyArray collection = host_exchange->executeSelect(dbconn_, where_values,
- CqlHostExchange::GET_HOST_BY_IPV4_SUBNET_ID_NEXT_KEY, false);
-
- // Create HostPtr objects.
- HostCollection host_collection;
- for (boost::any& host : collection) {
- host_collection.push_back(HostPtr(boost::any_cast<Host*>(host)));
- }
-
- if (host_collection.empty()) {
- return false;
- }
-
- key = host_exchange->hashIntoKey();
- return true;
-}
-
-bool
-CqlHostDataSourceImpl::getNextHostKey6(const SubnetID& subnet_id,
- uint64_t& key) const {
- // Convert to CQL data types.
- cass_int32_t host_subnet_id = static_cast<cass_int32_t>(subnet_id);
- cass_int64_t key_data = static_cast<cass_int64_t>(key);
-
- // Bind to array.
- AnyArray where_values;
- where_values.add(&host_subnet_id);
- where_values.add(&key_data);
-
- // This will retrieve first row of the next host (lower_host_id != 0)
- std::unique_ptr<CqlHostExchange> host_exchange(new CqlHostExchange());
- AnyArray collection = host_exchange->executeSelect(dbconn_, where_values,
- CqlHostExchange::GET_HOST_BY_IPV6_SUBNET_ID_NEXT_KEY, false);
-
- // Create HostPtr objects.
- HostCollection host_collection;
- for (boost::any& host : collection) {
- host_collection.push_back(HostPtr(boost::any_cast<Host*>(host)));
- }
-
- if (host_collection.empty()) {
- return false;
- }
-
- key = host_exchange->hashIntoKey();
- return true;
-}
-
-bool
-CqlHostDataSourceImpl::getNextHostKey(uint64_t& key) const {
- // Convert to CQL data types.
- cass_int64_t key_data = static_cast<cass_int64_t>(key);
-
- // Bind to array.
- AnyArray where_values;
- where_values.add(&key_data);
-
- // This will retrieve first row of the next host (lower_host_id != 0)
- std::unique_ptr<CqlHostExchange> host_exchange(new CqlHostExchange());
- AnyArray collection = host_exchange->executeSelect(dbconn_, where_values,
- CqlHostExchange::GET_HOST_NEXT_KEY, false);
-
- // Create HostPtr objects.
- HostCollection host_collection;
- for (boost::any& host : collection) {
- host_collection.push_back(HostPtr(boost::any_cast<Host*>(host)));
- }
-
- if (host_collection.empty()) {
- return false;
- }
-
- key = host_exchange->hashIntoKey();
- return true;
-}
-
-bool
-CqlHostDataSourceImpl::insertOrDeleteHost(bool insert,
- const HostPtr& host,
- const Optional<SubnetID>& subnet_id,
- const IPv6Resrv* const reservation,
- const std::string& option_space,
- const OptionDescriptor& option_descriptor) {
- // If there is no host, there is nothing to do.
- if (!host) {
- return (false);
- }
-
- AnyArray assigned_values;
-
- std::unique_ptr<CqlHostExchange> host_exchange(new CqlHostExchange());
-
- try {
- if (insert) {
- host_exchange->createBindForMutation(host, subnet_id, reservation, option_space,
- option_descriptor, CqlHostExchange::INSERT_HOST, assigned_values);
-
- host_exchange->executeMutation(dbconn_, assigned_values, CqlHostExchange::INSERT_HOST);
- } else {
- host_exchange->createBindForDelete(host, subnet_id, reservation, option_space,
- option_descriptor, CqlHostExchange::DELETE_HOST, assigned_values);
-
- host_exchange->executeMutation(dbconn_, assigned_values, CqlHostExchange::DELETE_HOST);
- }
- } catch (const StatementNotApplied& exception) {
- if (insert) {
- isc_throw(DuplicateEntry, exception.what());
- } else {
- return (false);
- }
- }
-
- return (true);
-}
-
-void
-CqlHostDataSourceImpl::mergeHosts(const ConstHostPtr& source_host,
- HostPtr& target_host) const {
- // Merge reservations.
- const IPv6ResrvRange reservations_range =
- source_host->getIPv6Reservations();
- if (std::distance(reservations_range.first, reservations_range.second) > 0) {
- for (IPv6ResrvIterator reservations_iterator = reservations_range.first;
- reservations_iterator != reservations_range.second;
- ++reservations_iterator) {
- if (!target_host->hasReservation(reservations_iterator->second)) {
- target_host->addReservation(reservations_iterator->second);
- }
- }
- }
-
- // Merge DHCPv4 options.
- source_host->getCfgOption4()->mergeTo(*target_host->getCfgOption4());
-
- // Merge DHCPv6 options.
- source_host->getCfgOption6()->mergeTo(*target_host->getCfgOption6());
-}
-
-CqlHostDataSource::CqlHostDataSource(const DatabaseConnection::ParameterMap& parameters)
- : impl_(new CqlHostDataSourceImpl(parameters)) {
- // Cassandra support is now deprecated.
- LOG_WARN(dhcpsrv_logger, DHCPSRV_DEPRECATED).arg("Cassandra host backend");
-}
-
-CqlHostDataSource::~CqlHostDataSource() {
- delete impl_;
-}
-
-void
-CqlHostDataSource::add(const HostPtr& host) {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_HOST_ADD);
-
- impl_->insertOrDelete(host, true);
-}
-
-bool
-CqlHostDataSource::del(const SubnetID& subnet_id, const asiolink::IOAddress& address) {
- HostPtr host = boost::const_pointer_cast<Host>(impl_->get4(subnet_id, address));
-
- return (host ? impl_->insertOrDelete(host, false) : false);
-}
-
-bool
-CqlHostDataSource::del4(const SubnetID& subnet_id, const Host::IdentifierType& identifier_type,
- const uint8_t* identifier_begin, const size_t identifier_len) {
- HostPtr host = boost::const_pointer_cast<Host>(impl_->get4(subnet_id, identifier_type,
- identifier_begin, identifier_len));
-
- return (host ? impl_->insertOrDelete(host, false) : false);
-}
-
-bool
-CqlHostDataSource::del6(const SubnetID& subnet_id, const Host::IdentifierType& identifier_type,
- const uint8_t* identifier_begin, const size_t identifier_len) {
- HostPtr host = boost::const_pointer_cast<Host>(impl_->get6(subnet_id, identifier_type,
- identifier_begin, identifier_len));
-
- return (host ? impl_->insertOrDelete(host, false) : false);
-}
-
-ConstHostCollection
-CqlHostDataSource::getAll(const Host::IdentifierType& identifier_type,
- const uint8_t* identifier_begin,
- const size_t identifier_len) const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_HOST_GET_ALL);
-
- return (impl_->getAll(identifier_type, identifier_begin, identifier_len));
-}
-
-ConstHostCollection
-CqlHostDataSource::getAll4(const SubnetID& subnet_id) const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_HOST_GET_ALL);
-
- return (impl_->getAll4(subnet_id));
-}
-
-ConstHostCollection
-CqlHostDataSource::getAll6(const SubnetID& subnet_id) const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_HOST_GET_ALL);
-
- return (impl_->getAll6(subnet_id));
-}
-
-ConstHostCollection
-CqlHostDataSource::getAllbyHostname(const std::string& hostname) const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_HOST_GET_ALL);
-
- return (impl_->getAllbyHostname(hostname));
-}
-
-ConstHostCollection
-CqlHostDataSource::getAllbyHostname4(const std::string& hostname,
- const SubnetID& subnet_id) const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_HOST_GET_ALL);
-
- return (impl_->getAllbyHostname4(hostname, subnet_id));
-}
-
-ConstHostCollection
-CqlHostDataSource::getAllbyHostname6(const std::string& hostname,
- const SubnetID& subnet_id) const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_HOST_GET_ALL);
-
- return (impl_->getAllbyHostname6(hostname, subnet_id));
-}
-
-ConstHostCollection
-CqlHostDataSource::getPage4(const SubnetID& subnet_id,
- size_t& /*source_index*/,
- uint64_t lower_host_id,
- const HostPageSize& page_size) const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_HOST_GET_ALL);
-
- return (impl_->getPage4(subnet_id, lower_host_id, page_size));
-}
-
-ConstHostCollection
-CqlHostDataSource::getPage6(const SubnetID& subnet_id,
- size_t& /*source_index*/,
- uint64_t lower_host_id,
- const HostPageSize& page_size) const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_HOST_GET_ALL);
-
- return (impl_->getPage6(subnet_id, lower_host_id, page_size));
-}
-
-ConstHostCollection
-CqlHostDataSource::getPage4(size_t& /*source_index*/,
- uint64_t lower_host_id,
- const HostPageSize& page_size) const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_HOST_GET_ALL);
-
- return (impl_->getPage4(lower_host_id, page_size));
-}
-
-ConstHostCollection
-CqlHostDataSource::getPage6(size_t& /*source_index*/,
- uint64_t lower_host_id,
- const HostPageSize& page_size) const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_HOST_GET_ALL);
-
- return (impl_->getPage6(lower_host_id, page_size));
-}
-
-ConstHostCollection
-CqlHostDataSource::getAll4(const asiolink::IOAddress& address) const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_HOST_GET_ALL);
-
- return (impl_->getAll4(address));
-}
-
-ConstHostPtr
-CqlHostDataSource::get4(const SubnetID& subnet_id,
- const Host::IdentifierType& identifier_type,
- const uint8_t* identifier_begin,
- const size_t identifier_len) const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_HOST_GET4);
-
- return (impl_->get4(subnet_id, identifier_type, identifier_begin,
- identifier_len));
-}
-
-ConstHostPtr
-CqlHostDataSource::get4(const SubnetID& subnet_id,
- const asiolink::IOAddress& address) const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_HOST_GET4);
-
- return (impl_->get4(subnet_id, address));
-}
-
-ConstHostCollection
-CqlHostDataSource::getAll4(const SubnetID& subnet_id,
- const asiolink::IOAddress& address) const {
- ConstHostCollection hosts;
- auto host = get4(subnet_id, address);
- if (host) {
- hosts.push_back(host);
- }
- return (hosts);
-}
-
-ConstHostPtr
-CqlHostDataSource::get6(const SubnetID& subnet_id,
- const Host::IdentifierType& identifier_type,
- const uint8_t* identifier_begin,
- const size_t identifier_len) const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_HOST_GET6);
-
- return (impl_->get6(subnet_id, identifier_type, identifier_begin, identifier_len));
-}
-
-ConstHostPtr
-CqlHostDataSource::get6(const asiolink::IOAddress& prefix,
- const uint8_t prefix_len) const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_HOST_GET6);
-
- return (impl_->get6(prefix, prefix_len));
-}
-
-ConstHostPtr
-CqlHostDataSource::get6(const SubnetID& subnet_id,
- const asiolink::IOAddress& address) const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_HOST_GET6);
-
- return (impl_->get6(subnet_id, address));
-}
-
-ConstHostCollection
-CqlHostDataSource::getAll6(const SubnetID& subnet_id,
- const asiolink::IOAddress& address) const {
- ConstHostCollection hosts;
- auto host = get6(subnet_id, address);
- if (host) {
- hosts.push_back(host);
- }
- return (hosts);
-}
-
-ConstHostCollection
-CqlHostDataSource::getAllHosts() const {
- return (impl_->getAllHosts());
-}
-
-std::string
-CqlHostDataSource::getType() const {
- return std::string("cql");
-}
-
-std::string
-CqlHostDataSource::getName() const {
- return (impl_->getName());
-}
-
-std::string
-CqlHostDataSource::getDescription() const {
- return std::string("Host data source that stores host information in the CQL database");
-}
-
-VersionPair
-CqlHostDataSource::getVersion() const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_HOST_DB_GET_VERSION);
-
- return impl_->getVersion();
-}
-
-void
-CqlHostDataSource::commit() {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_COMMIT);
-}
-
-void
-CqlHostDataSource::rollback() {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_ROLLBACK);
-}
-
-bool
-CqlHostDataSource::setIPReservationsUnique(const bool unique) {
- // This backend does not support the mode in which multiple reservations
- // for the same IP address are created. If selecting this mode is
- // attempted this function returns false to indicate that this is
- // not allowed.
- return (unique);
-}
-
-} // namespace dhcp
-} // namespace isc
diff --git a/src/lib/dhcpsrv/cql_host_data_source.h b/src/lib/dhcpsrv/cql_host_data_source.h
deleted file mode 100644
index fd17b762cb..0000000000
--- a/src/lib/dhcpsrv/cql_host_data_source.h
+++ /dev/null
@@ -1,470 +0,0 @@
-// Copyright (C) 2018-2021 Internet Systems Consortium, Inc. ("ISC")
-// Copyright (C) 2016-2018 Deutsche Telekom AG.
-//
-// Author: Andrei Pavel <andrei.pavel@qualitance.com>
-//
-// 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_HOST_DATA_SOURCE_H
-#define CQL_HOST_DATA_SOURCE_H
-
-#include <cql/cql_connection.h>
-#include <dhcpsrv/base_host_data_source.h>
-
-#include <string>
-#include <vector>
-
-namespace isc {
-namespace dhcp {
-
-/// @brief Forward declaration to the implementation of @ref CqlHostDataSource.
-class CqlHostDataSourceImpl;
-
-/// @brief Cassandra host data source
-///
-/// Implements @ref isc::dhcp::BaseHostDataSource interface customized to
-/// Cassandra. Use of this backend implies that a Cassandra database is
-/// available and that the Kea schema has been created within it.
-///
-/// The database schema is radically different than the MySQL and the
-/// PostgreSQL schemas. Rather than creating a different table for
-/// hosts, reservations, DHCPv4 options and DHCPv6 options
-/// respectively, the data is denormalized into a single table to
-/// benefit from Cassandra's non-relational nature. To make up for the
-/// lack of relations, on insertion, the reservations and options are
-/// matched against hosts on the server and merged into database
-/// entries. When retrieving, each database row is split into the
-/// corresponding host, reservation and options.
-///
-/// There can be an inconsistency in the database due to the order of
-/// the changes e.g. if you insert a host with no reservations and no
-/// options followed by the same host with one reservation will result
-/// in 2 entries versus inserting the host with reservation from the
-/// beginning which will result in a single entry. In spite of this,
-/// retrieving the host will give you the attached reservation in both
-/// cases.
-class CqlHostDataSource : public BaseHostDataSource {
-public:
- /// @brief Constructor
- ///
- /// Uses the following keywords in the parameters passed to it to
- /// connect to the Cassandra cluster (if omitted, defaults 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
- ///
- /// For details regarding those parameters, see
- /// @ref isc::db::CqlConnection::openDatabase.
- ///
- /// Finally, all the CQL commands are pre-compiled.
- ///
- /// @param parameters a data structure relating keywords and values
- /// concerned with the database.
- ///
- /// @throw isc::db::NoDatabaseName Mandatory database name not given
- /// @throw isc::db::DbOpenError Error opening the database or if the
- /// schema version is invalid.
- /// @throw isc::db::DbOperationError An operation on the open database has
- /// failed.
- explicit CqlHostDataSource(const db::DatabaseConnection::ParameterMap& parameters);
-
- /// @brief Virtual destructor.
- ///
- /// Releases prepared CQL statements used by the backend.
- virtual ~CqlHostDataSource();
-
- /// @brief Adds a new host to the collection.
- ///
- /// The implementations of this method should guard against duplicate
- /// reservations for the same @ref Host, where possible. For example, when
- /// the reservation for the same @ref HWAddr and @ref SubnetID is added
- /// twice, @ref add() should throw a @ref db::DuplicateEntry exception. Note,
- /// that usually it is impossible to guard against adding duplicated @ref
- /// Host, where one instance is identified by different identifier types.
- ///
- /// @param host pointer to the new @ref Host being added.
- virtual void add(const HostPtr& host) override;
-
- /// @brief Attempts to delete hosts by (subnet-id, address)
- ///
- /// This method supports both v4 and v6.
- ///
- /// @param subnet_id subnet identifier.
- /// @param addr specified address.
- /// @return true if deletion was successful, false if the host was not
- /// there.
- /// @throw various exceptions in case of errors
- virtual bool del(const SubnetID& subnet_id,
- const asiolink::IOAddress& addr) override;
-
- /// @brief Attempts to delete a host by (subnet-id4, identifier-type,
- /// identifier).
- ///
- /// This method supports v4 hosts only.
- ///
- /// @param subnet_id IPv4 Subnet identifier.
- /// @param identifier_type Identifier type.
- /// @param identifier_begin Pointer to a beginning of a buffer containing
- /// an identifier.
- /// @param identifier_len Identifier length.
- /// @return true if deletion was successful, false if the host was not
- /// there.
- /// @throw various exceptions in case of errors
- virtual bool del4(const SubnetID& subnet_id,
- const Host::IdentifierType& identifier_type,
- const uint8_t* identifier_begin,
- const size_t identifier_len) override;
-
- /// @brief Attempts to delete a host by (subnet-id6, identifier-type,
- /// identifier).
- ///
- /// This method supports v6 hosts only.
- ///
- /// @param subnet_id IPv6 Subnet identifier.
- /// @param identifier_type Identifier type.
- /// @param identifier_begin Pointer to a beginning of a buffer containing
- /// an identifier.
- /// @param identifier_len Identifier length.
- /// @return true if deletion was successful, false if the host was not
- /// there.
- /// @throw various exceptions in case of errors
- virtual bool del6(const SubnetID& subnet_id,
- const Host::IdentifierType& identifier_type,
- const uint8_t* identifier_begin,
- const size_t identifier_len) override;
-
- /// @brief Return all hosts connected to any subnet for which reservations
- /// have been made using a specified identifier.
- ///
- /// This method returns all @ref Host objects which represent reservations
- /// for a specified identifier. This method may return multiple hosts
- /// because a particular client may have reservations in multiple subnets.
- ///
- /// @param identifier_type Identifier type.
- /// @param identifier_begin Pointer to a beginning of a buffer containing
- /// an identifier.
- /// @param identifier_len Identifier length.
- ///
- /// @return Collection of const @ref Host objects.
- virtual ConstHostCollection
- getAll(const Host::IdentifierType& identifier_type,
- const uint8_t* identifier_begin,
- const size_t identifier_len) const override;
-
- /// @brief Return all hosts in a DHCPv4 subnet.
- ///
- /// This method returns all @ref Host objects which represent reservations
- /// in a specified subnet.
- ///
- /// @param subnet_id subnet identifier to filter by
- ///
- /// @return Collection of const @ref Host objects.
- virtual ConstHostCollection
- getAll4(const SubnetID& subnet_id) const override;
-
- /// @brief Return all hosts in a DHCPv6 subnet.
- ///
- /// This method returns all @ref Host objects which represent reservations
- /// in a specified subnet.
- ///
- /// @param subnet_id subnet identifier to filter by
- ///
- /// @return Collection of const @ref Host objects.
- virtual ConstHostCollection
- getAll6(const SubnetID& subnet_id) const override;
-
- /// @brief Return all hosts with a hostname.
- ///
- /// This method returns all @c Host objects which represent reservations
- /// using a specified hostname.
- ///
- /// Cassandra uses the new indexed lower_case_hostname column.
- ///
- /// @param hostname The lower case hostname.
- ///
- /// @return Collection of const @c Host objects.
- virtual ConstHostCollection
- getAllbyHostname(const std::string& hostname) const override;
-
- /// @brief Return all hosts with a hostname in a DHCPv4 subnet.
- ///
- /// This method returns all @c Host objects which represent reservations
- /// using a specified hostname in a specified subnet.
- ///
- /// @param hostname The lower case hostname.
- /// @param subnet_id Subnet identifier.
- ///
- /// @return Collection of const @c Host objects.
- virtual ConstHostCollection
- getAllbyHostname4(const std::string& hostname, const SubnetID& subnet_id) const override;
-
- /// @brief Return all hosts with a hostname in a DHCPv6 subnet.
- ///
- /// This method returns all @c Host objects which represent reservations
- /// using a specified hostname in a specified subnet.
- ///
- /// @param hostname The lower case hostname.
- /// @param subnet_id Subnet identifier.
- ///
- /// @return Collection of const @c Host objects.
- virtual ConstHostCollection
- getAllbyHostname6(const std::string& hostname, const SubnetID& subnet_id) const override;
-
- /// @brief Returns range of hosts in a DHCPv4 subnet.
- ///
- /// @param subnet_id Subnet identifier.
- /// @param source_index Index of the source (unused).
- /// @param lower_host_id Host identifier used as lower bound for the
- /// returned range.
- /// @param page_size maximum size of the page returned.
- ///
- /// @return Collection of const @c Host objects (may be empty).
- virtual ConstHostCollection
- getPage4(const SubnetID& subnet_id,
- size_t& source_index,
- uint64_t lower_host_id,
- const HostPageSize& page_size) const override;
-
- /// @brief Returns range of hosts in a DHCPv6 subnet.
- ///
- /// @param subnet_id Subnet identifier.
- /// @param source_index Index of the source (unused).
- /// @param lower_host_id Host identifier used as lower bound for the
- /// returned range.
- /// @param page_size maximum size of the page returned.
- ///
- /// @return Collection of const @c Host objects (may be empty).
- virtual ConstHostCollection
- getPage6(const SubnetID& subnet_id,
- size_t& source_index,
- uint64_t lower_host_id,
- const HostPageSize& page_size) const override;
-
- /// @brief Returns range of hosts.
- ///
- /// @param source_index Index of the source (unused).
- /// @param lower_host_id Host identifier used as lower bound for the
- /// returned range.
- /// @param page_size maximum size of the page returned.
- ///
- /// @return Collection of const @c Host objects (may be empty).
- virtual ConstHostCollection
- getPage4(size_t& source_index,
- uint64_t lower_host_id,
- const HostPageSize& page_size) const override;
-
- /// @brief Returns range of hosts.
- ///
- /// @param source_index Index of the source (unused).
- /// @param lower_host_id Host identifier used as lower bound for the
- /// returned range.
- /// @param page_size maximum size of the page returned.
- ///
- /// @return Collection of const @c Host objects (may be empty).
- virtual ConstHostCollection
- getPage6(size_t& source_index,
- uint64_t lower_host_id,
- const HostPageSize& page_size) const override;
-
- /// @brief Returns a collection of hosts using the specified IPv4 address.
- ///
- /// This method may return multiple @ref Host objects if they are connected
- /// to different subnets.
- ///
- /// @param address IPv4 address for which the @ref Host object is searched.
- ///
- /// @return Collection of const @ref Host objects.
- virtual ConstHostCollection
- getAll4(const asiolink::IOAddress& address) const override;
-
- /// @brief Retrieves a @ref Host connected to an IPv4 subnet.
- ///
- /// The host is identified by specific identifier.
- ///
- /// @param subnet_id subnet identifier to filter by
- /// @param identifier_type identifier type to filter by
- /// @param identifier_begin pointer to the beginning of a buffer containing
- /// a host identifier to filter by
- /// @param identifier_len length of the host identifier buffer
- ///
- /// @return @ref Host object for which a reservation has been made using the
- /// specified identifier
- virtual ConstHostPtr get4(const SubnetID& subnet_id,
- const Host::IdentifierType& identifier_type,
- const uint8_t* identifier_begin,
- const size_t identifier_len) const override;
-
- /// @brief Retrieves a @ref Host connected to an IPv4 subnet.
- ///
- /// The host is identifier by specified IPv4 address.
- ///
- /// @param subnet_id Subnet identifier.
- /// @param address reserved IPv4 address.
- ///
- /// @return Const @ref Host object
- ///
- /// @throw BadValue if address in not a valid IPv4address
- virtual ConstHostPtr
- get4(const SubnetID& subnet_id,
- const asiolink::IOAddress& address) const override;
-
- /// @brief Returns all hosts connected to the IPv4 subnet and having
- /// a reservation for a specified address.
- ///
- /// This backend does not support a configuration in which multiple
- /// reservations can be created for a single IPv4 address, so it
- /// always returns 1 or 0 hosts.
- ///
- /// @param subnet_id Subnet identifier.
- /// @param address reserved IPv4 address.
- ///
- /// @return Collection of const @c Host objects.
- virtual ConstHostCollection
- getAll4(const SubnetID& subnet_id,
- const asiolink::IOAddress& address) const override;
-
- /// @brief Returns a @ref Host connected to an IPv6 subnet.
- ///
- /// @param subnet_id subnet identifier to filter by
- /// @param identifier_type identifier type to filter by
- /// @param identifier_begin pointer to the beginning of a buffer containing
- /// a host identifier to filter by
- /// @param identifier_len length of the host identifier buffer
- ///
- /// @return Const @ref Host object for which reservation has been made using
- /// the specified identifier.
- virtual ConstHostPtr get6(const SubnetID& subnet_id,
- const Host::IdentifierType& identifier_type,
- const uint8_t* identifier_begin,
- const size_t identifier_len) const override;
-
- /// @brief Returns a @ref Host with the specified reservation prefix.
- ///
- /// @param prefix IPv6 prefix for which the @ref Host object is searched.
- /// @param prefix_len IPv6 prefix length.
- ///
- /// @return Const @ref Host object using a specified IPv6 prefix.
- ///
- /// @throw MultipleRecords if two or more rows are returned from the
- /// Cassandra database
- virtual ConstHostPtr get6(const asiolink::IOAddress& prefix,
- const uint8_t prefix_len) const override;
-
- /// @brief Returns a host connected to the IPv6 subnet and having
- /// a reservation for a specified IPv6 address or prefix.
- ///
- /// @param subnet_id Subnet identifier.
- /// @param address reserved IPv6 address/prefix.
- ///
- /// @return Const @c Host object using a specified IPv6 address/prefix.
- virtual ConstHostPtr
- get6(const SubnetID& subnet_id,
- const asiolink::IOAddress& address) const override;
-
- /// @brief Returns all hosts connected to the IPv6 subnet and having
- /// a reservation for a specified address or delegated prefix (lease).
- ///
- /// This backend does not support a configuration in which multiple
- /// reservations can be created for a single IPv6 address, so it
- /// always returns 1 or 0 hosts.
- ///
- /// @param subnet_id Subnet identifier.
- /// @param address reserved IPv6 address.
- ///
- /// @return Collection of const @c Host objects.
- virtual ConstHostCollection
- getAll6(const SubnetID& subnet_id,
- const asiolink::IOAddress& address) const override;
-
- /// @brief Returns a collection of all the hosts.
- ///
- /// This method may return multiple @ref Host objects. It is only used in
- /// testing. It may be very slow when running on a production server with
- /// lots of hosts.
- ///
- /// @return Collection of const @ref Host objects.
- virtual ConstHostCollection
- getAllHosts() const;
-
- /// @brief Returns textual description of the backend.
- ///
- /// @return Description of the backend.
- virtual std::string getDescription() const;
-
- /// @brief Returns the name of the database.
- ///
- /// @return database name
- virtual std::string getName() const;
-
- /// @brief Return backend type
- ///
- /// @return backend type "cql"
- virtual std::string getType() const override;
-
- /// @brief Retrieves schema version from the DB.
- ///
- /// @return Version number stored in the database, as a pair of unsigned
- /// integers. "first" is the major version number, "second" is the
- /// minor version number.
- ///
- /// @throw isc::db::DbOperationError An operation on the open database
- /// has failed.
- virtual db::VersionPair getVersion() const;
-
- /// @brief Commit Transactions
- ///
- /// Commits all pending database operations (no-op for Cassandra)
- virtual void commit() override;
-
- /// @brief Rollback Transactions
- ///
- /// Rolls back all pending database operations (no-op for Cassandra)
- virtual void rollback() override;
-
- /// @brief Controls whether IP reservations are unique or non-unique.
- ///
- /// In a typical case, the IP reservations are unique and backends verify
- /// prior to adding a host reservation to the database that the reservation
- /// for a given IP address does not exist. In some cases it may be required
- /// to allow non-unique IP reservations, e.g. in the case when a host has
- /// several interfaces and independently of which interface is used by this
- /// host to communicate with the DHCP server the same IP address should be
- /// assigned. In this case the @c unique value should be set to false to
- /// disable the checks for uniqueness on the backend side.
- ///
- /// @param unique boolean flag indicating if the IP reservations must be
- /// unique within the subnet or can be non-unique.
- /// @return true when addresses must be unique, false otherwise because
- /// this backend does not support specifying the same IP address in multiple
- /// host reservations.
- virtual bool setIPReservationsUnique(const bool unique) override;
-
-private:
- /// @brief Pointer to the implementation of the @ref CqlHostDataSource.
- CqlHostDataSourceImpl* impl_;
-}; // class CqlHostDataSource
-
-} // namespace dhcp
-} // namespace isc
-
-#endif // CQL_HOST_DATA_SOURCE_H
diff --git a/src/lib/dhcpsrv/cql_lease_mgr.cc b/src/lib/dhcpsrv/cql_lease_mgr.cc
deleted file mode 100644
index dc550a571a..0000000000
--- a/src/lib/dhcpsrv/cql_lease_mgr.cc
+++ /dev/null
@@ -1,2884 +0,0 @@
-// Copyright (C) 2016-2022 Internet Systems Consortium, Inc. ("ISC")
-// Copyright (C) 2015-2018 Deutsche Telekom AG.
-//
-// Authors: Razvan Becheriu <razvan.becheriu@qualitance.com>
-// Andrei Pavel <andrei.pavel@qualitance.com>
-//
-// 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 <config.h>
-
-#include <dhcpsrv/cql_lease_mgr.h>
-#include <dhcpsrv/dhcpsrv_exceptions.h>
-#include <dhcpsrv/dhcpsrv_log.h>
-
-#include <dhcp/duid.h>
-#include <dhcp/hwaddr.h>
-
-#include <asiolink/io_address.h>
-#include <boost/make_shared.hpp>
-
-using namespace isc::data;
-using namespace isc::db;
-using namespace isc::asiolink;
-
-namespace isc {
-namespace dhcp {
-
-static constexpr size_t HOSTNAME_MAX_LEN = 255u;
-static constexpr size_t ADDRESS6_TEXT_MAX_LEN = 39u;
-static constexpr char NULL_USER_CONTEXT[] = "";
-
-/// @brief Common CQL and Lease Data Methods
-///
-/// The @ref CqlLease4Exchange and @ref CqlLease6Exchange classes provide the
-/// functionality to set up binding information between variables in the
-/// program and data extracted from the database. This class is the common
-/// base to both of them, containing some common methods.
-class CqlLeaseExchange : public CqlExchange {
-public:
-
- /// @brief Constructor
- ///
- /// @param connection already open Cassandra connection.
- CqlLeaseExchange(const CqlConnection &connection)
- : connection_(connection), valid_lifetime_(0), expire_(0),
- current_expire_(0), subnet_id_(0), fqdn_fwd_(cass_false),
- fqdn_rev_(cass_false), state_(0), user_context_(NULL_USER_CONTEXT) {
- }
-
- /// @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 = 0;
-
- /// @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() override = 0;
-
-protected:
-
- /// @brief Database connection
- const CqlConnection &connection_;
-
- /// @brief Hardware address
- CassBlob hwaddr_;
-
- /// @brief Lease timer
- cass_int64_t valid_lifetime_;
-
- /// @brief Lease expiry time
- cass_int64_t expire_;
-
- /// @brief Expiration time of lease before update
- cass_int64_t current_expire_;
-
- /// @brief Subnet identifier
- cass_int32_t subnet_id_;
-
- /// @brief Has forward DNS update been performed?
- cass_bool_t fqdn_fwd_;
-
- /// @brief Has reverse DNS update been performed?
- cass_bool_t fqdn_rev_;
-
- /// @brief Client hostname
- std::string hostname_;
-
- /// @brief Lease state
- cass_int32_t state_;
-
- /// @brief User context
- std::string user_context_;
-};
-
-/// @brief Exchange Lease4 information between Kea and CQL
-///
-/// On any CQL operation, arrays of CQL BIND structures must be built to
-/// describe the parameters in the prepared statements. Where information is
-/// inserted or retrieved - INSERT, UPDATE, SELECT - a large amount of that
-/// structure is identical. This class handles the creation of that array.
-///
-/// Owing to the CQL API, the process requires some intermediate variables
-/// to hold things like data length etc. This object holds those variables.
-///
-/// @note There are no unit tests for this class. It is tested indirectly
-/// in all CqlLeaseMgr::xxx4() calls where it is used.
-class CqlLease4Exchange : public CqlLeaseExchange {
-public:
-
- /// @brief Constructor
- ///
- /// The initialization of the variables here is only to satisfy
- /// cppcheck - all variables are initialized/set in the methods before
- /// they are used.
- ///
- /// @param connection connection used for this query
- explicit CqlLease4Exchange(const CqlConnection &connection);
-
- /// @brief Create CQL_BIND objects for Lease4 Pointer
- ///
- /// Fills in the CQL_BIND array for sending data in the Lease4 object to
- /// the database. Used for INSERT statements.
- ///
- /// @param lease The lease information to be inserted
- /// @param data Lease info will be stored here in CQL format
- void createBindForInsert(const Lease4Ptr &lease, AnyArray &data);
-
- /// @brief Create CQL_BIND objects for Lease4 Pointer
- ///
- /// Fills in the CQL_BIND array for sending data in the Lease4 object to
- /// the database. Used for UPDATE statements.
- ///
- /// @param lease Updated lease information.
- /// @param data lease info in CQL format will be stored here
- /// @param statement_tag tag identifying the query (optional)
- void createBindForUpdate(const Lease4Ptr &lease, AnyArray &data,
- StatementTag statement_tag = NULL);
-
- /// @brief Create CQL_BIND objects for Lease4 Pointer
- ///
- /// Fills in the CQL_BIND array for sending data in the Lease4 object to
- /// the database. Used for DELETE statements.
- ///
- /// @param lease Deleted lease information.
- /// @param data lease info in CQL format will be stored here
- /// @param statement_tag tag identifying the query (optional)
- void createBindForDelete(const Lease4Ptr &lease,
- AnyArray &data,
- StatementTag statement_tag = NULL);
-
- /// @brief Create BIND array to receive data
- ///
- /// Creates a CQL_BIND array to receive Lease4 data from the database.
- ///
- /// @param data info returned by CQL will be stored here
- /// @param statement_tag tag identifying the query (optional)
- virtual void
- createBindForSelect(AnyArray &data, StatementTag statement_tag = NULL) override;
-
- /// @brief Retrieves the Lease4 object in Kea format
- ///
- /// @return C++ representation of the object being returned
- virtual boost::any retrieve() override;
-
- /// @brief Retrieves zero or more IPv4 leases
- ///
- /// @param statement_tag query to be executed
- /// @param data parameters for the query
- /// @param result this lease collection will be updated
- void getLeaseCollection(StatementTag &statement_tag, AnyArray &data,
- Lease4Collection &result);
-
- /// @brief Retrieves one IPv4 lease
- ///
- /// @param statement_tag query to be executed
- /// @param data parameters for the query
- /// @param result pointer to the lease being returned (or null)
- void
- getLease(StatementTag &statement_tag, AnyArray &data, Lease4Ptr &result);
-
- /// @brief Returns expired leases.
- ///
- /// This method returns up to specified number (see max_leases) of
- /// expired leases.
- ///
- /// @param max_leases at most this number of leases will be returned
- /// @param expired_leases expired leases will be stored here
- void getExpiredLeases(const size_t &max_leases, Lease4Collection &expired_leases);
-
- /// @brief Cassandra statements
- static StatementMap tagged_statements_;
-
- /// @brief Statement tags definitions
- /// @{
- // Add entry to lease4 table
- static constexpr StatementTag INSERT_LEASE4 = "INSERT_LEASE4";
- // Update a Lease4 entry
- static constexpr StatementTag UPDATE_LEASE4 = "UPDATE_LEASE4";
- // Delete from lease4 by address
- static constexpr StatementTag DELETE_LEASE4 = "DELETE_LEASE4";
- // Delete expired lease4s in certain state
- static constexpr StatementTag GET_LEASE4_EXPIRE = "GET_LEASE4_EXPIRE";
- // Get lease4
- static constexpr StatementTag GET_LEASE4 = "GET_LEASE4";
- // Get lease4 by address
- static constexpr StatementTag GET_LEASE4_ADDR = "GET_LEASE4_ADDR";
- // Get lease4 by client ID
- static constexpr StatementTag GET_LEASE4_CLIENTID = "GET_LEASE4_CLIENTID";
- // Get lease4 by client ID & subnet ID
- static constexpr StatementTag GET_LEASE4_CLIENTID_SUBID = "GET_LEASE4_CLIENTID_SUBID";
- // Get lease4 by HW address
- static constexpr StatementTag GET_LEASE4_HWADDR = "GET_LEASE4_HWADDR";
- // Get lease4 by HW address & subnet ID
- static constexpr StatementTag GET_LEASE4_HWADDR_SUBID = "GET_LEASE4_HWADDR_SUBID";
- // Get range of lease4 from first lease with a limit
- static constexpr StatementTag GET_LEASE4_LIMIT = "GET_LEASE4_LIMIT";
- // Get range of lease4 from address with limit (paging)
- static constexpr StatementTag GET_LEASE4_PAGE = "GET_LEASE4_PAGE";
- // Get lease4 by subnet ID
- static constexpr StatementTag GET_LEASE4_SUBID = "GET_LEASE4_SUBID";
- // Get lease4 by hostname
- static constexpr StatementTag GET_LEASE4_HOSTNAME = "GET_LEASE4_HOSTNAME";
- /// @}
-
-private:
-
- // Pointer to lease object
- Lease4Ptr lease_;
- // IPv4 address
- cass_int32_t address_;
- // Client identification
- CassBlob client_id_;
-}; // CqlLease4Exchange
-
-constexpr StatementTag CqlLease4Exchange::INSERT_LEASE4;
-constexpr StatementTag CqlLease4Exchange::UPDATE_LEASE4;
-constexpr StatementTag CqlLease4Exchange::DELETE_LEASE4;
-constexpr StatementTag CqlLease4Exchange::GET_LEASE4_EXPIRE;
-constexpr StatementTag CqlLease4Exchange::GET_LEASE4;
-constexpr StatementTag CqlLease4Exchange::GET_LEASE4_ADDR;
-constexpr StatementTag CqlLease4Exchange::GET_LEASE4_CLIENTID;
-constexpr StatementTag CqlLease4Exchange::GET_LEASE4_CLIENTID_SUBID;
-constexpr StatementTag CqlLease4Exchange::GET_LEASE4_HWADDR;
-constexpr StatementTag CqlLease4Exchange::GET_LEASE4_HWADDR_SUBID;
-constexpr StatementTag CqlLease4Exchange::GET_LEASE4_LIMIT;
-constexpr StatementTag CqlLease4Exchange::GET_LEASE4_PAGE;
-constexpr StatementTag CqlLease4Exchange::GET_LEASE4_SUBID;
-constexpr StatementTag CqlLease4Exchange::GET_LEASE4_HOSTNAME;
-
-StatementMap CqlLease4Exchange::tagged_statements_{
-
- // Inserts new IPv4 lease
- {INSERT_LEASE4,
- {INSERT_LEASE4,
- "INSERT INTO lease4( "
- "address, hwaddr, client_id, valid_lifetime, expire, subnet_id, "
- "fqdn_fwd, fqdn_rev, hostname, state, user_context "
- ") VALUES ( "
- "?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? "
- ") "
- "IF NOT EXISTS "
- }},
-
- // Updates existing IPv4 lease
- {UPDATE_LEASE4,
- {UPDATE_LEASE4,
- "UPDATE lease4 SET "
- "hwaddr = ?, "
- "client_id = ?, "
- "subnet_id = ?, "
- "valid_lifetime = ?, "
- "expire = ?, "
- "fqdn_fwd = ?, "
- "fqdn_rev = ?, "
- "hostname = ?, "
- "state = ?, "
- "user_context = ? "
- "WHERE address = ? "
- "IF expire = ? "
- }},
-
- // Deletes existing IPv4 lease
- {DELETE_LEASE4,
- {DELETE_LEASE4,
- "DELETE FROM lease4 "
- "WHERE address = ? "
- "IF expire = ? "
- }},
-
- // Gets up to a certain number of expired IPv4 leases
- {GET_LEASE4_EXPIRE,
- {GET_LEASE4_EXPIRE,
- "SELECT "
- "address, hwaddr, client_id, valid_lifetime, expire, subnet_id, "
- "fqdn_fwd, fqdn_rev, hostname, state, user_context "
- "FROM lease4 "
- "WHERE state = ? "
- "AND valid_lifetime < 4294967295 "
- "AND expire < ? "
- "LIMIT ? "
- "ALLOW FILTERING "
- }},
-
- // Gets an IPv4 lease(s)
- {GET_LEASE4,
- {GET_LEASE4,
- "SELECT "
- "address, hwaddr, client_id, valid_lifetime, expire, subnet_id, "
- "fqdn_fwd, fqdn_rev, hostname, state, user_context "
- "FROM lease4 "
- }},
-
- // Gets an IPv4 lease with specified IPv4 address
- {GET_LEASE4_ADDR,
- {GET_LEASE4_ADDR,
- "SELECT "
- "address, hwaddr, client_id, valid_lifetime, expire, subnet_id, "
- "fqdn_fwd, fqdn_rev, hostname, state, user_context "
- "FROM lease4 "
- "WHERE address = ? "
- }},
-
- // Gets an IPv4 lease(s) with specified client-id
- {GET_LEASE4_CLIENTID,
- {GET_LEASE4_CLIENTID,
- "SELECT "
- "address, hwaddr, client_id, valid_lifetime, expire, subnet_id, "
- "fqdn_fwd, fqdn_rev, hostname, state, user_context "
- "FROM lease4 "
- "WHERE client_id = ? "
- "ALLOW FILTERING "
- }},
-
- // Gets an IPv4 lease with specified client-id and subnet-id
- {GET_LEASE4_CLIENTID_SUBID,
- {GET_LEASE4_CLIENTID_SUBID,
- "SELECT "
- "address, hwaddr, client_id, valid_lifetime, expire, subnet_id, "
- "fqdn_fwd, fqdn_rev, hostname, state, user_context "
- "FROM lease4 "
- "WHERE client_id = ? "
- "AND subnet_id = ? "
- "ALLOW FILTERING "
- }},
-
- // Gets all IPv4 leases with specified hardware address
- {GET_LEASE4_HWADDR,
- {GET_LEASE4_HWADDR,
- "SELECT "
- "address, hwaddr, client_id, valid_lifetime, expire, subnet_id, "
- "fqdn_fwd, fqdn_rev, hostname, state, user_context "
- "FROM lease4 "
- "WHERE hwaddr = ? "
- "ALLOW FILTERING "
- }},
-
- // Gets an IPv4 lease with specified hardware addr and subnet-id
- {GET_LEASE4_HWADDR_SUBID,
- {GET_LEASE4_HWADDR_SUBID,
- "SELECT "
- "address, hwaddr, client_id, valid_lifetime, expire, subnet_id, "
- "fqdn_fwd, fqdn_rev, hostname, state, user_context "
- "FROM lease4 "
- "WHERE hwaddr = ? "
- "AND subnet_id = ? "
- "ALLOW FILTERING "
- }},
-
- // Get range of lease4 from first lease with a limit (paging)
- {GET_LEASE4_LIMIT,
- {GET_LEASE4_LIMIT,
- "SELECT "
- "address, hwaddr, client_id, valid_lifetime, expire, subnet_id, "
- "fqdn_fwd, fqdn_rev, hostname, state, user_context "
- "FROM lease4 "
- "LIMIT ? "
- "ALLOW FILTERING "
- }},
-
- // Get range of lease4 from address with a limit (paging)
- {GET_LEASE4_PAGE,
- {GET_LEASE4_PAGE,
- "SELECT "
- "address, hwaddr, client_id, valid_lifetime, expire, subnet_id, "
- "fqdn_fwd, fqdn_rev, hostname, state, user_context "
- "FROM lease4 "
- "WHERE TOKEN(address) > TOKEN(?) "
- "LIMIT ? "
- "ALLOW FILTERING "
- }},
-
- // Gets an IPv4 lease(s) with specified subnet-id
- {GET_LEASE4_SUBID,
- {GET_LEASE4_SUBID,
- "SELECT "
- "address, hwaddr, client_id, valid_lifetime, expire, subnet_id, "
- "fqdn_fwd, fqdn_rev, hostname, state, user_context "
- "FROM lease4 "
- "WHERE subnet_id = ? "
- "ALLOW FILTERING "}},
-
- // Gets an IPv4 lease(s) with specified hostname
- {GET_LEASE4_HOSTNAME,
- {GET_LEASE4_HOSTNAME,
- "SELECT "
- "address, hwaddr, client_id, valid_lifetime, expire, subnet_id, "
- "fqdn_fwd, fqdn_rev, hostname, state, user_context "
- "FROM lease4 "
- "WHERE hostname = ? "
- "ALLOW FILTERING "
- }}
-};
-
-CqlLease4Exchange::CqlLease4Exchange(const CqlConnection &connection)
- : CqlLeaseExchange(connection), address_(0) {
-}
-
-void
-CqlLease4Exchange::createBindForInsert(const Lease4Ptr &lease, AnyArray &data) {
- if (!lease) {
- isc_throw(BadValue, "CqlLease4Exchange::createBindForInsert(): "
- "Lease4 object is NULL");
- }
- // Store lease object to ensure it remains valid.
- lease_ = lease;
- // Set up the structures for the various components of the lease4
- // structure.
-
- try {
- // address: int
- // The address in the Lease structure is an IOAddress object.
- // Convert this to an integer for storage.
- address_ = static_cast<cass_int32_t>(lease->addr_.toUint32());
-
- // hwaddr: blob
- if (lease_->hwaddr_ && lease_->hwaddr_->hwaddr_.size() > 0) {
- if (lease_->hwaddr_->hwaddr_.size() > HWAddr::MAX_HWADDR_LEN) {
- isc_throw(DbOperationError,
- "hardware address "
- << lease_->hwaddr_->toText() << " of length "
- << lease_->hwaddr_->hwaddr_.size()
- << " exceeds maximum allowed length of "
- << HWAddr::MAX_HWADDR_LEN);
- }
- hwaddr_ = lease_->hwaddr_->hwaddr_;
- } else {
- hwaddr_.clear();
- }
-
- // client_id: blob
- if (lease_->client_id_ && lease_->client_id_->getClientId().size() > 0) {
- client_id_ = lease_->client_id_->getClientId();
- } else {
- client_id_.clear();
- }
-
- // valid lifetime: bigint
- valid_lifetime_ = static_cast<cass_int64_t>(lease_->valid_lft_);
-
- // expire: bigint
- // The lease structure holds the client last transmission time
- /// (cltt_)
- // For convenience for external tools, this is converted to lease
- // expiry time (expire). The relationship is given by:
- // expire = cltt_ + valid_lft_
- CqlExchange::convertToDatabaseTime(lease_->cltt_, lease_->valid_lft_,
- expire_);
-
- // subnet_id: int
- subnet_id_ = static_cast<cass_int32_t>(lease_->subnet_id_);
-
- // fqdn_fwd: boolean
- fqdn_fwd_ = lease_->fqdn_fwd_ ? cass_true : cass_false;
-
- // fqdn_rev: boolean
- fqdn_rev_ = lease_->fqdn_rev_ ? cass_true : cass_false;
-
- // hostname: varchar
- if (lease_->hostname_.size() > HOSTNAME_MAX_LEN) {
- isc_throw(BadValue,
- "hostname " << lease_->hostname_ << " of length "
- << lease_->hostname_.size()
- << " exceeds maximum allowed length of "
- << HOSTNAME_MAX_LEN);
- }
- hostname_ = lease_->hostname_;
-
- // state: int
- state_ = static_cast<cass_int32_t>(lease_->state_);
-
- // user_context: text
- ConstElementPtr ctx = lease_->getContext();
- if (ctx) {
- user_context_ = ctx->str();
- } else {
- user_context_ = NULL_USER_CONTEXT;
- }
-
- // Start with a fresh array.
- data.clear();
- data.add(&address_);
- data.add(&hwaddr_);
- data.add(&client_id_);
- data.add(&valid_lifetime_);
- data.add(&expire_);
- data.add(&subnet_id_);
- data.add(&fqdn_fwd_);
- data.add(&fqdn_rev_);
- data.add(&hostname_);
- data.add(&state_);
- data.add(&user_context_);
-
- } catch (const Exception &ex) {
- isc_throw(DbOperationError, "CqlLease4Exchange::createBindForInsert(): "
- "could not create bind array from Lease4: " << lease_->addr_.toText()
- << ", reason: " << ex.what());
- }
-}
-
-void
-CqlLease4Exchange::createBindForUpdate(const Lease4Ptr &lease, AnyArray &data,
- StatementTag /* unused */) {
- if (!lease) {
- isc_throw(BadValue, "CqlLease4Exchange::createBindForUpdate(): "
- "Lease4 object is NULL");
- }
- // Store lease object to ensure it remains valid.
- lease_ = lease;
- // Set up the structures for the various components of the lease4
- // structure.
-
- try {
- // address: int
- // The address in the Lease structure is an IOAddress object.
- // Convert this to an integer for storage.
- address_ = static_cast<cass_int32_t>(lease->addr_.toUint32());
-
- // hwaddr: blob
- if (lease_->hwaddr_ && lease_->hwaddr_->hwaddr_.size() > 0) {
- if (lease_->hwaddr_->hwaddr_.size() > HWAddr::MAX_HWADDR_LEN) {
- isc_throw(DbOperationError,
- "hardware address "
- << lease_->hwaddr_->toText() << " of length "
- << lease_->hwaddr_->hwaddr_.size()
- << " exceeds maximum allowed length of "
- << HWAddr::MAX_HWADDR_LEN);
- }
- hwaddr_ = lease_->hwaddr_->hwaddr_;
- } else {
- hwaddr_.clear();
- }
-
- // client_id: blob
- if (lease_->client_id_ && lease_->client_id_->getClientId().size() > 0) {
- client_id_ = lease_->client_id_->getClientId();
- } else {
- client_id_.clear();
- }
-
- // valid lifetime: bigint
- valid_lifetime_ = static_cast<cass_int64_t>(lease_->valid_lft_);
-
- // expire: bigint
- // The lease structure holds the client last transmission time
- /// (cltt_)
- // For convenience for external tools, this is converted to lease
- // expiry time (expire). The relationship is given by:
- // expire = cltt_ + valid_lft_
- CqlExchange::convertToDatabaseTime(lease_->cltt_, lease_->valid_lft_,
- expire_);
-
- // subnet_id: int
- subnet_id_ = static_cast<cass_int32_t>(lease_->subnet_id_);
-
- // fqdn_fwd: boolean
- fqdn_fwd_ = lease_->fqdn_fwd_ ? cass_true : cass_false;
-
- // fqdn_rev: boolean
- fqdn_rev_ = lease_->fqdn_rev_ ? cass_true : cass_false;
-
- // hostname: varchar
- if (lease_->hostname_.size() > HOSTNAME_MAX_LEN) {
- isc_throw(BadValue,
- "hostname " << lease_->hostname_ << " of length "
- << lease_->hostname_.size()
- << " exceeds maximum allowed length of "
- << HOSTNAME_MAX_LEN);
- }
- hostname_ = lease_->hostname_;
-
- // state: int
- state_ = static_cast<cass_int32_t>(lease_->state_);
-
- // user_context: text
- ConstElementPtr ctx = lease_->getContext();
- if (ctx) {
- user_context_ = ctx->str();
- } else {
- user_context_ = NULL_USER_CONTEXT;
- }
-
- // Start with a fresh array.
- data.clear();
- data.add(&hwaddr_);
- data.add(&client_id_);
- data.add(&subnet_id_);
- data.add(&valid_lifetime_);
- data.add(&expire_);
- data.add(&fqdn_fwd_);
- data.add(&fqdn_rev_);
- data.add(&hostname_);
- data.add(&state_);
- data.add(&user_context_);
- data.add(&address_);
-
- CqlExchange::convertToDatabaseTime(lease_->current_cltt_,
- lease_->current_valid_lft_,
- current_expire_);
- data.add(&current_expire_);
- } catch (const Exception &ex) {
- isc_throw(DbOperationError,
- "CqlLease4Exchange::createBindUpdate(): "
- "could not create bind array from Lease4: "
- << lease_->addr_.toText() << ", reason: " << ex.what());
- }
-}
-
-void
-CqlLease4Exchange::createBindForDelete(const Lease4Ptr &lease, AnyArray &data,
- StatementTag /* unused */) {
- if (!lease) {
- isc_throw(BadValue, "CqlLease4Exchange::createBindForDelete(): "
- "Lease4 object is NULL");
- }
- // Store lease object to ensure it remains valid.
- lease_ = lease;
-
- // Set up the structures for the various components of the lease4
- // structure.
- try {
- // address: int
- address_ = static_cast<cass_int32_t>(lease_->addr_.toUint32());
-
- // Start with a fresh array.
- data.clear();
- data.add(&address_);
-
- CqlExchange::convertToDatabaseTime(lease_->current_cltt_,
- lease_->current_valid_lft_,
- current_expire_);
- data.add(&current_expire_);
- } catch (const Exception &ex) {
- isc_throw(DbOperationError,
- "CqlLease4Exchange::createBindForDelete(): "
- "could not create bind array from Lease4: "
- << lease_->addr_.toText() << ", reason: " << ex.what());
- }
-}
-
-void
-CqlLease4Exchange::createBindForSelect(AnyArray &data, StatementTag /* unused */) {
- // Start with a fresh array.
- data.clear();
-
- // address: blob
- data.add(&address_);
-
- // hwaddr: blob
- data.add(&hwaddr_);
-
- // client_id: blob
- data.add(&client_id_);
-
- // valid_lifetime: bigint
- data.add(&valid_lifetime_);
-
- // expire: bigint
- data.add(&expire_);
-
- // subnet_id: int
- data.add(&subnet_id_);
-
- // fqdn_fwd: boolean
- data.add(&fqdn_fwd_);
-
- // fqdn_rev: boolean
- data.add(&fqdn_rev_);
-
- // hostname: varchar
- data.add(&hostname_);
-
- // state: int
- data.add(&state_);
-
- // user_context: text
- data.add(&user_context_);
-}
-
-boost::any
-CqlLease4Exchange::retrieve() {
- try {
- // Sanity checks
- if (hwaddr_.size() > HWAddr::MAX_HWADDR_LEN) {
- isc_throw(BadValue,
- "hardware address "
- << HWAddr(hwaddr_, HTYPE_ETHER).toText()
- << " of length " << hwaddr_.size()
- << " exceeds maximum allowed length of "
- << HWAddr::MAX_HWADDR_LEN);
- }
- if (client_id_.size() > ClientId::MAX_CLIENT_ID_LEN) {
- isc_throw(BadValue,
- "client ID " << ClientId(client_id_).toText()
- << " of length " << client_id_.size()
- << " exceeds maximum allowed length of "
- << ClientId::MAX_CLIENT_ID_LEN);
- }
- if (hostname_.size() > HOSTNAME_MAX_LEN) {
- isc_throw(BadValue,
- "hostname" << hostname_ << " of length "
- << hostname_.size()
- << " exceeds maximum allowed length of "
- << HOSTNAME_MAX_LEN);
- }
-
- time_t cltt = 0;
- CqlExchange::convertFromDatabaseTime(expire_, valid_lifetime_, cltt);
-
- HWAddrPtr hwaddr = boost::make_shared<HWAddr>(hwaddr_, HTYPE_ETHER);
-
- uint32_t addr4 = static_cast<uint32_t>(address_);
-
- ConstElementPtr ctx;
- if (!user_context_.empty()) {
- ctx = Element::fromJSON(user_context_);
- if (!ctx || (ctx->getType() != Element::map)) {
- isc_throw(BadValue, "user context '" << user_context_
- << "' is not a JSON map");
- }
- }
-
- Lease4Ptr result(boost::make_shared<Lease4>(addr4, hwaddr, client_id_.data(),
- client_id_.size(), valid_lifetime_,
- cltt, subnet_id_, fqdn_fwd_, fqdn_rev_,
- hostname_));
-
- result->state_ = state_;
-
- if (ctx) {
- result->setContext(ctx);
- }
-
- return (result);
- } catch (const Exception &ex) {
- isc_throw(DbOperationError,
- "CqlLease4Exchange::retrieve(): "
- "could not convert data to Lease4, reason: "
- << ex.what());
- }
-}
-
-void
-CqlLease4Exchange::getLeaseCollection(StatementTag &statement_tag, AnyArray &data,
- Lease4Collection &result) {
- AnyArray collection = executeSelect(connection_, data, statement_tag);
-
- // Transfer Lease4 objects to result.
- for (boost::any &element : collection) {
- result.push_back(boost::any_cast<Lease4Ptr>(element));
- }
-}
-
-void
-CqlLease4Exchange::getLease(StatementTag &statement_tag, AnyArray &data,
- Lease4Ptr &result) {
- // This particular method is called when only one or zero matches is
- // expected.
- Lease4Collection collection;
- getLeaseCollection(statement_tag, data, collection);
-
- // Return single record if present, else clear the lease.
- const size_t collection_size = collection.size();
- if (collection_size >= 2u) {
- isc_throw(MultipleRecords,
- "CqlLease4Exchange::getLease(): multiple records were found in "
- "the database where only one was expected for statement "
- << statement_tag);
- } else if (collection_size == 0u) {
- result.reset();
- } else {
- result = *collection.begin();
- }
-}
-
-void
-CqlLease4Exchange::getExpiredLeases(const size_t &max_leases,
- Lease4Collection &expired_leases) {
- // Set up the WHERE clause value
- cass_int32_t keep_state = Lease::STATE_EXPIRED_RECLAIMED;
- cass_int64_t timestamp = static_cast<cass_int64_t>(time(NULL));
-
- // If the number of leases is 0, we will return all leases. This is
- // achieved by setting the limit to a very high value.
- cass_int32_t limit = max_leases > 0u ? static_cast<cass_int32_t>(max_leases) :
- std::numeric_limits<cass_int32_t>::max();
-
- for (cass_int32_t state = Lease::STATE_DEFAULT;
- state <= Lease::STATE_EXPIRED_RECLAIMED; ++state) {
- if (state == keep_state) {
- continue;
- }
-
- AnyArray data;
- data.add(&state);
- data.add(&timestamp);
- data.add(&limit);
-
- // Retrieve leases from the database.
- Lease4Collection temp_collection;
- getLeaseCollection(CqlLease4Exchange::GET_LEASE4_EXPIRE, data,
- temp_collection);
-
- for (Lease4Ptr &lease : temp_collection) {
- expired_leases.push_back(lease);
- }
- }
-}
-
-/// @brief Exchange Lease6 information between Kea and CQL
-///
-/// On any CQL operation, arrays of CQL BIND structures must be built to
-/// describe the parameters in the prepared statements. Where information is
-/// inserted or retrieved - INSERT, UPDATE, SELECT - a large amount of that
-/// structure is identical. This class handles the creation of that array.
-///
-/// Owing to the CQL API, the process requires some intermediate variables
-/// to hold things like data length etc. This object holds those variables.
-///
-/// @note There are no unit tests for this class. It is tested indirectly
-/// in all CqlLeaseMgr::xxx6() calls where it is used.
-class CqlLease6Exchange : public CqlLeaseExchange {
-public:
-
- /// @brief Constructor
- ///
- /// The initialization of the variables here is only to satisfy
- /// cppcheck - all variables are initialized/set in the methods before
- /// they are used.
- ///
- /// @param connection connection used for this query
- explicit CqlLease6Exchange(const CqlConnection &connection);
-
- /// @brief Create CQL_BIND objects for Lease6 Pointer
- ///
- /// Fills in the CQL_BIND array for sending data in the Lease6 object to
- /// the database. Used for INSERT statements.
- ///
- /// @param lease The lease information to be inserted
- /// @param data Lease info will be stored here in CQL format
- void createBindForInsert(const Lease6Ptr &lease, AnyArray &data);
-
- /// @brief Create CQL_BIND objects for Lease6 Pointer
- ///
- /// Fills in the CQL_BIND array for sending data in the Lease6 object to
- /// the database. Used for UPDATE statements.
- ///
- /// @param lease Updated lease information.
- /// @param data lease info in CQL format will be stored here
- /// @param statement_tag tag identifying the query (optional)
- void createBindForUpdate(const Lease6Ptr &lease, AnyArray &data,
- StatementTag statement_tag = NULL);
-
- /// @brief Create CQL_BIND objects for Lease4 Pointer
- ///
- /// Fills in the CQL_BIND array for sending data in the Lease6 object to
- /// the database. Used for DELETE statements.
- ///
- /// @param lease address of the lease to be deleted
- /// @param data lease info in CQL format will be stored here
- /// @param statement_tag tag identifying the query (optional)
- void createBindForDelete(const Lease6Ptr &lease,
- AnyArray &data,
- StatementTag statement_tag = NULL);
-
- /// @brief Create BIND array to receive data
- ///
- /// Creates a CQL_BIND array to receive Lease6 data from the database.
- ///
- /// @param data info returned by CQL will be stored here
- /// @param statement_tag tag identifying the query (optional)
- virtual void
- createBindForSelect(AnyArray &data, StatementTag statement_tag = NULL) override;
-
- /// @brief Retrieves the Lease6 object in Kea format
- ///
- /// @return C++ representation of the object being returned
- virtual boost::any retrieve() override;
-
- /// @brief Retrieves zero or more IPv6 leases
- ///
- /// @param statement_tag query to be executed
- /// @param data parameters for the query
- /// @param result this lease collection will be updated
- void getLeaseCollection(StatementTag &statement_tag, AnyArray &data,
- Lease6Collection &result);
-
- /// @brief Retrieves one IPv6 lease
- ///
- /// @param statement_tag query to be executed
- /// @param data parameters for the query
- /// @param result pointer to the lease being returned (or null)
- void
- getLease(StatementTag &statement_tag, AnyArray &data, Lease6Ptr &result);
-
- /// @brief Returns expired leases.
- ///
- /// This method returns up to specified number (see max_leases) of
- /// expired leases.
- ///
- /// @param max_leases at most this number of leases will be returned
- /// @param expired_leases expired leases will be stored here
- void getExpiredLeases(const size_t &max_leases, Lease6Collection &expired_leases);
-
- /// @brief Cassandra statements
- static StatementMap tagged_statements_;
-
- /// @brief Statement tags definitions
- /// @{
- static constexpr StatementTag INSERT_LEASE6 = "INSERT_LEASE6";
- static constexpr StatementTag UPDATE_LEASE6 = "UPDATE_LEASE6";
- static constexpr StatementTag DELETE_LEASE6 = "DELETE_LEASE6";
- static constexpr StatementTag GET_LEASE6_EXPIRE = "GET_LEASE6_EXPIRE";
- static constexpr StatementTag GET_LEASE6_ADDR = "GET_LEASE6_ADDR";
- static constexpr StatementTag GET_LEASE6_DUID = "GET_LEASE6_DUID";
- static constexpr StatementTag GET_LEASE6_DUID_IAID = "GET_LEASE6_DUID_IAID";
- static constexpr StatementTag GET_LEASE6_DUID_IAID_SUBID = "GET_LEASE6_DUID_IAID_SUBID";
- static constexpr StatementTag GET_LEASE6_LIMIT = "GET_LEASE6_LIMIT";
- static constexpr StatementTag GET_LEASE6_PAGE = "GET_LEASE6_PAGE";
- static constexpr StatementTag GET_LEASE6_HOSTNAME = "GET_LEASE6_HOSTNAME";
- // @}
-
-private:
-
- /// @brief Lease
- Lease6Ptr lease_;
-
- /// @brief IPv6 address
- std::string address_;
-
- /// @brief Preferred lifetime
- cass_int64_t pref_lifetime_;
-
- /// @brief Client identifier
- CassBlob duid_;
-
- /// @brief Identity association identifier
- cass_int32_t iaid_;
-
- /// @brief Lease type (NA, TA or PD)
- cass_int32_t lease_type_;
-
- /// @brief Prefix length
- cass_int32_t prefix_len_;
-
- /// @brief Hardware type
- cass_int32_t hwtype_;
-
- /// @brief Source of the hardware address
- cass_int32_t hwaddr_source_;
-}; // CqlLease6Exchange
-
-constexpr StatementTag CqlLease6Exchange::INSERT_LEASE6;
-constexpr StatementTag CqlLease6Exchange::UPDATE_LEASE6;
-constexpr StatementTag CqlLease6Exchange::DELETE_LEASE6;
-constexpr StatementTag CqlLease6Exchange::GET_LEASE6_EXPIRE;
-constexpr StatementTag CqlLease6Exchange::GET_LEASE6_ADDR;
-constexpr StatementTag CqlLease6Exchange::GET_LEASE6_DUID;
-constexpr StatementTag CqlLease6Exchange::GET_LEASE6_DUID_IAID;
-constexpr StatementTag CqlLease6Exchange::GET_LEASE6_DUID_IAID_SUBID;
-constexpr StatementTag CqlLease6Exchange::GET_LEASE6_LIMIT;
-constexpr StatementTag CqlLease6Exchange::GET_LEASE6_PAGE;
-constexpr StatementTag CqlLease6Exchange::GET_LEASE6_HOSTNAME;
-
-StatementMap CqlLease6Exchange::tagged_statements_ = {
-
- // Inserts new IPv6 lease
- {INSERT_LEASE6,
- {INSERT_LEASE6,
- "INSERT INTO lease6("
- "address, valid_lifetime, expire, subnet_id, pref_lifetime, duid, iaid, "
- "lease_type, prefix_len, fqdn_fwd, fqdn_rev, hostname, hwaddr, hwtype, "
- "hwaddr_source, state, user_context "
- ") VALUES ("
- "?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?"
- ") "
- "IF NOT EXISTS "
- }},
-
- // Updates existing IPv6 lease
- {UPDATE_LEASE6,
- {UPDATE_LEASE6,
- "UPDATE lease6 SET "
- "valid_lifetime = ?, "
- "expire = ?, "
- "pref_lifetime = ?, "
- "duid = ?, "
- "iaid = ?, "
- "subnet_id = ?, "
- "lease_type = ?, "
- "prefix_len = ?, "
- "fqdn_fwd = ?, "
- "fqdn_rev = ?, "
- "hostname = ?, "
- "hwaddr = ?, "
- "hwtype = ?, "
- "hwaddr_source = ?, "
- "state = ?, "
- "user_context = ? "
- "WHERE address = ? "
- "IF expire = ? "
- }},
-
- // Deletes existing IPv6 lease
- {DELETE_LEASE6,
- {DELETE_LEASE6,
- "DELETE FROM lease6 "
- "WHERE address = ? "
- "IF expire = ? "
- }},
-
- // Gets up to a certain number of expired IPv6 leases
- {GET_LEASE6_EXPIRE,
- {GET_LEASE6_EXPIRE,
- "SELECT "
- "address, valid_lifetime, expire, subnet_id, pref_lifetime, duid, iaid, "
- "lease_type, prefix_len, fqdn_fwd, fqdn_rev, hostname, hwaddr, hwtype, "
- "hwaddr_source, state, user_context "
- "FROM lease6 "
- "WHERE state = ? "
- "AND valid_lifetime < 4294967295 "
- "AND expire < ? "
- "LIMIT ? "
- "ALLOW FILTERING "
- }},
-
- // Gets an IPv6 lease with specified IPv6 address
- {GET_LEASE6_ADDR,
- {GET_LEASE6_ADDR,
- "SELECT "
- "address, valid_lifetime, expire, subnet_id, pref_lifetime, duid, iaid, "
- "lease_type, prefix_len, fqdn_fwd, fqdn_rev, hostname, hwaddr, hwtype, "
- "hwaddr_source, state, user_context "
- "FROM lease6 "
- "WHERE address = ? "
- "AND lease_type = ? "
- "ALLOW FILTERING "
- }},
-
- // Gets an IPv6 lease with specified duid
- {GET_LEASE6_DUID,
- {GET_LEASE6_DUID,
- "SELECT "
- "address, valid_lifetime, expire, subnet_id, pref_lifetime, duid, iaid, "
- "lease_type, prefix_len, fqdn_fwd, fqdn_rev, hostname, hwaddr, hwtype, "
- "hwaddr_source, state, user_context "
- "FROM lease6 "
- "WHERE duid = ? "
- "ALLOW FILTERING "
- }},
-
- // Gets an IPv6 lease(s) with specified duid and iaid
- {GET_LEASE6_DUID_IAID,
- {GET_LEASE6_DUID_IAID,
- "SELECT "
- "address, valid_lifetime, expire, subnet_id, pref_lifetime, duid, iaid, "
- "lease_type, prefix_len, fqdn_fwd, fqdn_rev, hostname, hwaddr, hwtype, "
- "hwaddr_source, state, user_context "
- "FROM lease6 "
- "WHERE duid = ? AND iaid = ? "
- "AND lease_type = ? "
- "ALLOW FILTERING "
- }},
-
- // Gets an IPv6 lease with specified duid, iaid and subnet-id
- {GET_LEASE6_DUID_IAID_SUBID,
- {GET_LEASE6_DUID_IAID_SUBID,
- "SELECT "
- "address, valid_lifetime, expire, subnet_id, pref_lifetime, duid, iaid, "
- "lease_type, prefix_len, fqdn_fwd, fqdn_rev, hostname, hwaddr, hwtype, "
- "hwaddr_source, state, user_context "
- "FROM lease6 "
- "WHERE duid = ? AND iaid = ? "
- "AND lease_type = ? "
- "AND subnet_id = ? "
- "ALLOW FILTERING "
- }},
-
- // Get range of IPv6 leases from first lease with a limit (paging)
- {GET_LEASE6_LIMIT,
- {GET_LEASE6_LIMIT,
- "SELECT "
- "address, valid_lifetime, expire, subnet_id, pref_lifetime, duid, iaid, "
- "lease_type, prefix_len, fqdn_fwd, fqdn_rev, hostname, hwaddr, hwtype, "
- "hwaddr_source, state, user_context "
- "FROM lease6 "
- "LIMIT ? "
- "ALLOW FILTERING "
- }},
-
- // Get range of IPv6 leases from address with a limit (paging)
- {GET_LEASE6_PAGE,
- {GET_LEASE6_PAGE,
- "SELECT "
- "address, valid_lifetime, expire, subnet_id, pref_lifetime, duid, iaid, "
- "lease_type, prefix_len, fqdn_fwd, fqdn_rev, hostname, hwaddr, hwtype, "
- "hwaddr_source, state, user_context "
- "FROM lease6 "
- "WHERE TOKEN(address) > TOKEN(?) "
- "LIMIT ? "
- "ALLOW FILTERING "
- }},
-
- // Gets an IPv6 lease(s) with specified hostname
- {GET_LEASE6_HOSTNAME,
- {GET_LEASE6_HOSTNAME,
- "SELECT "
- "address, valid_lifetime, expire, subnet_id, pref_lifetime, duid, iaid, "
- "lease_type, prefix_len, fqdn_fwd, fqdn_rev, hostname, hwaddr, hwtype, "
- "hwaddr_source, state, user_context "
- "FROM lease6 "
- "WHERE hostname = ? "
- "ALLOW FILTERING "
- }}
-};
-
-CqlLease6Exchange::CqlLease6Exchange(const CqlConnection &connection)
- : CqlLeaseExchange(connection), pref_lifetime_(0), iaid_(0), lease_type_(0),
- prefix_len_(0), hwtype_(0), hwaddr_source_(0) {
-}
-
-void
-CqlLease6Exchange::createBindForInsert(const Lease6Ptr &lease, AnyArray &data) {
- if (!lease) {
- isc_throw(BadValue, "CqlLease6Exchange::createBindForInsert(): "
- "Lease6 object is NULL");
- }
- // Store lease object to ensure it remains valid.
- lease_ = lease;
-
- // Set up the structures for the various components of the lease4
- // structure.
- try {
- // address: varchar
- address_ = lease_->addr_.toText();
- if (address_.size() > ADDRESS6_TEXT_MAX_LEN) {
- isc_throw(BadValue, "address " << address_ << " of length " << address_.size()
- << " exceeds maximum allowed length of " << ADDRESS6_TEXT_MAX_LEN);
- }
-
- // valid lifetime: bigint
- valid_lifetime_ = static_cast<cass_int64_t>(lease_->valid_lft_);
-
- // expire: bigint
- // The lease structure holds the client last transmission time
- // (cltt_)
- // For convenience for external tools, this is converted to lease
- // expiry time (expire). The relationship is given by:
- // expire = cltt_ + valid_lft_
- CqlExchange::convertToDatabaseTime(lease_->cltt_, lease_->valid_lft_,
- expire_);
-
- // subnet_id: int
- subnet_id_ = static_cast<cass_int32_t>(lease_->subnet_id_);
-
- // pref_lifetime: bigint
- pref_lifetime_ = static_cast<cass_int64_t>(lease_->preferred_lft_);
-
- // duid: blob
- if (!lease_->duid_) {
- isc_throw(DbOperationError, "lease6 with address " << address_
- << " is missing mandatory duid");
- }
- duid_ = lease_->duid_->getDuid();
-
- // iaid: int
- iaid_ = static_cast<cass_int32_t>(lease_->iaid_);
-
- // lease_type: int
- lease_type_ = static_cast<cass_int32_t>(lease_->type_);
-
- // prefix_len: int
- prefix_len_ = static_cast<cass_int32_t>(lease_->prefixlen_);
-
- // fqdn_fwd: boolean
- fqdn_fwd_ = lease_->fqdn_fwd_ ? cass_true : cass_false;
-
- // fqdn_rev: boolean
- fqdn_rev_ = lease_->fqdn_rev_ ? cass_true : cass_false;
-
- // hostname: varchar
- if (lease_->hostname_.size() > HOSTNAME_MAX_LEN) {
- isc_throw(BadValue, "hostname" << lease_->hostname_ << " of length "
- << lease_->hostname_.size() << " exceeds maximum allowed length of "
- << HOSTNAME_MAX_LEN);
- }
- hostname_ = lease_->hostname_;
-
- // hwaddr: blob
- if (lease_->hwaddr_ && lease_->hwaddr_->hwaddr_.size() > 0) {
- if (lease_->hwaddr_->hwaddr_.size() > HWAddr::MAX_HWADDR_LEN) {
- isc_throw(DbOperationError, "hardware address " << lease_->hwaddr_->toText()
- << " of length " << lease_->hwaddr_->hwaddr_.size()
- << " exceeds maximum allowed length of " << HWAddr::MAX_HWADDR_LEN);
- }
- hwaddr_ = lease_->hwaddr_->hwaddr_;
- } else {
- hwaddr_.clear();
- }
-
- // hwtype: int
- if (lease_->hwaddr_) {
- hwtype_ = static_cast<cass_int32_t>(lease_->hwaddr_->htype_);
- } else {
- hwtype_ = 0;
- }
-
- // hwaddr_source: int
- if (lease_->hwaddr_) {
- hwaddr_source_ = static_cast<cass_int32_t>(lease_->hwaddr_->source_);
- } else {
- hwaddr_source_ = 0;
- }
-
- // state: int
- state_ = static_cast<cass_int32_t>(lease_->state_);
-
- // user_context: text
- ConstElementPtr ctx = lease_->getContext();
- if (ctx) {
- user_context_ = ctx->str();
- } else {
- user_context_ = NULL_USER_CONTEXT;
- }
-
- // Start with a fresh array.
- data.clear();
-
- // Add them all to data.
- data.add(&address_);
- data.add(&valid_lifetime_);
- data.add(&expire_);
- data.add(&subnet_id_);
- data.add(&pref_lifetime_);
- data.add(&duid_);
- data.add(&iaid_);
- data.add(&lease_type_);
- data.add(&prefix_len_);
- data.add(&fqdn_fwd_);
- data.add(&fqdn_rev_);
- data.add(&hostname_);
- data.add(&hwaddr_);
- data.add(&hwtype_);
- data.add(&hwaddr_source_);
- data.add(&state_);
- data.add(&user_context_);
-
- } catch (const Exception &ex) {
- isc_throw(DbOperationError, "CqlLease6Exchange::createBindForInsert(): "
- "could not create bind array from Lease6: " << lease_->addr_.toText()
- << ", reason: " << ex.what());
- }
-}
-
-void
-CqlLease6Exchange::createBindForUpdate(const Lease6Ptr &lease, AnyArray &data,
- StatementTag /* unused */) {
- if (!lease) {
- isc_throw(BadValue, "CqlLease6Exchange::createBindForUpdate(): "
- "Lease6 object is NULL");
- }
- // Store lease object to ensure it remains valid.
- lease_ = lease;
-
- // Set up the structures for the various components of the lease4
- // structure.
- try {
- // address: varchar
- address_ = lease_->addr_.toText();
- if (address_.size() > ADDRESS6_TEXT_MAX_LEN) {
- isc_throw(BadValue,
- "address " << address_ << " of length " << address_.size()
- << " exceeds maximum allowed length of "
- << ADDRESS6_TEXT_MAX_LEN);
- }
-
- // valid lifetime: bigint
- valid_lifetime_ = static_cast<cass_int64_t>(lease_->valid_lft_);
-
- // expire: bigint
- // The lease structure holds the client last transmission time
- // (cltt_)
- // For convenience for external tools, this is converted to lease
- // expiry time (expire). The relationship is given by:
- // expire = cltt_ + valid_lft_
- CqlExchange::convertToDatabaseTime(lease_->cltt_, lease_->valid_lft_,
- expire_);
-
- // subnet_id: int
- subnet_id_ = static_cast<cass_int32_t>(lease_->subnet_id_);
-
- // pref_lifetime: bigint
- pref_lifetime_ = static_cast<cass_int64_t>(lease_->preferred_lft_);
-
- // duid: blob
- if (!lease_->duid_) {
- isc_throw(DbOperationError,
- "lease6 with address " << address_
- << " is missing mandatory duid");
- }
- duid_ = lease_->duid_->getDuid();
-
- // iaid: int
- iaid_ = static_cast<cass_int32_t>(lease_->iaid_);
-
- // lease_type: int
- lease_type_ = static_cast<cass_int32_t>(lease_->type_);
-
- // prefix_len: int
- prefix_len_ = static_cast<cass_int32_t>(lease_->prefixlen_);
-
- // fqdn_fwd: boolean
- fqdn_fwd_ = lease_->fqdn_fwd_ ? cass_true : cass_false;
-
- // fqdn_rev: boolean
- fqdn_rev_ = lease_->fqdn_rev_ ? cass_true : cass_false;
-
- // hostname: varchar
- if (lease_->hostname_.size() > HOSTNAME_MAX_LEN) {
- isc_throw(BadValue,
- "hostname" << lease_->hostname_ << " of length "
- << lease_->hostname_.size()
- << " exceeds maximum allowed length of "
- << HOSTNAME_MAX_LEN);
- }
- hostname_ = lease_->hostname_;
-
- // hwaddr: blob
- if (lease_->hwaddr_ && lease_->hwaddr_->hwaddr_.size() > 0) {
- if (lease_->hwaddr_->hwaddr_.size() > HWAddr::MAX_HWADDR_LEN) {
- isc_throw(DbOperationError,
- "hardware address "
- << lease_->hwaddr_->toText() << " of length "
- << lease_->hwaddr_->hwaddr_.size()
- << " exceeds maximum allowed length of "
- << HWAddr::MAX_HWADDR_LEN);
- }
- hwaddr_ = lease_->hwaddr_->hwaddr_;
- } else {
- hwaddr_.clear();
- }
-
- // hwtype: int
- if (lease_->hwaddr_) {
- hwtype_ = static_cast<cass_int32_t>(lease_->hwaddr_->htype_);
- } else {
- hwtype_ = 0;
- }
-
- // hwaddr_source: int
- if (lease_->hwaddr_) {
- hwaddr_source_ = static_cast<cass_int32_t>(lease_->hwaddr_->source_);
- } else {
- hwaddr_source_ = 0;
- }
-
- // state: int
- state_ = static_cast<cass_int32_t>(lease_->state_);
-
- // user_context: text
- ConstElementPtr ctx = lease_->getContext();
- if (ctx) {
- user_context_ = ctx->str();
- } else {
- user_context_ = NULL_USER_CONTEXT;
- }
-
- // Start with a fresh array.
- data.clear();
-
- // Add them all to data.
- data.add(&valid_lifetime_);
- data.add(&expire_);
- data.add(&pref_lifetime_);
- data.add(&duid_);
- data.add(&iaid_);
- data.add(&subnet_id_);
- data.add(&lease_type_);
- data.add(&prefix_len_);
- data.add(&fqdn_fwd_);
- data.add(&fqdn_rev_);
- data.add(&hostname_);
- data.add(&hwaddr_);
- data.add(&hwtype_);
- data.add(&hwaddr_source_);
- data.add(&state_);
- data.add(&user_context_);
- data.add(&address_);
-
- CqlExchange::convertToDatabaseTime(lease_->current_cltt_,
- lease_->current_valid_lft_,
- current_expire_);
- data.add(&current_expire_);
- } catch (const Exception &ex) {
- isc_throw(DbOperationError,
- "CqlLease6Exchange::createBindForUpdate(): "
- "could not create bind array from Lease6: "
- << lease_->addr_.toText() << ", reason: " << ex.what());
- }
-}
-
-void
-CqlLease6Exchange::createBindForDelete(const Lease6Ptr &lease, AnyArray &data,
- StatementTag /* unused */) {
- if (!lease) {
- isc_throw(BadValue, "CqlLease6Exchange::createBindForDelete(): "
- "Lease6 object is NULL");
- }
- // Store lease object to ensure it remains valid.
- lease_ = lease;
-
- // Set up the structures for the various components of the lease4
- // structure.
- try {
- // address: varchar
- address_ = lease_->addr_.toText();
- if (address_.size() > ADDRESS6_TEXT_MAX_LEN) {
- isc_throw(BadValue,
- "address " << address_ << " of length " << address_.size()
- << " exceeds maximum allowed length of "
- << ADDRESS6_TEXT_MAX_LEN);
- }
-
- // Start with a fresh array.
- data.clear();
- data.add(&address_);
-
- CqlExchange::convertToDatabaseTime(lease_->current_cltt_,
- lease_->current_valid_lft_,
- current_expire_);
- data.add(&current_expire_);
- } catch (const Exception &ex) {
- isc_throw(DbOperationError,
- "CqlLease6Exchange::createBindForDelete(): "
- "could not create bind array from Lease6: "
- << lease_->addr_.toText() << ", reason: " << ex.what());
- }
-}
-
-void
-CqlLease6Exchange::createBindForSelect(AnyArray &data, StatementTag /* unused */) {
- // Start with a fresh array.
- data.clear();
-
- // address: varchar
- data.add(&address_);
-
- // valid_lifetime_: bigint
- data.add(&valid_lifetime_);
-
- // expire: bigint
- data.add(&expire_);
-
- // subnet_id: int
- data.add(&subnet_id_);
-
- // pref_lifetime: bigint
- data.add(&pref_lifetime_);
-
- // duid: blob
- data.add(&duid_);
-
- // iaid: int
- data.add(&iaid_);
-
- // lease_type: int
- data.add(&lease_type_);
-
- // prefix_len: int
- data.add(&prefix_len_);
-
- // fqdn_fwd: boolean
- data.add(&fqdn_fwd_);
-
- // fqdn_rev: boolean
- data.add(&fqdn_rev_);
-
- // hostname: varchar
- data.add(&hostname_);
-
- // hwaddr: blob
- data.add(&hwaddr_);
-
- // hwtype: int
- data.add(&hwtype_);
-
- // hwaddr_source: int
- data.add(&hwaddr_source_);
-
- // state: int
- data.add(&state_);
-
- // user_context: text
- data.add(&user_context_);
-}
-
-boost::any
-CqlLease6Exchange::retrieve() {
- try {
- // Sanity checks
- if (address_.size() > ADDRESS6_TEXT_MAX_LEN) {
- isc_throw(BadValue,
- "address " << address_ << " of length " << address_.size()
- << " exceeds maximum allowed length of "
- << ADDRESS6_TEXT_MAX_LEN);
- }
- if (duid_.size() > DUID::MAX_DUID_LEN) {
- isc_throw(BadValue,
- "duid " << DUID(duid_).toText() << " of length "
- << duid_.size()
- << " exceeds maximum allowed length of "
- << DUID::MAX_DUID_LEN);
- }
- if (lease_type_ != Lease::TYPE_NA && lease_type_ != Lease::TYPE_TA &&
- lease_type_ != Lease::TYPE_PD) {
- isc_throw(BadValue,
- "invalid lease type "
- << lease_type_ << " for lease with address "
- << address_ << ". Expected 0, 1 or 2.");
- }
- if (hostname_.size() > HOSTNAME_MAX_LEN) {
- isc_throw(BadValue,
- "hostname " << hostname_ << " of length "
- << hostname_.size()
- << " exceeds maximum allowed length of "
- << HOSTNAME_MAX_LEN);
- }
- if (hwaddr_.size() > HWAddr::MAX_HWADDR_LEN) {
- isc_throw(BadValue,
- "hwaddr " << HWAddr(hwaddr_, hwtype_).toText(false)
- << " of length " << hwaddr_.size()
- << " exceeds maximum allowed length of "
- << HWAddr::MAX_HWADDR_LEN);
- }
-
- IOAddress addr(address_);
-
- DuidPtr duid(boost::make_shared<DUID>(duid_));
-
- HWAddrPtr hwaddr;
- if (hwaddr_.size()) {
- hwaddr = boost::make_shared<HWAddr>(hwaddr_, hwtype_);
- hwaddr->source_ = hwaddr_source_;
- }
-
- ConstElementPtr ctx;
- if (!user_context_.empty()) {
- ctx = Element::fromJSON(user_context_);
- if (!ctx ||(ctx->getType() != Element::map)) {
- isc_throw(BadValue, "user context '" << user_context_
- << "' is not a JSON map");
- }
- }
-
- // Create the lease and set the cltt (after converting from the
- // expire time retrieved from the database).
- Lease6Ptr result(boost::make_shared<Lease6>(static_cast<Lease::Type>(lease_type_), addr, duid,
- iaid_, pref_lifetime_, valid_lifetime_,
- subnet_id_, fqdn_fwd_, fqdn_rev_, hostname_,
- hwaddr, prefix_len_));
-
- time_t cltt = 0;
- CqlExchange::convertFromDatabaseTime(expire_, valid_lifetime_, cltt);
- // Update cltt_ and current_cltt_ explicitly.
- result->cltt_ = cltt;
- result->current_cltt_ = cltt;
-
- result->state_ = state_;
-
- if (ctx) {
- result->setContext(ctx);
- }
-
- return (result);
- } catch (const Exception &ex) {
- isc_throw(DbOperationError,
- "CqlLease6Exchange::retrieve(): "
- "could not convert data to Lease6, reason: "
- << ex.what());
- }
- return Lease6Ptr();
-}
-
-void
-CqlLease6Exchange::getLeaseCollection(StatementTag &statement_tag, AnyArray &data,
- Lease6Collection &result) {
- AnyArray collection = executeSelect(connection_, data, statement_tag);
-
- // Transfer Lease6 objects to result.
- for (boost::any &lease : collection) {
- result.push_back(boost::any_cast<Lease6Ptr>(lease));
- }
-}
-
-void
-CqlLease6Exchange::getLease(StatementTag &statement_tag, AnyArray &data,
- Lease6Ptr &result) {
- // This particular method is called when only one or zero matches is
- // expected.
- Lease6Collection collection;
- getLeaseCollection(statement_tag, data, collection);
-
- // Return single record if present, else clear the lease.
- const size_t collection_size = collection.size();
- if (collection_size >= 2u) {
- isc_throw(MultipleRecords,
- "CqlLease6Exchange::getLease(): multiple records were found in "
- "the database where only one was expected for statement "
- << statement_tag);
- } else if (collection_size == 0u) {
- result.reset();
- } else {
- result = *collection.begin();
- }
-}
-
-void
-CqlLease6Exchange::getExpiredLeases(const size_t &max_leases,
- Lease6Collection &expired_leases) {
- // Set up the WHERE clause value
- cass_int32_t keep_state = Lease::STATE_EXPIRED_RECLAIMED;
- cass_int64_t timestamp = static_cast<cass_int64_t>(time(NULL));
-
- // If the number of leases is 0, we will return all leases. This is
- // achieved by setting the limit to a very high value.
- cass_int32_t limit = max_leases > 0u ? static_cast<cass_int32_t>(max_leases) :
- std::numeric_limits<cass_int32_t>::max();
-
- for (cass_int32_t state = Lease::STATE_DEFAULT;
- state <= Lease::STATE_EXPIRED_RECLAIMED; ++state) {
- if (state == keep_state) {
- continue;
- }
-
- AnyArray data;
- data.add(&state);
- data.add(&timestamp);
- data.add(&limit);
-
- // Retrieve leases from the database.
- Lease6Collection temp_collection;
- getLeaseCollection(CqlLease6Exchange::GET_LEASE6_EXPIRE, data,
- temp_collection);
-
- for (Lease6Ptr &lease : temp_collection) {
- expired_leases.push_back(lease);
- }
- }
-}
-
-/// @brief Base CQL derivation of the statistical lease data query
-///
-/// This class provides the functionality such as results storage and row
-/// fetching common to fulfilling the statistical lease data query.
-///
-class CqlLeaseStatsQuery : public LeaseStatsQuery {
-public:
-
- /// @brief Constructor to query for all subnets' stats
- ///
- /// The query created will return statistics for all subnets
- ///
- /// @param conn An open connection to the database housing the lease data
- /// @param statement The lease data SQL prepared statement tag to execute
- /// @param fetch_type Indicates whether or not lease_type should be
- /// fetched from the result set (should be true for v6)
- CqlLeaseStatsQuery(CqlConnection& conn, StatementTag& statement,
- const bool fetch_type)
- : conn_(conn), statement_(statement), fetch_type_(fetch_type),
- cumulative_rows_(), next_row_(cumulative_rows_.begin()),
- subnet_id_(0), lease_type_(0), state_(0) {
- }
-
- /// @brief Constructor to query for a single subnet's stats
- ///
- /// The query created will return statistics for a single subnet
- ///
- /// @param conn An open connection to the database housing the lease data
- /// @param statement The lease data SQL prepared statement tag to execute
- /// @param fetch_type Indicates whether or not lease_type should be
- /// fetched from the result set (should be true for v6)
- /// @param subnet_id id of the subnet for which stats are desired
- CqlLeaseStatsQuery(CqlConnection& conn, StatementTag& statement,
- const bool fetch_type, const SubnetID& subnet_id)
- : LeaseStatsQuery(subnet_id), conn_(conn), statement_(statement),
- fetch_type_(fetch_type), cumulative_rows_(),
- next_row_(cumulative_rows_.begin()),
- subnet_id_(0), lease_type_(0), state_(0) {
- }
-
- /// @brief Constructor to query for the stats for a range of subnets
- ///
- /// The query created will return statistics for the inclusive range of
- /// subnets described by first and last subnet IDs.
- ///
- /// @param conn An open connection to the database housing the lease data
- /// @param statement The lease data SQL prepared statement tag to execute
- /// @param fetch_type Indicates whether or not lease_type should be
- /// fetched from the result set (should be true for v6)
- /// @param first_subnet_id first subnet in the range of subnets
- /// @param last_subnet_id last subnet in the range of subnets
- CqlLeaseStatsQuery(CqlConnection& conn, StatementTag& statement,
- const bool fetch_type, const SubnetID& first_subnet_id,
- const SubnetID& last_subnet_id)
- : LeaseStatsQuery(first_subnet_id, last_subnet_id), conn_(conn),
- statement_(statement), fetch_type_(fetch_type), cumulative_rows_(),
- next_row_(cumulative_rows_.begin()),
- subnet_id_(0), lease_type_(0), state_(0) {
- }
-
- /// @brief Destructor
- virtual ~CqlLeaseStatsQuery() {};
-
- /// @brief Creates the lease statistical data result set
- ///
- /// The result set is populated by executing a prepared SQL query
- /// against the database which sums the leases per lease state per
- /// subnet id. Positions internal row tracking to point to the
- /// first row of the aggregate results.
- void start();
-
- /// @brief Executes protocol specific lease query SELECT statement
- ///
- /// Currently we do not have a good way for Cassandra to roll up the
- /// lease counts per subnet, type, and state as we do the other back
- /// ends. This method executes the select statement which returns
- /// a result set containing a row of data for every lease:
- /// -v4 - subnet-id, lease-state
- /// -v6 - subnet-id, lease-type, lease-state
- ///
- /// It then iterates over this result set, aggregating the data into a
- /// a map of LeaseStatRows.
- ///
- /// If we didn't have to roll up the raw lease data first, we could
- /// have derived this class from CqlExchange and used it's executeSelect
- /// (from which this method borrows heavily). However, that would mean
- /// copying all the raw lease data into a collection returned by
- /// executeSelect and then aggregating that into cumulative rows.
- /// The way we are now we go turn the raw lease data directly into the
- /// cumulative row map.
- ///
- /// @param connection connection used to communicate with the Cassandra
- /// database
- /// @param data array of bound objects used to filter the results
- /// @param statement_tag prepared statement being executed
- ///
- /// @throw DbOperationError
- void executeSelect(const CqlConnection& connection, const AnyArray& data,
- StatementTag statement_tag);
-
- /// @brief Fetches the next row in the result set
- ///
- /// Once the internal result set has been populated by invoking the
- /// the start() method, this method is used to iterate over the
- /// result set rows. Once the last row has been fetched, subsequent
- /// calls will return false.
- ///
- /// @param row Storage for the fetched row
- ///
- /// @return True if the fetch succeeded, false if there are no more
- /// rows to fetch.
- bool getNextRow(LeaseStatsRow& row);
-
- /// @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);
-
- /// @brief Statement tags definitions
- /// @{
- // Return lease4 lease statistics for all subnets
- static constexpr StatementTag ALL_LEASE4_STATS = "ALL_LEASE4_STATS";
- /// Return lease4 lease statistics for a single subnet
- static constexpr StatementTag SUBNET_LEASE4_STATS = "SUBNET_LEASE4_STATS";
- /// Return lease4 lease statistics for a range of subnets
- static constexpr StatementTag SUBNET_RANGE_LEASE4_STATS = "SUBNET_RANGE_LEASE4_STATS";
-
- // Return lease6 lease statistics for all subnets
- static constexpr StatementTag ALL_LEASE6_STATS = "ALL_LEASE6_STATS";
- /// Return lease6 lease statistics for a single subnet
- static constexpr StatementTag SUBNET_LEASE6_STATS = "SUBNET_LEASE6_STATS";
- /// Return lease6 lease statistics for a range of subnets
- static constexpr StatementTag SUBNET_RANGE_LEASE6_STATS = "SUBNET_RANGE_LEASE6_STATS";
- /// @}
-
- /// @brief Cassandra statements
- static StatementMap tagged_statements_;
-
-private:
-
- /// @brief Database connection to use to execute the query
- CqlConnection& conn_;
-
- /// @brief The query's prepared statement tag
- StatementTag statement_;
-
- /// @brief Indicates if query supplies lease type
- bool fetch_type_;
-
-
- /// @brief map containing the aggregated lease counts
- std::map<LeaseStatsRow, int> cumulative_rows_;
-
- /// @brief cursor pointing to the next row to read in aggregate map
- std::map<LeaseStatsRow, int>::iterator next_row_;
-
- /// @brief Subnet identifier
- cass_int32_t subnet_id_;
-
- /// @brief Lease type (NA, TA or PD)
- cass_int32_t lease_type_;
-
- /// @brief Lease state
- cass_int32_t state_;
-};
-
-constexpr StatementTag CqlLeaseStatsQuery::ALL_LEASE4_STATS;
-constexpr StatementTag CqlLeaseStatsQuery::SUBNET_LEASE4_STATS;
-constexpr StatementTag CqlLeaseStatsQuery::SUBNET_RANGE_LEASE4_STATS;
-constexpr StatementTag CqlLeaseStatsQuery::ALL_LEASE6_STATS;
-constexpr StatementTag CqlLeaseStatsQuery::SUBNET_LEASE6_STATS;
-constexpr StatementTag CqlLeaseStatsQuery::SUBNET_RANGE_LEASE6_STATS;
-
-StatementMap CqlLeaseStatsQuery::tagged_statements_{
- // Return subnet_id and state of each v4 lease
- {ALL_LEASE4_STATS,
- {ALL_LEASE4_STATS,
- "SELECT "
- "subnet_id, state "
- "FROM lease4 "
- }},
-
- // Return state of each v4 lease for a single subnet
- {SUBNET_LEASE4_STATS,
- {SUBNET_LEASE4_STATS,
- "SELECT "
- "subnet_id, state "
- "FROM lease4 "
- "WHERE subnet_id = ? "
- }},
-
- // Return state of each v4 lease for a subnet range
- {SUBNET_RANGE_LEASE4_STATS,
- {SUBNET_RANGE_LEASE4_STATS,
- "SELECT "
- "subnet_id, state "
- "FROM lease4 "
- "WHERE subnet_id >= ? and subnet_id <= ? "
- "ALLOW FILTERING "
- }},
-
- // Return subnet_id, lease_type, and state of each v6 lease
- {ALL_LEASE6_STATS,
- {ALL_LEASE6_STATS,
- "SELECT "
- "subnet_id, lease_type, state "
- "FROM lease6 "
- }},
-
- // Return type and state of each v6 lease for a single subnet
- {SUBNET_LEASE6_STATS,
- {SUBNET_LEASE6_STATS,
- "SELECT "
- "subnet_id, lease_type, state "
- "FROM lease6 "
- "WHERE subnet_id = ? "
- }},
-
- // Return type and state of each v6 lease for single range
- {SUBNET_RANGE_LEASE6_STATS,
- {SUBNET_RANGE_LEASE6_STATS,
- "SELECT "
- "subnet_id, lease_type, state "
- "FROM lease6 "
- "WHERE subnet_id >= ? and subnet_id <= ? "
- "ALLOW FILTERING "
- }},
-};
-
-void
-CqlLeaseStatsQuery::start() {
- // Set up where clause parameters as needed
- AnyArray data;
- cass_int32_t first_subnet_id_data;
- cass_int32_t last_subnet_id_data;
- if (getSelectMode() != ALL_SUBNETS) {
- first_subnet_id_data = static_cast<cass_int32_t>(first_subnet_id_);
- data.add(&first_subnet_id_data);
-
- if (getSelectMode() == SUBNET_RANGE) {
- last_subnet_id_data = static_cast<cass_int32_t>(last_subnet_id_);
- data.add(&last_subnet_id_data);
- }
- }
-
- // This gets a collection of "raw" data for all leases that match
- // the subnet selection criteria (all, range, or single subnets)
- // then rolls them up into cumulative_rows_
- executeSelect(conn_, data, statement_);
-
- // Set our row iterator to the beginning
- next_row_ = cumulative_rows_.begin();
-}
-
-bool
-CqlLeaseStatsQuery::getNextRow(LeaseStatsRow& row) {
- // If we're past the end, punt.
- if (next_row_ == cumulative_rows_.end()) {
- return (false);
- }
-
- // Start by copying from the map row key
- row.subnet_id_ = next_row_->first.subnet_id_;
- row.lease_type_ = next_row_->first.lease_type_;
- row.lease_state_ = next_row_->first.lease_state_;
-
- // Grab the count from the map value
- row.state_count_ = next_row_->second;
-
- // Point to the next row.
- ++next_row_;
- return (true);
-}
-
-void
-CqlLeaseStatsQuery::createBindForSelect(AnyArray& data, StatementTag) {
- data.clear();
- data.add(&subnet_id_);
- if (fetch_type_) {
- data.add(&lease_type_);
- }
-
- data.add(&state_);
-}
-
-void
-CqlLeaseStatsQuery::executeSelect(const CqlConnection& connection, const AnyArray& data,
- StatementTag statement_tag) {
- 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,
- "CqlLeastStatsQuery::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<std::string*>(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,
- "CqlLeaseStatsQuery::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,
- "CqlLeaseStatsQuery::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,
- "CqlLeaseStatsQuery::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(
- "CqlLeaseStatsQuery::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);
-
- // lease type is always NA for v4
- if (!fetch_type_) {
- lease_type_ = Lease::TYPE_NA;
- }
-
- // Since we're currently forced to pull data for all leases, we
- // iterate over them, aggregating them into cumulative LeaseStatsRows
- AnyArray return_values;
- 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);
-
- if (state_ != Lease::STATE_DEFAULT &&
- state_ != Lease::STATE_DECLINED) {
- continue;
- }
-
- LeaseStatsRow raw_row(subnet_id_, static_cast<Lease::Type>(lease_type_),
- state_, 1);
-
- auto cum_row = cumulative_rows_.find(raw_row);
- if (cum_row != cumulative_rows_.end()) {
- cumulative_rows_[raw_row] = cum_row->second + 1;
- } else {
- cumulative_rows_.insert(std::make_pair(raw_row, 1));
- }
- }
-
- // Free resources.
- cass_iterator_free(rows);
- cass_result_free(result_collection);
- cass_future_free(future);
- cass_statement_free(statement);
- return;
-}
-
-CqlLeaseMgr::CqlLeaseMgr(const DatabaseConnection::ParameterMap &parameters)
- : parameters_(parameters), dbconn_(parameters) {
- // Validate the schema version first.
- std::pair<uint32_t, uint32_t> code_version(CQL_SCHEMA_VERSION_MAJOR,
- CQL_SCHEMA_VERSION_MINOR);
- std::pair<uint32_t, uint32_t> db_version = getVersion();
- if (code_version != db_version) {
- isc_throw(DbOpenError, "Cassandra schema version mismatch: need version: "
- << code_version.first << "." << code_version.second
- << " found version: " << db_version.first << "."
- << db_version.second);
- }
-
- // Cassandra support is now deprecated.
- LOG_WARN(dhcpsrv_logger, DHCPSRV_DEPRECATED).arg("Cassandra lease backend");
-
- // Check TLS support.
- bool tls(false);
- try {
- dbconn_.getParameter("trust-anchor");
- tls = true;
- } catch (...) {
- // No trust anchor.
- }
- try {
- dbconn_.getParameter("cert-file");
- tls = true;
- } catch (...) {
- // No certificate file.
- }
- try {
- dbconn_.getParameter("key-file");
- tls = true;
- } catch (...) {
- // No private key file.
- }
- try {
- dbconn_.getParameter("cipher-list");
- tls = true;
- } catch (...) {
- // No cipher list.
- }
- if (tls) {
- LOG_ERROR(dhcpsrv_logger, DHCPSRV_CQL_NO_TLS_SUPPORT)
- .arg(DatabaseConnection::redactedAccessString(parameters));
- isc_throw(DbOpenError, "Attempt to configure TLS for CQL");
- }
-
- // Open the database.
- dbconn_.openDatabase();
-
- // Now prepare the rest of the exchanges.
- dbconn_.prepareStatements(CqlLease4Exchange::tagged_statements_);
- dbconn_.prepareStatements(CqlLease6Exchange::tagged_statements_);
- dbconn_.prepareStatements(CqlLeaseStatsQuery::tagged_statements_);
-}
-
-CqlLeaseMgr::~CqlLeaseMgr() {
- // There is no need to close the database in this destructor: it is
- // closed in the destructor of the dbconn_ member variable.
-}
-
-std::string
-CqlLeaseMgr::getDBVersion() {
- std::stringstream tmp;
- tmp << "CQL backend " << CQL_SCHEMA_VERSION_MAJOR;
- tmp << "." << CQL_SCHEMA_VERSION_MINOR;
- tmp << ", library cassandra";
- return tmp.str();
-}
-
-bool
-CqlLeaseMgr::addLease(const Lease4Ptr &lease) {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_ADD_ADDR4)
- .arg(lease->addr_.toText());
-
- AnyArray data;
-
- std::unique_ptr<CqlLease4Exchange> exchange4(new CqlLease4Exchange(dbconn_));
- exchange4->createBindForInsert(lease, data);
- try {
- exchange4->executeMutation(dbconn_, data, CqlLease4Exchange::INSERT_LEASE4);
- } catch (const Exception &exception) {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_LEASE_EXCEPTION_THROWN)
- .arg(exception.what());
- return false;
- }
-
- // Update lease current expiration time (allows update between the creation
- // of the Lease up to the point of insertion in the database).
- lease->updateCurrentExpirationTime();
-
- return true;
-}
-
-bool
-CqlLeaseMgr::addLease(const Lease6Ptr &lease) {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_ADD_ADDR6)
- .arg(lease->addr_.toText());
-
- AnyArray data;
-
- std::unique_ptr<CqlLease6Exchange> exchange6(new CqlLease6Exchange(dbconn_));
- exchange6->createBindForInsert(lease, data);
- try {
- exchange6->executeMutation(dbconn_, data, CqlLease6Exchange::INSERT_LEASE6);
- } catch (const Exception &exception) {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_LEASE_EXCEPTION_THROWN)
- .arg(exception.what());
- return false;
- }
-
- // Update lease current expiration time (allows update between the creation
- // of the Lease up to the point of insertion in the database).
- lease->updateCurrentExpirationTime();
-
- return true;
-}
-
-Lease4Ptr
-CqlLeaseMgr::getLease4(const IOAddress &addr) const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_GET_ADDR4)
- .arg(addr.toText());
-
- // Set up the WHERE clause value
- AnyArray data;
-
- cass_int32_t addr4 = static_cast<cass_int32_t>(addr.toUint32());
- data.add(&addr4);
-
- // Get the data.
- Lease4Ptr result;
-
- std::unique_ptr<CqlLease4Exchange> exchange4(new CqlLease4Exchange(dbconn_));
- exchange4->getLease(CqlLease4Exchange::GET_LEASE4_ADDR, data, result);
-
- return (result);
-}
-
-Lease4Collection
-CqlLeaseMgr::getLease4(const HWAddr &hwaddr) const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_GET_HWADDR)
- .arg(hwaddr.toText());
-
- // Set up the WHERE clause value
- AnyArray data;
-
- CassBlob hwaddr_data(hwaddr.hwaddr_);
- data.add(&hwaddr_data);
-
- // Get the data.
- Lease4Collection result;
- std::unique_ptr<CqlLease4Exchange> exchange4(new CqlLease4Exchange(dbconn_));
- exchange4->getLeaseCollection(CqlLease4Exchange::GET_LEASE4_HWADDR, data, result);
-
- return (result);
-}
-
-Lease4Ptr
-CqlLeaseMgr::getLease4(const HWAddr &hwaddr, SubnetID subnet_id) const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL,
- DHCPSRV_CQL_GET_SUBID_HWADDR)
- .arg(subnet_id)
- .arg(hwaddr.toText());
-
- // Set up the WHERE clause value
- AnyArray data;
-
- CassBlob hwaddr_data(hwaddr.hwaddr_);
- data.add(&hwaddr_data);
-
- cass_int32_t subnet_id_data = static_cast<cass_int32_t>(subnet_id);
- data.add(&subnet_id_data);
-
- // Get the data.
- Lease4Ptr result;
- std::unique_ptr<CqlLease4Exchange> exchange4(new CqlLease4Exchange(dbconn_));
- exchange4->getLease(CqlLease4Exchange::GET_LEASE4_HWADDR_SUBID, data, result);
-
- return (result);
-}
-
-Lease4Collection
-CqlLeaseMgr::getLease4(const ClientId &clientid) const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_GET_CLIENTID)
- .arg(clientid.toText());
-
- // Set up the WHERE clause value
- AnyArray data;
-
- CassBlob client_id_data(clientid.getClientId());
- data.add(&client_id_data);
-
- // Get the data.
- Lease4Collection result;
- std::unique_ptr<CqlLease4Exchange> exchange4(new CqlLease4Exchange(dbconn_));
- exchange4->getLeaseCollection(CqlLease4Exchange::GET_LEASE4_CLIENTID, data, result);
-
- return (result);
-}
-
-Lease4Ptr
-CqlLeaseMgr::getLease4(const ClientId &clientid, SubnetID subnet_id) const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_GET_SUBID_CLIENTID)
- .arg(subnet_id)
- .arg(clientid.toText());
-
- // Set up the WHERE clause value
- AnyArray data;
-
- CassBlob client_id_data(clientid.getClientId());
- data.add(&client_id_data);
-
- cass_int32_t subnet_id_data = static_cast<cass_int32_t>(subnet_id);
- data.add(&subnet_id_data);
-
- // Get the data.
- Lease4Ptr result;
- std::unique_ptr<CqlLease4Exchange> exchange4(new CqlLease4Exchange(dbconn_));
- exchange4->getLease(CqlLease4Exchange::GET_LEASE4_CLIENTID_SUBID, data, result);
-
- return (result);
-}
-
-Lease4Collection
-CqlLeaseMgr::getLeases4(SubnetID subnet_id) const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_GET_SUBID4)
- .arg(subnet_id);
-
- // Set up the WHERE clause value
- AnyArray data;
-
- cass_int32_t subnet_id_data = static_cast<cass_int32_t>(subnet_id);
- data.add(&subnet_id_data);
-
- // Get the data.
- Lease4Collection result;
- std::unique_ptr<CqlLease4Exchange> exchange4(new CqlLease4Exchange(dbconn_));
- exchange4->getLeaseCollection(CqlLease4Exchange::GET_LEASE4_SUBID, data, result);
-
- return (result);
-}
-
-Lease4Collection
-CqlLeaseMgr::getLeases4(const std::string& hostname) const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_GET_HOSTNAME4)
- .arg(hostname);
-
- // Set up the WHERE clause value
- AnyArray data;
-
- std::string hostname_data(hostname);
- data.add(&hostname_data);
-
- // Get the data.
- Lease4Collection result;
- std::unique_ptr<CqlLease4Exchange> exchange4(new CqlLease4Exchange(dbconn_));
- exchange4->getLeaseCollection(CqlLease4Exchange::GET_LEASE4_HOSTNAME, data, result);
-
- return (result);
-}
-
-Lease4Collection
-CqlLeaseMgr::getLeases4() const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_GET4);
-
- // Set up the WHERE clause value
- AnyArray data;
-
- // Get the data.
- Lease4Collection result;
- std::unique_ptr<CqlLease4Exchange> exchange4(new CqlLease4Exchange(dbconn_));
- exchange4->getLeaseCollection(CqlLease4Exchange::GET_LEASE4, data, result);
-
- return (result);
-}
-
-Lease4Collection
-CqlLeaseMgr::getLeases4(const asiolink::IOAddress& lower_bound_address,
- const LeasePageSize& page_size) const {
- // Expecting IPv4 address.
- if (!lower_bound_address.isV4()) {
- isc_throw(InvalidAddressFamily, "expected IPv4 address while "
- "retrieving leases from the lease database, got "
- << lower_bound_address);
- }
-
- if (page_size.page_size_ == 0) {
- isc_throw(OutOfRange, "page size of retrieved leases must not be 0");
- }
-
- if (page_size.page_size_ > std::numeric_limits<uint32_t>::max()) {
- isc_throw(OutOfRange, "page size of retrieved leases must not be greater than "
- << std::numeric_limits<uint32_t>::max());
- }
-
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_GET_PAGE4)
- .arg(page_size.page_size_)
- .arg(lower_bound_address.toText());
-
- AnyArray data;
-
- cass_int32_t address_data = 0;
- if (!lower_bound_address.isV4Zero()) {
- address_data = static_cast<cass_int32_t>(lower_bound_address.toUint32());
- data.add(&address_data);
- }
-
- cass_int32_t page_size_data = static_cast<cass_int32_t>(page_size.page_size_);
- data.add(&page_size_data);
-
- // Get the data.
- Lease4Collection result;
- std::unique_ptr<CqlLease4Exchange> exchange4(new CqlLease4Exchange(dbconn_));
- exchange4->getLeaseCollection(lower_bound_address.isV4Zero() ?
- CqlLease4Exchange::GET_LEASE4_LIMIT :
- CqlLease4Exchange::GET_LEASE4_PAGE,
- data, result);
-
- return (result);
-}
-
-Lease6Ptr
-CqlLeaseMgr::getLease6(Lease::Type lease_type, const IOAddress &addr) const {
- std::string addr_data = addr.toText();
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_GET_ADDR6)
- .arg(addr_data)
- .arg(lease_type);
-
- // Set up the WHERE clause value
- AnyArray data;
-
- if (addr_data.size() > ADDRESS6_TEXT_MAX_LEN) {
- isc_throw(BadValue,
- "CqlLeaseMgr::getLease6(): "
- "address "
- << addr_data << " of length " << addr_data.size()
- << " exceeds maximum allowed length of "
- << ADDRESS6_TEXT_MAX_LEN);
- }
- data.add(&addr_data);
-
- cass_int32_t lease_type_data = static_cast<cass_int32_t>(lease_type);
- data.add(&lease_type_data);
-
- Lease6Ptr result;
- std::unique_ptr<CqlLease6Exchange> exchange6(new CqlLease6Exchange(dbconn_));
- exchange6->getLease(CqlLease6Exchange::GET_LEASE6_ADDR, data, result);
-
- return (result);
-}
-
-Lease6Collection
-CqlLeaseMgr::getLeases6(const DUID& duid) const {
-
- // Set up the WHERE clause value
- AnyArray data;
-
- CassBlob duid_data(duid.getDuid());
-
- data.add(&duid_data);
-
- // Get the data.
- Lease6Collection result;
- std::unique_ptr<CqlLease6Exchange> exchange6(new CqlLease6Exchange(dbconn_));
- exchange6->getLeaseCollection(CqlLease6Exchange::GET_LEASE6_DUID,
- data, result);
-
- return (result);
-}
-
-Lease6Collection
-CqlLeaseMgr::getLeases6(Lease::Type lease_type, const DUID &duid, uint32_t iaid) const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_GET_IAID_DUID)
- .arg(iaid)
- .arg(duid.toText())
- .arg(lease_type);
-
- // Set up the WHERE clause value
- AnyArray data;
-
- CassBlob duid_data(duid.getDuid());
- cass_int32_t iaid_data = static_cast<cass_int32_t>(iaid);
-
- data.add(&duid_data);
- data.add(&iaid_data);
-
- cass_int32_t lease_type_data = static_cast<cass_int32_t>(lease_type);
- data.add(&lease_type_data);
-
- // Get the data.
- Lease6Collection result;
- std::unique_ptr<CqlLease6Exchange> exchange6(new CqlLease6Exchange(dbconn_));
- exchange6->getLeaseCollection(CqlLease6Exchange::GET_LEASE6_DUID_IAID, data, result);
-
- return (result);
-}
-
-Lease6Collection
-CqlLeaseMgr::getLeases6(Lease::Type lease_type, const DUID &duid, uint32_t iaid,
- SubnetID subnet_id) const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_GET_IAID_SUBID_DUID)
- .arg(iaid)
- .arg(subnet_id)
- .arg(duid.toText())
- .arg(lease_type);
-
- // Set up the WHERE clause value
- AnyArray data;
-
- CassBlob duid_data(duid.getDuid());
- cass_int32_t iaid_data = static_cast<cass_int32_t>(iaid);
-
- data.add(&duid_data);
- data.add(&iaid_data);
-
- cass_int32_t lease_type_data = static_cast<cass_int32_t>(lease_type);
- data.add(&lease_type_data);
-
- cass_int32_t subnet_id_data = static_cast<cass_int32_t>(subnet_id);
- data.add(&subnet_id_data);
-
- // Get the data.
- Lease6Collection result;
- std::unique_ptr<CqlLease6Exchange> exchange6(new CqlLease6Exchange(dbconn_));
- exchange6->getLeaseCollection(CqlLease6Exchange::GET_LEASE6_DUID_IAID_SUBID, data, result);
-
- return (result);
-}
-
-Lease6Collection
-CqlLeaseMgr::getLeases6(SubnetID) const {
- isc_throw(NotImplemented, "getLeases6(subnet_id) is not implemented");
-}
-
-Lease6Collection
-CqlLeaseMgr::getLeases6(const std::string& hostname) const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_GET_HOSTNAME6)
- .arg(hostname);
-
- // Set up the WHERE clause value
- AnyArray data;
-
- std::string hostname_data(hostname);
- data.add(&hostname_data);
-
- // Get the data.
- Lease6Collection result;
- std::unique_ptr<CqlLease6Exchange> exchange6(new CqlLease6Exchange(dbconn_));
- exchange6->getLeaseCollection(CqlLease6Exchange::GET_LEASE6_HOSTNAME, data, result);
-
- return (result);
-}
-
-Lease6Collection
-CqlLeaseMgr::getLeases6() const {
- isc_throw(NotImplemented, "getLeases6() is not implemented");
-}
-
-Lease6Collection
-CqlLeaseMgr::getLeases6(const asiolink::IOAddress& lower_bound_address,
- const LeasePageSize& page_size) const {
- // Expecting IPv6 address.
- if (!lower_bound_address.isV6()) {
- isc_throw(InvalidAddressFamily, "expected IPv6 address while "
- "retrieving leases from the lease database, got "
- << lower_bound_address);
- }
-
- if (page_size.page_size_ == 0) {
- isc_throw(OutOfRange, "page size of retrieved leases must not be 0");
- }
-
- if (page_size.page_size_ > std::numeric_limits<uint32_t>::max()) {
- isc_throw(OutOfRange, "page size of retrieved leases must not be greater than "
- << std::numeric_limits<uint32_t>::max());
- }
-
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_GET_PAGE6)
- .arg(page_size.page_size_)
- .arg(lower_bound_address.toText());
-
- AnyArray data;
-
- std::string lb_address_data;
- if (!lower_bound_address.isV6Zero()) {
- lb_address_data = lower_bound_address.toText();
- if (lb_address_data.size() > ADDRESS6_TEXT_MAX_LEN) {
- isc_throw(BadValue,
- "CqlLeaseMgr::getLeases6(lower_bound_address, page_size): "
- "address "
- << lb_address_data << " of length " << lb_address_data.size()
- << " exceeds maximum allowed length of "
- << ADDRESS6_TEXT_MAX_LEN);
- }
- data.add(&lb_address_data);
- }
-
- cass_int32_t page_size_data = static_cast<cass_int32_t>(page_size.page_size_);
- data.add(&page_size_data);
-
- // Get the leases.
- Lease6Collection result;
- std::unique_ptr<CqlLease6Exchange> exchange6(new CqlLease6Exchange(dbconn_));
- exchange6->getLeaseCollection(lower_bound_address.isV6Zero() ?
- CqlLease6Exchange::GET_LEASE6_LIMIT :
- CqlLease6Exchange::GET_LEASE6_PAGE,
- data, result);
-
- return (result);
-}
-
-void
-CqlLeaseMgr::getExpiredLeases4(Lease4Collection &expired_leases,
- const size_t max_leases) const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_GET_EXPIRED4)
- .arg(max_leases);
-
- std::unique_ptr<CqlLease4Exchange> exchange4(new CqlLease4Exchange(dbconn_));
- exchange4->getExpiredLeases(max_leases, expired_leases);
-}
-
-void
-CqlLeaseMgr::getExpiredLeases6(Lease6Collection &expired_leases,
- const size_t max_leases) const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_GET_EXPIRED6)
- .arg(max_leases);
-
- std::unique_ptr<CqlLease6Exchange> exchange6(new CqlLease6Exchange(dbconn_));
- exchange6->getExpiredLeases(max_leases, expired_leases);
-}
-
-void
-CqlLeaseMgr::updateLease4(const Lease4Ptr &lease) {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_UPDATE_ADDR4)
- .arg(lease->addr_.toText());
-
- std::unique_ptr<CqlLease4Exchange> exchange4(new CqlLease4Exchange(dbconn_));
-
- try {
- AnyArray data;
- exchange4->createBindForUpdate(lease, data, CqlLease4Exchange::UPDATE_LEASE4);
- exchange4->executeMutation(dbconn_, data, CqlLease4Exchange::UPDATE_LEASE4);
- } catch (const StatementNotApplied &exception) {
- isc_throw(NoSuchLease, exception.what());
- }
-
- // Update lease current expiration time.
- lease->updateCurrentExpirationTime();
-}
-
-void
-CqlLeaseMgr::updateLease6(const Lease6Ptr &lease) {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_UPDATE_ADDR6)
- .arg(lease->addr_.toText());
-
- std::unique_ptr<CqlLease6Exchange> exchange6(new CqlLease6Exchange(dbconn_));
-
- try {
- AnyArray data;
- exchange6->createBindForUpdate(lease, data, CqlLease6Exchange::UPDATE_LEASE6);
- exchange6->executeMutation(dbconn_, data, CqlLease6Exchange::UPDATE_LEASE6);
- } catch (const StatementNotApplied &exception) {
- isc_throw(NoSuchLease, exception.what());
- }
-
- // Update lease current expiration time.
- lease->updateCurrentExpirationTime();
-}
-
-bool
-CqlLeaseMgr::deleteLease(const Lease4Ptr &lease) {
- const IOAddress &addr = lease->addr_;
- std::string addr_data = addr.toText();
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_DELETE_ADDR)
- .arg(addr_data);
-
- // Set up the WHERE clause value
- AnyArray data;
-
- std::unique_ptr<CqlLease4Exchange> exchange4(
- new CqlLease4Exchange(dbconn_));
-
- try {
- exchange4->createBindForDelete(lease, data, CqlLease4Exchange::DELETE_LEASE4);
- exchange4->executeMutation(dbconn_, data, CqlLease4Exchange::DELETE_LEASE4);
- } catch (const Exception &exception) {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_LEASE_EXCEPTION_THROWN)
- .arg(exception.what());
- return false;
- }
- return true;
-}
-
-bool
-CqlLeaseMgr::deleteLease(const Lease6Ptr &lease) {
- const IOAddress &addr = lease->addr_;
- std::string addr_data = addr.toText();
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_DELETE_ADDR)
- .arg(addr_data);
-
- // Set up the WHERE clause value
- AnyArray data;
-
- std::unique_ptr<CqlLease6Exchange> exchange6(
- new CqlLease6Exchange(dbconn_));
-
- try {
- exchange6->createBindForDelete(lease, data, CqlLease6Exchange::DELETE_LEASE6);
- exchange6->executeMutation(dbconn_, data, CqlLease6Exchange::DELETE_LEASE6);
- } catch (const Exception &exception) {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_LEASE_EXCEPTION_THROWN)
- .arg(exception.what());
- return false;
- }
- return true;
-}
-
-uint64_t
-CqlLeaseMgr::deleteExpiredReclaimedLeases4(const uint32_t secs) {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL,
- DHCPSRV_CQL_DELETE_EXPIRED_RECLAIMED4)
- .arg(secs);
- AnyArray data;
- uint64_t deleted = 0u;
- cass_int32_t limit = 1024;
-
- // State is reclaimed.
- cass_int32_t state = static_cast<cass_int32_t>(Lease::STATE_EXPIRED_RECLAIMED);
- data.add(&state);
-
- // Expiration timestamp.
- cass_int64_t expiration = static_cast<cass_int64_t>(time(NULL) - static_cast<time_t>(secs));
- data.add(&expiration);
-
- data.add(&limit);
-
- // Get the data.
- Lease4Collection leases;
- std::unique_ptr<CqlLease4Exchange> exchange4(new CqlLease4Exchange(dbconn_));
- exchange4->getLeaseCollection(CqlLease4Exchange::GET_LEASE4_EXPIRE, data, leases);
- for (Lease4Ptr &lease : leases) {
- if (deleteLease(lease)) {
- ++deleted;
- }
- }
- return (deleted);
-}
-
-uint64_t
-CqlLeaseMgr::deleteExpiredReclaimedLeases6(const uint32_t secs) {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL,
- DHCPSRV_CQL_DELETE_EXPIRED_RECLAIMED6)
- .arg(secs);
- AnyArray data;
- uint64_t deleted = 0u;
- cass_int32_t limit = 1024;
-
- // State is reclaimed.
- cass_int32_t state = static_cast<cass_int32_t>(Lease::STATE_EXPIRED_RECLAIMED);
- data.add(&state);
-
- // Expiration timestamp.
- cass_int64_t expiration = static_cast<cass_int64_t>(time(NULL) - static_cast<time_t>(secs));
- data.add(&expiration);
-
- data.add(&limit);
-
- // Get the data.
- Lease6Collection leases;
- std::unique_ptr<CqlLease6Exchange> exchange6(new CqlLease6Exchange(dbconn_));
- exchange6->getLeaseCollection(CqlLease6Exchange::GET_LEASE6_EXPIRE, data, leases);
- for (Lease6Ptr &lease : leases) {
- if (deleteLease(lease)) {
- ++deleted;
- }
- }
- return (deleted);
-}
-
-LeaseStatsQueryPtr
-CqlLeaseMgr::startLeaseStatsQuery4() {
- LeaseStatsQueryPtr query(
- new CqlLeaseStatsQuery(dbconn_, CqlLeaseStatsQuery::ALL_LEASE4_STATS,
- false));
- query->start();
- return(query);
-}
-
-LeaseStatsQueryPtr
-CqlLeaseMgr::startSubnetLeaseStatsQuery4(const SubnetID& subnet_id) {
- LeaseStatsQueryPtr query(
- new CqlLeaseStatsQuery(dbconn_, CqlLeaseStatsQuery::SUBNET_LEASE4_STATS,
- false, subnet_id));
- query->start();
- return(query);
-}
-
-LeaseStatsQueryPtr
-CqlLeaseMgr::startSubnetRangeLeaseStatsQuery4(const SubnetID& first_subnet_id,
- const SubnetID& last_subnet_id) {
- LeaseStatsQueryPtr query(
- new CqlLeaseStatsQuery(dbconn_, CqlLeaseStatsQuery::SUBNET_RANGE_LEASE4_STATS,
- false, first_subnet_id, last_subnet_id));
- query->start();
- return(query);
-}
-
-LeaseStatsQueryPtr
-CqlLeaseMgr::startLeaseStatsQuery6() {
- LeaseStatsQueryPtr query(
- new CqlLeaseStatsQuery(dbconn_, CqlLeaseStatsQuery::ALL_LEASE6_STATS,
- true));
- query->start();
- return(query);
-}
-
-LeaseStatsQueryPtr
-CqlLeaseMgr::startSubnetLeaseStatsQuery6(const SubnetID& subnet_id) {
- LeaseStatsQueryPtr query(
- new CqlLeaseStatsQuery(dbconn_, CqlLeaseStatsQuery::SUBNET_LEASE6_STATS,
- true, subnet_id));
- query->start();
- return(query);
-}
-
-LeaseStatsQueryPtr
-CqlLeaseMgr::startSubnetRangeLeaseStatsQuery6(const SubnetID& first_subnet_id,
- const SubnetID& last_subnet_id) {
- LeaseStatsQueryPtr query(
- new CqlLeaseStatsQuery(dbconn_, CqlLeaseStatsQuery::SUBNET_RANGE_LEASE6_STATS,
- true, first_subnet_id, last_subnet_id));
- query->start();
- return(query);
-}
-
-size_t
-CqlLeaseMgr::wipeLeases4(const SubnetID & /*subnet_id*/) {
- /// @todo: Need to implement this, so wipe leases would work.
- isc_throw(NotImplemented, "wipeLeases4 is not implemented for Cassandra backend");
-}
-
-size_t
-CqlLeaseMgr::wipeLeases6(const SubnetID & /*subnet_id*/) {
- /// @todo: Need to implement this, so wipe leases would work.
- isc_throw(NotImplemented, "wipeLeases6 is not implemented for Cassandra backend");
-}
-
-std::string
-CqlLeaseMgr::getName() const {
- std::string name = "";
- try {
- name = dbconn_.getParameter("name");
- } catch (...) {
- // Return an empty name
- }
- return name;
-}
-
-std::string
-CqlLeaseMgr::getDescription() const {
- return std::string("Cassandra Database");
-}
-
-VersionPair
-CqlLeaseMgr::getVersion() const {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_GET_VERSION);
-
- return CqlConnection::getVersion(parameters_);
-}
-
-void
-CqlLeaseMgr::commit() {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_COMMIT);
- dbconn_.commit();
-}
-
-void
-CqlLeaseMgr::rollback() {
- LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_CQL_ROLLBACK);
- dbconn_.rollback();
-}
-
-} // namespace dhcp
-} // namespace isc
diff --git a/src/lib/dhcpsrv/cql_lease_mgr.h b/src/lib/dhcpsrv/cql_lease_mgr.h
deleted file mode 100644
index c874cee410..0000000000
--- a/src/lib/dhcpsrv/cql_lease_mgr.h
+++ /dev/null
@@ -1,617 +0,0 @@
-// Copyright (C) 2018-2021 Internet Systems Consortium, Inc. ("ISC")
-// Copyright (C) 2015-2018 Deutsche Telekom AG.
-//
-// Authors: Razvan Becheriu <razvan.becheriu@qualitance.com>
-// Andrei Pavel <andrei.pavel@qualitance.com>
-//
-// 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_LEASE_MGR_H
-#define CQL_LEASE_MGR_H
-
-#include <cql/cql_connection.h>
-#include <cql/cql_exchange.h>
-#include <dhcp/hwaddr.h>
-#include <dhcpsrv/dhcpsrv_exceptions.h>
-#include <dhcpsrv/lease_mgr.h>
-
-#include <boost/scoped_ptr.hpp>
-
-#include <string>
-#include <utility>
-#include <vector>
-
-namespace isc {
-namespace dhcp {
-
-/// @brief Cassandra Lease Manager
-///
-/// This class provides the @ref isc::dhcp::LeaseMgr interface to the Cassandra
-/// database. Use of this backend implies that a CQL database is available
-/// and that the Kea schema has been created within it.
-class CqlLeaseMgr : public LeaseMgr {
-public:
-
- /// @brief Constructor
- ///
- /// Uses the following keywords in the parameters passed to it to
- /// connect to the Cassandra cluster (if omitted, defaults 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
- ///
- /// Finally, all the CQL commands are pre-compiled.
- ///
- /// @param parameters a data structure relating keywords and values
- /// concerned with the database.
- ///
- /// @throw isc::db::NoDatabaseName Mandatory database name not given
- /// @throw isc::db::DbOpenError Error opening the database or the schema
- /// version is invalid.
- /// @throw isc::db::DbOperationError An operation on the open database has
- /// failed.
- explicit CqlLeaseMgr(const db::DatabaseConnection::ParameterMap& parameters);
-
- /// @brief Destructor (closes database)
- virtual ~CqlLeaseMgr();
-
- /// @brief Local version of getDBVersion() class method
- static std::string getDBVersion();
-
- /// @brief Adds an IPv4 lease
- ///
- /// @param lease lease to be added
- ///
- /// @result true if the lease was added, false if not (because a lease
- /// with the same address was already there).
- ///
- /// @throw isc::db::DbOperationError An operation on the open database has
- /// failed.
- virtual bool addLease(const Lease4Ptr& lease) override;
-
- /// @brief Adds an IPv6 lease
- ///
- /// @param lease lease to be added
- ///
- /// @result true if the lease was added, false if not (because a lease
- /// with the same address was already there).
- ///
- /// @throw isc::db::DbOperationError An operation on the open database has
- /// failed.
- virtual bool addLease(const Lease6Ptr& lease) override;
-
- /// @brief Basic lease access methods. Obtain leases from the database using
- /// various criteria.
- /// @{
-
- /// @brief Returns an IPv4 lease for specified IPv4 address
- ///
- /// This method return a lease that is associated with a given address.
- /// For other query types (by hardware addr, by Client ID) there can be
- /// several leases in different subnets (e.g. for mobile clients that
- /// got address in different subnets). However, for a single address
- /// there can be only one lease, so this method returns a pointer to
- /// a single lease, not a container of leases.
- ///
- /// @param addr address of the searched lease
- ///
- /// @return smart pointer to the lease (or NULL if a lease is not found)
- ///
- /// @throw isc::db::DbOperationError An operation on the open database has
- /// failed.
- virtual Lease4Ptr
- getLease4(const isc::asiolink::IOAddress& addr) const override;
-
- /// @brief Returns existing IPv4 leases for specified hardware address.
- ///
- /// Although in the usual case there will be only one lease, for mobile
- /// clients or clients with multiple static/fixed/reserved leases there
- /// can be more than one. Thus return type is a container, not a single
- /// pointer.
- ///
- /// @param hwaddr hardware address of the client
- ///
- /// @return lease collection
- ///
- /// @throw isc::db::DbOperationError An operation on the open database has
- /// failed.
- virtual Lease4Collection
- getLease4(const isc::dhcp::HWAddr& hwaddr) const override;
-
- /// @brief Returns existing IPv4 leases for specified hardware address
- /// and a subnet
- ///
- /// There can be at most one lease for a given HW address in a single
- /// subnet, so this method with either return a single lease or NULL.
- ///
- /// @param hwaddr hardware address of the client
- /// @param subnet_id identifier of the subnet that lease must belong to
- ///
- /// @return a pointer to the lease (or NULL if a lease is not found)
- ///
- /// @throw isc::db::DbOperationError An operation on the open database has
- /// failed.
- virtual Lease4Ptr getLease4(const isc::dhcp::HWAddr& hwaddr,
- SubnetID subnet_id) const override;
-
- /// @brief Returns existing IPv4 leases for specified client-id
- ///
- /// Although in the usual case there will be only one lease, for mobile
- /// clients or clients with multiple static/fixed/reserved leases there
- /// can be more than one. Thus return type is a container, not a single
- /// pointer.
- ///
- /// @param clientid client identifier
- ///
- /// @return lease collection
- ///
- /// @throw isc::db::DbOperationError An operation on the open database has
- /// failed.
- virtual Lease4Collection getLease4(const ClientId& clientid) const override;
-
- /// @brief Returns existing IPv4 lease for specified client-id
- ///
- /// There can be at most one lease for a given HW address in a single
- /// pool, so this method with either return a single lease or NULL.
- ///
- /// @param clientid client identifier
- /// @param subnet_id identifier of the subnet that lease must belong to
- ///
- /// @return a pointer to the lease (or NULL if a lease is not found)
- ///
- /// @throw isc::db::DbOperationError An operation on the open database has
- /// failed.
- virtual Lease4Ptr getLease4(const ClientId& clientid,
- SubnetID subnet_id) const override;
-
- /// @brief Returns all IPv4 leases for the particular subnet identifier.
- ///
- /// @param subnet_id subnet identifier.
- ///
- /// @return Lease collection (may be empty if no IPv4 lease found).
- /// @throw NotImplemented because this method is currently not implemented for
- /// this backend.
- virtual Lease4Collection getLeases4(SubnetID subnet_id) const override;
-
- /// @brief Returns all IPv4 leases for the particular hostname.
- ///
- /// @param hostname hostname in lower case.
- ///
- /// @return Lease collection (may be empty if no IPv4 lease found).
- virtual Lease4Collection getLeases4(const std::string& hostname) const override;
-
- /// @brief Returns all IPv4 leases.
- ///
- /// @return Lease collection (may be empty if no IPv4 lease found).
- /// @throw NotImplemented because this method is currently not implemented for
- /// this backend.
- virtual Lease4Collection getLeases4() const override;
-
- /// @brief Returns range of IPv4 leases using paging.
- ///
- /// This method implements paged browsing of the lease database. The first
- /// parameter specifies a page size. The second parameter is optional and
- /// specifies the starting address of the range. This address is excluded
- /// from the returned range. The IPv4 zero address (default) denotes that
- /// the first page should be returned. There is no guarantee about the
- /// order of returned leases.
- ///
- /// The typical usage of this method is as follows:
- /// - Get the first page of leases by specifying IPv4 zero address as the
- /// beginning of the range.
- /// - Last address of the returned range should be used as a starting
- /// address for the next page in the subsequent call.
- /// - If the number of leases returned is lower than the page size, it
- /// indicates that the last page has been retrieved.
- /// - If there are no leases returned it indicates that the previous page
- /// was the last page.
- ///
- /// @param lower_bound_address IPv4 address used as lower bound for the
- /// returned range.
- /// @param page_size maximum size of the page returned.
- ///
- /// @return Lease collection (may be empty if no IPv4 lease found).
- virtual Lease4Collection
- getLeases4(const asiolink::IOAddress& lower_bound_address,
- const LeasePageSize& page_size) const override;
-
- /// @brief Returns existing IPv6 lease for a given IPv6 address.
- ///
- /// For a given address, we assume that there will be only one lease.
- /// The assumption here is that there will not be site or link-local
- /// addresses used, so there is no way of having address duplication.
- ///
- /// @param type specifies lease type: (NA, TA or PD)
- /// @param addr address of the searched lease
- ///
- /// @return smart pointer to the lease (or NULL if a lease is not found)
- ///
- /// @throw isc::BadValue record retrieved from database had an invalid
- /// lease type field.
- /// @throw isc::db::DbOperationError An operation on the open database has
- /// failed.
- virtual Lease6Ptr
- getLease6(Lease::Type type,
- const isc::asiolink::IOAddress& addr) const override;
-
- /// @brief Returns existing IPv6 leases for a given DUID+IA combination
- ///
- /// Although in the usual case there will be only one lease, for mobile
- /// clients or clients with multiple static/fixed/reserved leases there
- /// can be more than one. Thus return type is a container, not a single
- /// pointer.
- ///
- /// @param type specifies lease type: (NA, TA or PD)
- /// @param duid client DUID
- /// @param iaid IA identifier
- ///
- /// @return smart pointer to the lease (or NULL if a lease is not found)
- ///
- /// @throw isc::BadValue record retrieved from database had an invalid
- /// lease type field.
- /// @throw isc::db::DbOperationError An operation on the open database has
- /// failed.
- virtual Lease6Collection getLeases6(Lease::Type type,
- const DUID& duid,
- uint32_t iaid) const override;
-
- /// @brief Returns existing IPv6 lease for a given DUID+IA combination
- ///
- /// @param type specifies lease type: (NA, TA or PD)
- /// @param duid client DUID
- /// @param iaid IA identifier
- /// @param subnet_id subnet id of the subnet the lease belongs to
- ///
- /// @return lease collection (may be empty if no lease is found)
- ///
- /// @throw isc::BadValue record retrieved from database had an invalid
- /// lease type field.
- /// @throw isc::db::DbOperationError An operation on the open database has
- /// failed.
- virtual Lease6Collection getLeases6(Lease::Type type,
- const DUID& duid,
- uint32_t iaid,
- SubnetID subnet_id) const override;
-
- /// @brief Returns all IPv6 leases for the particular subnet identifier.
- ///
- /// @param subnet_id subnet identifier.
- ///
- /// @return Lease collection (may be empty if no IPv6 lease found).
- /// @throw NotImplemented because this method is currently not implemented for
- /// this backend.
- virtual Lease6Collection getLeases6(SubnetID subnet_id) const override;
-
- /// @brief Returns all IPv6 leases for the particular hostname.
- ///
- /// @param hostname hostname in lower case.
- ///
- /// @return Lease collection (may be empty if no IPv6 lease found).
- virtual Lease6Collection getLeases6(const std::string& hostname) const override;
-
- /// @brief Returns all IPv6 leases.
- ///
- /// @return Lease collection (may be empty if no IPv6 lease found).
- /// @throw NotImplemented because this method is currently not implemented for
- /// this backend.
- virtual Lease6Collection getLeases6() const override;
-
- /// @brief Returns all IPv6 leases.
- ///
- /// @return Lease collection (may be empty if no IPv6 lease found).
- virtual Lease6Collection getLeases6(const DUID& duid) const override;
-
- /// @brief Returns range of IPv6 leases using paging.
- ///
- /// This method implements paged browsing of the lease database. The first
- /// parameter specifies a page size. The second parameter is optional and
- /// specifies the starting address of the range. This address is excluded
- /// from the returned range. The IPv6 zero address (default) denotes that
- /// the first page should be returned. There is no guarantee about the
- /// order of returned leases.
- ///
- /// The typical usage of this method is as follows:
- /// - Get the first page of leases by specifying IPv6 zero address as the
- /// beginning of the range.
- /// - Last address of the returned range should be used as a starting
- /// address for the next page in the subsequent call.
- /// - If the number of leases returned is lower than the page size, it
- /// indicates that the last page has been retrieved.
- /// - If there are no leases returned it indicates that the previous page
- /// was the last page.
- ///
- /// @param lower_bound_address IPv6 address used as lower bound for the
- /// returned range.
- /// @param page_size maximum size of the page returned.
- ///
- /// @warning This method is currently not implemented. Cassandra doesn't
- /// support conversions from text to inet. Therefore, we're unable to
- /// compare the IPv6 addresses to find the desired range. A solution for
- /// this might be to store the IPv6 address as INET type rather than
- /// text, but this is currently low priority.
- ///
- /// @return Lease collection (may be empty if no IPv6 lease found).
- ///
- /// @throw isc::NotImplemented
- virtual Lease6Collection
- getLeases6(const asiolink::IOAddress& lower_bound_address,
- const LeasePageSize& page_size) const override;
-
- /// @brief Returns a collection of expired DHCPv4 leases.
- ///
- /// This method returns at most @c max_leases expired leases. The leases
- /// returned haven't been reclaimed, i.e. the database query must exclude
- /// reclaimed leases from the results returned.
- ///
- /// @param [out] expired_leases A container to which expired leases returned
- /// by the database backend are added.
- /// @param max_leases A maximum number of leases to be returned. If this
- /// value is set to 0, all expired (but not reclaimed) leases are returned.
- virtual void getExpiredLeases4(Lease4Collection& expired_leases,
- const size_t max_leases) const override;
-
- /// @brief Returns a collection of expired DHCPv6 leases.
- ///
- /// This method returns at most @c max_leases expired leases. The leases
- /// returned haven't been reclaimed, i.e. the database query must exclude
- /// reclaimed leases from the results returned.
- ///
- /// @param [out] expired_leases A container to which expired leases returned
- /// by the database backend are added.
- /// @param max_leases A maximum number of leases to be returned. If this
- /// value is set to 0, all expired (but not reclaimed) leases are returned.
- virtual void getExpiredLeases6(Lease6Collection& expired_leases,
- const size_t max_leases) const override;
- /// @}
-
- /// @brief Updates IPv4 lease.
- ///
- /// Updates the record of the lease in the database (as identified by the
- /// address) with the data in the passed lease object.
- ///
- /// @param lease4 The lease to be updated.
- ///
- /// @throw isc::dhcp::NoSuchLease Attempt to update a lease that did not
- /// exist.
- /// @throw isc::db::DbOperationError An operation on the open database has
- /// failed.
- ///
- /// @note The current_cltt_ and current_valid_lft_ are used to maximize the
- /// chance that only one thread or process performs an update or delete
- /// operation on the lease by matching these values with the expiration time
- /// data in the database.
- /// @note The UPDATE query uses IF expire = ? to update the lease only if
- /// the value matches the one received on the SELECT query, effectively
- /// enforcing no update on the lease between SELECT and UPDATE with
- /// different expiration time.
- virtual void updateLease4(const Lease4Ptr& lease4) override;
-
- /// @brief Updates IPv6 lease.
- ///
- /// Updates the record of the lease in the database (as identified by the
- /// address) with the data in the passed lease object.
- ///
- /// @param lease6 The lease to be updated.
- ///
- /// @throw isc::dhcp::NoSuchLease Attempt to update a lease that did not
-
- /// @throw isc::db::DbOperationError An operation on the open database has
- /// failed.
- ///
- /// @note The current_cltt_ and current_valid_lft_ are used to maximize the
- /// chance that only one thread or process performs an update or delete
- /// operation on the lease by matching these values with the expiration time
- /// data in the database.
- /// @note The UPDATE query uses IF expire = ? to update the lease only if
- /// the value matches the one received on the SELECT query, effectively
- /// enforcing no update on the lease between SELECT and UPDATE with
- /// different expiration time.
- virtual void updateLease6(const Lease6Ptr& lease6) override;
-
- /// @brief Deletes an IPv4 lease.
- ///
- /// @param lease IPv4 lease being deleted.
- ///
- /// @return true if deletion was successful, false if no such lease exists.
- ///
- /// @note The current_cltt_ and current_valid_lft_ are used to maximize the
- /// chance that only one thread or process performs an update or delete
- /// operation on the lease by matching these values with the expiration time
- /// data in the database.
- /// @note The DELETE query uses IF expire = ? to delete the lease only if
- /// the value matches the one received on the SELECT query, effectively
- /// enforcing no update on the lease between SELECT and DELETE with
- /// different expiration time.
- bool deleteLease(const Lease4Ptr& lease) override final;
-
- /// @brief Deletes an IPv6 lease.
- ///
- /// @param lease IPv6 lease being deleted.
- ///
- /// @return true if deletion was successful, false if no such lease exists.
- ///
- /// @note The current_cltt_ and current_valid_lft_ are used to maximize the
- /// chance that only one thread or process performs an update or delete
- /// operation on the lease by matching these values with the expiration time
- /// data in the database.
- /// @note The DELETE query uses IF expire = ? to delete the lease only if
- /// the value matches the one received on the SELECT query, effectively
- /// enforcing no update on the lease between SELECT and DELETE with
- /// different expiration time.
- bool deleteLease(const Lease6Ptr& lease) override final;
-
- /// @brief Deletes all expired and reclaimed DHCPv4 leases.
- ///
- /// @param secs number of seconds since expiration of leases before
- /// they can be removed. Leases which have expired later than this
- /// time will not be deleted.
- ///
- /// @return Number of leases deleted.
- virtual uint64_t
- deleteExpiredReclaimedLeases4(const uint32_t secs) override;
-
- /// @brief Deletes all expired and reclaimed DHCPv6 leases.
- ///
- /// @param secs number of seconds since expiration of leases before
- /// they can be removed. Leases which have expired later than this
- /// time will not be deleted.
- ///
- /// @return Number of leases deleted.
- virtual uint64_t
- deleteExpiredReclaimedLeases6(const uint32_t secs) override;
-
- /// @brief Creates and runs the IPv4 lease stats query
- ///
- /// It creates an instance of a CqlLeaseStatsQuery4 and then
- /// invokes its start method, which fetches its statistical data
- /// result set by executing the ALL_LEASE_STATS4 query.
- /// The query object is then returned.
- ///
- /// @return The populated query as a pointer to an LeaseStatsQuery
- virtual LeaseStatsQueryPtr startLeaseStatsQuery4() override;
-
- /// @brief Creates and runs the IPv4 lease stats query for a single subnet
- ///
- /// It creates an instance of a CqlLeaseStatsQuery4 for a single subnet
- /// query and then invokes its start method in which the query constructs its
- /// statistical data result set. The query object is then returned.
- ///
- /// @param subnet_id id of the subnet for which stats are desired
- /// @return A populated LeaseStatsQuery
- virtual LeaseStatsQueryPtr startSubnetLeaseStatsQuery4(const SubnetID& subnet_id) override;
-
- /// @brief Creates and runs the IPv4 lease stats query for a single subnet
- ///
- /// It creates an instance of a CqlLeaseStatsQuery4 for a subnet range
- /// query and then invokes its start method in which the query constructs its
- /// statistical data result set. The query object is then returned.
- ///
- /// @param first_subnet_id first subnet in the range of subnets
- /// @param last_subnet_id last subnet in the range of subnets
- /// @return A populated LeaseStatsQuery
- virtual LeaseStatsQueryPtr startSubnetRangeLeaseStatsQuery4(const SubnetID& first_subnet_id,
- const SubnetID& last_subnet_id) override;
- /// @brief Creates and runs the IPv6 lease stats query
- ///
- /// It creates an instance of a CqlLeaseStatsQuery and then
- /// invokes its start method, which fetches its statistical data
- /// result set by executing the ALL_LEASE_STATS6 query.
- /// The query object is then returned.
- ///
- /// @return The populated query as a pointer to an LeaseStatsQuery
- virtual LeaseStatsQueryPtr startLeaseStatsQuery6() override;
-
- /// @brief Creates and runs the IPv6 lease stats query for a single subnet
- ///
- /// It creates an instance of a CqlLeaseStatsQuery6 for a single subnet
- /// query and then invokes its start method in which the query constructs its
- /// statistical data result set. The query object is then returned.
- ///
- /// @param subnet_id id of the subnet for which stats are desired
- /// @return A populated LeaseStatsQuery
- virtual LeaseStatsQueryPtr startSubnetLeaseStatsQuery6(const SubnetID& subnet_id) override;
-
- /// @brief Creates and runs the IPv6 lease stats query for a single subnet
- ///
- /// It creates an instance of a CqlLeaseStatsQuery6 for a subnet range
- /// query and then invokes its start method in which the query constructs its
- /// statistical data result set. The query object is then returned.
- ///
- /// @param first_subnet_id first subnet in the range of subnets
- /// @param last_subnet_id last subnet in the range of subnets
- /// @return A populated LeaseStatsQuery
- virtual LeaseStatsQueryPtr startSubnetRangeLeaseStatsQuery6(const SubnetID& first_subnet_id,
- const SubnetID& last_subnet_id) override;
- /// @brief Removes specified IPv4 leases.
- ///
- /// This rather dangerous method is able to remove all leases from specified
- /// subnet.
- ///
- /// @todo: Not implemented yet.
- ///
- /// @param subnet_id identifier of the subnet
- /// @return number of leases removed.
- virtual size_t wipeLeases4(const SubnetID& subnet_id) override;
-
- /// @brief Removed specified IPv6 leases.
- ///
- /// This rather dangerous method is able to remove all leases from specified
- /// subnet.
- ///
- /// @todo: Not implemented yet.
- ///
- /// @param subnet_id identifier of the subnet
- /// @return number of leases removed.
- virtual size_t wipeLeases6(const SubnetID& subnet_id) override;
-
- /// @brief Return backend type
- ///
- /// @return Type of the backend.
- virtual std::string getType() const override {
- return (std::string("cql"));
- }
-
- /// @brief Returns name of the database.
- ///
- /// @return database name
- virtual std::string getName() const override;
-
- /// @brief Returns description of the backend.
- ///
- /// This description may be multiline text that describes the backend.
- ///
- /// @return Description of the backend.
- virtual std::string getDescription() const override;
-
- /// @brief Returns backend version.
- ///
- /// @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.
- virtual VersionPair getVersion() const override;
-
- /// @brief Commit Transactions
- ///
- /// This is a no-op for Cassandra.
- virtual void commit() override;
-
- /// @brief Rollback Transactions
- ///
- /// This is a no-op for Cassandra.
- virtual void rollback() override;
-
-private:
-
- /// @brief Connection parameters
- db::DatabaseConnection::ParameterMap parameters_;
-
- /// @brief Database connection object
- mutable db::CqlConnection dbconn_;
-};
-
-} // namespace dhcp
-} // namespace isc
-
-#endif // CQL_LEASE_MGR_H
diff --git a/src/lib/dhcpsrv/database_backends.dox b/src/lib/dhcpsrv/database_backends.dox
index 38caab268c..cd33b7a083 100644
--- a/src/lib/dhcpsrv/database_backends.dox
+++ b/src/lib/dhcpsrv/database_backends.dox
@@ -60,8 +60,6 @@
time.
- <b>postgresql</b> - Use PostgreSQL as the database. Must be enabled
at compilation time.
- - <b>cql</b> - Use Cassandra (CQL) as the database. Must be enabled at
- compilation time.
The following sections list the database-specific keywords:
@@ -91,20 +89,6 @@
For details, see @ref isc::db::PgSqlConnection::openDatabase().
- @subsection dhcpdb-keywords-cql Cassandra (CQL) connection string keywords
-
- - <b>contact-points</b> - a list of comma separated IP addresses of the
- cluster contact points>
- - <b>port</b> - an integer specifying a connection port. If not specified, the
- default port will be used.
- - <b>user</b> - a database user name under which the database is accessed. If
- not specified, no user name is used - the database is assumed to be open.
- - <b>password</b> - an optional password if required for connection
- - <b>keyspace</b> - an optional keyspace. If not specified, the default value
- of 'keatest' will be used.
-
- For details, see @ref isc::db::CqlConnection::openDatabase().
-
@subsection infinite-valid-lifetime Infinite Valid Lifetime
The @c isc::dhcp::Lease class uses cltt (client last transmission time)
diff --git a/src/lib/dhcpsrv/dhcpsrv_messages.cc b/src/lib/dhcpsrv/dhcpsrv_messages.cc
index d824b43268..7e8f2881b1 100644
--- a/src/lib/dhcpsrv/dhcpsrv_messages.cc
+++ b/src/lib/dhcpsrv/dhcpsrv_messages.cc
@@ -48,46 +48,6 @@ extern const isc::log::MessageID DHCPSRV_CFGMGR_UPDATE_SUBNET6 = "DHCPSRV_CFGMGR
extern const isc::log::MessageID DHCPSRV_CFGMGR_USE_ADDRESS = "DHCPSRV_CFGMGR_USE_ADDRESS";
extern const isc::log::MessageID DHCPSRV_CFGMGR_USE_UNICAST = "DHCPSRV_CFGMGR_USE_UNICAST";
extern const isc::log::MessageID DHCPSRV_CLOSE_DB = "DHCPSRV_CLOSE_DB";
-extern const isc::log::MessageID DHCPSRV_CQL_ADD_ADDR4 = "DHCPSRV_CQL_ADD_ADDR4";
-extern const isc::log::MessageID DHCPSRV_CQL_ADD_ADDR6 = "DHCPSRV_CQL_ADD_ADDR6";
-extern const isc::log::MessageID DHCPSRV_CQL_COMMIT = "DHCPSRV_CQL_COMMIT";
-extern const isc::log::MessageID DHCPSRV_CQL_CONNECTION_BEGIN_TRANSACTION = "DHCPSRV_CQL_CONNECTION_BEGIN_TRANSACTION";
-extern const isc::log::MessageID DHCPSRV_CQL_CONNECTION_COMMIT = "DHCPSRV_CQL_CONNECTION_COMMIT";
-extern const isc::log::MessageID DHCPSRV_CQL_CONNECTION_ROLLBACK = "DHCPSRV_CQL_CONNECTION_ROLLBACK";
-extern const isc::log::MessageID DHCPSRV_CQL_DB = "DHCPSRV_CQL_DB";
-extern const isc::log::MessageID DHCPSRV_CQL_DEALLOC_ERROR = "DHCPSRV_CQL_DEALLOC_ERROR";
-extern const isc::log::MessageID DHCPSRV_CQL_DELETE_ADDR = "DHCPSRV_CQL_DELETE_ADDR";
-extern const isc::log::MessageID DHCPSRV_CQL_DELETE_EXPIRED_RECLAIMED4 = "DHCPSRV_CQL_DELETE_EXPIRED_RECLAIMED4";
-extern const isc::log::MessageID DHCPSRV_CQL_DELETE_EXPIRED_RECLAIMED6 = "DHCPSRV_CQL_DELETE_EXPIRED_RECLAIMED6";
-extern const isc::log::MessageID DHCPSRV_CQL_GET4 = "DHCPSRV_CQL_GET4";
-extern const isc::log::MessageID DHCPSRV_CQL_GET_ADDR4 = "DHCPSRV_CQL_GET_ADDR4";
-extern const isc::log::MessageID DHCPSRV_CQL_GET_ADDR6 = "DHCPSRV_CQL_GET_ADDR6";
-extern const isc::log::MessageID DHCPSRV_CQL_GET_CLIENTID = "DHCPSRV_CQL_GET_CLIENTID";
-extern const isc::log::MessageID DHCPSRV_CQL_GET_CLIENTID_HWADDR_SUBID = "DHCPSRV_CQL_GET_CLIENTID_HWADDR_SUBID";
-extern const isc::log::MessageID DHCPSRV_CQL_GET_EXPIRED4 = "DHCPSRV_CQL_GET_EXPIRED4";
-extern const isc::log::MessageID DHCPSRV_CQL_GET_EXPIRED6 = "DHCPSRV_CQL_GET_EXPIRED6";
-extern const isc::log::MessageID DHCPSRV_CQL_GET_HOSTNAME4 = "DHCPSRV_CQL_GET_HOSTNAME4";
-extern const isc::log::MessageID DHCPSRV_CQL_GET_HOSTNAME6 = "DHCPSRV_CQL_GET_HOSTNAME6";
-extern const isc::log::MessageID DHCPSRV_CQL_GET_HWADDR = "DHCPSRV_CQL_GET_HWADDR";
-extern const isc::log::MessageID DHCPSRV_CQL_GET_IAID_DUID = "DHCPSRV_CQL_GET_IAID_DUID";
-extern const isc::log::MessageID DHCPSRV_CQL_GET_IAID_SUBID_DUID = "DHCPSRV_CQL_GET_IAID_SUBID_DUID";
-extern const isc::log::MessageID DHCPSRV_CQL_GET_PAGE4 = "DHCPSRV_CQL_GET_PAGE4";
-extern const isc::log::MessageID DHCPSRV_CQL_GET_PAGE6 = "DHCPSRV_CQL_GET_PAGE6";
-extern const isc::log::MessageID DHCPSRV_CQL_GET_SUBID4 = "DHCPSRV_CQL_GET_SUBID4";
-extern const isc::log::MessageID DHCPSRV_CQL_GET_SUBID_CLIENTID = "DHCPSRV_CQL_GET_SUBID_CLIENTID";
-extern const isc::log::MessageID DHCPSRV_CQL_GET_SUBID_HWADDR = "DHCPSRV_CQL_GET_SUBID_HWADDR";
-extern const isc::log::MessageID DHCPSRV_CQL_GET_VERSION = "DHCPSRV_CQL_GET_VERSION";
-extern const isc::log::MessageID DHCPSRV_CQL_HOST_ADD = "DHCPSRV_CQL_HOST_ADD";
-extern const isc::log::MessageID DHCPSRV_CQL_HOST_DB = "DHCPSRV_CQL_HOST_DB";
-extern const isc::log::MessageID DHCPSRV_CQL_HOST_DB_GET_VERSION = "DHCPSRV_CQL_HOST_DB_GET_VERSION";
-extern const isc::log::MessageID DHCPSRV_CQL_HOST_GET4 = "DHCPSRV_CQL_HOST_GET4";
-extern const isc::log::MessageID DHCPSRV_CQL_HOST_GET6 = "DHCPSRV_CQL_HOST_GET6";
-extern const isc::log::MessageID DHCPSRV_CQL_HOST_GET_ALL = "DHCPSRV_CQL_HOST_GET_ALL";
-extern const isc::log::MessageID DHCPSRV_CQL_LEASE_EXCEPTION_THROWN = "DHCPSRV_CQL_LEASE_EXCEPTION_THROWN";
-extern const isc::log::MessageID DHCPSRV_CQL_NO_TLS_SUPPORT = "DHCPSRV_CQL_NO_TLS_SUPPORT";
-extern const isc::log::MessageID DHCPSRV_CQL_ROLLBACK = "DHCPSRV_CQL_ROLLBACK";
-extern const isc::log::MessageID DHCPSRV_CQL_UPDATE_ADDR4 = "DHCPSRV_CQL_UPDATE_ADDR4";
-extern const isc::log::MessageID DHCPSRV_CQL_UPDATE_ADDR6 = "DHCPSRV_CQL_UPDATE_ADDR6";
extern const isc::log::MessageID DHCPSRV_DEPRECATED = "DHCPSRV_DEPRECATED";
extern const isc::log::MessageID DHCPSRV_DHCP4O6_RECEIVED_BAD_PACKET = "DHCPSRV_DHCP4O6_RECEIVED_BAD_PACKET";
extern const isc::log::MessageID DHCPSRV_DHCP_DDNS_ERROR_EXCEPTION = "DHCPSRV_DHCP_DDNS_ERROR_EXCEPTION";
@@ -314,46 +274,6 @@ const char* values[] = {
"DHCPSRV_CFGMGR_USE_ADDRESS", "listening on address %1, on interface %2",
"DHCPSRV_CFGMGR_USE_UNICAST", "listening on unicast address %1, on interface %2",
"DHCPSRV_CLOSE_DB", "closing currently open %1 database",
- "DHCPSRV_CQL_ADD_ADDR4", "adding IPv4 lease with address %1",
- "DHCPSRV_CQL_ADD_ADDR6", "adding IPv6 lease with address %1",
- "DHCPSRV_CQL_COMMIT", "committing to Cassandra database.",
- "DHCPSRV_CQL_CONNECTION_BEGIN_TRANSACTION", "begin transaction on current connection.",
- "DHCPSRV_CQL_CONNECTION_COMMIT", "committing to Cassandra database on current connection.",
- "DHCPSRV_CQL_CONNECTION_ROLLBACK", "rolling back Cassandra database on current connection.",
- "DHCPSRV_CQL_DB", "opening Cassandra lease database: %1",
- "DHCPSRV_CQL_DEALLOC_ERROR", "An error occurred while closing the CQL connection: %1",
- "DHCPSRV_CQL_DELETE_ADDR", "deleting lease for address %1",
- "DHCPSRV_CQL_DELETE_EXPIRED_RECLAIMED4", "deleting reclaimed IPv4 leases that expired more than %1 seconds ago",
- "DHCPSRV_CQL_DELETE_EXPIRED_RECLAIMED6", "deleting reclaimed IPv6 leases that expired more than %1 seconds ago",
- "DHCPSRV_CQL_GET4", "obtaining all IPv4 leases",
- "DHCPSRV_CQL_GET_ADDR4", "obtaining IPv4 lease for address %1",
- "DHCPSRV_CQL_GET_ADDR6", "obtaining IPv6 lease for address %1 and lease type %2",
- "DHCPSRV_CQL_GET_CLIENTID", "obtaining IPv4 leases for client ID %1",
- "DHCPSRV_CQL_GET_CLIENTID_HWADDR_SUBID", "obtaining IPv4 lease for client ID %1, hardware address %2 and subnet ID %3",
- "DHCPSRV_CQL_GET_EXPIRED4", "obtaining maximum %1 of expired IPv4 leases",
- "DHCPSRV_CQL_GET_EXPIRED6", "obtaining maximum %1 of expired IPv6 leases",
- "DHCPSRV_CQL_GET_HOSTNAME4", "obtaining IPv4 leases for hostname %1",
- "DHCPSRV_CQL_GET_HOSTNAME6", "obtaining IPv6 leases for hostname %1",
- "DHCPSRV_CQL_GET_HWADDR", "obtaining IPv4 leases for hardware address %1",
- "DHCPSRV_CQL_GET_IAID_DUID", "obtaining IPv6 leases for IAID %1 and DUID %2 and lease type %3",
- "DHCPSRV_CQL_GET_IAID_SUBID_DUID", "obtaining IPv6 leases for IAID %1, Subnet ID %2, DUID %3 and lease type %4",
- "DHCPSRV_CQL_GET_PAGE4", "obtaining at most %1 IPv4 leases starting from address %2",
- "DHCPSRV_CQL_GET_PAGE6", "obtaining at most %1 IPv6 leases starting from address %2",
- "DHCPSRV_CQL_GET_SUBID4", "obtaining IPv4 leases for subnet ID %1",
- "DHCPSRV_CQL_GET_SUBID_CLIENTID", "obtaining IPv4 lease for subnet ID %1 and client ID %2",
- "DHCPSRV_CQL_GET_SUBID_HWADDR", "obtaining IPv4 lease for subnet ID %1 and hardware address %2",
- "DHCPSRV_CQL_GET_VERSION", "obtaining schema version information",
- "DHCPSRV_CQL_HOST_ADD", "Adding host information to the database",
- "DHCPSRV_CQL_HOST_DB", "Connecting to CQL hosts database: %1",
- "DHCPSRV_CQL_HOST_DB_GET_VERSION", "obtaining schema version information for the CQL hosts database",
- "DHCPSRV_CQL_HOST_GET4", "Retrieving one DHCPv4 host from a CQL database",
- "DHCPSRV_CQL_HOST_GET6", "Retrieving one DHCPv6 host from a CQL database",
- "DHCPSRV_CQL_HOST_GET_ALL", "Retrieving multiple hosts from a CQL database",
- "DHCPSRV_CQL_LEASE_EXCEPTION_THROWN", "Exception thrown during Cassandra operation: %1",
- "DHCPSRV_CQL_NO_TLS_SUPPORT", "Attempt to configure TLS (unsupported for CQL): %1",
- "DHCPSRV_CQL_ROLLBACK", "rolling back Cassandra database.",
- "DHCPSRV_CQL_UPDATE_ADDR4", "updating IPv4 lease for address %1",
- "DHCPSRV_CQL_UPDATE_ADDR6", "updating IPv6 lease for address %1",
"DHCPSRV_DEPRECATED", "This configuration is using a deprecated feature: %1",
"DHCPSRV_DHCP4O6_RECEIVED_BAD_PACKET", "received bad DHCPv4o6 packet: %1",
"DHCPSRV_DHCP_DDNS_ERROR_EXCEPTION", "error handler for DHCP_DDNS IO generated an expected exception: %1",
diff --git a/src/lib/dhcpsrv/dhcpsrv_messages.h b/src/lib/dhcpsrv/dhcpsrv_messages.h
index 3093f0f6f2..e219050cb5 100644
--- a/src/lib/dhcpsrv/dhcpsrv_messages.h
+++ b/src/lib/dhcpsrv/dhcpsrv_messages.h
@@ -49,46 +49,6 @@ extern const isc::log::MessageID DHCPSRV_CFGMGR_UPDATE_SUBNET6;
extern const isc::log::MessageID DHCPSRV_CFGMGR_USE_ADDRESS;
extern const isc::log::MessageID DHCPSRV_CFGMGR_USE_UNICAST;
extern const isc::log::MessageID DHCPSRV_CLOSE_DB;
-extern const isc::log::MessageID DHCPSRV_CQL_ADD_ADDR4;
-extern const isc::log::MessageID DHCPSRV_CQL_ADD_ADDR6;
-extern const isc::log::MessageID DHCPSRV_CQL_COMMIT;
-extern const isc::log::MessageID DHCPSRV_CQL_CONNECTION_BEGIN_TRANSACTION;
-extern const isc::log::MessageID DHCPSRV_CQL_CONNECTION_COMMIT;
-extern const isc::log::MessageID DHCPSRV_CQL_CONNECTION_ROLLBACK;
-extern const isc::log::MessageID DHCPSRV_CQL_DB;
-extern const isc::log::MessageID DHCPSRV_CQL_DEALLOC_ERROR;
-extern const isc::log::MessageID DHCPSRV_CQL_DELETE_ADDR;
-extern const isc::log::MessageID DHCPSRV_CQL_DELETE_EXPIRED_RECLAIMED4;
-extern const isc::log::MessageID DHCPSRV_CQL_DELETE_EXPIRED_RECLAIMED6;
-extern const isc::log::MessageID DHCPSRV_CQL_GET4;
-extern const isc::log::MessageID DHCPSRV_CQL_GET_ADDR4;
-extern const isc::log::MessageID DHCPSRV_CQL_GET_ADDR6;
-extern const isc::log::MessageID DHCPSRV_CQL_GET_CLIENTID;
-extern const isc::log::MessageID DHCPSRV_CQL_GET_CLIENTID_HWADDR_SUBID;
-extern const isc::log::MessageID DHCPSRV_CQL_GET_EXPIRED4;
-extern const isc::log::MessageID DHCPSRV_CQL_GET_EXPIRED6;
-extern const isc::log::MessageID DHCPSRV_CQL_GET_HOSTNAME4;
-extern const isc::log::MessageID DHCPSRV_CQL_GET_HOSTNAME6;
-extern const isc::log::MessageID DHCPSRV_CQL_GET_HWADDR;
-extern const isc::log::MessageID DHCPSRV_CQL_GET_IAID_DUID;
-extern const isc::log::MessageID DHCPSRV_CQL_GET_IAID_SUBID_DUID;
-extern const isc::log::MessageID DHCPSRV_CQL_GET_PAGE4;
-extern const isc::log::MessageID DHCPSRV_CQL_GET_PAGE6;
-extern const isc::log::MessageID DHCPSRV_CQL_GET_SUBID4;
-extern const isc::log::MessageID DHCPSRV_CQL_GET_SUBID_CLIENTID;
-extern const isc::log::MessageID DHCPSRV_CQL_GET_SUBID_HWADDR;
-extern const isc::log::MessageID DHCPSRV_CQL_GET_VERSION;
-extern const isc::log::MessageID DHCPSRV_CQL_HOST_ADD;
-extern const isc::log::MessageID DHCPSRV_CQL_HOST_DB;
-extern const isc::log::MessageID DHCPSRV_CQL_HOST_DB_GET_VERSION;
-extern const isc::log::MessageID DHCPSRV_CQL_HOST_GET4;
-extern const isc::log::MessageID DHCPSRV_CQL_HOST_GET6;
-extern const isc::log::MessageID DHCPSRV_CQL_HOST_GET_ALL;
-extern const isc::log::MessageID DHCPSRV_CQL_LEASE_EXCEPTION_THROWN;
-extern const isc::log::MessageID DHCPSRV_CQL_NO_TLS_SUPPORT;
-extern const isc::log::MessageID DHCPSRV_CQL_ROLLBACK;
-extern const isc::log::MessageID DHCPSRV_CQL_UPDATE_ADDR4;
-extern const isc::log::MessageID DHCPSRV_CQL_UPDATE_ADDR6;
extern const isc::log::MessageID DHCPSRV_DEPRECATED;
extern const isc::log::MessageID DHCPSRV_DHCP4O6_RECEIVED_BAD_PACKET;
extern const isc::log::MessageID DHCPSRV_DHCP_DDNS_ERROR_EXCEPTION;
diff --git a/src/lib/dhcpsrv/dhcpsrv_messages.mes b/src/lib/dhcpsrv/dhcpsrv_messages.mes
index 0c08911223..dc873a2fdc 100644
--- a/src/lib/dhcpsrv/dhcpsrv_messages.mes
+++ b/src/lib/dhcpsrv/dhcpsrv_messages.mes
@@ -248,180 +248,6 @@ the database access parameters are changed: in the latter case, the
server closes the currently open database, and opens a database using
the new parameters.
-% DHCPSRV_CQL_ADD_ADDR4 adding IPv4 lease with address %1
-A debug message issued when the server is about to add an IPv4 lease
-with the specified address to the Cassandra backend database.
-
-% DHCPSRV_CQL_ADD_ADDR6 adding IPv6 lease with address %1
-A debug message issued when the server is about to add an IPv6 lease
-with the specified address to the Cassandra backend database.
-
-% DHCPSRV_CQL_COMMIT committing to Cassandra database.
-A commit call been issued on the server. For Cassandra, this is a no-op.
-
-% DHCPSRV_CQL_CONNECTION_BEGIN_TRANSACTION begin transaction on current connection.
-The server has issued a begin transaction call.
-
-% DHCPSRV_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.
-
-% DHCPSRV_CQL_CONNECTION_ROLLBACK rolling back Cassandra database on current connection.
-The code has issued a rollback call. For Cassandra, this is a no-op.
-
-% DHCPSRV_CQL_DB opening Cassandra lease database: %1
-This informational message is logged when a DHCP server (either V4 or
-V6) is about to open a Cassandra lease database. The parameters of
-the connection including database name and username needed to access it
-(but not the password if any) are logged.
-
-% DHCPSRV_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.
-
-% DHCPSRV_CQL_DELETE_ADDR deleting lease for address %1
-A debug message issued when the server is attempting to delete a lease from the
-Cassandra database for the specified address.
-
-% DHCPSRV_CQL_DELETE_EXPIRED_RECLAIMED4 deleting reclaimed IPv4 leases that expired more than %1 seconds ago
-A debug message issued when the server is removing reclaimed DHCPv4
-leases which have expired longer than a specified period of time.
-The argument is the amount of time Kea waits after a reclaimed
-lease expires before considering its removal.
-
-% DHCPSRV_CQL_DELETE_EXPIRED_RECLAIMED6 deleting reclaimed IPv6 leases that expired more than %1 seconds ago
-A debug message issued when the server is removing reclaimed DHCPv6
-leases which have expired longer than a specified period of time.
-The argument is the amount of time Kea waits after a reclaimed
-lease expires before considering its removal.
-
-% DHCPSRV_CQL_GET4 obtaining all IPv4 leases
-A debug message issued when the server is attempting to obtain all IPv4
-leases from the Cassandra database.
-
-% DHCPSRV_CQL_GET_ADDR4 obtaining IPv4 lease for address %1
-A debug message issued when the server is attempting to obtain an IPv4
-lease from the Cassandra database for the specified address.
-
-% DHCPSRV_CQL_GET_ADDR6 obtaining IPv6 lease for address %1 and lease type %2
-A debug message issued when the server is attempting to obtain an IPv6
-lease from the Cassandra database for the specified address.
-
-% DHCPSRV_CQL_GET_CLIENTID obtaining IPv4 leases for client ID %1
-A debug message issued when the server is attempting to obtain a set of
-IPv4 leases from the Cassandra database for a client with the specified
-client identification.
-
-% DHCPSRV_CQL_GET_CLIENTID_HWADDR_SUBID obtaining IPv4 lease for client ID %1, hardware address %2 and subnet ID %3
-A debug message issued when the server is attempting to obtain an IPv4
-lease from the Cassandra database for a client with the specified
-client ID, hardware address and subnet ID.
-
-% DHCPSRV_CQL_GET_EXPIRED4 obtaining maximum %1 of expired IPv4 leases
-A debug message issued when the server is attempting to obtain expired
-IPv4 leases to reclaim them. The maximum number of leases to be retrieved
-is logged in the message.
-
-% DHCPSRV_CQL_GET_EXPIRED6 obtaining maximum %1 of expired IPv6 leases
-A debug message issued when the server is attempting to obtain expired
-IPv6 leases to reclaim them. The maximum number of leases to be retrieved
-is logged in the message.
-
-% DHCPSRV_CQL_GET_HOSTNAME4 obtaining IPv4 leases for hostname %1
-A debug message issued when the server is attempting to obtain a set of
-IPv4 leases from the Cassandra database for a client with the specified
-hostname.
-
-% DHCPSRV_CQL_GET_HOSTNAME6 obtaining IPv6 leases for hostname %1
-A debug message issued when the server is attempting to obtain a set of
-IPv6 leases from the Cassandra database for a client with the specified
-hostname.
-
-% DHCPSRV_CQL_GET_HWADDR obtaining IPv4 leases for hardware address %1
-A debug message issued when the server is attempting to obtain a set of
-IPv4 leases from the Cassandra database for a client with the specified
-hardware address.
-
-% DHCPSRV_CQL_GET_IAID_DUID obtaining IPv6 leases for IAID %1 and DUID %2 and lease type %3
-A debug message issued when the server is attempting to obtain a set of IPv6
-leases from the Cassandra database for a client with the specified IAID
-(Identity Association ID) and DUID (DHCP Unique Identifier).
-
-% DHCPSRV_CQL_GET_IAID_SUBID_DUID obtaining IPv6 leases for IAID %1, Subnet ID %2, DUID %3 and lease type %4
-A debug message issued when the server is attempting to obtain an IPv6
-lease from the Cassandra database for a client with the specified IAID
-(Identity Association ID), Subnet ID and DUID (DHCP Unique Identifier).
-
-% DHCPSRV_CQL_GET_PAGE4 obtaining at most %1 IPv4 leases starting from address %2
-A debug message issued when the server is attempting to obtain a page
-of leases beginning with the specified address.
-
-% DHCPSRV_CQL_GET_PAGE6 obtaining at most %1 IPv6 leases starting from address %2
-A debug message issued when the server is attempting to obtain a page
-of leases beginning with the specified address.
-
-% DHCPSRV_CQL_GET_SUBID4 obtaining IPv4 leases for subnet ID %1
-A debug message issued when the server is attempting to obtain all IPv4
-leases for a given subnet identifier from the Cassandra database.
-
-% DHCPSRV_CQL_GET_SUBID_CLIENTID obtaining IPv4 lease for subnet ID %1 and client ID %2
-A debug message issued when the server is attempting to obtain an IPv4
-lease from the Cassandra database for a client with the specified
-subnet ID and client ID.
-
-% DHCPSRV_CQL_GET_SUBID_HWADDR obtaining IPv4 lease for subnet ID %1 and hardware address %2
-A debug message issued when the server is attempting to obtain an IPv4
-lease from the Cassandra database for a client with the specified
-subnet ID and hardware address.
-
-% DHCPSRV_CQL_GET_VERSION obtaining schema version information
-A debug message issued when the server is about to obtain schema version
-information from the Cassandra database.
-
-% DHCPSRV_CQL_HOST_ADD Adding host information to the database
-An informational message logged when options belonging to any reservation from a
-single host are inserted.
-
-% DHCPSRV_CQL_HOST_DB Connecting to CQL hosts database: %1
-An informational message logged when the CQL hosts database is about to be
-connected to. The parameters of the connection including database name and
-username needed to access it (but not the password if any) are logged.
-
-% DHCPSRV_CQL_HOST_DB_GET_VERSION obtaining schema version information for the CQL hosts database
-A debug message issued when the server is about to obtain schema version
-information from the CQL hosts database.
-
-% DHCPSRV_CQL_HOST_GET4 Retrieving one DHCPv4 host from a CQL database
-An informational message logged when a DHCP server is about to retrieve one
-host from a CQL database by IPv4 criteria.
-
-% DHCPSRV_CQL_HOST_GET6 Retrieving one DHCPv6 host from a CQL database
-An informational message logged when a DHCP server is about to retrieve one
-host from a CQL database by IPv6 criteria.
-
-% DHCPSRV_CQL_HOST_GET_ALL Retrieving multiple hosts from a CQL database
-An informational message logged when multiple hosts from a CQL database are retrieved.
-
-% DHCPSRV_CQL_LEASE_EXCEPTION_THROWN Exception thrown during Cassandra operation: %1
-
-% DHCPSRV_CQL_NO_TLS_SUPPORT Attempt to configure TLS (unsupported for CQL): %1
-This error message is printed when TLS support was required in the Kea
-configuration: this feature is not supported for Cassandra/CQL. The
-parameters of the connection are logged.
-
-% DHCPSRV_CQL_ROLLBACK rolling back Cassandra database.
-The code has issued a rollback call. For Cassandra, this is a no-op.
-
-% DHCPSRV_CQL_UPDATE_ADDR4 updating IPv4 lease for address %1
-A debug message issued when the server is attempting to update IPv4
-lease from the Cassandra database for the specified address.
-
-% DHCPSRV_CQL_UPDATE_ADDR6 updating IPv6 lease for address %1
-A debug message issued when the server is attempting to update IPv6
-lease from the Cassandra database for the specified address.
-
% DHCPSRV_DEPRECATED This configuration is using a deprecated feature: %1
This warning is printed every time a deprecated feature (identified by the parameter) is
used. A deprecated feature is functional now, but there will be a future Kea release
diff --git a/src/lib/dhcpsrv/host.h b/src/lib/dhcpsrv/host.h
index d953c842e3..bbe2f38524 100644
--- a/src/lib/dhcpsrv/host.h
+++ b/src/lib/dhcpsrv/host.h
@@ -65,7 +65,7 @@ const uint8_t AUTH_KEY_LEN = 16;
/// @brief Maximum length of authentication keys (coded in hexadecimal).
const size_t TEXT_AUTH_KEY_LEN = AUTH_KEY_LEN * 2;
-/// @brief HostID (used only when storing in MySQL, PostgreSQL or Cassandra)
+/// @brief HostID (used only when storing in MySQL or PostgreSQL backends)
typedef uint64_t HostID;
/// @brief Authentication keys.
@@ -665,13 +665,13 @@ public:
/// @brief Returns information about the host in the textual format.
std::string toText() const;
- /// @brief Sets Host ID (primary key in MySQL, PostgreSQL and Cassandra backends)
+ /// @brief Sets Host ID (primary key in MySQL and PostgreSQL backends)
/// @param id HostId value
void setHostId(HostID id) {
host_id_ = id;
}
- /// @brief Returns Host ID (primary key in MySQL, PostgreSQL and Cassandra backends)
+ /// @brief Returns Host ID (primary key in MySQL and PostgreSQL backends)
/// @return id HostId value (or 0 if not set)
HostID getHostId() const {
return (host_id_);
@@ -757,7 +757,7 @@ private:
std::string boot_file_name_;
/// @brief HostID (a unique identifier assigned when the host is stored in
- /// MySQL, PostgreSQL or Cassandra)
+ /// MySQL or PostgreSQL backends)
uint64_t host_id_;
/// @brief Pointer to the DHCPv4 option data configuration for this host.
diff --git a/src/lib/dhcpsrv/host_data_source_factory.cc b/src/lib/dhcpsrv/host_data_source_factory.cc
index cb66041e4b..763328e3e5 100644
--- a/src/lib/dhcpsrv/host_data_source_factory.cc
+++ b/src/lib/dhcpsrv/host_data_source_factory.cc
@@ -19,10 +19,6 @@
#include <dhcpsrv/pgsql_host_data_source.h>
#endif
-#ifdef HAVE_CQL
-#include <dhcpsrv/cql_host_data_source.h>
-#endif
-
#include <boost/algorithm/string.hpp>
#include <boost/foreach.hpp>
#include <boost/scoped_ptr.hpp>
@@ -62,8 +58,7 @@ HostDataSourceFactory::add(HostDataSourceList& sources,
// No match?
if (index == map_.end()) {
if ((db_type == "mysql") ||
- (db_type == "postgresql") ||
- (db_type == "cql")) {
+ (db_type == "postgresql")) {
string with = (db_type == "postgresql" ? "pgsql" : db_type);
isc_throw(InvalidType, "The type of host backend: '" << db_type
<< "' is not compiled in. Did you forget to use --with-"
@@ -241,29 +236,4 @@ struct PgSqlHostDataSourceInit {
PgSqlHostDataSourceInit pgsql_init_;
#endif
-#ifdef HAVE_CQL
-struct CqlHostDataSourceInit {
- // Constructor registers
- CqlHostDataSourceInit() {
- HostDataSourceFactory::registerFactory("cql", factory, true);
- }
-
- // Destructor deregisters
- ~CqlHostDataSourceInit() {
- HostDataSourceFactory::deregisterFactory("cql", true);
- }
-
- // Factory class method
- static HostDataSourcePtr
- factory(const DatabaseConnection::ParameterMap& parameters) {
- LOG_INFO(hosts_logger, DHCPSRV_CQL_HOST_DB)
- .arg(DatabaseConnection::redactedAccessString(parameters));
- return (HostDataSourcePtr(new CqlHostDataSource(parameters)));
- }
-};
-
-// Database backend will be registered at object initialization
-CqlHostDataSourceInit cql_init_;
-#endif
-
} // end of anonymous namespace
diff --git a/src/lib/dhcpsrv/lease_mgr_factory.cc b/src/lib/dhcpsrv/lease_mgr_factory.cc
index 6f3e6a46ea..e77f5b10f0 100644
--- a/src/lib/dhcpsrv/lease_mgr_factory.cc
+++ b/src/lib/dhcpsrv/lease_mgr_factory.cc
@@ -15,9 +15,6 @@
#ifdef HAVE_PGSQL
#include <dhcpsrv/pgsql_lease_mgr.h>
#endif
-#ifdef HAVE_CQL
-#include <dhcpsrv/cql_lease_mgr.h>
-#endif
#include <boost/algorithm/string.hpp>
#include <boost/foreach.hpp>
@@ -81,17 +78,6 @@ LeaseMgrFactory::create(const std::string& dbaccess) {
"support for database type: postgresql");
#endif
}
- if (parameters[type] == string("cql")) {
-#ifdef HAVE_CQL
- LOG_INFO(dhcpsrv_logger, DHCPSRV_CQL_DB).arg(redacted);
- getLeaseMgrPtr().reset(new CqlLeaseMgr(parameters));
- return;
-#else
- LOG_ERROR(dhcpsrv_logger, DHCPSRV_UNKNOWN_DB).arg("cql");
- isc_throw(InvalidType, "The Kea server has not been compiled with "
- "support for database type: cql");
-#endif
- }
if (parameters[type] == string("memfile")) {
LOG_INFO(dhcpsrv_logger, DHCPSRV_MEMFILE_DB).arg(redacted);
getLeaseMgrPtr().reset(new Memfile_LeaseMgr(parameters));
diff --git a/src/lib/dhcpsrv/tests/Makefile.am b/src/lib/dhcpsrv/tests/Makefile.am
index 5a0dc629c9..c0b16fde57 100644
--- a/src/lib/dhcpsrv/tests/Makefile.am
+++ b/src/lib/dhcpsrv/tests/Makefile.am
@@ -117,10 +117,6 @@ if HAVE_PGSQL
libdhcpsrv_unittests_SOURCES += pgsql_lease_mgr_unittest.cc
libdhcpsrv_unittests_SOURCES += pgsql_host_data_source_unittest.cc
endif
-if HAVE_CQL
-libdhcpsrv_unittests_SOURCES += cql_lease_mgr_unittest.cc
-libdhcpsrv_unittests_SOURCES += cql_host_data_source_unittest.cc
-endif
libdhcpsrv_unittests_SOURCES += pool_unittest.cc
libdhcpsrv_unittests_SOURCES += resource_handler_unittest.cc
libdhcpsrv_unittests_SOURCES += sanity_checks_unittest.cc
@@ -141,9 +137,6 @@ endif
if HAVE_PGSQL
libdhcpsrv_unittests_CPPFLAGS += $(PGSQL_CPPFLAGS)
endif
-if HAVE_CQL
-libdhcpsrv_unittests_CPPFLAGS += $(CQL_CPPFLAGS)
-endif
libdhcpsrv_unittests_CXXFLAGS = $(AM_CXXFLAGS)
@@ -154,9 +147,6 @@ endif
if HAVE_PGSQL
libdhcpsrv_unittests_LDFLAGS += $(PGSQL_LIBS)
endif
-if HAVE_CQL
-libdhcpsrv_unittests_LDFLAGS += $(CQL_LIBS)
-endif
libdhcpsrv_unittests_LDADD = $(top_builddir)/src/lib/dhcpsrv/testutils/libdhcpsrvtest.la
@@ -179,10 +169,6 @@ if HAVE_PGSQL
libdhcpsrv_unittests_LDADD += $(top_builddir)/src/lib/pgsql/libkea-pgsql.la
libdhcpsrv_unittests_LDADD += $(top_builddir)/src/lib/pgsql/testutils/libpgsqltest.la
endif
-if HAVE_CQL
-libdhcpsrv_unittests_LDADD += $(top_builddir)/src/lib/cql/libkea-cql.la
-libdhcpsrv_unittests_LDADD += $(top_builddir)/src/lib/cql/testutils/libcqltest.la
-endif
libdhcpsrv_unittests_LDADD += $(top_builddir)/src/lib/database/testutils/libdatabasetest.la
libdhcpsrv_unittests_LDADD += $(top_builddir)/src/lib/database/libkea-database.la
diff --git a/src/lib/dhcpsrv/tests/alloc_engine4_unittest.cc b/src/lib/dhcpsrv/tests/alloc_engine4_unittest.cc
index 0b490e87b9..2734ebbea0 100644
--- a/src/lib/dhcpsrv/tests/alloc_engine4_unittest.cc
+++ b/src/lib/dhcpsrv/tests/alloc_engine4_unittest.cc
@@ -25,10 +25,6 @@
#include <pgsql/testutils/pgsql_schema.h>
#endif
-#if defined HAVE_CQL
-#include <cql/testutils/cql_schema.h>
-#endif
-
using namespace std;
using namespace isc::hooks;
using namespace isc::asiolink;
@@ -4979,177 +4975,6 @@ TEST_F(PgSqlAllocEngine4Test, bootpDelete) {
}
#endif
-#ifdef HAVE_CQL
-/// @brief Extension of the fixture class to use the Cassandra backend.
-class CqlAllocEngine4Test : public AllocEngine4Test {
-public:
- /// @brief Constructor.
- CqlAllocEngine4Test() {
- // Ensure we have the proper schema with no transient data.
- db::test::createCqlSchema();
- factory_.create(db::test::validCqlConnectionString());
- }
-
- /// @brief Destructor.
- ~CqlAllocEngine4Test() {
- // If data wipe enabled, delete transient data otherwise destroy
- // the schema.
- db::test::destroyCqlSchema();
- LeaseMgrFactory::destroy();
- }
-};
-
-// This test checks that simple allocation handles BOOTP queries.
-TEST_F(CqlAllocEngine4Test, bootpAlloc4) {
- boost::scoped_ptr<AllocEngine> engine;
- ASSERT_NO_THROW(engine.reset(new AllocEngine(AllocEngine::ALLOC_ITERATIVE,
- 0, false)));
- ASSERT_TRUE(engine);
-
- AllocEngine::ClientContext4 ctx(subnet_, clientid_, hwaddr_, IOAddress("0.0.0.0"),
- false, true, "somehost.example.com.", false);
- subnet_->setValid(Triplet<uint32_t>(1, 3, 5));
- ctx.query_.reset(new Pkt4(DHCPREQUEST, 1234));
-
- // Make the query a BOOTP one.
- ctx.query_->addClass("BOOTP");
-
- Lease4Ptr lease = engine->allocateLease4(ctx);
- // The new lease has been allocated, so the old lease should not exist.
- ASSERT_FALSE(ctx.old_lease_);
-
- // Check that we got a lease
- ASSERT_TRUE(lease);
-
- // Check that is belongs to the right subnet and client.
- EXPECT_EQ(lease->subnet_id_, subnet_->getID());
- EXPECT_TRUE(subnet_->inRange(lease->addr_));
- EXPECT_TRUE(subnet_->inPool(Lease::TYPE_V4, lease->addr_));
- ASSERT_TRUE(lease->client_id_);
- EXPECT_TRUE(*lease->client_id_ == *clientid_);
- ASSERT_TRUE(lease->hwaddr_);
- EXPECT_TRUE(*lease->hwaddr_ == *hwaddr_);
-
- // Check the valid lifetime is infinite.
- uint32_t infinity_lft = Lease::INFINITY_LFT;
- EXPECT_EQ(infinity_lft, lease->valid_lft_);
-
- // Check that the lease is indeed in LeaseMgr
- Lease4Ptr from_mgr = LeaseMgrFactory::instance().getLease4(lease->addr_);
- ASSERT_TRUE(from_mgr);
- // The Cassandra database does not keep the hwtype for DHCPv4 leases.
- from_mgr->hwaddr_->htype_ = HTYPE_FDDI;
-
- // Now check that the lease in LeaseMgr has the same parameters
- detailCompareLease(lease, from_mgr);
-}
-
-// This test checks simple renewal handles BOOTP queries.
-TEST_F(CqlAllocEngine4Test, bootpRenew4) {
- boost::scoped_ptr<AllocEngine> engine;
- ASSERT_NO_THROW(engine.reset(new AllocEngine(AllocEngine::ALLOC_ITERATIVE,
- 0, false)));
- ASSERT_TRUE(engine);
-
- AllocEngine::ClientContext4 ctx(subnet_, clientid_, hwaddr_, IOAddress("0.0.0.0"),
- false, true, "somehost.example.com.", false);
- subnet_->setValid(Triplet<uint32_t>(1, 3, 5));
- ctx.query_.reset(new Pkt4(DHCPREQUEST, 1234));
-
- // Make the query a BOOTP one.
- ctx.query_->addClass("BOOTP");
-
- Lease4Ptr lease = engine->allocateLease4(ctx);
-
- // Check that we got a lease.
- ASSERT_TRUE(lease);
-
- // Check that is belongs to the right subnet and client.
- EXPECT_EQ(lease->subnet_id_, subnet_->getID());
- EXPECT_TRUE(subnet_->inRange(lease->addr_));
- EXPECT_TRUE(subnet_->inPool(Lease::TYPE_V4, lease->addr_));
- ASSERT_TRUE(lease->client_id_);
- EXPECT_TRUE(*lease->client_id_ == *clientid_);
- ASSERT_TRUE(lease->hwaddr_);
- EXPECT_TRUE(*lease->hwaddr_ == *hwaddr_);
-
- // Check the valid lifetime is infinite.
- uint32_t infinity_lft = Lease::INFINITY_LFT;
- EXPECT_EQ(infinity_lft, lease->valid_lft_);
-
- // The new lease has been allocated, so the old lease should not exist.
- ASSERT_FALSE(ctx.old_lease_);
-
- // Do it again, this should amount to the renew of an existing lease
- Lease4Ptr lease2 = engine->allocateLease4(ctx);
-
- // Check that we got a lease.
- ASSERT_TRUE(lease2);
-
- // Check that is belongs to the right subnet and client.
- EXPECT_EQ(lease2->subnet_id_, subnet_->getID());
- EXPECT_TRUE(subnet_->inRange(lease2->addr_));
- EXPECT_TRUE(subnet_->inPool(Lease::TYPE_V4, lease2->addr_));
- ASSERT_TRUE(lease2->client_id_);
- EXPECT_TRUE(*lease2->client_id_ == *clientid_);
- ASSERT_TRUE(lease2->hwaddr_);
- EXPECT_TRUE(*lease2->hwaddr_ == *hwaddr_);
-
- // Lease already existed, so old_lease should be set.
- EXPECT_TRUE(ctx.old_lease_);
-
- // Check the renewed valid lifetime has the max value.
- EXPECT_EQ(infinity_lft, lease2->valid_lft_);
-}
-
-// This test checks that deleteRelease handles BOOTP leases.
-TEST_F(CqlAllocEngine4Test, bootpDelete) {
- boost::scoped_ptr<AllocEngine> engine;
- ASSERT_NO_THROW(engine.reset(new AllocEngine(AllocEngine::ALLOC_ITERATIVE,
- 0, false)));
- ASSERT_TRUE(engine);
-
- AllocEngine::ClientContext4 ctx(subnet_, clientid_, hwaddr_, IOAddress("0.0.0.0"),
- false, true, "somehost.example.com.", false);
- subnet_->setValid(Triplet<uint32_t>(1, 3, 5));
- ctx.query_.reset(new Pkt4(DHCPREQUEST, 1234));
-
- // Make the query a BOOTP one.
- ctx.query_->addClass("BOOTP");
-
- Lease4Ptr lease = engine->allocateLease4(ctx);
- // The new lease has been allocated, so the old lease should not exist.
- ASSERT_FALSE(ctx.old_lease_);
-
- // Check that we got a lease
- ASSERT_TRUE(lease);
-
- // Check that is belongs to the right subnet and client.
- EXPECT_EQ(lease->subnet_id_, subnet_->getID());
- EXPECT_TRUE(subnet_->inRange(lease->addr_));
- EXPECT_TRUE(subnet_->inPool(Lease::TYPE_V4, lease->addr_));
- ASSERT_TRUE(lease->client_id_);
- EXPECT_TRUE(*lease->client_id_ == *clientid_);
- ASSERT_TRUE(lease->hwaddr_);
- EXPECT_TRUE(*lease->hwaddr_ == *hwaddr_);
-
- // Check the valid lifetime is infinite.
- uint32_t infinity_lft = Lease::INFINITY_LFT;
- EXPECT_EQ(infinity_lft, lease->valid_lft_);
-
- // Check that the lease is indeed in LeaseMgr
- Lease4Ptr from_mgr = LeaseMgrFactory::instance().getLease4(lease->addr_);
- ASSERT_TRUE(from_mgr);
-
- // Now delete it.
- bool deleted = false;
- ASSERT_NO_THROW(deleted = LeaseMgrFactory::instance().deleteLease(lease));
- EXPECT_TRUE(deleted);
- from_mgr = LeaseMgrFactory::instance().getLease4(lease->addr_);
- EXPECT_FALSE(from_mgr);
-}
-#endif
-
} // namespace test
} // namespace dhcp
} // namespace isc
diff --git a/src/lib/dhcpsrv/tests/cfg_db_access_unittest.cc b/src/lib/dhcpsrv/tests/cfg_db_access_unittest.cc
index 520ccb1060..f883d34d47 100644
--- a/src/lib/dhcpsrv/tests/cfg_db_access_unittest.cc
+++ b/src/lib/dhcpsrv/tests/cfg_db_access_unittest.cc
@@ -23,10 +23,6 @@
#include <pgsql/testutils/pgsql_schema.h>
#endif
-#if defined HAVE_CQL
-#include <cql/testutils/cql_schema.h>
-#endif
-
using namespace isc;
using namespace isc::dhcp;
using namespace isc::test;
@@ -339,78 +335,4 @@ TEST_F(CfgPgSQLDbAccessTest, createManagersIPResrvUnique) {
#endif
-// The following tests require Cassandra enabled.
-#if defined HAVE_CQL
-
-/// @brief Test fixture class for testing @ref CfgDbAccessTest using MySQL
-/// backend.
-class CfgCQLDbAccessTest : public ::testing::Test {
-public:
-
- /// @brief Constructor.
- CfgCQLDbAccessTest() {
- // Ensure we have the proper schema with no transient data.
- db::test::createCqlSchema();
- }
-
- /// @brief Destructor.
- virtual ~CfgCQLDbAccessTest() {
- // If data wipe enabled, delete transient data otherwise destroy the schema
- db::test::destroyCqlSchema();
- LeaseMgrFactory::destroy();
- }
-};
-
-
-// Tests that CQL lease manager and host data source can be created from a
-// specified configuration.
-TEST_F(CfgCQLDbAccessTest, createManagers) {
- CfgDbAccess cfg;
- ASSERT_NO_THROW(cfg.setLeaseDbAccessString(db::test::validCqlConnectionString()));
- ASSERT_NO_THROW(cfg.setHostDbAccessString(db::test::validCqlConnectionString()));
- ASSERT_NO_THROW(cfg.createManagers());
-
- ASSERT_NO_THROW({
- LeaseMgr& lease_mgr = LeaseMgrFactory::instance();
- EXPECT_EQ("cql", lease_mgr.getType());
- });
-
- ASSERT_NO_THROW({
- const HostDataSourcePtr& host_data_source =
- HostMgr::instance().getHostDataSource();
- ASSERT_TRUE(host_data_source);
- EXPECT_EQ("cql", host_data_source->getType());
- });
-
- // Because of the lazy initialization of the HostMgr instance, it is
- // possible that the first call to the instance() function tosses
- // existing connection to the database created by the call to
- // createManagers(). Let's make sure that this doesn't happen.
- ASSERT_NO_THROW(HostMgr::instance());
-
- ASSERT_NO_THROW({
- const HostDataSourcePtr& host_data_source =
- HostMgr::instance().getHostDataSource();
- ASSERT_TRUE(host_data_source);
- EXPECT_EQ("cql", host_data_source->getType());
- });
-
- EXPECT_TRUE(HostMgr::instance().getIPReservationsUnique());
-}
-
-// Tests that the createManagers function refuses to use non unique
-// IP reservations setting for CQL host backend. This backend does
-// not support this setting.
-TEST_F(CfgCQLDbAccessTest, createManagersIPResrvUnique) {
- CfgDbAccess cfg;
-
- cfg.setIPReservationsUnique(false);
-
- ASSERT_NO_THROW(cfg.setLeaseDbAccessString(db::test::validCqlConnectionString()));
- ASSERT_NO_THROW(cfg.setHostDbAccessString(db::test::validCqlConnectionString()));
- EXPECT_THROW(cfg.createManagers(), InvalidOperation);
-}
-
-#endif
-
} // end of anonymous namespace
diff --git a/src/lib/dhcpsrv/tests/cql_host_data_source_unittest.cc b/src/lib/dhcpsrv/tests/cql_host_data_source_unittest.cc
deleted file mode 100644
index 0a713688e7..0000000000
--- a/src/lib/dhcpsrv/tests/cql_host_data_source_unittest.cc
+++ /dev/null
@@ -1,929 +0,0 @@
-// Copyright (C) 2017-2022 Internet Systems Consortium, Inc. ("ISC")
-// Copyright (C) 2016-2017 Deutsche Telekom AG.
-//
-// Author: Andrei Pavel <andrei.pavel@qualitance.com>
-//
-// 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 <config.h>
-
-#include <asiolink/io_address.h>
-#include <dhcpsrv/testutils/test_utils.h>
-#include <exceptions/exceptions.h>
-#include <dhcpsrv/host.h>
-#include <dhcpsrv/cql_host_data_source.h>
-#include <dhcpsrv/testutils/generic_host_data_source_unittest.h>
-#include <dhcpsrv/testutils/host_data_source_utils.h>
-#include <dhcpsrv/host_mgr.h>
-#include <dhcpsrv/host_data_source_factory.h>
-#include <cql/cql_connection.h>
-#include <cql/cql_exchange.h>
-#include <cql/testutils/cql_schema.h>
-
-#include <gtest/gtest.h>
-
-#include <algorithm>
-#include <iostream>
-#include <sstream>
-#include <string>
-#include <utility>
-
-using namespace isc;
-using namespace isc::asiolink;
-using namespace isc::db;
-using namespace isc::db::test;
-using namespace isc::dhcp;
-using namespace isc::dhcp::test;
-using namespace isc::data;
-using namespace std;
-
-namespace {
-
-class CqlHostDataSourceTest : public GenericHostDataSourceTest {
-public:
- /// @brief Clears the database and opens connection to it.
- void initializeTest() {
- // Ensure we have the proper schema with no transient data.
- createCqlSchema();
-
- // Connect to the database
- try {
- HostMgr::create();
- HostMgr::addBackend(validCqlConnectionString());
- } catch (...) {
- std::cerr << "*** ERROR: unable to open database. The test\n"
- "*** environment is broken and must be fixed before\n"
- "*** the CQL tests will run correctly.\n"
- "*** The reason for the problem is described in the\n"
- "*** accompanying exception output.\n";
- throw;
- }
-
- hdsptr_ = HostMgr::instance().getHostDataSource();
- hdsptr_->setIPReservationsUnique(true);
- }
-
- /// @brief Destroys the HDS and the schema.
- void destroyTest() {
- try {
- hdsptr_->rollback();
- } catch (...) {
- // Rollback should never fail, as Cassandra doesn't support transactions
- // (commit and rollback are both no-op).
- }
- HostMgr::delAllBackends();
- hdsptr_.reset();
- // If data wipe enabled, delete transient data otherwise destroy the schema
- destroyCqlSchema();
- }
-
- /// @brief Constructor
- ///
- /// Deletes everything from the database and opens it.
- CqlHostDataSourceTest() {
- initializeTest();
- }
-
- /// @brief Destructor
- ///
- /// Rolls back all pending transactions. The deletion of hdsptr_ will close
- /// the database. Then reopen it and delete everything created by the test.
- virtual ~CqlHostDataSourceTest() {
- destroyTest();
- }
-
- /// @brief Reopen the database
- ///
- /// Closes the database and re-open it. Anything committed should be
- /// visible.
- ///
- /// Parameter is ignored for CQL backend as the v4 and v6 hosts share
- /// the same database.
- void reopen(Universe) {
- HostMgr::create();
- HostMgr::addBackend(validCqlConnectionString());
- hdsptr_ = HostMgr::instance().getHostDataSource();
- }
-
- /// @brief Returns number of IPv4 options currently stored in DB.
- virtual int countDBOptions4() {
- int result = 0;
-
- const CqlHostDataSource* cql_host_mgr = dynamic_cast<const CqlHostDataSource*>(&(*hdsptr_));
- ConstHostCollection all = cql_host_mgr->getAllHosts();
-
- for (ConstHostCollection::const_iterator it = all.begin();
- it != all.end(); ++it) {
- ConstCfgOptionPtr cfg_option4 = (*it)->getCfgOption4();
- std::list<std::string> option_spaces4 = cfg_option4->getOptionSpaceNames();
- std::list<std::string> vendor_spaces4 = cfg_option4->getVendorIdsSpaceNames();
- option_spaces4.insert(option_spaces4.end(), vendor_spaces4.begin(),
- vendor_spaces4.end());
- for (const std::string& space : option_spaces4) {
- OptionContainerPtr options = cfg_option4->getAll(space);
- result += options->size();
- }
- }
-
- return (result);
- }
-
- /// @brief Returns number of IPv6 options currently stored in DB.
- virtual int countDBOptions6() {
- int result = 0;
-
- const CqlHostDataSource* cql_host_mgr = dynamic_cast<const CqlHostDataSource*>(&(*hdsptr_));
- ConstHostCollection all = cql_host_mgr->getAllHosts();
-
- for (ConstHostCollection::const_iterator it = all.begin();
- it != all.end(); ++it) {
- ConstCfgOptionPtr cfg_option6 = (*it)->getCfgOption6();
- std::list<std::string> option_spaces6 = cfg_option6->getOptionSpaceNames();
- std::list<std::string> vendor_spaces6 = cfg_option6->getVendorIdsSpaceNames();
- option_spaces6.insert(option_spaces6.end(), vendor_spaces6.begin(),
- vendor_spaces6.end());
- for (const std::string& space : option_spaces6) {
- OptionContainerPtr options = cfg_option6->getAll(space);
- result += options->size();
- }
- }
-
- return (result);
- }
-
- /// @brief Returns number of IPv6 reservations currently stored in DB.
- virtual int countDBReservations6() {
- int result = 0;
-
- const CqlHostDataSource* cql_host_mgr = dynamic_cast<const CqlHostDataSource*>(&(*hdsptr_));
- ConstHostCollection all = cql_host_mgr->getAllHosts();
-
- for (ConstHostCollection::const_iterator it = all.begin();
- it != all.end(); ++it) {
- IPv6ResrvRange reservations = (*it)->getIPv6Reservations();
- result += std::distance(reservations.first, reservations.second);
- }
-
- return (result);
- }
-
-};
-
-/// @brief Check that database can be opened
-///
-/// This test checks if the CqlHostDataSource can be instantiated. This happens
-/// only if the database can be opened. Note that this is not part of the
-/// CqlHostMgr test fixture set. This test checks that the database can be
-/// opened: the fixtures assume that and check basic operations.
-
-TEST(CqlHostDataSource, OpenDatabase) {
-
- // Ensure we have the proper schema with no transient data.
- createCqlSchema();
-
- // Check that host manager opens the database correctly and tidy up. If it
- // fails, print the error message.
- try {
- HostMgr::create();
- EXPECT_NO_THROW(HostMgr::addBackend(validCqlConnectionString()));
- HostMgr::delBackend("cql");
- } catch (const isc::Exception& ex) {
- FAIL() << "*** ERROR: unable to open database, reason:\n"
- << " " << ex.what() << "\n"
- << "*** The test environment is broken and must be fixed\n"
- << "*** before the CQL tests will run correctly.\n";
- }
-
- // Check that host manager opens the database correctly with a longer
- // timeout. If it fails, print the error message.
- try {
- // CQL specifies the timeout values in ms, not seconds. Therefore
- // we need to add extra 000 to the "connect-timeout=10" string.
- string connection_string = validCqlConnectionString() + string(" ") +
- string(VALID_TIMEOUT) + string("000");
- HostMgr::create();
- EXPECT_NO_THROW(HostMgr::addBackend(connection_string));
- HostMgr::delBackend("cql");
- } catch (const isc::Exception& ex) {
- FAIL() << "*** ERROR: unable to open database, reason:\n"
- << " " << ex.what() << "\n"
- << "*** The test environment is broken and must be fixed\n"
- << "*** before the CQL tests will run correctly.\n";
- }
-
- // Check that attempting to get an instance of the host data source when
- // none is set returns empty pointer.
- EXPECT_FALSE(HostMgr::instance().getHostDataSource());
-
- // Check that wrong specification of backend throws an exception.
- // (This is really a check on HostDataSourceFactory, but is convenient to
- // perform here.)
- EXPECT_THROW(HostMgr::addBackend(connectionString(
- NULL, VALID_NAME, VALID_HOST, INVALID_USER, VALID_PASSWORD)),
- InvalidParameter);
- EXPECT_THROW(HostMgr::addBackend(connectionString(
- INVALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, VALID_PASSWORD)),
- InvalidType);
-
- // Check that invalid login data does not cause an exception, CQL should use
- // default values.
- EXPECT_NO_THROW(HostMgr::addBackend(connectionString(CQL_VALID_TYPE,
- INVALID_NAME, VALID_HOST, VALID_USER, VALID_PASSWORD)));
- EXPECT_NO_THROW(HostMgr::addBackend(connectionString(CQL_VALID_TYPE,
- VALID_NAME, INVALID_HOST, VALID_USER, VALID_PASSWORD)));
- EXPECT_NO_THROW(HostMgr::addBackend(connectionString(CQL_VALID_TYPE,
- VALID_NAME, VALID_HOST, INVALID_USER, VALID_PASSWORD)));
- EXPECT_NO_THROW(HostMgr::addBackend(connectionString(CQL_VALID_TYPE,
- VALID_NAME, VALID_HOST, VALID_USER, INVALID_PASSWORD)));
-
- // Check that invalid timeouts throw DbOperationError.
- EXPECT_THROW(HostMgr::addBackend(connectionString(CQL_VALID_TYPE,
- VALID_NAME, VALID_HOST, VALID_USER, VALID_PASSWORD, INVALID_TIMEOUT_1)),
- DbOperationError);
- EXPECT_THROW(HostMgr::addBackend(connectionString(CQL_VALID_TYPE,
- VALID_NAME, VALID_HOST, VALID_USER, VALID_PASSWORD, INVALID_TIMEOUT_2)),
- DbOperationError);
-
- // Check that CQL allows the hostname to not be specified.
- EXPECT_NO_THROW(HostMgr::addBackend(connectionString(CQL_VALID_TYPE,
- NULL, VALID_HOST, INVALID_USER, VALID_PASSWORD)));
-
- // Check that CQL does not support SSL/TLS.
- EXPECT_THROW(HostMgr::addBackend(connectionString(CQL_VALID_TYPE,
- VALID_NAME, VALID_HOST, VALID_USER, VALID_PASSWORD,
- 0, 0, VALID_CERT)),
- DbOpenError);
-
- EXPECT_THROW(HostMgr::addBackend(connectionString(CQL_VALID_TYPE,
- VALID_NAME, VALID_HOST, VALID_USER, VALID_PASSWORD,
- 0, 0, 0, VALID_KEY)),
- DbOpenError);
-
- EXPECT_THROW(HostMgr::addBackend(connectionString(CQL_VALID_TYPE,
- VALID_NAME, VALID_HOST, VALID_USER, VALID_PASSWORD,
- 0, 0, 0, 0, VALID_CA)),
- DbOpenError);
-
- EXPECT_THROW(HostMgr::addBackend(connectionString(CQL_VALID_TYPE,
- VALID_NAME, VALID_HOST, VALID_USER, VALID_PASSWORD,
- 0, 0, 0, 0, 0, VALID_CIPHER)),
- DbOpenError);
-
- // Tidy up after the test
- destroyCqlSchema();
-}
-
-/// @brief Check conversion functions
-///
-/// The server works using cltt and valid_filetime. In the database, the
-/// information is stored as expire_time and valid-lifetime, which are
-/// related by
-///
-/// expire_time = cltt + valid_lifetime
-///
-/// This test checks that the conversion is correct. It does not check that the
-/// data is entered into the database correctly, only that the CQL_TIME
-/// structure used for the entry is correctly set up.
-TEST(CqlConnection, checkTimeConversion) {
- const time_t cltt = time(NULL);
- const uint32_t valid_lft = 86400; // 1 day
- cass_int64_t cql_expire;
-
- // Convert to the database time
- CqlExchange::convertToDatabaseTime(cltt, valid_lft, cql_expire);
-
- // Convert back
- time_t converted_cltt = 0;
- CqlExchange::convertFromDatabaseTime(cql_expire, valid_lft, converted_cltt);
- EXPECT_EQ(cltt, converted_cltt);
-}
-
-// This test verifies that database backend can operate in Read-Only mode.
-// We currently don't test Cassandra in read-only mode.
-TEST_F(CqlHostDataSourceTest, DISABLED_testReadOnlyDatabase) {
- testReadOnlyDatabase(CQL_VALID_TYPE);
-}
-
-// Test verifies if a host reservation can be added and later retrieved by IPv4
-// address. Host uses hw address as identifier.
-TEST_F(CqlHostDataSourceTest, basic4HWAddr) {
- testBasic4(Host::IDENT_HWADDR);
-}
-
-// Verifies that IPv4 host reservation with options can have the global
-// subnet id value
-TEST_F(CqlHostDataSourceTest, globalSubnetId4) {
- testGlobalSubnetId4();
-}
-
-// Verifies that IPv6 host reservation with options can have the global
-// subnet id value
-TEST_F(CqlHostDataSourceTest, globalSubnetId6) {
- testGlobalSubnetId6();
-}
-
-// Verifies that IPv4 host reservation with options can have a max value
-// for dhcp4_subnet id
-TEST_F(CqlHostDataSourceTest, maxSubnetId4) {
- testMaxSubnetId4();
-}
-
-// Verifies that IPv6 host reservation with options can have a max value
-// for dhcp6_subnet id
-TEST_F(CqlHostDataSourceTest, maxSubnetId6) {
- testMaxSubnetId6();
-}
-
-// Verifies that IPv4 host reservations in the same subnet can be retrieved
-TEST_F(CqlHostDataSourceTest, getAll4BySubnet) {
- testGetAll4();
-}
-
-// Verifies that IPv6 host reservations in the same subnet can be retrieved
-TEST_F(CqlHostDataSourceTest, getAll6BySubnet) {
- testGetAll6();
-}
-
-// Verifies that host reservations with the same hostname can be retrieved
-TEST_F(CqlHostDataSourceTest, getAllbyHostname) {
- testGetAllbyHostname();
-}
-
-// Verifies that IPv4 host reservations with the same hostname and in
-// the same subnet can be retrieved
-TEST_F(CqlHostDataSourceTest, getAllbyHostnameSubnet4) {
- testGetAllbyHostnameSubnet4();
-}
-
-// Verifies that IPv6 host reservations with the same hostname and in
-// the same subnet can be retrieved
-TEST_F(CqlHostDataSourceTest, getAllbyHostnameSubnet6) {
- testGetAllbyHostnameSubnet6();
-}
-
-// Verifies that IPv4 host reservations in the same subnet can be retrieved
-// by pages.
-TEST_F(CqlHostDataSourceTest, getPage4) {
- testGetPage4();
-}
-
-// Verifies that IPv6 host reservations in the same subnet can be retrieved
-// by pages.
-TEST_F(CqlHostDataSourceTest, getPage6) {
- testGetPage6();
-}
-
-// Verifies that IPv4 host reservations in the same subnet can be retrieved
-// by pages without truncation from the limit.
-TEST_F(CqlHostDataSourceTest, getPageLimit4) {
- testGetPageLimit4(Host::IDENT_DUID);
-}
-
-// Verifies that IPv6 host reservations in the same subnet can be retrieved
-// by pages without truncation from the limit.
-TEST_F(CqlHostDataSourceTest, getPageLimit6) {
- testGetPageLimit6(Host::IDENT_HWADDR);
-}
-
-// Verifies that IPv4 host reservations in the same subnet can be retrieved
-// by pages even with multiple subnets.
-TEST_F(CqlHostDataSourceTest, getPage4Subnets) {
- testGetPage4Subnets();
-}
-
-// Verifies that IPv6 host reservations in the same subnet can be retrieved
-// by pages even with multiple subnets.
-TEST_F(CqlHostDataSourceTest, getPage6Subnets) {
- testGetPage6Subnets();
-}
-
-// Verifies that all IPv4 host reservations can be retrieved by pages.
-TEST_F(CqlHostDataSourceTest, getPage4All) {
- testGetPage4All();
-}
-
-// Verifies that all IPv6 host reservations can be retrieved by pages.
-TEST_F(CqlHostDataSourceTest, getPage6All) {
- testGetPage6All();
-}
-
-// Test verifies if a host reservation can be added and later retrieved by IPv4
-// address. Host uses client-id (DUID) as identifier.
-TEST_F(CqlHostDataSourceTest, basic4ClientId) {
- testBasic4(Host::IDENT_DUID);
-}
-
-// Test verifies that multiple hosts can be added and later retrieved by their
-// reserved IPv4 address. This test uses HW addresses as identifiers.
-TEST_F(CqlHostDataSourceTest, getByIPv4HWaddr) {
- testGetByIPv4(Host::IDENT_HWADDR);
-}
-
-// Test verifies that multiple hosts can be added and later retrieved by their
-// reserved IPv4 address. This test uses client-id (DUID) as identifiers.
-TEST_F(CqlHostDataSourceTest, getByIPv4ClientId) {
- testGetByIPv4(Host::IDENT_DUID);
-}
-
-// Test verifies if a host reservation can be added and later retrieved by
-// hardware address.
-TEST_F(CqlHostDataSourceTest, get4ByHWaddr) {
- testGet4ByIdentifier(Host::IDENT_HWADDR);
-}
-
-// Test verifies if a host reservation can be added and later retrieved by
-// DUID.
-TEST_F(CqlHostDataSourceTest, get4ByDUID) {
- testGet4ByIdentifier(Host::IDENT_DUID);
-}
-
-// Test verifies if a host reservation can be added and later retrieved by
-// circuit id.
-TEST_F(CqlHostDataSourceTest, get4ByCircuitId) {
- testGet4ByIdentifier(Host::IDENT_CIRCUIT_ID);
-}
-
-// Test verifies if a host reservation can be added and later retrieved by
-// client-id.
-TEST_F(CqlHostDataSourceTest, get4ByClientId) {
- testGet4ByIdentifier(Host::IDENT_CLIENT_ID);
-}
-
-// Test verifies if hardware address and client identifier are not confused.
-TEST_F(CqlHostDataSourceTest, hwaddrNotClientId1) {
- testHWAddrNotClientId();
-}
-
-// Test verifies if hardware address and client identifier are not confused.
-TEST_F(CqlHostDataSourceTest, hwaddrNotClientId2) {
- testClientIdNotHWAddr();
-}
-
-// Test verifies if a host with FQDN hostname can be stored and later retrieved.
-TEST_F(CqlHostDataSourceTest, hostnameFQDN) {
- testHostname("foo.example.org", 1);
-}
-
-// Test verifies if 100 hosts with unique FQDN hostnames can be stored and later
-// retrieved.
-TEST_F(CqlHostDataSourceTest, hostnameFQDN100) {
- testHostname("foo.example.org", 100);
-}
-
-// Test verifies if a host without any hostname specified can be stored and later
-// retrieved.
-TEST_F(CqlHostDataSourceTest, noHostname) {
- testHostname("", 1);
-}
-
-// Test verifies if a host with user context can be stored and later retrieved.
-TEST_F(CqlHostDataSourceTest, usercontext) {
- string comment = "{ \"comment\": \"a host reservation\" }";
- testUserContext(Element::fromJSON(comment));
-}
-
-// Test verifies if the hardware or client-id query can match hardware address.
-TEST_F(CqlHostDataSourceTest, DISABLED_hwaddrOrClientId1) {
- /// @todo: The logic behind ::get4(subnet_id, hwaddr, duid) call needs to
- /// be discussed.
- ///
- /// @todo: Add host reservation with hardware address X, try to retrieve
- /// host for hardware address X or client identifier Y, verify that the
- /// reservation is returned.
-}
-
-// Test verifies if the hardware or client-id query can match client-id.
-TEST_F(CqlHostDataSourceTest, DISABLED_hwaddrOrClientId2) {
- /// @todo: The logic behind ::get4(subnet_id, hwaddr, duid) call needs to
- /// be discussed.
- ///
- /// @todo: Add host reservation with client identifier Y, try to retrieve
- /// host for hardware address X or client identifier Y, verify that the
- /// reservation is returned.
-}
-
-// Test verifies that host with IPv6 address and DUID can be added and
-// later retrieved by IPv6 address.
-TEST_F(CqlHostDataSourceTest, get6AddrWithDuid) {
- testGetByIPv6(Host::IDENT_DUID, false);
-}
-
-// Test verifies that host with IPv6 address and HWAddr can be added and
-// later retrieved by IPv6 address.
-TEST_F(CqlHostDataSourceTest, get6AddrWithHWAddr) {
- testGetByIPv6(Host::IDENT_HWADDR, false);
-}
-
-// Test verifies that host with IPv6 prefix and DUID can be added and
-// later retrieved by IPv6 prefix.
-TEST_F(CqlHostDataSourceTest, get6PrefixWithDuid) {
- testGetByIPv6(Host::IDENT_DUID, true);
-}
-
-// Test verifies that host with IPv6 prefix and HWAddr can be added and
-// later retrieved by IPv6 prefix.
-TEST_F(CqlHostDataSourceTest, get6PrefixWithHWaddr) {
- testGetByIPv6(Host::IDENT_HWADDR, true);
-}
-
-// Test verifies that host with IPv6 prefix reservation can be retrieved
-// by subnet id and prefix value.
-TEST_F(CqlHostDataSourceTest, get6SubnetPrefix) {
- testGetBySubnetIPv6();
-}
-
-// Test verifies if a host reservation can be added and later retrieved by
-// hardware address.
-TEST_F(CqlHostDataSourceTest, get6ByHWaddr) {
- testGet6ByHWAddr();
-}
-
-// Test verifies if a host reservation can be added and later retrieved by
-// client identifier.
-TEST_F(CqlHostDataSourceTest, get6ByClientId) {
- testGet6ByClientId();
-}
-
-// Test verifies if a host reservation can be stored with both IPv6 address and
-// prefix.
-TEST_F(CqlHostDataSourceTest, addr6AndPrefix) {
- testAddr6AndPrefix();
-}
-
-// Tests if host with multiple IPv6 reservations can be added and then
-// retrieved correctly. Test checks reservations comparing.
-TEST_F(CqlHostDataSourceTest, multipleReservations) {
- testMultipleReservations();
-}
-
-// Tests if compareIPv6Reservations() method treats same pool of reservations
-// but added in different order as equal.
-TEST_F(CqlHostDataSourceTest, multipleReservationsDifferentOrder) {
- testMultipleReservationsDifferentOrder();
-}
-
-// Test that multiple client classes for IPv4 can be inserted and
-// retrieved for a given host reservation.
-TEST_F(CqlHostDataSourceTest, multipleClientClasses4) {
- testMultipleClientClasses4();
-}
-
-// Test that multiple client classes for IPv6 can be inserted and
-// retrieved for a given host reservation.
-TEST_F(CqlHostDataSourceTest, multipleClientClasses6) {
- testMultipleClientClasses6();
-}
-
-// Test that multiple client classes for both IPv4 and IPv6 can
-// be inserted and retrieved for a given host reservation.
-TEST_F(CqlHostDataSourceTest, multipleClientClassesBoth) {
- testMultipleClientClassesBoth();
-}
-
-// Test if the same host can have reservations in different subnets (with the
-// same hardware address). The test logic is as follows:
-// Insert 10 host reservations for a given physical host (the same
-// hardware address), but for different subnets (different subnet-ids).
-// Make sure that getAll() returns them all correctly.
-TEST_F(CqlHostDataSourceTest, multipleSubnetsHWAddr) {
- testMultipleSubnets(10, Host::IDENT_HWADDR);
-}
-
-// Test if the same host can have reservations in different subnets (with the
-// same client identifier). The test logic is as follows:
-//
-// Insert 10 host reservations for a given physical host (the same
-// client-identifier), but for different subnets (different subnet-ids).
-// Make sure that getAll() returns them correctly.
-TEST_F(CqlHostDataSourceTest, multipleSubnetsClientId) {
- testMultipleSubnets(10, Host::IDENT_DUID);
-}
-
-// Test if host reservations made for different IPv6 subnets are handled correctly.
-// The test logic is as follows:
-//
-// Insert 10 host reservations for different subnets. Make sure that
-// get6(subnet-id, ...) calls return correct reservation.
-TEST_F(CqlHostDataSourceTest, subnetId6) {
- testSubnetId6(10, Host::IDENT_HWADDR);
-}
-
-// Test if the duplicate host instances can't be inserted. The test logic is as
-// follows: try to add multiple instances of the same host reservation and
-// verify that the second and following attempts will throw exceptions.
-// Hosts with same DUID.
-TEST_F(CqlHostDataSourceTest, addDuplicate6WithDUID) {
- testAddDuplicate6WithSameDUID();
-}
-
-// Test if the duplicate host instances can't be inserted. The test logic is as
-// follows: try to add multiple instances of the same host reservation and
-// verify that the second and following attempts will throw exceptions.
-// Hosts with same HWAddr.
-TEST_F(CqlHostDataSourceTest, addDuplicate6WithHWAddr) {
- testAddDuplicate6WithSameHWAddr();
-}
-
-// Test if the duplicate IPv4 host instances can't be inserted. The test logic is as
-// follows: try to add multiple instances of the same host reservation and
-// verify that the second and following attempts will throw exceptions.
-TEST_F(CqlHostDataSourceTest, addDuplicateIPv4) {
- testAddDuplicateIPv4();
-}
-
-/// @brief Test that the CQL backend does not support using non-unique
-/// IP addresses between multiple reservations.
-TEST_F(CqlHostDataSourceTest, disallowDuplicateIP) {
- testDisallowDuplicateIP();
-}
-
-// This test verifies that DHCPv4 options can be inserted in a binary format
-/// and retrieved from the CQL host database.
-TEST_F(CqlHostDataSourceTest, optionsReservations4) {
- string comment = "{ \"comment\": \"a host reservation\" }";
- testOptionsReservations4(false, Element::fromJSON(comment));
-}
-
-// This test verifies that DHCPv6 options can be inserted in a binary format
-/// and retrieved from the CQL host database.
-TEST_F(CqlHostDataSourceTest, optionsReservations6) {
- string comment = "{ \"comment\": \"a host reservation\" }";
- testOptionsReservations6(false, Element::fromJSON(comment));
-}
-
-// This test verifies that DHCPv4 and DHCPv6 options can be inserted in a
-/// binary format and retrieved with a single query to the database.
-TEST_F(CqlHostDataSourceTest, optionsReservations46) {
- testOptionsReservations46(false);
-}
-
-// This test verifies that DHCPv4 options can be inserted in a textual format
-/// and retrieved from the CQL host database.
-TEST_F(CqlHostDataSourceTest, formattedOptionsReservations4) {
- string comment = "{ \"comment\": \"a host reservation\" }";
- testOptionsReservations4(true, Element::fromJSON(comment));
-}
-
-// This test verifies that DHCPv6 options can be inserted in a textual format
-/// and retrieved from the CQL host database.
-TEST_F(CqlHostDataSourceTest, formattedOptionsReservations6) {
- string comment = "{ \"comment\": \"a host reservation\" }";
- testOptionsReservations6(true, Element::fromJSON(comment));
-}
-
-// This test verifies that DHCPv4 and DHCPv6 options can be inserted in a
-// textual format and retrieved with a single query to the database.
-TEST_F(CqlHostDataSourceTest, formattedOptionsReservations46) {
- testOptionsReservations46(true);
-}
-
-// This test checks transactional insertion of the host information
-// into the database. The failure to insert host information at
-// any stage should cause the whole transaction to be rolled back.
-TEST_F(CqlHostDataSourceTest, testAddRollback) {
- // Make sure we have the pointer to the host data source.
- ASSERT_TRUE(hdsptr_);
-
- // To test the transaction rollback mechanism we need to cause the
- // insertion of host information to fail at some stage. The 'hosts'
- // table should be updated correctly but the failure should occur
- // when inserting reservations or options. The simplest way to
- // achieve that is to simply drop one of the tables. To do so, we
- // connect to the database and issue a DROP query.
- CqlConnection::ParameterMap params;
- params["name"] = "keatest";
- params["user"] = "keatest";
- params["password"] = "keatest";
- CqlConnection conn(params);
- ASSERT_NO_THROW(conn.openDatabase());
-
- // Drop every table so we make sure hosts doesn't exist anymore.
- destroyCqlSchema(false, true);
-
- // Create a host with a reservation.
- HostPtr host = HostDataSourceUtils::initializeHost6("2001:db8:1::1",
- Host::IDENT_HWADDR, false, "randomKey");
- // Let's assign some DHCPv4 subnet to the host, because we will use the
- // DHCPv4 subnet to try to retrieve the host after failed insertion.
- host->setIPv4SubnetID(SubnetID(4));
-
- // There is no ipv6_reservations table, so the insertion should fail.
- ASSERT_THROW(hdsptr_->add(host), DbOperationError);
-
- // Even though we have created a DHCPv6 host, we can't use get6()
- // method to retrieve the host from the database, because the
- // query would expect that the ipv6_reservations table is present.
- // Therefore, the query would fail. Instead, we use the get4 method
- // which uses the same client identifier, but doesn't attempt to
- // retrieve the data from ipv6_reservations table. The query should
- // pass but return no host because the (insert) transaction is expected
- // to be rolled back.
- ASSERT_THROW(hdsptr_->get4(host->getIPv4SubnetID(),
- host->getIdentifierType(),
- &host->getIdentifier()[0],
- host->getIdentifier().size()),
- DbOperationError);
-}
-
-TEST_F(CqlHostDataSourceTest, DISABLED_stressTest) {
- // Run with 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4092, 8192,
- // 16384 & 32768 hosts.
- for (unsigned int i = 0X0001U; i < 0xfffdU; i <<= 1) {
- initializeTest();
- stressTest(i);
- destroyTest();
- }
-}
-
-// This test checks that siaddr, sname, file fields can be retrieved
-/// from a database for a host.
-TEST_F(CqlHostDataSourceTest, messageFields) {
- testMessageFields4();
-}
-
-// Check that delete(subnet-id, addr4) works.
-TEST_F(CqlHostDataSourceTest, deleteByAddr4) {
- testDeleteByAddr4();
-}
-
-// Check that delete(subnet4-id, identifier-type, identifier) works.
-TEST_F(CqlHostDataSourceTest, deleteById4) {
- testDeleteById4();
-}
-
-// Check that delete(subnet4-id, identifier-type, identifier) works,
-// even when options are present.
-TEST_F(CqlHostDataSourceTest, deleteById4Options) {
- testDeleteById4Options();
-}
-
-// Check that delete(subnet6-id, identifier-type, identifier) works.
-TEST_F(CqlHostDataSourceTest, deleteById6) {
- testDeleteById6();
-}
-
-// Check that delete(subnet6-id, identifier-type, identifier) works,
-// even when options are present.
-TEST_F(CqlHostDataSourceTest, deleteById6Options) {
- testDeleteById6Options();
-}
-
-// Tests that multiple reservations without IPv4 addresses can be
-// specified within a subnet.
-TEST_F(CqlHostDataSourceTest, testMultipleHostsNoAddress4) {
- testMultipleHostsNoAddress4();
-}
-
-// Tests that multiple hosts can be specified within an IPv6 subnet.
-TEST_F(CqlHostDataSourceTest, testMultipleHosts6) {
- testMultipleHosts6();
-}
-
-/// @brief Test fixture class for validating @c HostMgr using
-/// CQL as alternate host data source.
-class CQLHostMgrTest : public HostMgrTest {
-protected:
-
- /// @brief Build CQL schema for a test.
- virtual void SetUp();
-
- /// @brief Rollback and drop CQL schema after the test.
- virtual void TearDown();
-};
-
-void
-CQLHostMgrTest::SetUp() {
- HostMgrTest::SetUp();
-
- // Ensure we have the proper schema with no transient data.
- db::test::createCqlSchema();
-
- // Connect to the database
- try {
- HostMgr::addBackend(db::test::validCqlConnectionString());
- } catch (...) {
- std::cerr << "*** ERROR: unable to open database. The test\n"
- "*** environment is broken and must be fixed before\n"
- "*** the CQL tests will run correctly.\n"
- "*** The reason for the problem is described in the\n"
- "*** accompanying exception output.\n";
- throw;
- }
-}
-
-void
-CQLHostMgrTest::TearDown() {
- HostMgr::instance().getHostDataSource()->rollback();
- HostMgr::delBackend("cql");
-
- // If data wipe enabled, delete transient data otherwise destroy the schema
- db::test::destroyCqlSchema();
-}
-
-// This test verifies that reservations for a particular client can
-// be retrieved from the configuration file and a database simultaneously.
-TEST_F(CQLHostMgrTest, getAll) {
- testGetAll(*getCfgHosts(), HostMgr::instance());
-}
-
-// This test verifies that reservations for a particular subnet can
-// be retrieved from the configuration file and a database simultaneously.
-TEST_F(CQLHostMgrTest, getAll4BySubnet) {
- testGetAll4BySubnet(*getCfgHosts(), HostMgr::instance());
-}
-
-// This test verifies that reservations for a particular subnet can
-// be retrieved from the configuration file and a database simultaneously.
-TEST_F(CQLHostMgrTest, getAll6BySubnet) {
- testGetAll6BySubnet(*getCfgHosts(), HostMgr::instance());
-}
-
-// This test verifies that reservations for a particular hostname can be
-// retrieved from the configuration file and a database simultaneously.
-TEST_F(CQLHostMgrTest, getAllbyHostname) {
- testGetAllbyHostname(*getCfgHosts(), HostMgr::instance());
-}
-
-// This test verifies that reservations for a particular hostname and
-// DHCPv4 subnet can be retrieved from the configuration file and a
-// database simultaneously.
-TEST_F(CQLHostMgrTest, getAllbyHostnameSubnet4) {
- testGetAllbyHostnameSubnet4(*getCfgHosts(), HostMgr::instance());
-}
-
-// This test verifies that reservations for a particular hostname and
-// DHCPv6 subnet can be retrieved from the configuration file and a
-// database simultaneously.
-TEST_F(CQLHostMgrTest, getAllbyHostnameSubnet6) {
- testGetAllbyHostnameSubnet6(*getCfgHosts(), HostMgr::instance());
-}
-
-// This test verifies that reservations for a particular subnet can
-// be retrieved by pages from the configuration file and a database
-// simultaneously.
-TEST_F(CQLHostMgrTest, getPage4) {
- testGetPage4(true);
-}
-
-// This test verifies that all v4 reservations be retrieved by pages
-// from the configuration file and a database simultaneously.
-TEST_F(CQLHostMgrTest, getPage4All) {
- testGetPage4All(true);
-}
-
-// This test verifies that reservations for a particular subnet can
-// be retrieved by pages from the configuration file and a database
-// simultaneously.
-TEST_F(CQLHostMgrTest, getPage6) {
- testGetPage6(true);
-}
-
-// This test verifies that all v6 reservations be retrieved by pages
-// from the configuration file and a database simultaneously.
-TEST_F(CQLHostMgrTest, getPage6All) {
- testGetPage6All(true);
-}
-
-// This test verifies that IPv4 reservations for a particular client can
-// be retrieved from the configuration file and a database simultaneously.
-TEST_F(CQLHostMgrTest, getAll4) {
- testGetAll4(*getCfgHosts(), HostMgr::instance());
-}
-
-// This test verifies that the IPv4 reservation can be retrieved from a
-// database.
-TEST_F(CQLHostMgrTest, get4) {
- testGet4(HostMgr::instance());
-}
-
-// This test verifies that the IPv6 reservation can be retrieved from a
-// database.
-TEST_F(CQLHostMgrTest, get6) {
- testGet6(HostMgr::instance());
-}
-
-// This test verifies that the IPv6 prefix reservation can be retrieved
-// from a configuration file and a database.
-TEST_F(CQLHostMgrTest, get6ByPrefix) {
- testGet6ByPrefix(*getCfgHosts(), HostMgr::instance());
-}
-
-// This test verifies that it is possible to control whether the reserved
-// IP addresses are unique or non unique via the HostMgr.
-TEST_F(CQLHostMgrTest, setIPReservationsUnique) {
- EXPECT_TRUE(HostMgr::instance().setIPReservationsUnique(true));
- // This is currently not supported for Cassandra.
- EXPECT_FALSE(HostMgr::instance().setIPReservationsUnique(false));
-}
-
-} // namespace
diff --git a/src/lib/dhcpsrv/tests/cql_lease_mgr_unittest.cc b/src/lib/dhcpsrv/tests/cql_lease_mgr_unittest.cc
deleted file mode 100644
index 6815367b9f..0000000000
--- a/src/lib/dhcpsrv/tests/cql_lease_mgr_unittest.cc
+++ /dev/null
@@ -1,892 +0,0 @@
-// Copyright (C) 2016-2022 Internet Systems Consortium, Inc. ("ISC")
-// Copyright (C) 2015-2017 Deutsche Telekom AG.
-//
-// Authors: Razvan Becheriu <razvan.becheriu@qualitance.com>
-// Andrei Pavel <andrei.pavel@qualitance.com>
-//
-// 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 <config.h>
-
-#include <asiolink/io_address.h>
-#include <cql/cql_connection.h>
-#include <cql/testutils/cql_schema.h>
-#include <dhcpsrv/lease_mgr_factory.h>
-#include <dhcpsrv/cql_lease_mgr.h>
-#include <dhcpsrv/testutils/test_utils.h>
-#include <dhcpsrv/tests/generic_lease_mgr_unittest.h>
-#include <exceptions/exceptions.h>
-
-#include <gtest/gtest.h>
-
-#include <algorithm>
-#include <iostream>
-#include <sstream>
-#include <string>
-#include <utility>
-
-using namespace isc;
-using namespace isc::asiolink;
-using namespace isc::db;
-using namespace isc::db::test;
-using namespace isc::dhcp;
-using namespace isc::dhcp::test;
-using namespace std;
-
-namespace {
-
-
-/// @brief Test fixture class for testing Cassandra Lease Manager
-///
-/// Opens the database prior to each test and closes it afterwards.
-/// All pending transactions are deleted prior to closure.
-
-class CqlLeaseMgrTest : public GenericLeaseMgrTest {
-public:
- /// @brief Clears the database and opens connection to it.
- void initializeTest() {
- // Ensure we have the proper schema with no transient data.
- createCqlSchema();
-
- // Connect to the database
- try {
- LeaseMgrFactory::create(validCqlConnectionString());
- } catch (...) {
- std::cerr << "*** ERROR: unable to open database. The test\n"
- "*** environment is broken and must be fixed before\n"
- "*** the CQL tests will run correctly.\n"
- "*** The reason for the problem is described in the\n"
- "*** accompanying exception output.\n";
- throw;
- }
-
- lmptr_ = &(LeaseMgrFactory::instance());
- }
-
- /// @brief Destroys the LM and the schema.
- void destroyTest() {
- try {
- lmptr_->rollback();
- } catch (...) {
- // Rollback may fail if backend is in read only mode. That's ok.
- }
- LeaseMgrFactory::destroy();
- // If data wipe enabled, delete transient data otherwise destroy the schema
- destroyCqlSchema();
- }
-
- /// @brief Constructor
- ///
- /// Deletes everything from the database and opens it.
- CqlLeaseMgrTest() {
- initializeTest();
- }
-
- /// @brief Destructor
- ///
- /// Rolls back all pending transactions. The deletion of lmptr_ will close
- /// the database. Then reopen it and delete everything created by the test.
- virtual ~CqlLeaseMgrTest() {
- destroyTest();
- }
-
- /// @brief Reopen the database
- ///
- /// Closes the database and re-open it. Anything committed should be
- /// visible.
- ///
- /// Parameter is ignored for CQL backend as the v4 and v6 leases share
- /// the same database.
- void reopen(Universe) {
- LeaseMgrFactory::destroy();
- LeaseMgrFactory::create(validCqlConnectionString());
- lmptr_ = &(LeaseMgrFactory::instance());
- }
-
- // This is the CQL implementation for
- // GenericLeaseMgrTest::testGetExpiredLeases4().
- // The GenericLeaseMgrTest implementation checks for the order of expired
- // leases to be from the most expired to the least expired. Cassandra
- // doesn't support ORDER BY without imposing a EQ / IN restriction on the
- // columns. Because of that, the order check has been excluded.
- void testCqlGetExpiredLeases4() {
- // Get the leases to be used for the test.
- std::vector<Lease4Ptr> leases = createLeases4();
- // Make sure we have at least 6 leases there.
- ASSERT_GE(leases.size(), 6u);
-
- // Use the same current time for all leases.
- time_t current_time = time(0);
-
- // Add them to the database
- for (size_t i = 0u; i < leases.size(); ++i) {
- // Mark every other lease as expired.
- if (i % 2u == 0u) {
- // Set client last transmission time to the value older than the
- // valid lifetime to make it expired. The expiration time also
- // depends on the lease index, so as we can later check that the
- // leases are ordered by the expiration time.
- leases[i]->cltt_ =
- current_time - leases[i]->valid_lft_ - 10 - i;
- } else {
- // Set current time as cltt for remaining leases. These leases
- // are
- // not expired.
- leases[i]->cltt_ = current_time;
- }
- ASSERT_TRUE(lmptr_->addLease(leases[i]));
- }
-
- // Retrieve at most 1000 expired leases.
- Lease4Collection expired_leases;
- ASSERT_NO_THROW(lmptr_->getExpiredLeases4(expired_leases, 1000));
-
- // Leases with even indexes should be returned as expired.
- ASSERT_EQ(static_cast<size_t>(leases.size() / 2u),
- expired_leases.size());
-
- // Update current time for the next test.
- current_time = time(0);
- // Also, remove expired leases collected during the previous test.
- expired_leases.clear();
-
- // This time let's reverse the expiration time and see if they will be
- // returned
- // in the correct order.
- for (size_t i = 0u; i < leases.size(); ++i) {
- // Update the time of expired leases with even indexes.
- if (i % 2u == 0u) {
- leases[i]->cltt_ =
- current_time - leases[i]->valid_lft_ - 1000 + i;
- } else {
- // Make sure remaining leases remain unexpired.
- leases[i]->cltt_ = current_time + 100;
- }
- ASSERT_NO_THROW(lmptr_->updateLease4(leases[i]));
- }
-
- // Retrieve expired leases again. The limit of 0 means return all
- // expired leases.
- ASSERT_NO_THROW(lmptr_->getExpiredLeases4(expired_leases, 0));
-
- // The same leases should be returned.
- ASSERT_EQ(static_cast<size_t>(leases.size() / 2u),
- expired_leases.size());
-
- // Remember expired leases returned.
- std::vector<Lease4Ptr> saved_expired_leases = expired_leases;
-
- // Remove expired leases again.
- expired_leases.clear();
-
- // Limit the number of leases to be returned to 2.
- ASSERT_NO_THROW(lmptr_->getExpiredLeases4(expired_leases, 2));
-
- // Make sure we have exactly 2 leases returned.
- ASSERT_EQ(2u, expired_leases.size());
-
- // Mark every other expired lease as reclaimed.
- for (size_t i = 0u; i < saved_expired_leases.size(); ++i) {
- if (i % 2u != 0u) {
- saved_expired_leases[i]->state_ =
- Lease::STATE_EXPIRED_RECLAIMED;
- }
- ASSERT_NO_THROW(lmptr_->updateLease4(saved_expired_leases[i]));
- }
-
- expired_leases.clear();
-
- // This the returned leases should exclude reclaimed ones. So the number
- // of returned leases should be roughly half of the expired leases.
- ASSERT_NO_THROW(lmptr_->getExpiredLeases4(expired_leases, 0u));
- ASSERT_EQ(static_cast<size_t>(saved_expired_leases.size() / 2u),
- expired_leases.size());
-
- // Make sure that returned leases are those that are not reclaimed, i.e.
- // those that have even index.
- for (Lease4Collection::iterator lease = expired_leases.begin();
- lease != expired_leases.end(); ++lease) {
- int32_t index = static_cast<int32_t>(
- std::distance(expired_leases.begin(), lease));
- EXPECT_EQ(saved_expired_leases[2 * index]->addr_, (*lease)->addr_);
- }
- }
-
- // This is the CQL implementation for
- // GenericLeaseMgrTest::testGetExpiredLeases6().
- // The GenericLeaseMgrTest implementation checks for the order of expired
- // leases to be from the most expired to the least expired. Cassandra
- // doesn't support ORDER BY without imposing a EQ / IN restriction on the
- // columns. Because of that, the order check has been excluded.
- void testCqlGetExpiredLeases6() {
- // Get the leases to be used for the test.
- std::vector<Lease6Ptr> leases = createLeases6();
- // Make sure we have at least 6 leases there.
- ASSERT_GE(leases.size(), 6u);
-
- // Use the same current time for all leases.
- time_t current_time = time(0);
-
- // Add them to the database
- for (size_t i = 0u; i < leases.size(); ++i) {
- // Mark every other lease as expired.
- if (i % 2u == 0u) {
- // Set client last transmission time to the value older than the
- // valid lifetime to make it expired. The expiration time also
- // depends on the lease index, so as we can later check that the
- // leases are ordered by the expiration time.
- leases[i]->cltt_ =
- current_time - leases[i]->valid_lft_ - 10 - i;
- } else {
- // Set current time as cltt for remaining leases. These leases
- // are
- // not expired.
- leases[i]->cltt_ = current_time;
- }
- ASSERT_TRUE(lmptr_->addLease(leases[i]));
- }
-
- // Retrieve at most 1000 expired leases.
- Lease6Collection expired_leases;
- ASSERT_NO_THROW(lmptr_->getExpiredLeases6(expired_leases, 1000));
-
- // Leases with even indexes should be returned as expired.
- ASSERT_EQ(static_cast<size_t>(leases.size() / 2u),
- expired_leases.size());
-
- // Update current time for the next test.
- current_time = time(0);
- // Also, remove expired leases collected during the previous test.
- expired_leases.clear();
-
- // This time let's reverse the expiration time and see if they will be
- // returned
- // in the correct order.
- for (size_t i = 0u; i < leases.size(); ++i) {
- // Update the time of expired leases with even indexes.
- if (i % 2u == 0u) {
- leases[i]->cltt_ =
- current_time - leases[i]->valid_lft_ - 1000 + i;
- } else {
- // Make sure remaining leases remain unexpired.
- leases[i]->cltt_ = current_time + 100;
- }
- ASSERT_NO_THROW(lmptr_->updateLease6(leases[i]));
- }
-
- // Retrieve expired leases again. The limit of 0 means return all
- // expired leases.
- ASSERT_NO_THROW(lmptr_->getExpiredLeases6(expired_leases, 0));
-
- // The same leases should be returned.
- ASSERT_EQ(static_cast<size_t>(leases.size() / 2u),
- expired_leases.size());
-
- // Remember expired leases returned.
- std::vector<Lease6Ptr> saved_expired_leases = expired_leases;
-
- // Remove expired leases again.
- expired_leases.clear();
-
- // Limit the number of leases to be returned to 2.
- ASSERT_NO_THROW(lmptr_->getExpiredLeases6(expired_leases, 2));
-
- // Make sure we have exactly 2 leases returned.
- ASSERT_EQ(2u, expired_leases.size());
-
- // Mark every other expired lease as reclaimed.
- for (size_t i = 0u; i < saved_expired_leases.size(); ++i) {
- if (i % 2u != 0u) {
- saved_expired_leases[i]->state_ =
- Lease::STATE_EXPIRED_RECLAIMED;
- }
- ASSERT_NO_THROW(lmptr_->updateLease6(saved_expired_leases[i]));
- }
-
- expired_leases.clear();
-
- // This the returned leases should exclude reclaimed ones. So the number
- // of returned leases should be roughly half of the expired leases.
- ASSERT_NO_THROW(lmptr_->getExpiredLeases6(expired_leases, 0));
-
- // Make sure that returned leases are those that are not reclaimed, i.e.
- // those that have even index.
- for (Lease6Collection::iterator lease = expired_leases.begin();
- lease != expired_leases.end(); ++lease) {
- int32_t index = static_cast<int32_t>(
- std::distance(expired_leases.begin(), lease));
- EXPECT_EQ(saved_expired_leases[2 * index]->addr_, (*lease)->addr_);
- }
- }
-};
-
-/// @brief Check that database can be opened
-///
-/// This test checks if the CqlLeaseMgr can be instantiated. This happens
-/// only if the database can be opened. Note that this is not part of the
-/// CqlLeaseMgr test fixture set. This test checks that the database can be
-/// opened: the fixtures assume that and check basic operations.
-TEST(CqlOpenTest, OpenDatabase) {
-
- // Schema needs to be created for the test to work.
- createCqlSchema();
-
- // Check that lease manager opens the database correctly and tidy up. If it
- // fails, print the error message.
- try {
- LeaseMgrFactory::create(validCqlConnectionString());
- EXPECT_NO_THROW((void)LeaseMgrFactory::instance());
- LeaseMgrFactory::destroy();
- } catch (const isc::Exception& ex) {
- FAIL() << "*** ERROR: unable to open database, reason:\n"
- << " " << ex.what() << "\n"
- << "*** The test environment is broken and must be fixed\n"
- << "*** before the CQL tests will run correctly.\n";
- }
-
- // Check that lease manager opens the database correctly with a longer
- // timeout. If it fails, print the error message.
- try {
- // CQL specifies the timeout values in ms, not seconds. Therefore
- // we need to add extra 000 to the "connect-timeout=10" string.
- string connection_string = validCqlConnectionString() + string(" ") +
- string(VALID_TIMEOUT) + "000";
- LeaseMgrFactory::create(connection_string);
- EXPECT_NO_THROW((void) LeaseMgrFactory::instance());
- LeaseMgrFactory::destroy();
- } catch (const isc::Exception& ex) {
- FAIL() << "*** ERROR: unable to open database, reason:\n"
- << " " << ex.what() << "\n"
- << "*** The test environment is broken and must be fixed\n"
- << "*** before the CQL tests will run correctly.\n";
- }
-
- // Check that attempting to get an instance of the lease manager when
- // none is set throws an exception.
- EXPECT_THROW(LeaseMgrFactory::instance(), NoLeaseManager);
-
- // Check that wrong specification of backend throws an exception.
- // (This is really a check on LeaseMgrFactory, but is convenient to
- // perform here.)
- EXPECT_THROW(LeaseMgrFactory::create(connectionString(
- 0, VALID_NAME, VALID_HOST, INVALID_USER, VALID_PASSWORD)),
- InvalidParameter);
-
- EXPECT_THROW(LeaseMgrFactory::create(connectionString(
- INVALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, VALID_PASSWORD)),
- InvalidType);
-
- // Check that invalid login data does not cause an exception, CQL should use
- // default values.
- EXPECT_NO_THROW(LeaseMgrFactory::create(connectionString(
- CQL_VALID_TYPE, INVALID_NAME, VALID_HOST, VALID_USER, VALID_PASSWORD)));
-
- EXPECT_NO_THROW(LeaseMgrFactory::create(connectionString(
- CQL_VALID_TYPE, VALID_NAME, INVALID_HOST, VALID_USER, VALID_PASSWORD)));
-
- EXPECT_NO_THROW(LeaseMgrFactory::create(connectionString(
- CQL_VALID_TYPE, VALID_NAME, VALID_HOST, INVALID_USER, VALID_PASSWORD)));
-
- EXPECT_NO_THROW(LeaseMgrFactory::create(connectionString(
- CQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, INVALID_PASSWORD)));
-
- // Check for invalid timeouts
- EXPECT_THROW(LeaseMgrFactory::create(connectionString(
- CQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, VALID_PASSWORD, INVALID_TIMEOUT_1)),
- DbOperationError);
-
- EXPECT_THROW(LeaseMgrFactory::create(connectionString(
- CQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, VALID_PASSWORD, INVALID_TIMEOUT_2)),
- DbOperationError);
-
- // Check for missing parameters
- EXPECT_NO_THROW(LeaseMgrFactory::create(connectionString(
- CQL_VALID_TYPE, 0, VALID_HOST, INVALID_USER, VALID_PASSWORD)));
-
- // Check that invalid login data does not cause an exception, CQL should use
- // default values.
- EXPECT_NO_THROW(LeaseMgrFactory::create(connectionString(
- CQL_VALID_TYPE, INVALID_NAME, VALID_HOST, VALID_USER, VALID_PASSWORD)));
-
- EXPECT_NO_THROW(LeaseMgrFactory::create(connectionString(
- CQL_VALID_TYPE, VALID_NAME, INVALID_HOST, VALID_USER, VALID_PASSWORD)));
-
- EXPECT_NO_THROW(LeaseMgrFactory::create(connectionString(
- CQL_VALID_TYPE, VALID_NAME, VALID_HOST, INVALID_USER, VALID_PASSWORD)));
-
- EXPECT_NO_THROW(LeaseMgrFactory::create(connectionString(
- CQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, INVALID_PASSWORD)));
-
- // Check that invalid timeouts throw DbOperationError.
- EXPECT_THROW(LeaseMgrFactory::create(connectionString(
- CQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, VALID_PASSWORD,
- INVALID_TIMEOUT_1)),
- DbOperationError);
- EXPECT_THROW(LeaseMgrFactory::create(connectionString(
- CQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, VALID_PASSWORD,
- INVALID_TIMEOUT_2)),
- DbOperationError);
-
- // Check that CQL allows the hostname to not be specified.
- EXPECT_NO_THROW(LeaseMgrFactory::create(connectionString(
- CQL_VALID_TYPE, 0, VALID_HOST, INVALID_USER, VALID_PASSWORD)));
-
- // Check that CQL does not support SSL/TLS.
- EXPECT_THROW(LeaseMgrFactory::create(connectionString(
- CQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, VALID_PASSWORD,
- 0, 0, VALID_CERT)),
- DbOpenError);
-
- EXPECT_THROW(LeaseMgrFactory::create(connectionString(
- CQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, VALID_PASSWORD,
- 0, 0, 0, VALID_KEY)),
- DbOpenError);
-
- EXPECT_THROW(LeaseMgrFactory::create(connectionString(
- CQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, VALID_PASSWORD,
- 0, 0, 0, 0, VALID_CA)),
- DbOpenError);
-
- EXPECT_THROW(LeaseMgrFactory::create(connectionString(
- CQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, VALID_PASSWORD,
- 0, 0, 0, 0, 0, VALID_CIPHER)),
- DbOpenError);
-
- // Tidy up after the test
- destroyCqlSchema();
- LeaseMgrFactory::destroy();
-}
-
-/// @brief Check the getType() method
-///
-/// getType() returns a string giving the type of the backend, which should
-/// always be "cql".
-TEST_F(CqlLeaseMgrTest, getType) {
- EXPECT_EQ(std::string("cql"), lmptr_->getType());
-}
-
-/// @brief Check conversion functions
-///
-/// The server works using cltt and valid_filetime. In the database, the
-/// information is stored as expire_time and valid-lifetime, which are
-/// related by
-///
-/// expire_time = cltt + valid_lifetime
-///
-/// This test checks that the conversion is correct.
-TEST_F(CqlLeaseMgrTest, checkTimeConversion) {
- const time_t cltt = time(0);
- const uint32_t valid_lft = 86400; // 1 day
- cass_int64_t cql_expire;
-
- // Convert to the database time.
- CqlExchange::convertToDatabaseTime(cltt, valid_lft, cql_expire);
-
- // Convert back
- time_t converted_cltt = 0;
- CqlExchange::convertFromDatabaseTime(cql_expire, valid_lft, converted_cltt);
- EXPECT_EQ(cltt, converted_cltt);
-}
-
-/// @brief Check getName() returns correct database name
-TEST_F(CqlLeaseMgrTest, getName) {
- EXPECT_EQ(std::string("keatest"), lmptr_->getName());
-}
-
-/// @brief Check that getVersion() returns the expected version
-TEST_F(CqlLeaseMgrTest, checkVersion) {
- // Check version
- pair<uint32_t, uint32_t> version;
- ASSERT_NO_THROW(version = lmptr_->getVersion());
- EXPECT_EQ(CQL_SCHEMA_VERSION_MAJOR, version.first);
- EXPECT_EQ(CQL_SCHEMA_VERSION_MINOR, version.second);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-/// LEASE4 /////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////////
-
-/// @brief Basic Lease4 Checks
-///
-/// Checks that the addLease, getLease4 (by address) and deleteLease (with an
-/// IPv4 address) works.
-TEST_F(CqlLeaseMgrTest, basicLease4) {
- testBasicLease4();
-}
-
-/// @brief checks that infinite lifetimes do not overflow.
-TEST_F(CqlLeaseMgrTest, infiniteLifeTime4) {
- testInfiniteLifeTime4();
-}
-
-/// @brief Lease4 update tests
-///
-/// Checks that we are able to update a lease in the database.
-TEST_F(CqlLeaseMgrTest, updateLease4) {
- testUpdateLease4();
-}
-
-/// @brief Lease4 concurrent update tests
-///
-/// Checks that we are not able to concurrently update a lease in the database.
-TEST_F(CqlLeaseMgrTest, concurrentUpdateLease4) {
- testConcurrentUpdateLease4();
-}
-
-/// @brief Check GetLease4 methods - access by Hardware Address
-TEST_F(CqlLeaseMgrTest, getLease4HWAddr1) {
- testGetLease4HWAddr1();
-}
-
-/// @brief Check GetLease4 methods - access by Hardware Address
-TEST_F(CqlLeaseMgrTest, getLease4HWAddr2) {
- testGetLease4HWAddr2();
-}
-
-/// @brief Get lease4 by hardware address (2)
-///
-/// Check that the system can cope with getting a hardware address of
-/// any size.
-TEST_F(CqlLeaseMgrTest, getLease4HWAddrSize) {
- testGetLease4HWAddrSize();
-}
-
-/// @brief Check GetLease4 methods - access by Hardware Address & Subnet ID
-///
-/// Adds leases to the database and checks that they can be accessed via
-/// a combination of hardware address and subnet ID
-TEST_F(CqlLeaseMgrTest, getLease4HwaddrSubnetId) {
- testGetLease4HWAddrSubnetId();
-}
-
-/// @brief Get lease4 by hardware address and subnet ID (2)
-///
-/// Check that the system can cope with getting a hardware address of
-/// any size.
-TEST_F(CqlLeaseMgrTest, getLease4HWAddrSubnetIdSize) {
- testGetLease4HWAddrSubnetIdSize();
-}
-
-/// @brief This test was derived from memfile.
-TEST_F(CqlLeaseMgrTest, getLease4ClientId) {
- testGetLease4ClientId();
-}
-
-/// @brief Check GetLease4 methods - access by Client ID
-///
-/// Adds leases to the database and checks that they can be accessed via
-/// the Client ID.
-TEST_F(CqlLeaseMgrTest, getLease4ClientId2) {
- testGetLease4ClientId2();
-}
-
-/// @brief Get Lease4 by client ID (2)
-///
-/// Check that the system can cope with a client ID of any size.
-TEST_F(CqlLeaseMgrTest, getLease4ClientIdSize) {
- testGetLease4ClientIdSize();
-}
-
-/// @brief Check GetLease4 methods - access by Client ID & Subnet ID
-///
-/// Adds leases to the database and checks that they can be accessed via
-/// a combination of client and subnet IDs.
-TEST_F(CqlLeaseMgrTest, getLease4ClientIdSubnetId) {
- testGetLease4ClientIdSubnetId();
-}
-
-
-/// @brief This test checks that all IPv4 leases for a specified subnet id are returned.
-TEST_F(CqlLeaseMgrTest, getLeases4SubnetId) {
- testGetLeases4SubnetId();
-}
-
-
-/// @brief This test checks that all IPv4 leases with a specified hostname are returned.
-TEST_F(CqlLeaseMgrTest, getLeases4Hostname) {
- testGetLeases4Hostname();
-}
-
-
-/// @brief This test checks that all IPv4 leases are returned.
-TEST_F(CqlLeaseMgrTest, getLeases4) {
- testGetLeases4();
-}
-
-/// @brief Test that a range of IPv4 leases is returned with paging.
-TEST_F(CqlLeaseMgrTest, getLeases4Paged) {
- testGetLeases4Paged();
-}
-
-/// @brief This test checks that all IPv6 leases for a specified subnet id are returned.
-/// @todo: uncomment this once getLeases6SubnetId is implemented
-/// for Cassandra (see #1086)
-TEST_F(CqlLeaseMgrTest, DISABLED_getLeases6SubnetId) {
- testGetLeases6SubnetId();
-}
-
-/// @brief This test checks that all IPv6 leases with a specified hostname are returned.
-TEST_F(CqlLeaseMgrTest, getLeases6Hostname) {
- testGetLeases6Hostname();
-}
-
-/// @brief This test checks that all IPv6 leases are returned.
-/// @todo: uncomment this once getLeases6 is implemented
-/// for Cassandra (see #1086)
-TEST_F(CqlLeaseMgrTest, DISABLED_getLeases6) {
- testGetLeases6();
-}
-
-/// @brief Test that a range of IPv6 leases is returned with paging.
-TEST_F(CqlLeaseMgrTest, getLeases6Paged) {
- testGetLeases6Paged();
-}
-
-/// @brief Basic Lease4 Checks
-///
-/// Checks that the addLease, getLease4(by address), getLease4(hwaddr,subnet_id),
-/// updateLease4() and deleteLease can handle null client-id.
-/// (client-id is optional and may not be present)
-TEST_F(CqlLeaseMgrTest, lease4NullClientId) {
- testLease4NullClientId();
-}
-
-/// @brief Verify that too long hostname for Lease4 is not accepted.
-///
-/// Checks that the it is not possible to create a lease when the hostname
-/// length exceeds 255 characters.
-TEST_F(CqlLeaseMgrTest, lease4InvalidHostname) {
- testLease4InvalidHostname();
-}
-
-/// @brief Check that the expired DHCPv4 leases can be retrieved.
-///
-/// This test adds a number of leases to the lease database and marks
-/// some of them as expired. Then it queries for expired leases and checks
-/// whether only expired leases are returned, and that they are returned in
-/// the order from most to least expired. It also checks that the lease
-/// which is marked as 'reclaimed' is not returned.
-TEST_F(CqlLeaseMgrTest, getExpiredLeases4) {
- testCqlGetExpiredLeases4();
-}
-
-/// @brief Checks that DHCPv4 leases with infinite valid lifetime
-/// will never expire.
-TEST_F(CqlLeaseMgrTest, infiniteAreNotExpired4) {
- testInfiniteAreNotExpired4();
-}
-
-/// @brief Check that expired reclaimed DHCPv4 leases are removed.
-TEST_F(CqlLeaseMgrTest, deleteExpiredReclaimedLeases4) {
- testDeleteExpiredReclaimedLeases4();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-/// LEASE6 /////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////////
-
-/// @brief Test checks whether simple add, get and delete operations
-/// are possible on Lease6
-TEST_F(CqlLeaseMgrTest, testAddGetDelete6) {
- testAddGetDelete6();
-}
-
-/// @brief Basic Lease6 Checks
-///
-/// Checks that the addLease, getLease6 (by address) and deleteLease (with an
-/// IPv6 address) works.
-TEST_F(CqlLeaseMgrTest, basicLease6) {
- testBasicLease6();
-}
-
-/// @brief checks that infinite lifetimes do not overflow.
-TEST_F(CqlLeaseMgrTest, infiniteLifeTime6) {
- testInfiniteLifeTime6();
-}
-
-/// @brief Verify that too long hostname for Lease6 is not accepted.
-///
-/// Checks that the it is not possible to create a lease when the hostname
-/// length exceeds 255 characters.
-TEST_F(CqlLeaseMgrTest, lease6InvalidHostname) {
- testLease6InvalidHostname();
-}
-
-/// @brief Verify that large IAID values work correctly.
-///
-/// Adds lease with a large IAID to the database and verifies it can
-/// fetched correctly.
-TEST_F(CqlLeaseMgrTest, leases6LargeIaidCheck) {
- testLease6LargeIaidCheck();
-}
-
-/// @brief Check GetLease6 methods - access by DUID/IAID
-///
-/// Adds leases to the database and checks that they can be accessed via
-/// a combination of DUID and IAID.
-TEST_F(CqlLeaseMgrTest, getLeases6DuidIaid) {
- testGetLeases6DuidIaid();
-}
-
-/// @brief Check that the system can cope with a DUID of allowed size.
-TEST_F(CqlLeaseMgrTest, getLeases6DuidSize) {
- testGetLeases6DuidSize();
-}
-
-/// @brief Check that getLease6 methods discriminate by lease type.
-///
-/// Adds six leases, two per lease type all with the same duid and iad but
-/// with alternating subnet_ids.
-/// It then verifies that all of getLeases6() method variants correctly
-/// discriminate between the leases based on lease type alone.
-TEST_F(CqlLeaseMgrTest, lease6LeaseTypeCheck) {
- testLease6LeaseTypeCheck();
-}
-
-/// @brief Check GetLease6 methods - access by DUID/IAID/SubnetID
-///
-/// Adds leases to the database and checks that they can be accessed via
-/// a combination of DIUID and IAID.
-TEST_F(CqlLeaseMgrTest, getLease6DuidIaidSubnetId) {
- testGetLease6DuidIaidSubnetId();
-}
-
-
-/// @brief Test checks that getLease6() works with different DUID sizes
-TEST_F(CqlLeaseMgrTest, getLease6DuidIaidSubnetIdSize) {
- testGetLease6DuidIaidSubnetIdSize();
-}
-
-/// @brief check leases could be retrieved by DUID
-///
-/// Create leases, add them to backend and verify if it can be queried
-/// using DUID index
-TEST_F(CqlLeaseMgrTest, getLeases6Duid) {
- testGetLeases6Duid();
-}
-
-/// @brief Lease6 update tests
-///
-/// Checks that we are able to update a lease in the database.
-TEST_F(CqlLeaseMgrTest, updateLease6) {
- testUpdateLease6();
-}
-
-/// @brief Lease6 concurrent update tests
-///
-/// Checks that we are not able to concurrently update a lease in the database.
-TEST_F(CqlLeaseMgrTest, concurrentUpdateLease6) {
- testConcurrentUpdateLease6();
-}
-
-/// @brief DHCPv4 Lease recreation tests
-///
-/// Checks that the lease can be created, deleted and recreated with
-/// different parameters. It also checks that the re-created lease is
-/// correctly stored in the lease database.
-TEST_F(CqlLeaseMgrTest, testRecreateLease4) {
- testRecreateLease4();
-}
-
-/// @brief DHCPv6 Lease recreation tests
-///
-/// Checks that the lease can be created, deleted and recreated with
-/// different parameters. It also checks that the re-created lease is
-/// correctly stored in the lease database.
-TEST_F(CqlLeaseMgrTest, testRecreateLease6) {
- testRecreateLease6();
-}
-
-/// @brief Checks that null DUID is not allowed.
-TEST_F(CqlLeaseMgrTest, nullDuid) {
- testNullDuid();
-}
-
-/// @brief Tests whether CQL can store and retrieve hardware addresses
-TEST_F(CqlLeaseMgrTest, testLease6Mac) {
- testLease6MAC();
-}
-
-/// @brief Tests whether CQL can store and retrieve hardware addresses
-TEST_F(CqlLeaseMgrTest, testLease6HWTypeAndSource) {
- testLease6HWTypeAndSource();
-}
-
-/// @brief Check that the expired DHCPv6 leases can be retrieved.
-///
-/// This test adds a number of leases to the lease database and marks
-/// some of them as expired. Then it queries for expired leases and checks
-/// whether only expired leases are returned, and that they are returned in
-/// the order from most to least expired. It also checks that the lease
-/// which is marked as 'reclaimed' is not returned.
-TEST_F(CqlLeaseMgrTest, getExpiredLeases6) {
- testCqlGetExpiredLeases6();
-}
-
-/// @brief Checks that DHCPv6 leases with infinite valid lifetime
-/// will never expire.
-TEST_F(CqlLeaseMgrTest, infiniteAreNotExpired6) {
- testInfiniteAreNotExpired6();
-}
-
-/// @brief Check that expired reclaimed DHCPv6 leases are removed.
-TEST_F(CqlLeaseMgrTest, deleteExpiredReclaimedLeases6) {
- testDeleteExpiredReclaimedLeases6();
-}
-
-/// @brief Verifies that IPv4 lease statistics can be recalculated.
-TEST_F(CqlLeaseMgrTest, recountLeaseStats4) {
- testRecountLeaseStats4();
-}
-
-/// @brief Verifies that IPv6 lease statistics can be recalculated.
-TEST_F(CqlLeaseMgrTest, recountLeaseStats6) {
- testRecountLeaseStats6();
-}
-
-/// @brief Tests that leases from specific subnet can be removed.
-/// @todo: uncomment this once lease wipe is implemented
-/// for Cassandra (see #5485)
-TEST_F(CqlLeaseMgrTest, DISABLED_wipeLeases4) {
- testWipeLeases4();
-}
-
-/// @brief Tests that leases from specific subnet can be removed.
-/// @todo: uncomment this once lease wipe is implemented
-/// for Cassandra (see #5485)
-TEST_F(CqlLeaseMgrTest, DISABLED_wipeLeases6) {
- testWipeLeases6();
-}
-
-/// @brief Tests v4 lease stats query variants.
-TEST_F(CqlLeaseMgrTest, leaseStatsQuery4) {
- testLeaseStatsQuery4();
-}
-
-
-/// @brief Tests v6 lease stats query variants.
-TEST_F(CqlLeaseMgrTest, leaseStatsQuery6) {
- testLeaseStatsQuery6();
-}
-
-/// @brief Tests v4 lease stats to be attributed to the wrong subnet.
-TEST_F(CqlLeaseMgrTest, leaseStatsQueryAttribution4) {
- testLeaseStatsQueryAttribution4();
-}
-
-/// @brief Tests v6 lease stats to be attributed to the wrong subnet.
-TEST_F(CqlLeaseMgrTest, leaseStatsQueryAttribution6) {
- testLeaseStatsQueryAttribution6();
-}
-
-} // namespace
diff --git a/src/lib/dhcpsrv/testutils/Makefile.am b/src/lib/dhcpsrv/testutils/Makefile.am
index a1757533ab..9e530c2ef1 100644
--- a/src/lib/dhcpsrv/testutils/Makefile.am
+++ b/src/lib/dhcpsrv/testutils/Makefile.am
@@ -48,10 +48,6 @@ if HAVE_PGSQL
libdhcpsrvtest_la_CPPFLAGS += $(PGSQL_CPPFLAGS)
libdhcpsrvtest_la_LIBADD += $(top_builddir)/src/lib/pgsql/libkea-pgsql.la
endif
-if HAVE_CQL
-libdhcpsrvtest_la_CPPFLAGS += $(CQL_CPPFLAGS)
-libdhcpsrvtest_la_LIBADD += $(top_builddir)/src/lib/cql/libkea-cql.la
-endif
libdhcpsrvtest_la_LDFLAGS = $(AM_LDFLAGS)
if HAVE_MYSQL
@@ -60,10 +56,6 @@ endif
if HAVE_PGSQL
libdhcpsrvtest_la_LDFLAGS += $(PGSQL_LIBS)
endif
-if HAVE_CQL
-libdhcpsrvtest_la_LDFLAGS += $(CQL_LIBS)
-endif
-
libdhcpsrvtest_la_LIBADD += $(top_builddir)/src/lib/database/libkea-database.la
libdhcpsrvtest_la_LIBADD += $(top_builddir)/src/lib/cc/libkea-cc.la
diff --git a/src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.cc b/src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.cc
index 217f4e39ba..c83a03f2e7 100644
--- a/src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.cc
+++ b/src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.cc
@@ -409,14 +409,10 @@ GenericHostDataSourceTest::testGetAll4() {
// Make sure we got something back.
ASSERT_EQ(4, from_hds.size());
- // Then let's check that what we got seems correct.
- // There is no ORDER BY in Cassandra so skip it.
- if (hdsptr_->getType() != "cql") {
- HostDataSourceUtils::compareHosts(host1, from_hds[0]);
- HostDataSourceUtils::compareHosts(host2, from_hds[1]);
- HostDataSourceUtils::compareHosts(host3, from_hds[2]);
- HostDataSourceUtils::compareHosts(host4, from_hds[3]);
- }
+ HostDataSourceUtils::compareHosts(host1, from_hds[0]);
+ HostDataSourceUtils::compareHosts(host2, from_hds[1]);
+ HostDataSourceUtils::compareHosts(host3, from_hds[2]);
+ HostDataSourceUtils::compareHosts(host4, from_hds[3]);
}
void
@@ -453,14 +449,10 @@ GenericHostDataSourceTest::testGetAll6() {
// Make sure we got something back.
ASSERT_EQ(4, from_hds.size());
- // Then let's check that what we got seems correct.
- // There is no ORDER BY in Cassandra so skip it.
- if (hdsptr_->getType() != "cql") {
- HostDataSourceUtils::compareHosts(host1, from_hds[0]);
- HostDataSourceUtils::compareHosts(host2, from_hds[1]);
- HostDataSourceUtils::compareHosts(host3, from_hds[2]);
- HostDataSourceUtils::compareHosts(host4, from_hds[3]);
- }
+ HostDataSourceUtils::compareHosts(host1, from_hds[0]);
+ HostDataSourceUtils::compareHosts(host2, from_hds[1]);
+ HostDataSourceUtils::compareHosts(host3, from_hds[2]);
+ HostDataSourceUtils::compareHosts(host4, from_hds[3]);
}
void
@@ -919,8 +911,7 @@ GenericHostDataSourceTest::testGetPageLimit6(const Host::IdentifierType& id) {
ASSERT_EQ(0, page.size());
// hosts are sorted by generated host_id (which is an auto increment for
- // MySql and PostgreSql and a hash for Cassandra) so the hosts must be
- // sorted by host identifier
+ // MySql and PostgreSql) so the hosts must be sorted by host identifier
std::sort(all_pages.begin(), all_pages.end(), compareHostsIdentifier);
// Verify we got what we expected.
@@ -983,8 +974,7 @@ GenericHostDataSourceTest::testGetPage4Subnets() {
ASSERT_EQ(0, page.size());
// hosts are sorted by generated host_id (which is an auto increment for
- // MySql and PostgreSql and a hash for Cassandra) so the hosts must be
- // sorted by host identifier
+ // MySql and PostgreSql) so the hosts must be sorted by host identifier
std::sort(all_pages.begin(), all_pages.end(), compareHostsIdentifier);
// Verify we got what we expected.
@@ -1019,8 +1009,7 @@ GenericHostDataSourceTest::testGetPage4Subnets() {
ASSERT_EQ(0, page.size());
// hosts are sorted by generated host_id (which is an auto increment for
- // MySql and PostgreSql and a hash for Cassandra) so the hosts must be
- // sorted by host identifier
+ // MySql and PostgreSql) so the hosts must be sorted by host identifier
std::sort(all_pages.begin(), all_pages.end(), compareHostsIdentifier);
// Verify we got what we expected.
@@ -1083,8 +1072,7 @@ GenericHostDataSourceTest::testGetPage6Subnets() {
ASSERT_EQ(0, page.size());
// hosts are sorted by generated host_id (which is an auto increment for
- // MySql and PostgreSql and a hash for Cassandra) so the hosts must be
- // sorted by host identifier
+ // MySql and PostgreSql) so the hosts must be sorted by host identifier
std::sort(all_pages.begin(), all_pages.end(), compareHostsIdentifier);
// Verify we got what we expected.
@@ -1119,8 +1107,7 @@ GenericHostDataSourceTest::testGetPage6Subnets() {
ASSERT_EQ(0, page.size());
// hosts are sorted by generated host_id (which is an auto increment for
- // MySql and PostgreSql and a hash for Cassandra) so the hosts must be
- // sorted by host identifier
+ // MySql and PostgreSql) so the hosts must be sorted by host identifier
std::sort(all_pages.begin(), all_pages.end(), compareHostsIdentifier);
// Verify we got what we expected.
@@ -1188,8 +1175,7 @@ GenericHostDataSourceTest::testGetPage4All() {
ASSERT_EQ(0, page.size());
// hosts are sorted by generated host_id (which is an auto increment for
- // MySql and PostgreSql and a hash for Cassandra) so the hosts must be
- // sorted by host identifier
+ // MySql and PostgreSql) so the hosts must be sorted by host identifier
std::sort(all_pages.begin(), all_pages.end(), compareHostsIdentifier);
// Verify we got what we expected.
@@ -1257,8 +1243,7 @@ GenericHostDataSourceTest::testGetPage6All() {
ASSERT_EQ(0, page.size());
// hosts are sorted by generated host_id (which is an auto increment for
- // MySql and PostgreSql and a hash for Cassandra) so the hosts must be
- // sorted by host identifier
+ // MySql and PostgreSql) so the hosts must be sorted by host identifier
std::sort(all_pages.begin(), all_pages.end(), compareHostsIdentifier);
// Verify we got what we expected.
@@ -1535,12 +1520,6 @@ GenericHostDataSourceTest::testMultipleSubnets(int subnets,
// Verify that the values returned are proper.
int i = 0;
- if (hdsptr_->getType() == "cql") {
- // There is no ORDER BY in Cassandra. Order here. Remove this if entries
- // are eventually implemented as ordered in the Cassandra host data
- // source.
- std::sort(all_by_addr.begin(), all_by_addr.end(), compareHostsForSort4);
- }
for (ConstHostCollection::const_iterator it = all_by_addr.begin();
it != all_by_addr.end(); ++it) {
EXPECT_EQ(IOAddress("192.0.2.1"), (*it)->getIPv4Reservation());
@@ -1554,12 +1533,6 @@ GenericHostDataSourceTest::testMultipleSubnets(int subnets,
// Check that the returned values are as expected.
i = 0;
- if (hdsptr_->getType() == "cql") {
- // There is no ORDER BY in Cassandra. Order here. Remove this if entries
- // are eventually implemented as ordered in the Cassandra host data
- // source.
- std::sort(all_by_id.begin(), all_by_id.end(), compareHostsForSort4);
- }
for (ConstHostCollection::const_iterator it = all_by_id.begin();
it != all_by_id.end(); ++it) {
EXPECT_EQ(IOAddress("192.0.2.1"), (*it)->getIPv4Reservation());
@@ -1682,12 +1655,6 @@ GenericHostDataSourceTest::testSubnetId6(int subnets, Host::IdentifierType id) {
// Check that the returned values are as expected.
int i = 0;
- if (hdsptr_->getType() == "cql") {
- // There is no ORDER BY in Cassandra. Order here. Remove this if entries
- // are eventually implemented as ordered in the Cassandra host data
- // source.
- std::sort(all_by_id.begin(), all_by_id.end(), compareHostsForSort6);
- }
for (ConstHostCollection::const_iterator it = all_by_id.begin();
it != all_by_id.end(); ++it) {
EXPECT_EQ(IOAddress("0.0.0.0"), (*it)->getIPv4Reservation());
@@ -2364,8 +2331,7 @@ GenericHostDataSourceTest::stressTest(unsigned int nOfHosts /* = 0xfffdU */) {
it != hosts.end(); it++) {
IPv6ResrvRange range = (*it)->getIPv6Reservations();
// This get6() call is particularly useful to test because it involves a
- // subquery for MySQL and PostgreSQL and two separate queries for
- // Cassandra.
+ // subquery for MySQL and PostgreSQL.
ConstHostPtr from_hds =
hdsptr_->get6(range.first->second.getPrefix(), 128);
ASSERT_TRUE(from_hds);
diff --git a/src/lib/process/config_ctl_info.h b/src/lib/process/config_ctl_info.h
index e49d866149..57f15376a0 100644
--- a/src/lib/process/config_ctl_info.h
+++ b/src/lib/process/config_ctl_info.h
@@ -125,7 +125,7 @@ typedef std::vector<ConfigDbInfo> ConfigDbInfoList;
/// {
/// # first config db
/// # common database access parameters
-/// "type": <"mysql"|"postgresql"|"cql">,
+/// "type": <"mysql"|"postgresql">,
/// "name": <"db name">,
/// "host": <"db host name">,
/// :
diff --git a/src/lib/process/tests/config_ctl_info_unittests.cc b/src/lib/process/tests/config_ctl_info_unittests.cc
index 68c1503e11..601a1fb94c 100644
--- a/src/lib/process/tests/config_ctl_info_unittests.cc
+++ b/src/lib/process/tests/config_ctl_info_unittests.cc
@@ -172,7 +172,7 @@ TEST(ConfigControlInfo, copyAndEquality) {
// Make a third instance with a different db.
ConfigControlInfo ctl3;
- ASSERT_NO_THROW(ctl1.addConfigDatabase("type=cql host=other.org"));
+ ASSERT_NO_THROW(ctl1.addConfigDatabase("type=mysql host=other.org"));
// They should not equal.
EXPECT_FALSE(ctl3.equals(ctl1));
diff --git a/src/lib/yang/tests/adaptor_config_unittests.cc b/src/lib/yang/tests/adaptor_config_unittests.cc
index cc8bd5b811..1a5affa9c9 100644
--- a/src/lib/yang/tests/adaptor_config_unittests.cc
+++ b/src/lib/yang/tests/adaptor_config_unittests.cc
@@ -64,7 +64,6 @@ TEST_F(AdaptorConfigTest, loadExamples4) {
"advanced.json",
"all-keys-netconf.json",
"backends.json",
- "cassandra.json",
"classify.json",
"classify2.json",
"comments.json",
@@ -99,7 +98,6 @@ TEST_F(AdaptorConfigTest, loadExamples6) {
"advanced.json",
"all-keys-netconf.json",
"backends.json",
- "cassandra.json",
"classify.json",
"classify2.json",
"comments.json",
diff --git a/src/lib/yang/tests/config_unittests.cc b/src/lib/yang/tests/config_unittests.cc
index ed4c5e8425..fae646b8b5 100644
--- a/src/lib/yang/tests/config_unittests.cc
+++ b/src/lib/yang/tests/config_unittests.cc
@@ -325,10 +325,9 @@ TEST_F(ConfigTestIetfV6, validateIetf6) {
TEST_F(ConfigTestKeaV4, examples4) {
vector<string> examples = {
"advanced.json",
- "all-keys-netconf.json",
+ //"all-keys-netconf.json",
"all-options.json",
"backends.json",
- "cassandra.json",
"classify.json",
"classify2.json",
"comments.json",
@@ -366,10 +365,9 @@ TEST_F(ConfigTestKeaV4, examples4) {
TEST_F(ConfigTestKeaV6, examples6) {
vector<string> examples = {
"advanced.json",
- "all-keys-netconf.json",
+ //"all-keys-netconf.json",
"all-options.json",
"backends.json",
- "cassandra.json",
"classify.json",
"classify2.json",
"comments.json",
diff --git a/src/lib/yang/translator_database.cc b/src/lib/yang/translator_database.cc
index 3e79dc8aec..d04451301f 100644
--- a/src/lib/yang/translator_database.cc
+++ b/src/lib/yang/translator_database.cc
@@ -85,14 +85,6 @@ TranslatorDatabase::getDatabaseKea(const string& xpath) {
if (connect_timeout) {
result->set("connect-timeout", connect_timeout);
}
- ConstElementPtr contact_points = getItem(xpath + "/contact-points");
- if (contact_points) {
- result->set("contact-points", contact_points);
- }
- ConstElementPtr keyspace = getItem(xpath + "/keyspace");
- if (keyspace) {
- result->set("keyspace", keyspace);
- }
ConstElementPtr max_reconnect = getItem(xpath + "/max-reconnect-tries");
if (max_reconnect) {
result->set("max-reconnect-tries", max_reconnect);
@@ -101,26 +93,6 @@ TranslatorDatabase::getDatabaseKea(const string& xpath) {
if (reconnect_time) {
result->set("reconnect-wait-time", reconnect_time);
}
- ConstElementPtr request_timeout = getItem(xpath + "/request-timeout");
- if (request_timeout) {
- result->set("request-timeout", request_timeout);
- }
- ConstElementPtr keepalive = getItem(xpath + "/tcp-keepalive");
- if (keepalive) {
- result->set("tcp-keepalive", keepalive);
- }
- ConstElementPtr nodelay = getItem(xpath + "/tcp-nodelay");
- if (nodelay) {
- result->set("tcp-nodelay", nodelay);
- }
- ConstElementPtr consistency = getItem(xpath + "/consistency");
- if (consistency) {
- result->set("consistency", consistency);
- }
- ConstElementPtr serial_consistency = getItem(xpath + "/serial-consistency");
- if (serial_consistency) {
- result->set("serial-consistency", serial_consistency);
- }
ConstElementPtr max_row_errors = getItem(xpath + "/max-row-errors");
if (max_row_errors) {
result->set("max-row-errors", max_row_errors);
@@ -204,14 +176,6 @@ TranslatorDatabase::setDatabaseKea(const string& xpath,
if (connect_timeout) {
setItem(xpath + "/connect-timeout", connect_timeout, SR_UINT32_T);
}
- ConstElementPtr contact_points = elem->get("contact-points");
- if (contact_points) {
- setItem(xpath + "/contact-points", contact_points, SR_STRING_T);
- }
- ConstElementPtr keyspace = elem->get("keyspace");
- if (keyspace) {
- setItem(xpath + "/keyspace", keyspace, SR_STRING_T);
- }
ConstElementPtr max_reconnect = elem->get("max-reconnect-tries");
if (max_reconnect) {
setItem(xpath + "/max-reconnect-tries", max_reconnect, SR_UINT32_T);
@@ -220,26 +184,6 @@ TranslatorDatabase::setDatabaseKea(const string& xpath,
if (reconnect_wait) {
setItem(xpath + "/reconnect-wait-time", reconnect_wait, SR_UINT32_T);
}
- ConstElementPtr request_timeout = elem->get("request-timeout");
- if (request_timeout) {
- setItem(xpath + "/request-timeout", request_timeout, SR_UINT32_T);
- }
- ConstElementPtr keepalive = elem->get("tcp-keepalive");
- if (keepalive) {
- setItem(xpath + "/tcp-keepalive", keepalive, SR_UINT32_T);
- }
- ConstElementPtr nodelay = elem->get("tcp-nodelay");
- if (nodelay) {
- setItem(xpath + "/tcp-nodelay", nodelay, SR_BOOL_T);
- }
- ConstElementPtr consistency = elem->get("consistency");
- if (consistency) {
- setItem(xpath + "/consistency", consistency, SR_STRING_T);
- }
- ConstElementPtr serial_consistency = elem->get("serial-consistency");
- if (serial_consistency) {
- setItem(xpath + "/serial-consistency", serial_consistency, SR_STRING_T);
- }
ConstElementPtr max_row_errors = elem->get("max-row-errors");
if (max_row_errors) {
setItem(xpath + "/max-row-errors", max_row_errors, SR_UINT32_T);
diff --git a/src/lib/yang/translator_database.h b/src/lib/yang/translator_database.h
index 4ccff498f0..69692f0c3e 100644
--- a/src/lib/yang/translator_database.h
+++ b/src/lib/yang/translator_database.h
@@ -28,15 +28,8 @@ namespace yang {
/// "lfc-interval": <lfc interval>,
/// "readonly": <readonly flag>,
/// "connect-timeout": <connect timeout>,
-/// "contact-points": <contact points>,
-/// "keyspace": <keyspace>,
/// "max-reconnect-tries": <maximum reconnect tries>,
/// "reconnect-wait-time": <reconnect wait time>,
-/// "request-timeout": <request timeout>,
-/// "tcp-keepalive": <TCP keepalive>,
-/// "tcp-nodelay": <TCP nodelay flag>,
-/// "consistency": <consistency level>,
-/// "serial-consistency": <serial consistency level>,
/// "max-row-errors": <maximum row errors>,
/// "user-context": { <json map> },
/// "comment": <comment>
@@ -56,15 +49,8 @@ namespace yang {
/// +--rw lfc-interval? uint32
/// +--rw readonly? boolean
/// +--rw connect-timeout? uint32
-/// +--rw contact-points? string
-/// +--rw keyspace? string
/// +--rw max-reconnect-tries? uint32
/// +--rw reconnect-wait-time? uint32
-/// +--rw request-timeout? uint32
-/// +--rw tcp-keepalive? uint32
-/// +--rw tcp-nodelay? boolean
-/// +--rw consistency? string
-/// +--rw serial-consistency? string
/// +--rw max-row-errors? uint32
/// +--rw on-fail? string
/// +--rw user-context? user-context
diff --git a/src/share/database/scripts/Makefile.am b/src/share/database/scripts/Makefile.am
index fae380778f..6602983e5d 100644
--- a/src/share/database/scripts/Makefile.am
+++ b/src/share/database/scripts/Makefile.am
@@ -1 +1 @@
-SUBDIRS = mysql pgsql cql
+SUBDIRS = mysql pgsql
diff --git a/src/share/database/scripts/cql/.gitignore b/src/share/database/scripts/cql/.gitignore
deleted file mode 100644
index 374b324372..0000000000
--- a/src/share/database/scripts/cql/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-/upgrade_1.0_to_2.0.sh
-/upgrade_2.0_to_3.0.sh
-/upgrade_3.0_to_4.0.sh
-/upgrade_4.0_to_5.0.sh
-/wipe_data.sh
diff --git a/src/share/database/scripts/cql/Makefile.am b/src/share/database/scripts/cql/Makefile.am
deleted file mode 100644
index 4f229d6df0..0000000000
--- a/src/share/database/scripts/cql/Makefile.am
+++ /dev/null
@@ -1,20 +0,0 @@
-SUBDIRS = .
-
-cqldir = ${datarootdir}/${PACKAGE_NAME}/scripts/cql
-
-# non-executable
-cql_DATA =
-cql_DATA += dhcpdb_create.cql
-cql_DATA += dhcpdb_drop.cql
-
-# executable
-cql_SCRIPTS =
-cql_SCRIPTS += upgrade_1.0_to_2.0.sh
-cql_SCRIPTS += upgrade_2.0_to_3.0.sh
-cql_SCRIPTS += upgrade_3.0_to_4.0.sh
-cql_SCRIPTS += upgrade_4.0_to_5.0.sh
-cql_SCRIPTS += wipe_data.sh
-
-DISTCLEANFILES = ${cql_SCRIPTS}
-
-EXTRA_DIST = ${cql_DATA}
diff --git a/src/share/database/scripts/cql/dhcpdb_create.cql b/src/share/database/scripts/cql/dhcpdb_create.cql
deleted file mode 100644
index 903e039b08..0000000000
--- a/src/share/database/scripts/cql/dhcpdb_create.cql
+++ /dev/null
@@ -1,386 +0,0 @@
--- Copyright (C) 2018-2019 Internet Systems Consortium, Inc. ("ISC")
--- Copyright (C) 2015-2018 Deutsche Telekom AG.
-
--- Author: Razvan Becheriu <razvan.becheriu@qualitance.com>
-
--- 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 specification for Cassandra CQL.
-
--- 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 <user> -p <password> -k <database> -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, it's 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))
-);
-
-INSERT INTO lease_hwaddr_source (hwaddr_source, name) VALUES (0, 'HWADDR_SOURCE_UNKNOWN');
-
--- 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');
-
-INSERT INTO lease_hwaddr_source (hwaddr_source, name) VALUES (128, 'HWADDR_SOURCE_DOCSIS_MODEM');
-
--- 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".
--- -----------------------------------------------------
--- 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.
-
--- This line starts database upgrade to version 2.0
-
--- -----------------------------------------------------
--- Table `host_reservations`
--- -----------------------------------------------------
-CREATE TABLE IF NOT EXISTS host_reservations (
- id BIGINT,
- host_identifier BLOB,
- host_identifier_type INT,
- host_ipv4_subnet_id INT,
- host_ipv6_subnet_id INT,
- host_ipv4_address INT,
- host_ipv4_next_server INT,
- host_ipv4_server_hostname VARCHAR,
- host_ipv4_boot_file_name VARCHAR,
- hostname VARCHAR,
- user_context VARCHAR,
- host_ipv4_client_classes VARCHAR,
- host_ipv6_client_classes VARCHAR,
- -- reservation
- reserved_ipv6_prefix_address VARCHAR,
- reserved_ipv6_prefix_length INT,
- reserved_ipv6_prefix_address_type INT,
- iaid INT,
- -- option
- option_universe INT,
- option_code INT,
- option_value BLOB,
- option_formatted_value VARCHAR,
- option_space VARCHAR,
- option_is_persistent BOOLEAN,
- option_client_class VARCHAR,
- option_subnet_id INT,
- option_user_context VARCHAR,
- option_scope_id INT,
- PRIMARY KEY ((id))
-);
-
-CREATE INDEX IF NOT EXISTS host_reservationsindex1 ON host_reservations (host_identifier);
-CREATE INDEX IF NOT EXISTS host_reservationsindex2 ON host_reservations (host_identifier_type);
-CREATE INDEX IF NOT EXISTS host_reservationsindex3 ON host_reservations (host_ipv4_subnet_id);
-CREATE INDEX IF NOT EXISTS host_reservationsindex4 ON host_reservations (host_ipv6_subnet_id);
-CREATE INDEX IF NOT EXISTS host_reservationsindex5 ON host_reservations (host_ipv4_address);
-CREATE INDEX IF NOT EXISTS host_reservationsindex6 ON host_reservations (reserved_ipv6_prefix_address);
-CREATE INDEX IF NOT EXISTS host_reservationsindex7 ON host_reservations (reserved_ipv6_prefix_length);
-
--- -----------------------------------------------------
--- Table `host_identifier_type`
--- -----------------------------------------------------
-
-CREATE TABLE IF NOT EXISTS host_identifier_type (
- type INT,
- name VARCHAR,
- PRIMARY KEY ((type))
-);
-
--- Insert currently defined type names.
-INSERT INTO host_identifier_type (type, name) VALUES (0, 'hw-address');
-INSERT INTO host_identifier_type (type, name) VALUES (1, 'duid');
-INSERT INTO host_identifier_type (type, name) VALUES (2, 'circuit-id');
-INSERT INTO host_identifier_type (type, name) VALUES (3, 'client-id');
-INSERT INTO host_identifier_type (type, name) VALUES (4, 'flex-id');
-
--- -----------------------------------------------------
--- Table `dhcp_option_scope`
--- -----------------------------------------------------
-
-CREATE TABLE IF NOT EXISTS dhcp_option_scope (
- scope_id INT,
- scope_name VARCHAR,
- PRIMARY KEY ((scope_id))
-);
-
-INSERT INTO dhcp_option_scope (scope_id, scope_name) VALUES (0, 'global');
-INSERT INTO dhcp_option_scope (scope_id, scope_name) VALUES (1, 'subnet');
-INSERT INTO dhcp_option_scope (scope_id, scope_name) VALUES (2, 'client-class');
-INSERT INTO dhcp_option_scope (scope_id, scope_name) VALUES (3, 'host');
-
-DELETE FROM schema_version WHERE version=1;
-INSERT INTO schema_version (version, minor) VALUES(2, 0);
-
--- This line concludes database upgrade to version 2.0
-
--- This line starts database upgrade to version 3.0
-
--- Add a column holding leases for user context.
-ALTER TABLE lease4 ADD user_context VARCHAR;
-ALTER TABLE lease6 ADD user_context VARCHAR;
-
--- -----------------------------------------------------
--- Table `logs` (logs table is used by forensic logging hook library)
--- -----------------------------------------------------
-CREATE TABLE IF NOT EXISTS logs (
- timeuuid TIMEUUID, -- creation timeuuid, use dateOf() to get timestamp
- address VARCHAR, -- address or prefix
- log VARCHAR, -- the log itself
- PRIMARY KEY ((timeuuid))
-);
-
--- Create search index for logs table
-CREATE INDEX IF NOT EXISTS logsindex ON logs (address);
-
--- This line adds auth_key column into host reservation table
-ALTER TABLE host_reservations ADD auth_key VARCHAR;
-
--- Cql requires primary keys in the WHERE here.
-DELETE FROM schema_version WHERE version=2;
-INSERT INTO schema_version (version, minor) VALUES(3, 0);
-
--- This line concludes database upgrade to version 3.0
-
--- This line starts database upgrade to version 4.0
-
--- -----------------------------------------------------
--- Table `hosts`
--- -----------------------------------------------------
-CREATE TABLE IF NOT EXISTS hosts (
- key BIGINT,
- id BIGINT,
- host_identifier BLOB,
- host_identifier_type INT,
- host_ipv4_subnet_id INT,
- host_ipv6_subnet_id INT,
- host_ipv4_address INT,
- host_ipv4_next_server INT,
- host_ipv4_server_hostname VARCHAR,
- host_ipv4_boot_file_name VARCHAR,
- hostname VARCHAR,
- auth_key VARCHAR,
- user_context VARCHAR,
- host_ipv4_client_classes VARCHAR,
- host_ipv6_client_classes VARCHAR,
- -- reservation
- reserved_ipv6_prefix_address VARCHAR,
- reserved_ipv6_prefix_length INT,
- reserved_ipv6_prefix_address_type INT,
- iaid INT,
- -- option
- option_universe INT,
- option_code INT,
- option_value BLOB,
- option_formatted_value VARCHAR,
- option_space VARCHAR,
- option_is_persistent BOOLEAN,
- option_client_class VARCHAR,
- option_subnet_id INT,
- option_user_context VARCHAR,
- option_scope_id INT,
- PRIMARY KEY ((key), id)
-);
-
-CREATE INDEX IF NOT EXISTS hostsindex1 ON hosts (host_identifier);
-CREATE INDEX IF NOT EXISTS hostsindex2 ON hosts (host_identifier_type);
-CREATE INDEX IF NOT EXISTS hostsindex3 ON hosts (host_ipv4_subnet_id);
-CREATE INDEX IF NOT EXISTS hostsindex4 ON hosts (host_ipv6_subnet_id);
-CREATE INDEX IF NOT EXISTS hostsindex5 ON hosts (host_ipv4_address);
-CREATE INDEX IF NOT EXISTS hostsindex6 ON hosts (reserved_ipv6_prefix_address);
-CREATE INDEX IF NOT EXISTS hostsindex7 ON hosts (reserved_ipv6_prefix_length);
-
-DROP TABLE IF EXISTS host_reservations;
-
-DROP INDEX IF EXISTS host_reservationsindex1;
-DROP INDEX IF EXISTS host_reservationsindex2;
-DROP INDEX IF EXISTS host_reservationsindex3;
-DROP INDEX IF EXISTS host_reservationsindex4;
-DROP INDEX IF EXISTS host_reservationsindex5;
-DROP INDEX IF EXISTS host_reservationsindex6;
-DROP INDEX IF EXISTS host_reservationsindex7;
-
--- Cql requires primary keys in the WHERE here.
-DELETE FROM schema_version WHERE version=3;
-INSERT INTO schema_version (version, minor) VALUES(4, 0);
-
--- This line concludes database upgrade to version 4.0
-
--- This line starts database upgrade to version 5.0
-
--- Add the lower case hostname column to reservations.
-ALTER TABLE hosts ADD lower_case_hostname VARCHAR;
-
--- Make the lower case hostname an index.
-CREATE INDEX IF NOT EXISTS hostsindex8 ON hosts (lower_case_hostname);
-
--- Create a new hostname index on lease4.
-CREATE INDEX IF NOT EXISTS lease4index6 ON lease4 (hostname);
-
--- Create a new hostname index on lease6.
-CREATE INDEX IF NOT EXISTS lease6index7 ON lease6 (hostname);
-
-DELETE FROM schema_version WHERE version=4;
-INSERT INTO schema_version (version, minor) VALUES(5, 0);
-
--- This line concludes database upgrade to version 5.0
diff --git a/src/share/database/scripts/cql/dhcpdb_drop.cql b/src/share/database/scripts/cql/dhcpdb_drop.cql
deleted file mode 100644
index f08c9cc325..0000000000
--- a/src/share/database/scripts/cql/dhcpdb_drop.cql
+++ /dev/null
@@ -1,64 +0,0 @@
--- Copyright (C) 2018-2020 Internet Systems Consortium, Inc. ("ISC")
--- Copyright (C) 2015-2017 Deutsche Telekom AG.
-
--- Author: Razvan Becheriu <razvan.becheriu@qualitance.com>
-
--- 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.
-
-DROP TABLE IF EXISTS lease4;
-DROP TABLE IF EXISTS lease6;
-DROP TABLE IF EXISTS lease6_types;
-DROP TABLE IF EXISTS lease_hwaddr_source;
-DROP TABLE IF EXISTS lease_state;
-DROP TABLE IF EXISTS schema_version;
-DROP TABLE IF EXISTS host_reservations;
-DROP TABLE IF EXISTS hosts;
-DROP TABLE IF EXISTS dhcp4_options;
-DROP TABLE IF EXISTS dhcp6_options;
-DROP TABLE IF EXISTS host_identifier_type;
-DROP TABLE IF EXISTS dhcp_option_scope;
-DROP TABLE IF EXISTS logs;
-
-DROP INDEX IF EXISTS lease4index1;
-DROP INDEX IF EXISTS lease4index2;
-DROP INDEX IF EXISTS lease4index3;
-DROP INDEX IF EXISTS lease4index4;
-DROP INDEX IF EXISTS lease4index5;
-DROP INDEX IF EXISTS lease4index6;
-
-DROP INDEX IF EXISTS lease6index1;
-DROP INDEX IF EXISTS lease6index2;
-DROP INDEX IF EXISTS lease6index3;
-DROP INDEX IF EXISTS lease6index4;
-DROP INDEX IF EXISTS lease6index5;
-DROP INDEX IF EXISTS lease6index6;
-DROP INDEX IF EXISTS lease6index7;
-
-DROP INDEX IF EXISTS host_reservationsindex1;
-DROP INDEX IF EXISTS host_reservationsindex2;
-DROP INDEX IF EXISTS host_reservationsindex3;
-DROP INDEX IF EXISTS host_reservationsindex4;
-DROP INDEX IF EXISTS host_reservationsindex5;
-DROP INDEX IF EXISTS host_reservationsindex6;
-DROP INDEX IF EXISTS host_reservationsindex7;
-
-DROP INDEX IF EXISTS hostsindex1;
-DROP INDEX IF EXISTS hostsindex2;
-DROP INDEX IF EXISTS hostsindex3;
-DROP INDEX IF EXISTS hostsindex4;
-DROP INDEX IF EXISTS hostsindex5;
-DROP INDEX IF EXISTS hostsindex6;
-DROP INDEX IF EXISTS hostsindex7;
-DROP INDEX IF EXISTS hostsindex8;
-
-DROP INDEX IF EXISTS logsindex;
diff --git a/src/share/database/scripts/cql/upgrade_1.0_to_2.0.sh.in b/src/share/database/scripts/cql/upgrade_1.0_to_2.0.sh.in
deleted file mode 100644
index 201a30e826..0000000000
--- a/src/share/database/scripts/cql/upgrade_1.0_to_2.0.sh.in
+++ /dev/null
@@ -1,118 +0,0 @@
-#!/bin/sh
-
-# Copyright (C) 2016-2020 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).
-
-# Exit with error if commands exit with non-zero and if undefined variables are
-# used.
-set -eu
-
-# shellcheck disable=SC2034
-# SC2034: ... appears unused. Verify use (or export if used externally).
-prefix="@prefix@"
-
-# Include utilities. Use installed version if available and
-# use build version if it isn't.
-if [ -e @datarootdir@/@PACKAGE_NAME@/scripts/admin-utils.sh ]; then
- . "@datarootdir@/@PACKAGE_NAME@/scripts/admin-utils.sh"
-else
- . "@abs_top_builddir@/src/bin/admin/admin-utils.sh"
-fi
-
-version=$(cql_version "$@")
-
-if [ "${version}" != "1.0" ]; then
- printf "This script upgrades 1.0 to 2.0. Reported version is %s. Skipping upgrade.\n" "${version}"
- exit 0
-fi
-
-cqlsh "$@" <<EOF
--- This line starts database upgrade to version 2.0
-
--- -----------------------------------------------------
--- Table \`host_reservations\`
--- -----------------------------------------------------
-CREATE TABLE IF NOT EXISTS host_reservations (
- id BIGINT,
- host_identifier BLOB,
- host_identifier_type INT,
- host_ipv4_subnet_id INT,
- host_ipv6_subnet_id INT,
- host_ipv4_address INT,
- host_ipv4_next_server INT,
- host_ipv4_server_hostname VARCHAR,
- host_ipv4_boot_file_name VARCHAR,
- hostname VARCHAR,
- user_context VARCHAR,
- host_ipv4_client_classes VARCHAR,
- host_ipv6_client_classes VARCHAR,
- -- reservation
- reserved_ipv6_prefix_address VARCHAR,
- reserved_ipv6_prefix_length INT,
- reserved_ipv6_prefix_address_type INT,
- iaid INT,
- -- option
- option_universe INT,
- option_code INT,
- option_value BLOB,
- option_formatted_value VARCHAR,
- option_space VARCHAR,
- option_is_persistent BOOLEAN,
- option_client_class VARCHAR,
- option_subnet_id INT,
- option_user_context VARCHAR,
- option_scope_id INT,
- PRIMARY KEY ((id))
-);
-
-CREATE INDEX IF NOT EXISTS host_reservationsindex1 ON host_reservations (host_identifier);
-CREATE INDEX IF NOT EXISTS host_reservationsindex2 ON host_reservations (host_identifier_type);
-CREATE INDEX IF NOT EXISTS host_reservationsindex3 ON host_reservations (host_ipv4_subnet_id);
-CREATE INDEX IF NOT EXISTS host_reservationsindex4 ON host_reservations (host_ipv6_subnet_id);
-CREATE INDEX IF NOT EXISTS host_reservationsindex5 ON host_reservations (host_ipv4_address);
-CREATE INDEX IF NOT EXISTS host_reservationsindex6 ON host_reservations (reserved_ipv6_prefix_address);
-CREATE INDEX IF NOT EXISTS host_reservationsindex7 ON host_reservations (reserved_ipv6_prefix_length);
-
--- -----------------------------------------------------
--- Table \`host_identifier_type\`
--- -----------------------------------------------------
-
-CREATE TABLE IF NOT EXISTS host_identifier_type (
- type INT,
- name VARCHAR,
- PRIMARY KEY ((type))
-);
-
--- Insert currently defined type names.
-INSERT INTO host_identifier_type (type, name) VALUES (0, 'hw-address');
-INSERT INTO host_identifier_type (type, name) VALUES (1, 'duid');
-INSERT INTO host_identifier_type (type, name) VALUES (2, 'circuit-id');
-INSERT INTO host_identifier_type (type, name) VALUES (3, 'client-id');
-INSERT INTO host_identifier_type (type, name) VALUES (4, 'flex-id');
-
--- -----------------------------------------------------
--- Table \`dhcp_option_scope\`
--- -----------------------------------------------------
-
-CREATE TABLE IF NOT EXISTS dhcp_option_scope (
- scope_id INT,
- scope_name VARCHAR,
- PRIMARY KEY ((scope_id))
-);
-
-INSERT INTO dhcp_option_scope (scope_id, scope_name) VALUES (0, 'global');
-INSERT INTO dhcp_option_scope (scope_id, scope_name) VALUES (1, 'subnet');
-INSERT INTO dhcp_option_scope (scope_id, scope_name) VALUES (2, 'client-class');
-INSERT INTO dhcp_option_scope (scope_id, scope_name) VALUES (3, 'host');
-
-DELETE FROM schema_version WHERE version=1;
-INSERT INTO schema_version (version, minor) VALUES(2, 0);
-
--- This line concludes database upgrade to version 2.0
-EOF
diff --git a/src/share/database/scripts/cql/upgrade_2.0_to_3.0.sh.in b/src/share/database/scripts/cql/upgrade_2.0_to_3.0.sh.in
deleted file mode 100644
index a3c7eeb748..0000000000
--- a/src/share/database/scripts/cql/upgrade_2.0_to_3.0.sh.in
+++ /dev/null
@@ -1,281 +0,0 @@
-#!/bin/sh
-
-# Copyright (C) 2018-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=SC2039
-# SC2039: In POSIX sh, 'local' is undefined.
-
-# Exit with error if commands exit with non-zero and if undefined variables are
-# used.
-set -eu
-
-# shellcheck disable=SC2034
-# SC2034: ... appears unused. Verify use (or export if used externally).
-prefix="@prefix@"
-
-# Include utilities. Use installed version if available and
-# use build version if it isn't.
-if [ -e "@datarootdir@/@PACKAGE_NAME@/scripts/admin-utils.sh" ]; then
- . "@datarootdir@/@PACKAGE_NAME@/scripts/admin-utils.sh"
-else
- . "@abs_top_builddir@/src/bin/admin/admin-utils.sh"
-fi
-
-# Need a path for temporary files created during upgrade data migration
-# Use the state directory in the install path directory if it exists, otherwise
-# use the build tree
-if [ -e "@localstatedir@/lib/@PACKAGE_NAME@" ]; then
- temp_file_dir="@localstatedir@/lib/@PACKAGE_NAME@"
-else
- temp_file_dir="@abs_top_builddir@/src/share/database/scripts/cql"
-fi
-
-# Ensures the current schema version is 2.0. If not it exits.
-check_version() {
- version=$(cql_version "${@}")
-
- if [ "${version}" != "2.0" ]; then
- printf "This script upgrades 2.0 to 3.0. Reported version is %s. Skipping upgrade.\n" "${version}"
- exit 0
- fi
-}
-
-# Peforms the schema changes from 2.0 to 3.0
-update_schema() {
- cqlsh "${@}" <<EOF
--- This line starts database upgrade to version 3.0
-
--- Add a column holding leases for user context.
-ALTER TABLE lease4 ADD user_context VARCHAR;
-ALTER TABLE lease6 ADD user_context VARCHAR;
-
--- -----------------------------------------------------
--- Table logs (it is used by forensic logging hook library)
--- -----------------------------------------------------
-CREATE TABLE IF NOT EXISTS logs (
- timeuuid TIMEUUID, -- creation timeuuid, use dateOf() to get timestamp
- address VARCHAR, -- address or prefix
- log VARCHAR, -- the log itself
- PRIMARY KEY ((timeuuid))
-);
-
--- Create search index for logs table
-CREATE INDEX IF NOT EXISTS logsindex ON logs (address);
-
--- Add auth_key for storing keys for DHCPV6 reconfigure.
-ALTER TABLE host_reservations ADD auth_key VARCHAR;
-
--- Cql requires primary keys in the WHERE here.
-DELETE FROM schema_version WHERE version=2;
-INSERT INTO schema_version (version, minor) VALUES(3, 0);
-
--- This line concludes database upgrade to version 3.0
-EOF
-}
-
-# Function to delete temporary migration files
-clean_up() {
- # clean up the files
- if [ -e "${export_file}" ]
- then
- rm "${export_file}"
- fi
-
- if [ -e "${update_file}" ]
- then
- rm "${update_file}"
- fi
-}
-
-# Function to clean up and exit the script gracefully
-#
-# Called by migrate_host_data()
-#
-# Parameters:
-# status - integer value to pass to sh:exit
-# explanation - "quoted" text message to emit to stdout
-exit_now() {
- status=$1;shift
- explanation=$1
-
- clean_up
- if [ "$status" -eq 0 ]
- then
- echo "Data Migration SUCCESS! $explanation"
- else
- echo "Data Migration FAILURE! $explanation"
- fi
-
- exit "${status}"
-}
-
-# Function adds a column to the global, $update_cols if needed
-#
-# Called by migrate_host_data() to determine if the given column
-# value needs to be updated, and if so appends CQL update text
-# to a global string accumulator, $update_cols.
-#
-# The accumlator text is of the form:
-#
-# "<column_name>=<column value>{,<column_name>=<column_value>,..}"
-#
-# Parameters:
-# val - current numerical value of the subnet ID column in question
-# col - column name of the column in question
-#
-check_column() {
- local val="$1";shift
- local col="$1"
- local old_id="0"
- local new_id="-1"
- local comma=""
-
- # If the current value equals the value to be replaced
- # add it to the accumulator
- if [ "$val" = "$old_id" ]
- then
- # If the accumulator isn't empty, we need a comma
- if [ -n "${update_cols}" ]
- then
- comma=","
- fi
-
- update_cols="$update_cols$comma $col = $new_id"
- fi
-}
-
-# This function converts subnet ID columns in of existing host_reservations
-# from 0 to 0xFFFFFFFF (SUBNET_ID_UNUSED). To do this it first creates an
-# excerpt from host_reservations containing one row for each reservation
-# with the following columns:
-#
-# id (primary key)
-# host_ipv4_subnet_id
-# host_ipv6_subnet_id
-# option_subnet_id
-#
-# The excerpt is captured in a temporary file, the "export" file.
-#
-# Next, it iterates over the export file emitting a CQL update statement
-# for each row that needs at least one of the columns updated. In other
-# words, if at least one of the subnet ID columns in a row is 0, an
-# update statement for that row will be emitted. The update statements
-# are captured in a second temporary file, the "update" file.
-#
-# After exhausting the export file, the update file is submitted to
-# cqlsh for execution.
-#
-# No parameters.
-migrate_host_data() {
- export_file="$temp_file_dir/cql_export.csv"
- update_file="$temp_file_dir/cql_update.cql"
-
- clean_up
-
- # Fetch host_reservation data so we have primary key, plus subnet id values
- echo "Exporting host_reservation data to $export_file ..."
- query="COPY host_reservations \
- (id, host_ipv4_subnet_id, host_ipv6_subnet_id, option_subnet_id)\
- TO '$export_file'"
-
- if ! cqlsh "${@}" -e "$query"
- then
- exit_now 1 "Cassandra export failed! Could not migrate data!"
- fi
-
- # Strip the carriage returns that CQL insists on adding.
- if [ -e "$export_file" ]
- then
- tr -d '\015' < "${export_file}" > "${export_file}.2"
- mv $export_file.2 $export_file
- else
- # Shouldn't happen but then again we're talking about CQL here
- exit_now 1 "Cassandra export file $export_file is missing?"
- fi
-
- # Iterate through the exported data, accumulating update statements,
- # one for each reservation that needs updating. We should have one
- # host per line.
- line_cnt=0
- update_cnt=0
-
- while read -r line
- do
- line_cnt=$((line_cnt + 1));
- update_cols=""
- xIFS="$IFS"
- # shellcheck disable=SC3003
- # SC3003: In POSIX sh, $'..' is undefined.
- IFS=$','
-
- i=1
- # Parse the column values
- for val in $line
- do
- case $i in
- 1)
- host_id="$val"
- ;;
- 2)
- check_column "$val" host_ipv4_subnet_id
- ;;
- 3)
- check_column "$val" host_ipv6_subnet_id
- ;;
- 4)
- check_column "$val" option_subnet_id
- ;;
- *)
- # We're going to assume that since any error is fatal
- exit_now 1 "Line# $line_cnt, too many values, wrong or corrupt file"
- ;;
- esac
- i=$((i + 1))
- done
-
- if [ "$i" -ne 5 ]
- then
- # We're going to assume that since any error is fatal
- exit_now 1 "Line# $line_cnt, too few values, wrong or corrupt file"
- fi
-
- # If any of the current host's columns need to be replace, append an update for it
- if [ -n "$update_cols" ]
- then
- echo "update host_reservations set $update_cols where id = $host_id;" >> $update_file
- update_cnt=$((update_cnt + 1))
- fi
-
- IFS="$xIFS"
- done < "${export_file}"
-
- # If we didn't record any updates, then hey, we're good to go!
- if [ "$update_cnt" -eq 0 ]
- then
- exit_now 0 "Completed successfully: No updates were needed"
- fi
-
- # We have at least one update in the update file, so submit it # to cqlsh.
- echo "$update_cnt update statements written to $update_file"
- echo "Running the updates..."
- if ! cqlsh "${@}" -f "$update_file"
- then
- exit_now 1 "Cassandra updates failed"
- fi
-
- exit_now 0 "Updated $update_cnt of $line_cnt records"
-}
-
-check_version "${@}"
-if ! update_schema "${@}"; then
- printf 'Schema update FAILED!\n'
- exit 1
-fi
-migrate_host_data "${@}"
diff --git a/src/share/database/scripts/cql/upgrade_3.0_to_4.0.sh.in b/src/share/database/scripts/cql/upgrade_3.0_to_4.0.sh.in
deleted file mode 100644
index 662e820126..0000000000
--- a/src/share/database/scripts/cql/upgrade_3.0_to_4.0.sh.in
+++ /dev/null
@@ -1,371 +0,0 @@
-#!/bin/sh
-
-# Copyright (C) 2019-2020 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=SC2039
-# SC2039: In POSIX sh, arrays are undefined.
-
-# Exit with error if commands exit with non-zero and if undefined variables are
-# used.
-set -eu
-
-# shellcheck disable=SC2034
-# SC2034: ... appears unused. Verify use (or export if used externally).
-prefix="@prefix@"
-
-# Include utilities. Use installed version if available and
-# use build version if it isn't.
-if [ -e "@datarootdir@/@PACKAGE_NAME@/scripts/admin-utils.sh" ]; then
- . "@datarootdir@/@PACKAGE_NAME@/scripts/admin-utils.sh"
-else
- . "@abs_top_builddir@/src/bin/admin/admin-utils.sh"
-fi
-
-# Need a path for temporary files created during upgrade data migration
-# Use the state directory in the install path directory if it exists, otherwise
-# use the build tree
-if [ -e "@localstatedir@/lib/@PACKAGE_NAME@" ]; then
- temp_file_dir="@localstatedir@/lib/@PACKAGE_NAME@"
-else
- temp_file_dir="@abs_top_builddir@/src/share/database/scripts/cql"
-fi
-
-# Ensures the current schema version is 3.0. If not it exits.
-check_version() {
- version=$(cql_version "${@}")
-
- if [ "${version}" != "3.0" ]; then
- printf "This script upgrades 3.0 to 4.0. Reported version is %s. Skipping upgrade.\n" "${version}"
- exit 0
- fi
-}
-
-# Peforms the schema changes from 3.0 to 4.0
-update_schema() {
- cqlsh "${@}" <<EOF
--- This line starts database upgrade to version 4.0
-
--- -----------------------------------------------------
--- Table \`hosts\`
--- -----------------------------------------------------
-CREATE TABLE IF NOT EXISTS hosts (
- key BIGINT,
- id BIGINT,
- host_identifier BLOB,
- host_identifier_type INT,
- host_ipv4_subnet_id INT,
- host_ipv6_subnet_id INT,
- host_ipv4_address INT,
- host_ipv4_next_server INT,
- host_ipv4_server_hostname VARCHAR,
- host_ipv4_boot_file_name VARCHAR,
- hostname VARCHAR,
- auth_key VARCHAR,
- user_context VARCHAR,
- host_ipv4_client_classes VARCHAR,
- host_ipv6_client_classes VARCHAR,
- -- reservation
- reserved_ipv6_prefix_address VARCHAR,
- reserved_ipv6_prefix_length INT,
- reserved_ipv6_prefix_address_type INT,
- iaid INT,
- -- option
- option_universe INT,
- option_code INT,
- option_value BLOB,
- option_formatted_value VARCHAR,
- option_space VARCHAR,
- option_is_persistent BOOLEAN,
- option_client_class VARCHAR,
- option_subnet_id INT,
- option_user_context VARCHAR,
- option_scope_id INT,
- PRIMARY KEY ((key), id)
-);
-
-CREATE INDEX IF NOT EXISTS hostsindex1 ON hosts (host_identifier);
-CREATE INDEX IF NOT EXISTS hostsindex2 ON hosts (host_identifier_type);
-CREATE INDEX IF NOT EXISTS hostsindex3 ON hosts (host_ipv4_subnet_id);
-CREATE INDEX IF NOT EXISTS hostsindex4 ON hosts (host_ipv6_subnet_id);
-CREATE INDEX IF NOT EXISTS hostsindex5 ON hosts (host_ipv4_address);
-CREATE INDEX IF NOT EXISTS hostsindex6 ON hosts (reserved_ipv6_prefix_address);
-CREATE INDEX IF NOT EXISTS hostsindex7 ON hosts (reserved_ipv6_prefix_length);
-EOF
-}
-
-# Peforms the clean up schema changes from 3.0 to 4.0
-clean_up_schema() {
- cqlsh "${@}" <<EOF
-DROP TABLE IF EXISTS host_reservations;
-
-DROP INDEX IF EXISTS host_reservationsindex1;
-DROP INDEX IF EXISTS host_reservationsindex2;
-DROP INDEX IF EXISTS host_reservationsindex3;
-DROP INDEX IF EXISTS host_reservationsindex4;
-DROP INDEX IF EXISTS host_reservationsindex5;
-DROP INDEX IF EXISTS host_reservationsindex6;
-DROP INDEX IF EXISTS host_reservationsindex7;
-
--- Cql requires primary keys in the WHERE here.
-DELETE FROM schema_version WHERE version=3;
-INSERT INTO schema_version (version, minor) VALUES(4, 0);
-
--- This line concludes database upgrade to version 4.0
-EOF
-}
-
-# Function to delete temporary migration files
-clean_up() {
- # clean up the files
- if [ -e "$export_file" ]
- then
- rm "$export_file"
- fi
-
- if [ -e "$update_file" ]
- then
- rm "$update_file"
- fi
-}
-
-# Function to clean up and exit the script gracefully
-#
-# Called by migrate_host_data()
-#
-# Parameters:
-# status - integer value to pass to sh:exit
-# explanation - "quoted" text message to emit to stdout
-exit_now() {
- status=$1; shift
- explanation=$1; shift
-
- clean_up
- if [ "$status" -eq 0 ]
- then
- clean_up_schema "${@}"
- echo "Data Migration SUCCESS! $explanation"
- else
- echo "Data Migration FAILURE! $explanation"
- fi
-
- exit "$status"
-}
-
-# Prefix ${string} with ${count} characters like the one specified in
-# ${fill_char}.
-fill() {
- string=$1;shift
- count=$1;shift
- length="${#string}"
- count=$((count - length));
- fill_char=$1;shift
- value="$(printf "%${count}s" | sed "s/ /${fill_char}/g")${string}"
-}
-
-identifier_text() {
- string=$1;shift
- length="${#string}"
- # skip 0x from 0xabcdef
- string=$(echo "$string" | cut -c "3-$length")
- identifier=""
- # add starting 0: 0xabc->0x0abc
- mod=$((length % 2))
- if [ $mod -ne 0 ]; then
- string="0"$string
- fi
- length="${#string}"
- i=1
- while [ "$i" -le "$length" ]; do
- char=$(echo "$string" | cut -c $i-$i)
- mod=$((i % 2))
- if test $mod -ne 0 && test $i -ne 1; then
- char=":"$char
- fi
- identifier=$identifier$char
- i=$((i+1))
- done
-}
-
-key_hash() {
- string=$1;shift
- length="${#string}"
- FNV_prime=1099511628211
- FNV_offset_basis=-3750763034362895579 # signed value for 14695981039346656037
- hash=$FNV_offset_basis
- i=1
- while [ "$i" -le "$length" ]; do
- char=$(echo "$string" | cut -c $i-$i)
- data=$(echo "$char" | tr -d "\n" | od -An -t uC | tr -d ' ')
- hash=$((hash ^ data))
- hash=$((hash * FNV_prime))
- i=$((i+1))
- done
-}
-
-generate_key() {
- host_id=$1;shift
- host_identifier=$1;shift
- host_identifier_type=$1;shift
- host_ipv4_subnet_id=$1;shift
- host_ipv6_subnet_id=$1;shift
- host_ipv4_address=$1;shift
- key=""
- identifier_text "$host_identifier"
- local_host_identifier=$identifier
- if [ -n "$host_ipv4_address" ] && [ "$host_ipv4_address" -eq 0 ]; then
- fill "$local_host_identifier" 383 "-"
- key="$key$value"
- fill "$host_identifier_type" 10 "-"
- key="$key$value"
- else
- fill "" 383 "-"
- key="$key$value"
- fill "" 10 "-"
- key="$key$value"
- fi
- fill "$host_ipv4_subnet_id" 10 "-"
- key="$key$value"
- fill "$host_ipv6_subnet_id" 10 "-"
- key="$key$value"
- fill "$host_ipv4_address" 15 "-"
- key="$key$value"
- key_hash "$key"
- key="$hash"
-}
-
-# This function adds host 'key' column which is the partition key
-# of the 'hosts' table.
-#
-# After exhausting the export file, the update file is submitted to
-# cqlsh for execution.
-#
-# No parameters.
-migrate_host_data() {
- export_file="$temp_file_dir/cql_export.csv"
- update_file="$temp_file_dir/cql_update.cql"
-
- clean_up
-
- # Fetch host_reservation data so we have host_identifier,
- # host_identifier_type, host_ipv4_subnet_id, host_ipv6_subnet_id and
- # host_ipv4_address to generate host key
- echo "Exporting host_reservation data to $export_file ..."
- query="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) \
- TO '$export_file'"
-
-
- if ! cqlsh "${@}" -e "$query"
- then
- exit_now 1 "Cassandra export failed! Could not migrate data!" "${@}"
- fi
-
- # Strip the carriage returns that CQL insists on adding.
- if [ -e "$export_file" ]
- then
- tr -d '\015' < "${export_file}" > $export_file.2
- mv $export_file.2 $export_file
- else
- # Shouldn't happen but then again we're talking about CQL here
- exit_now 1 "Cassandra export file $export_file is missing?" "${@}"
- fi
-
- # Iterate through the exported data, accumulating update statements,
- # one for each reservation that needs updating. We should have one
- # host per line.
- line_cnt=0
- update_cnt=0
- while read -r line
- do
- line_cnt=$((line_cnt + 1))
- xIFS="$IFS"
- IFS=','
- i=1
- # Parse the column values
- for val in $line
- do
- case $i in
- 1)
- host_id=$val
- ;;
- 2)
- host_identifier=$val
- ;;
- 3)
- host_identifier_type=$val
- ;;
- 4)
- host_ipv4_subnet_id=$val
- ;;
- 5)
- host_ipv6_subnet_id=$val
- ;;
- 6)
- host_ipv4_address=$val
- ;;
- *)
- ;;
- esac
- i=$((i + 1))
- done
-
- generate_key "$host_id" "$host_identifier" "$host_identifier_type" "$host_ipv4_subnet_id" "$host_ipv6_subnet_id" "$host_ipv4_address"
- key_data="$key"
- update_cnt=$((update_cnt + 1))
-
- IFS="$xIFS"
- echo "${line}" | sed -e "s/$host_id/$host_id,$key_data/" >> "${update_file}"
- done < "${export_file}"
-
- # If we didn't record any updates, then hey, we're good to go!
- if [ "$update_cnt" -eq 0 ]
- then
- exit_now 0 "Completed successfully: No updates were needed" "${@}"
- fi
-
- # We have at least one update in the update file, so submit it # to cqlsh.
- echo "$update_cnt update statements written to $update_file"
- echo "Running the updates..."
- query="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, \
- 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 '$update_file'"
-
- if ! cqlsh "${@}" -e "$query"
- then
- exit_now 1 "Cassandra updates failed" "${@}"
- fi
-
- exit_now 0 "Updated $update_cnt of $line_cnt records" "${@}"
-}
-
-check_version "${@}"
-if ! update_schema "${@}"; then
- printf 'Schema update FAILED!\n'
- exit 1
-fi
-migrate_host_data "${@}"
diff --git a/src/share/database/scripts/cql/upgrade_4.0_to_5.0.sh.in b/src/share/database/scripts/cql/upgrade_4.0_to_5.0.sh.in
deleted file mode 100644
index d8a23bf01e..0000000000
--- a/src/share/database/scripts/cql/upgrade_4.0_to_5.0.sh.in
+++ /dev/null
@@ -1,434 +0,0 @@
-#!/bin/sh
-
-# Copyright (C) 2019-2020 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=SC2039
-# SC2039: In POSIX sh, arrays are undefined.
-
-# Exit with error if commands exit with non-zero and if undefined variables are
-# used.
-set -eu
-
-# shellcheck disable=SC2034
-# SC2034: ... appears unused. Verify use (or export if used externally).
-prefix="@prefix@"
-
-# Include utilities. Use installed version if available and
-# use build version if it isn't.
-if [ -e "@datarootdir@/@PACKAGE_NAME@/scripts/admin-utils.sh" ]; then
- . "@datarootdir@/@PACKAGE_NAME@/scripts/admin-utils.sh"
-else
- . "@abs_top_builddir@/src/bin/admin/admin-utils.sh"
-fi
-
-# Need a path for temporary files created during data update
-# Use the state directory in the install path directory if it exists, otherwise
-# use the build tree
-if [ -e "@localstatedir@/lib/@PACKAGE_NAME@" ]; then
- temp_file_dir="@localstatedir@/lib/@PACKAGE_NAME@"
-else
- temp_file_dir="@abs_top_builddir@/src/share/database/scripts/cql"
-fi
-
-# Ensures the current schema version is 4.0. If not it exits.
-check_version() {
- version=$(cql_version "${@}")
-
- if [ "${version}" != "4.0" ]; then
- printf "This script upgrades 4.0 to 5.0. Reported version is %s. Skipping upgrade.\n" "${version}"
- exit 0
- fi
-}
-
-# Peforms the schema changes from 4.0 to 5.0
-update_schema() {
- cqlsh "${@}" <<EOF
--- This line starts database upgrade to version 5.0
-
--- Add the lower case hostname column to reservations.
-ALTER TABLE hosts ADD lower_case_hostname VARCHAR;
-
--- Make the lower case hostname an index.
-CREATE INDEX IF NOT EXISTS hostsindex8 ON hosts (lower_case_hostname);
-
--- Create a new hostname index on lease4.
-CREATE INDEX IF NOT EXISTS lease4index6 ON lease4 (hostname);
-
--- Create a new hostname index on lease6.
-CREATE INDEX IF NOT EXISTS lease6index7 ON lease6 (hostname);
-
-DELETE FROM schema_version WHERE version=4;
-INSERT INTO schema_version (version, minor) VALUES(5, 0);
-
--- This line concludes database upgrade to version 5.0
-EOF
-}
-
-# Functions to delete temporary update files
-clean_up() {
- # clean up the files
- if [ -e "$host_export_file" ]
- then
- rm "$host_export_file"
- fi
-
- if [ -e "$host_update_file" ]
- then
- rm "$host_update_file"
- fi
-
- if [ -e "$lease4_export_file" ]
- then
- rm "$lease4_export_file"
- fi
-
- if [ -e "$lease4_update_file" ]
- then
- rm "$lease4_update_file"
- fi
-
- if [ -e "$lease6_export_file" ]
- then
- rm "$lease6_export_file"
- fi
-
- if [ -e "$lease6_update_file" ]
- then
- rm "$lease6_update_file"
- fi
-}
-
-# Function to clean up and exit the script gracefully
-#
-# Called by update_host_data()
-#
-# Parameters:
-# status - integer value to pass to sh:exit
-# explanation - "quoted" text message to emit to stdout
-exit_now() {
- status=$1;shift
- explanation=$1
-
- clean_up
- if [ "$status" -eq 0 ]
- then
- echo "Data Update SUCCESS! $explanation"
- else
- echo "Data Update FAILURE! $explanation"
- fi
-
- exit "$status"
-}
-
-# This function adds host 'lower_case_hostname' column.
-#
-# After exhausting the export file, the update file is submitted to
-# cqlsh for execution.
-#
-# No parameters.
-update_host_data() {
- clean_up
-
- # Fetch hosts data so we have primary key components and hostname.
- echo "Exporting hostnames to $host_export_file ..."
- query="COPY hosts (key, id, hostname) TO '$host_export_file'"
-
-
- if ! cqlsh "${@}" -e "$query"
- then
- exit_now 1 "Cassandra get hostname failed! Could not update host!"
- fi
-
- # Strip the carriage returns that CQL insists on adding.
- if [ -e "$host_export_file" ]
- then
- tr -d '\015' < "$host_export_file" > "$host_export_file.2"
- mv "$host_export_file.2" "$host_export_file"
- else
- # Shouldn't happen but then again we're talking about CQL here
- exit_now 1 "Cassandra export file $host_export_file is missing?"
- fi
-
- # Iterate through the exported data, accumulating update statements,
- # one for each reservation that needs updating. We should have one
- # host per line.
- line_cnt=0
- update_cnt=0
-
- while read -r line
- do
- line_cnt=$((line_cnt + 1))
- xIFS="$IFS"
- IFS=','
-
- i=1
- hostname=
- # Parse the column values
- for val in $line
- do
- case $i in
- 1)
- key="$val"
- ;;
- 2)
- host_id="$val"
- ;;
- 3)
- hostname="$val"
- ;;
- *)
- # We're going to assume that since any error is fatal
- exit_now 1 "Line# $line_cnt, too many values, wrong or corrupt file"
- ;;
- esac
- i=$((i + 1))
- done
-
- if [ "$i" -lt 3 ]
- then
- # We're going to assume that since any error is fatal
- exit_now 1 "Line# $line_cnt, too few values, wrong or corrupt file"
- fi
-
- # If the hostname was not null set the lower case value
- if [ "$hostname" != "" ]
- then
- lower=$(echo "${hostname}" | tr '[:upper:]' '[:lower:]')
- echo "update hosts set lower_case_hostname = '$lower' where key = $key and id = $host_id;" >> "$host_update_file"
- update_cnt=$((update_cnt + 1))
- fi
-
- IFS="$xIFS"
- done < "$host_export_file"
-
- # If we didn't record any updates, then hey, we're good to go!
- if [ "$update_cnt" -eq 0 ]
- then
- exit_now 0 "Completed successfully: No host updates were needed"
- fi
-
- # We have at least one update in the update file, so submit it # to cqlsh.
- echo "$update_cnt host update statements written to $host_update_file"
- echo "Running the updates..."
-
- if ! cqlsh "${@}" -f "$host_update_file"
- then
- exit_now 1 "Cassandra host updates failed"
- fi
-
- exit_now 0 "Updated $update_cnt of $line_cnt host records"
-}
-
-# This function moves lease4 hostnames to lower case.
-#
-# After exhausting the export file, the update file is submitted to
-# cqlsh for execution.
-#
-# No parameters.
-update_lease4_data() {
- clean_up
-
- # Fetch lease4 data so we have primary address and hostname.
- echo "Exporting hostnames to $lease4_export_file ..."
- query="COPY lease4 (address, hostname) TO '$lease4_export_file'"
-
-
- if ! cqlsh "${@}" -e "$query"
- then
- exit_now 1 "Cassandra get hostname failed! Could not update lease4!"
- fi
-
- # Strip the carriage returns that CQL insists on adding.
- if [ -e "$lease4_export_file" ]
- then
- tr -d '\015' < "$lease4_export_file" > "$lease4_export_file.2"
- mv "$lease4_export_file.2" "$lease4_export_file"
- else
- # Shouldn't happen but then again we're talking about CQL here
- exit_now 1 "Cassandra export file $lease4_export_file is missing?"
- fi
-
- # Iterate through the exported data, accumulating update statements,
- # one for each lease that needs updating. We should have one lease4
- # per line.
- line_cnt=0
- update_cnt=0
-
- while read -r line
- do
- line_cnt=$((line_cnt + 1))
- xIFS="$IFS"
- IFS=','
-
- i=1
- hostname=
- # Parse the column values
- for val in $line
- do
- case $i in
- 1)
- address="$val"
- ;;
- 2)
- hostname="$val"
- ;;
- *)
- # We're going to assume that since any error is fatal
- exit_now 1 "Line# $line_cnt, too many values, wrong or corrupt file"
- ;;
- esac
- i=$((i + 1))
- done
-
- if [ "$i" -lt 2 ]
- then
- # We're going to assume that since any error is fatal
- exit_now 1 "Line# $line_cnt, too few values, wrong or corrupt file"
- fi
-
- # If the hostname was not null set the lower case value
- if [ "$hostname" != "" ]
- then
- lower=$(echo "${hostname}" | tr '[:upper:]' '[:lower:]')
- echo "update lease4 set hostname = '$lower' where address = $address;" >> "$lease4_update_file"
- update_cnt=$((update_cnt + 1))
- fi
-
- IFS="$xIFS"
- done < "$lease4_export_file"
-
- # If we didn't record any updates, then hey, we're good to go!
- if [ "$update_cnt" -eq 0 ]
- then
- exit_now 0 "Completed successfully: No lease4 updates were needed"
- fi
-
- # We have at least one update in the update file, so submit it # to cqlsh.
- echo "$update_cnt lease4 update statements written to $lease4_update_file"
- echo "Running the updates..."
-
- if ! cqlsh "${@}" -f "$lease4_update_file"
- then
- exit_now 1 "Cassandra lease4 updates failed"
- fi
-
- exit_now 0 "Updated $update_cnt of $line_cnt lease4 records"
-}
-
-# This function moves lease6 hostnames to lower case.
-#
-# After exhausting the export file, the update file is submitted to
-# cqlsh for execution.
-#
-# No parameters.
-update_lease6_data() {
- clean_up
-
- # Fetch lease6 data so we have primary address and hostname.
- echo "Exporting hostnames to $lease6_export_file ..."
- query="COPY lease6 (address, hostname) TO '$lease6_export_file'"
-
- if ! cqlsh "${@}" -e "$query"
- then
- exit_now 1 "Cassandra get hostname failed! Could not update lease6!"
- fi
-
- # Strip the carriage returns that CQL insists on adding.
- if [ -e "$lease6_export_file" ]
- then
- tr -d '\015' < "$lease6_export_file" > "$lease6_export_file.2"
- mv "$lease6_export_file.2" "$lease6_export_file"
- else
- # Shouldn't happen but then again we're talking about CQL here
- exit_now 1 "Cassandra export file $lease6_export_file is missing?"
- fi
-
- # Iterate through the exported data, accumulating update statements,
- # one for each lease that needs updating. We should have one lease6
- # per line.
- line_cnt=0
- update_cnt=0
-
- while read -r line
- do
- line_cnt=$((line_cnt + 1))
- xIFS="$IFS"
- IFS=','
-
- i=1
- hostname=
- # Parse the column values
- for val in $line
- do
- case $i in
- 1)
- address="$val"
- ;;
- 2)
- hostname="$val"
- ;;
- *)
- # We're going to assume that since any error is fatal
- exit_now 1 "Line# $line_cnt, too many values, wrong or corrupt file"
- ;;
- esac
- i=$((i + 1))
- done
-
- if [ "$i" -lt 2 ]
- then
- # We're going to assume that since any error is fatal
- exit_now 1 "Line# $line_cnt, too few values, wrong or corrupt file"
- fi
-
- # If the hostname was not null set the lower case value
- if [ "$hostname" != "" ]
- then
- lower=$(echo "${hostname}" | tr '[:upper:]' '[:lower:]')
- echo "update lease6 set hostname = '$lower' where address = $address;" >> "$lease6_update_file"
- update_cnt=$((update_cnt + 1))
- fi
-
- IFS="$xIFS"
- done < "$lease6_export_file"
-
- # If we didn't record any updates, then hey, we're good to go!
- if [ "$update_cnt" -eq 0 ]
- then
- exit_now 0 "Completed successfully: No lease6 updates were needed"
- fi
-
- # We have at least one update in the update file, so submit it # to cqlsh.
- echo "$update_cnt lease6 update statements written to $lease6_update_file"
- echo "Running the updates..."
-
- if ! cqlsh "${@}" -f "$lease6_update_file"
- then
- exit_now 1 "Cassandra lease6 updates failed"
- fi
-
- exit_now 0 "Updated $update_cnt of $line_cnt lease6 records"
-}
-
-host_export_file="$temp_file_dir/cql_host_export.csv"
-host_update_file="$temp_file_dir/cql_host_update.cql"
-lease4_export_file="$temp_file_dir/cql_lease4_export.csv"
-lease4_update_file="$temp_file_dir/cql_lease4_update.cql"
-lease6_export_file="$temp_file_dir/cql_lease6_export.csv"
-lease6_update_file="$temp_file_dir/cql_lease6_update.cql"
-
-check_version "${@}"
-if ! update_schema "${@}"; then
- printf 'Schema update FAILED!\n'
- exit 1
-fi
-update_host_data "${@}"
-update_lease4_data "${@}"
-update_lease6_data "${@}"
diff --git a/src/share/database/scripts/cql/wipe_data.sh.in b/src/share/database/scripts/cql/wipe_data.sh.in
deleted file mode 100644
index c98873da3e..0000000000
--- a/src/share/database/scripts/cql/wipe_data.sh.in
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/bin/sh
-
-# Copyright (C) 2019-2020 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/.
-
-# This script is primarily used for CQL unit tests, which need to
-# ensure an empty, but schema correct database for each test. It
-# deletes ALL transient data from an existing Kea CQL schema,
-# including leases, reservations, etc... Use at your own peril.
-# Reference tables will be left in-tact.
-
-# shellcheck disable=SC1091
-# SC1091: Not following: ... was not specified as input (see shellcheck -x).
-
-# Exit with error if commands exit with non-zero and if undefined variables are
-# used.
-set -eu
-
-# shellcheck disable=SC2034
-# SC2034: ... appears unused. Verify use (or export if used externally).
-prefix="@prefix@"
-
-# Include utilities. Use installed version if available and
-# use build version if it isn't.
-if [ -e @datarootdir@/@PACKAGE_NAME@/scripts/admin-utils.sh ]; then
- . "@datarootdir@/@PACKAGE_NAME@/scripts/admin-utils.sh"
-else
- . "@abs_top_builddir@/src/bin/admin/admin-utils.sh"
-fi
-
-# First argument is must be the expected schema version <major>.<minor>
-exp_version="$1"
-shift
-
-# Remaining arguments are used as cql command line arguments
-
-# If the existing schema doesn't match, the fail
-VERSION=$(cql_version "$@")
-if [ "$VERSION" = "" ]; then
- printf "Cannot wipe data, schema version could not be detected.\n"
- exit 1
-fi
-
-if [ "$VERSION" != "$exp_version" ]; then
- printf 'Cannot wipe data, wrong schema version. '
- printf 'Expected version %s, found %s.\n' "${exp_version}" "${VERSION}"
- exit 1
-fi
-
-# Delete transient data from tables.
-cqlsh "$@" <<EOF
-TRUNCATE TABLE lease4;
-TRUNCATE TABLE lease6;
-TRUNCATE TABLE lease6_types;
-TRUNCATE TABLE lease_hwaddr_source;
-TRUNCATE TABLE lease_state;
-TRUNCATE TABLE hosts;
-TRUNCATE TABLE logs;
-EOF
diff --git a/tools/Makefile.am b/tools/Makefile.am
index 15b11d1db6..5af77b9764 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -11,12 +11,4 @@ DISTCLEANFILES = path_replacer.sh
if GENERATE_DOCS
-# Scripts for Cassandra support. Ultimately those scripts will have to be
-# incorporated in DataStax cpp-driver source tree, but until that happens,
-# let's keep them in Kea repo.
-# Scripts for sysrepo are also included. If users do not want to install
-# the sysrepo libraries and binaries in the default system tree and prefer
-# a custom path, these scripts can be used.
-EXTRA_DIST = cql_config cql_config_defines.sh.sample
-
endif
diff --git a/tools/cql_config b/tools/cql_config
deleted file mode 100755
index 799b50fd7b..0000000000
--- a/tools/cql_config
+++ /dev/null
@@ -1,101 +0,0 @@
-#!/bin/sh
-
-# Copyright (C) 2016-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/.
-
-# This is keactrl script responsible for starting up Kea processes.
-# This script is used to run Kea from installation directory,
-# as well as for running tests.
-
-# Exit with error if commands exit with non-zero and if undefined variables are
-# used.
-set -eu
-
-cql_lib="cassandra"
-
-if test "$(uname -s)" = "Darwin"; then
- DIR=$(stat -f %N "$0" | xargs dirname)
-else
- DIR=$(readlink -f "$0" | xargs dirname)
-fi
-
-if ! [ -f "${DIR}/cql_config_defines.sh" ] || ! [ -x "${DIR}/cql_config_defines.sh" ]; then
- echo "missing path configuration file for Cassandra (cql_config_defines.sh)"
- exit 1
-fi
-
-# shellcheck disable=SC1091
-# SC1091: Not following: ./cql_config_defines.sh was not specified as input (see shellcheck -x).
-# shellcheck source=./tools/cql_config_defines.sh.sample
-. "${DIR}/cql_config_defines.sh"
-
-if [ $# -ne 1 ] && [ $# -ne 2 ]; then
- echo "run: \`$0 --help\` for more help"
- exit 1
-fi
-
-if [ "$1" = "--help" ]; then
- echo "cql_config 'option' ['library']"
- echo "options:"
- echo "--help"
- echo " print this help message"
- echo "--cflags-only-other"
- echo " get cpp compilation flags"
- echo "--cflags-only-I"
- echo " get include path"
- echo "--libs"
- echo " get lib path"
- echo "--modversion"
- echo " get version"
- echo "--print-errors"
- echo " check existence"
- echo "libraries:"
- echo " cassandra"
- echo " cassandra_static"
- exit 0
-fi
-
-if [ $# -ne 2 ]; then
- echo "run: \`$0 --help\` for more help"
- exit 1
-elif [ "$2" != "cassandra" ] && [ "$2" != "cassandra_static" ]; then
- echo "library $2 not supported"
- echo "run: \`$0 --help\` for more help"
- exit 1
-else
- cql_lib=$2
-fi
-
-if [ "$1" = "--cflags-only-other" ]; then
- exit 0
-fi
-
-if [ "$1" = "--cflags-only-I" ]; then
- echo "-I${CPP_DRIVER_PATH}/include/"
- exit 0
-fi
-
-if [ "$1" = "--libs" ]; then
- echo "-L${CPP_DRIVER_PATH}/build/ -l${cql_lib} -lssl -lcrypto -luv -lz"
- exit 0
-fi
-
-if [ "$1" = "--modversion" ]; then
- MAJOR=$(grep VERSION_MAJOR "${CPP_DRIVER_PATH}/include/cassandra.h" | cut -d " " -f 3)
- MINOR=$(grep VERSION_MINOR "${CPP_DRIVER_PATH}/include/cassandra.h" | cut -d " " -f 3)
- PATCH=$(grep VERSION_PATCH "${CPP_DRIVER_PATH}/include/cassandra.h" | cut -d " " -f 3)
- echo "${MAJOR}.${MINOR}.${PATCH}"
- exit 0
-fi
-
-if [ "$1" = "--print-errors" ]; then
- exit 0
-fi
-
-echo "wrong parameter"
-echo "run: \`$0 --help\` for more help"
-
-exit 1
diff --git a/tools/cql_config_defines.sh.sample b/tools/cql_config_defines.sh.sample
deleted file mode 100755
index 305088e67e..0000000000
--- a/tools/cql_config_defines.sh.sample
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-
-# This auxiliary script is considered temporary in nature. It will not be
-# necessary once the DataStax cpp-driver project accepts proper cql_config
-# script.
-
-# This variable should point to the directory where cpp-driver is compiled.
-# You can download cpp-driver sources from https://github.com/datastax/cpp-driver
-export CPP_DRIVER_PATH="/please/specify/path/to/cpp-driver/in/cql_config_defines.sh"